@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fraunces-vietnamese-400-normal-CvGt0Ybw.woff2) format("woff2"),url(/assets/fraunces-vietnamese-400-normal-B65MOf9T.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fraunces-latin-ext-400-normal-D8gbi3Gu.woff2) format("woff2"),url(/assets/fraunces-latin-ext-400-normal-UihxqfOe.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fraunces-latin-400-normal-6IfK1voy.woff2) format("woff2"),url(/assets/fraunces-latin-400-normal-NUPT2cO8.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/fraunces-vietnamese-600-normal-BjlAJixd.woff2) format("woff2"),url(/assets/fraunces-vietnamese-600-normal-DlAl5EAR.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/fraunces-latin-ext-600-normal-BtzmzP0X.woff2) format("woff2"),url(/assets/fraunces-latin-ext-600-normal-B0Dy4lqi.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/fraunces-latin-600-normal-BFCDtZfi.woff2) format("woff2"),url(/assets/fraunces-latin-600-normal-DL5QCzvS.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/outfit-latin-ext-400-normal-5tcqmc2S.woff2) format("woff2"),url(/assets/outfit-latin-ext-400-normal-DHm7mdGe.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/outfit-latin-400-normal-BGsTXAXT.woff2) format("woff2"),url(/assets/outfit-latin-400-normal-DMwTpYkH.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/outfit-latin-ext-500-normal-zeox_O30.woff2) format("woff2"),url(/assets/outfit-latin-ext-500-normal-DrCvqoFD.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/outfit-latin-500-normal-DKnIMDSk.woff2) format("woff2"),url(/assets/outfit-latin-500-normal-ClnHRwRh.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/outfit-latin-ext-600-normal-B85nYjL1.woff2) format("woff2"),url(/assets/outfit-latin-ext-600-normal-CWJcPgd7.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/outfit-latin-600-normal-B7SfZ07L.woff2) format("woff2"),url(/assets/outfit-latin-600-normal-BEfTtDA7.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:light;--bg: #efe6d8;--bg-2: #e6dccb;--paper: #fffaf3;--ink: #241c16;--muted: #6f6256;--line: #8b7c6b;--ember: #c4512c;--ember-deep: #8d3418;--ember-soft: rgba(196, 81, 44, .16);--moss: #2a6a56;--moss-soft: rgba(42, 106, 86, .14);--panel: rgba(255, 250, 243, .94);--shadow: 0 16px 40px rgba(70, 44, 22, .1);--grid: rgba(70, 48, 28, .08);--wash-ember: rgba(196, 81, 44, .16);--wash-moss: rgba(42, 106, 86, .12);--mark-ink: #f6f0e8;--danger: #9d2f2f;--radius: 16px;--font: "Outfit", "Avenir Next", sans-serif;--serif: "Fraunces", "Iowan Old Style", Georgia, serif}:root[data-theme=dark]{color-scheme:dark;--bg: #12100e;--bg-2: #1a1714;--paper: #26211c;--ink: #f6f0e8;--muted: #b5a89a;--line: #b09d88;--ember: #e48462;--ember-deep: #f0b199;--ember-soft: rgba(228, 132, 98, .18);--moss: #8dceba;--moss-soft: rgba(141, 206, 186, .14);--panel: rgba(28, 24, 21, .94);--shadow: 0 18px 50px rgba(0, 0, 0, .4);--grid: rgba(246, 236, 220, .06);--wash-ember: rgba(228, 132, 98, .14);--wash-moss: rgba(141, 206, 186, .1);--mark-ink: #171411;--danger: #e7a0a0}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;color:var(--ink);font-family:var(--font);background-color:var(--bg);background-image:radial-gradient(1100px 640px at -10% -20%,var(--wash-ember),transparent 55%),radial-gradient(900px 540px at 110% -10%,var(--wash-moss),transparent 48%),linear-gradient(180deg,var(--bg),var(--bg-2))}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--ember);outline-offset:2px}h1,h2,h3,p{margin:0}.app{height:100dvh;display:flex;flex-direction:column;min-height:0}.topbar{display:flex;align-items:center;gap:16px;padding:10px 16px;border-bottom:1px solid color-mix(in srgb,var(--ink) 8%,transparent);background:color-mix(in srgb,var(--paper) 78%,transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);z-index:5}.brand{display:flex;align-items:center;gap:10px;min-width:180px}.mark{color:var(--ink);flex:none}.wordmark{font-family:var(--serif);font-weight:600;letter-spacing:-.03em;line-height:1}.tree-title{display:block;width:min(240px,36vw);border:0;padding:0;background:transparent;color:var(--muted);font-size:13px}.top-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.search{position:relative;flex:1;max-width:460px}.search input{width:100%;border:1px solid color-mix(in srgb,var(--ink) 12%,transparent);background:color-mix(in srgb,var(--paper) 80%,transparent);border-radius:999px;padding:10px 42px 10px 36px}.search-icon{position:absolute;left:14px;top:9px;color:var(--muted)}.search kbd{position:absolute;right:10px;top:8px;border:1px solid color-mix(in srgb,var(--ink) 14%,transparent);border-radius:6px;padding:1px 6px;font-size:12px;color:var(--muted)}.search-results{position:absolute;z-index:8;top:calc(100% + 6px);left:0;right:0;margin:0;padding:6px;list-style:none;background:var(--paper);border-radius:14px;box-shadow:var(--shadow)}.search-results button,.search-empty{width:100%;text-align:left;border:0;background:transparent;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:2px}.search-results button span,.search-empty{color:var(--muted);font-size:12px}.search-results button.is-active,.search-results button:hover{background:var(--ember-soft)}.button,.icon-button{border:1px solid color-mix(in srgb,var(--ink) 12%,transparent);background:var(--paper);border-radius:999px;padding:8px 14px}.button.primary{background:var(--ink);color:var(--paper);border-color:var(--ink)}:root[data-theme=dark] .button.primary{background:var(--ember);color:#1a120e;border-color:var(--ember)}.button.danger,.text-button.danger{color:var(--danger)}.button.full{width:100%;margin-top:8px}.icon-button{width:38px;height:38px;padding:0;display:grid;place-items:center;font-size:18px}.text-button{border:0;background:transparent;color:var(--ember-deep);padding:0}.text-button.is-on{text-decoration:underline}.menu{position:relative}.menu-pop{position:absolute;right:0;top:calc(100% + 6px);width:210px;padding:6px;background:var(--paper);border-radius:14px;box-shadow:var(--shadow);display:flex;flex-direction:column;z-index:9}.menu-pop button{border:0;background:transparent;text-align:left;border-radius:10px;padding:9px 10px}.menu-pop button:hover{background:var(--ember-soft)}.workspace{position:relative;flex:1;min-height:0}.stage{position:absolute;inset:0;overflow:hidden;touch-action:none;background-image:radial-gradient(var(--grid) 1.1px,transparent 1.1px);background-size:22px 22px;cursor:grab}.stage:active{cursor:grabbing}.stage-loading,.empty{height:100%;display:grid;place-items:center;text-align:center;padding:24px}.empty{align-content:center;max-width:460px;margin:0 auto;gap:8px}.empty h2{font-family:var(--serif);font-size:42px;font-weight:600;letter-spacing:-.03em}.empty p{color:var(--muted)}.empty-actions{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:8px}.eyebrow{text-transform:uppercase;letter-spacing:.14em;font-size:11px;color:var(--ember-deep)}.world{position:absolute;top:0;left:0;transform-origin:0 0}.edges{position:absolute;inset:0;overflow:visible;pointer-events:none}.edge{fill:none;stroke:var(--line);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.edge.halo{stroke:var(--bg);stroke-width:6}.edge.married,.edge.widowed{stroke:var(--ink)}.edge.partnered{stroke:var(--moss)}.edge.engaged{stroke:var(--ember);stroke-dasharray:1 4}.edge.divorced,.edge.separated{stroke:var(--muted);stroke-dasharray:7 5}.edge.coparent{stroke:var(--muted);stroke-dasharray:1.5 4}.edge.span{opacity:.9}.edge.bus{stroke:var(--line);stroke-width:1.45}.edge.drop-biological{stroke:var(--line)}.edge.drop-adoptive{stroke:var(--moss);stroke-dasharray:6 4}.edge.drop-foster{stroke:var(--moss);stroke-dasharray:8 3 1.5 3}.edge.drop-step,.edge.extra-step{stroke:var(--ember);stroke-dasharray:2 3.5}.edge.drop-guardian,.edge.extra-guardian{stroke:var(--muted);stroke-dasharray:1 3.5}.edge.drop-mixed{stroke:var(--ink);stroke-dasharray:5 3 1 3}.dot{stroke:var(--bg);stroke-width:2}.dot-married,.dot-widowed{fill:var(--ink)}.dot-partnered{fill:var(--bg);stroke:var(--moss)}.dot-engaged{fill:var(--bg);stroke:var(--ember)}.dot-divorced,.dot-separated,.dot-coparent{fill:var(--bg);stroke:var(--muted)}.edge-label{font-family:var(--font);font-size:10px;letter-spacing:.04em;fill:var(--muted)}.person-card{position:absolute;display:flex;gap:10px;align-items:center;text-align:left;padding:8px 10px;border-radius:14px;border:1px solid color-mix(in srgb,var(--ink) 10%,transparent);background:var(--paper);box-shadow:0 8px 22px #3c241014;overflow:hidden}.person-card:hover{border-color:color-mix(in srgb,var(--ember) 55%,transparent)}.person-card.is-selected{border-color:var(--ember);box-shadow:0 0 0 3px var(--ember-soft),var(--shadow)}.person-card.is-unknown{border-style:dashed;font-style:italic}.avatar{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;color:#fff;font-family:var(--serif);flex:none;overflow:hidden}.avatar.large{width:64px;height:64px;font-size:22px}.avatar img{width:100%;height:100%;object-fit:cover}.card-copy{min-width:0;display:flex;flex-direction:column;gap:1px}.surname{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.surname em{font-style:italic;text-transform:none;letter-spacing:0}.given{font-family:var(--serif);font-size:16px;line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meta,.quiet{color:var(--muted);font-size:12px}.meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.twin-pill{position:absolute;top:6px;right:6px;font-size:9px;letter-spacing:.08em;text-transform:uppercase;background:var(--moss-soft);color:var(--moss);border-radius:999px;padding:2px 5px}.dock,.legend,.minimap,.view-switch,.sample-banner{position:absolute;z-index:3}.dock{left:16px;bottom:16px;display:flex;flex-direction:column;gap:6px;align-items:flex-start}.zoom{display:flex;background:var(--panel);border-radius:999px;padding:4px;box-shadow:var(--shadow)}.zoom button{border:0;background:transparent;min-width:36px;height:32px;border-radius:999px}.zoom button:hover{background:var(--ember-soft)}.hint{margin:0;color:var(--muted);font-size:12px;padding-left:6px}.view-switch{left:50%;bottom:16px;transform:translate(-50%);display:flex;gap:4px;padding:4px;background:var(--panel);border-radius:999px;box-shadow:var(--shadow)}.view-switch button{border:0;background:transparent;border-radius:999px;padding:8px 12px}.view-switch button.is-on{background:var(--ink);color:var(--paper)}:root[data-theme=dark] .view-switch button.is-on{background:var(--ember);color:#1a120e}.view-switch button:disabled{opacity:.4}.legend{right:16px;bottom:132px;background:var(--panel);border-radius:14px;padding:8px 10px;box-shadow:var(--shadow);font-size:12px;color:var(--muted)}.legend summary{cursor:pointer;color:var(--ink)}.legend ul{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:5px}.legend li{display:flex;align-items:center;gap:8px}.swatch{width:22px;height:0;border-top:2px solid var(--ink);display:inline-block}.swatch.partnered{border-color:var(--moss)}.swatch.engaged{border-color:var(--ember);border-top-style:dotted}.swatch.divorced{border-color:var(--muted);border-top-style:dashed}.swatch.adoptive{border-color:var(--moss);border-top-style:dashed}.swatch.step{border-color:var(--ember);border-top-style:dotted}.swatch.guardian{border-color:var(--muted);border-top-style:dotted}.minimap{right:16px;bottom:16px;border:0;padding:6px;background:var(--panel);border-radius:14px;box-shadow:var(--shadow)}.minimap rect{fill:color-mix(in srgb,var(--ink) 55%,transparent)}.minimap-view{fill:var(--ember-soft);stroke:var(--ember);stroke-width:1.2}.app.panel-open .legend,.app.panel-open .minimap{right:408px}.sample-banner{top:12px;left:50%;transform:translate(-50%);display:flex;gap:10px;align-items:center;background:var(--panel);border-radius:999px;padding:8px 8px 8px 14px;box-shadow:var(--shadow);font-size:13px;white-space:nowrap}.sample-banner button{border:0;background:var(--ink);color:var(--paper);border-radius:999px;padding:6px 10px}.panel{position:absolute;top:12px;right:12px;bottom:12px;width:min(392px,calc(100% - 24px));background:var(--panel);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:22px;box-shadow:var(--shadow);display:flex;flex-direction:column;z-index:4;animation:slide .28s ease}.panel-head,.modal-head{display:flex;gap:12px;align-items:flex-start}.panel-head{padding:16px 16px 8px}.panel-head h2,.modal h2,.empty h2{font-family:var(--serif);font-weight:600;letter-spacing:-.03em}.panel-head h2{font-size:28px;line-height:1.05}.panel-head .icon-button{margin-left:auto}.quick-add{display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 8px}.quick-add button{border:1px solid color-mix(in srgb,var(--ink) 12%,transparent);background:transparent;border-radius:999px;padding:6px 10px}.quick-add button.is-on{background:var(--ember-soft);border-color:var(--ember)}.panel-scroll{overflow:auto;padding:4px 16px 20px;display:flex;flex-direction:column;gap:16px}.panel-scroll section{display:flex;flex-direction:column;gap:8px}.panel-scroll h3{font-size:13px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}.callout{background:var(--moss-soft);border-radius:12px;padding:10px 12px;color:var(--ink);font-size:13px}.field{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted)}.field input,.field select,.field textarea,.rel-row select,.rel-row input{border:1px solid color-mix(in srgb,var(--ink) 12%,transparent);background:color-mix(in srgb,var(--paper) 70%,transparent);border-radius:10px;padding:8px 10px;color:var(--ink)}.split{display:grid;grid-template-columns:1fr 1fr;gap:8px}.rel-row.stacked .split{grid-template-columns:1.2fr 1fr 1fr}.photo-field{display:flex;gap:12px;align-items:center}.photo-field .button input{display:none}.rel-row,.rel-line{display:flex;gap:8px;align-items:center}.rel-row.stacked{flex-direction:column;align-items:stretch}.rel-name{border:0;background:transparent;padding:0;text-align:left;font-weight:600}.add-form,.checks{border:1px dashed color-mix(in srgb,var(--ink) 18%,transparent);border-radius:14px;padding:12px;margin:0 16px 8px;display:flex;flex-direction:column;gap:8px}.checks{margin:0}.check-line,.checks label{display:flex;gap:8px;align-items:center;font-size:14px}.form-title{font-family:var(--serif);font-size:18px}.form-actions{display:flex;gap:8px}.modal-backdrop{position:fixed;inset:0;background:#1c140e61;display:grid;place-items:center;z-index:20;padding:18px}.modal{width:min(680px,100%);background:var(--paper);color:var(--ink);border-radius:22px;padding:18px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:12px}.modal.narrow{width:min(440px,100%)}.relation-picks{display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:start}.relation-join{display:flex;flex-direction:column;align-items:center;gap:8px;padding-top:28px;color:var(--muted)}.person-pick{display:flex;flex-direction:column;gap:6px;min-width:0}.person-pick .chosen{font-family:var(--serif);font-size:20px;letter-spacing:-.02em;min-height:1.3em}.person-pick input{border:1px solid color-mix(in srgb,var(--ink) 14%,transparent);background:transparent;border-radius:10px;padding:8px 10px}.pick-list{list-style:none;margin:0;padding:4px;max-height:196px;overflow:auto;border:1px solid color-mix(in srgb,var(--ink) 12%,transparent);border-radius:12px}.pick-list button{width:100%;text-align:left;border:0;background:transparent;border-radius:8px;padding:6px 8px}.pick-list button.is-on,.pick-list button:hover{background:var(--ember-soft)}.relation-ask{color:var(--muted)}.relation-title{font-family:var(--serif);font-size:34px;letter-spacing:-.03em}.alternates,.path{margin:0;padding-left:18px;color:var(--muted)}.path{display:flex;flex-wrap:wrap;gap:6px;list-style:none;padding:0}.path button{border:0;background:var(--ember-soft);border-radius:999px;padding:4px 8px}.shortcuts{display:grid;gap:8px}.shortcuts div{display:flex;justify-content:space-between;gap:12px}.shortcuts dt{font-weight:600}.shortcuts dd{margin:0;color:var(--muted)}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);background:var(--ink);color:var(--paper);border-radius:999px;padding:10px 16px;z-index:30;box-shadow:var(--shadow)}@keyframes slide{0%{transform:translate(12px);opacity:0}to{transform:none;opacity:1}}@media(max-width:860px){.topbar{flex-wrap:wrap}.search{order:3;max-width:none;flex-basis:100%}.search kbd,.hint,.legend,.minimap,.sample-banner{display:none}.view-switch{left:12px;right:12px;transform:none;justify-content:space-between}.app.panel-open .view-switch,.app.panel-open .dock{display:none}.panel{inset:auto 0 0;width:100%;height:min(78dvh,760px);border-radius:22px 22px 0 0}.relation-picks{grid-template-columns:1fr}.relation-join{padding:0}.rel-row.stacked .split{grid-template-columns:1fr}.empty h2{font-size:32px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
