:root{--paper: #f5f0e6;--paper-soft: #efe8d8;--paper-deep: #e8dfc9;--ink: #1d1c19;--ink-soft: #4a4842;--ink-mute: #8a8678;--rule: #d4cbb4;--rule-soft: #e3dac4;--sage: oklch(58% .06 150);--sage-soft: oklch(82% .04 150);--sage-tint: oklch(94% .025 150);--sage-deep: oklch(35% .05 150);--tier-self: oklch(60% .14 30);--tier-ancestor: oklch(58% .08 70);--tier-descendant: oklch(58% .07 150);--tier-sibling: oklch(58% .08 250);--tier-cousin: oklch(62% .07 300);--tier-inlaw: oklch(70% .06 80);--tier-extended: oklch(62% .06 200);--tier-unrelated: oklch(72% .005 90);--map-water: oklch(90.5% .028 215);--map-waterline: oklch(62% .06 230);--map-land: oklch(94% .028 85);--band-greatest: oklch(95% .02 90);--band-silent: oklch(95% .025 60);--band-boomers: oklch(95% .03 30);--band-genx: oklch(95% .025 340);--band-millen: oklch(95% .03 300);--band-genz: oklch(95% .03 220);--band-alpha: oklch(95% .03 170);--band-lost: oklch(95% .015 110);--font-serif: "Instrument Serif", "EB Garamond", Georgia, serif;--font-sans: "DM Sans", system-ui, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, Menlo, monospace;--serif-italic: italic;--given-weight: 400;--given-tracking: 0;--card-radius: 2px;--card-border-w: 1px;--card-border-style: solid;--card-shadow: none;--rule-style: solid}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font:14px/1.45 var(--font-sans);-webkit-font-smoothing:antialiased;overflow:hidden}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;background-image:radial-gradient(ellipse 800px 500px at 20% -10%,rgba(180,160,110,.08),transparent 60%),radial-gradient(ellipse 600px 400px at 110% 110%,rgba(120,140,110,.07),transparent 60%);z-index:1}#root{position:relative;z-index:2;height:100%}.app{display:grid;grid-template-columns:1fr 320px;grid-template-rows:60px 1fr;height:100%;grid-template-areas:"header header" "stage  side"}@media (max-width: 1100px){.app{grid-template-columns:1fr 280px}}.topbar{grid-area:header;display:flex;align-items:center;padding:0 22px;border-bottom:1px solid var(--rule);background:var(--paper-soft);gap:22px;min-width:0}.brand{display:flex;align-items:baseline;gap:12px}.brand .mark{font-family:var(--font-serif);font-style:var(--serif-italic);font-size:28px;line-height:1;color:var(--sage-deep)}.brand .lineage{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-mute);border-left:1px solid var(--rule);padding-left:12px}.brand .lineage b{color:var(--ink-soft);font-weight:600;letter-spacing:.12em}.viewswitch{display:flex;gap:0;margin-left:auto;border:1px solid var(--rule);background:var(--paper);border-radius:2px;overflow:hidden;flex-shrink:0}.viewswitch button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;padding:7px 12px;font:inherit;font-size:13px;color:var(--ink-soft);cursor:pointer;border-right:1px solid var(--rule-soft);transition:background .15s,color .15s;white-space:nowrap}.viewswitch button:last-child{border-right:0}.viewswitch button:hover{background:var(--paper-soft);color:var(--ink)}.viewswitch button.active{background:var(--ink);color:var(--paper)}.viewswitch button .num{font-family:var(--font-mono);font-size:10px;opacity:.5;margin-right:6px}.topbar-spacer{margin-left:auto}.topbar-actions{display:flex;align-items:center;gap:14px;font-size:12px;color:var(--ink-mute)}.topbar-actions button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:1px solid var(--rule);padding:5px 10px;font:inherit;font-size:12px;color:var(--ink-soft);cursor:pointer;border-radius:2px}.topbar-actions button:hover{background:var(--paper);color:var(--ink)}.stage{grid-area:stage;position:relative;overflow:hidden;background:var(--paper)}.stage-placeholder{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center;color:var(--ink-mute);font-style:italic;padding:40px}.stage-placeholder h3{font-family:var(--font-serif);font-style:var(--serif-italic);font-size:28px;font-weight:400;color:var(--ink-soft);margin:0 0 12px}.stage-caption{position:absolute;right:22px;bottom:18px;z-index:10;text-align:right;pointer-events:none;background:#f5f0e6d9;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);padding:6px 10px;border-left:1px solid var(--rule)}.stage-caption .t{font-family:var(--font-serif);font-style:var(--serif-italic);font-size:16px;color:var(--ink-soft);line-height:1}.stage-caption .s{font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin-top:4px}.side{grid-area:side;border-left:1px solid var(--rule);background:var(--paper-soft);overflow-y:auto;padding:26px 24px 32px}.side h2{font-family:var(--font-serif);font-weight:400;font-size:28px;line-height:1.05;margin:0 0 6px;color:var(--ink)}.side .sub{font-size:12px;color:var(--ink-mute);margin-bottom:24px;font-style:italic}.smallcaps{text-transform:uppercase;letter-spacing:.14em;font-size:10.5px;font-weight:600}.side .empty{font-style:italic;color:var(--ink-mute);font-size:13px;padding:40px 0;text-align:center;border:1px dashed var(--rule)}.page-center{position:relative;z-index:2;min-height:100vh;display:grid;place-items:center;padding:2rem}.auth-card{display:flex;flex-direction:column;gap:.9rem;width:360px;padding:2rem;background:var(--paper-soft);border:1px solid var(--rule);border-radius:2px}.auth-card h1{font-family:var(--font-serif);font-style:var(--serif-italic);font-weight:400;margin:0 0 .5rem;color:var(--ink)}.auth-card label{display:flex;flex-direction:column;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);gap:5px}.auth-card input{font:14px/1.4 var(--font-sans);padding:9px 11px;border:1px solid var(--rule);background:var(--paper);color:var(--ink);border-radius:2px}.auth-card button{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:10px 14px;background:var(--ink);color:var(--paper);border:0;font:inherit;font-weight:500;cursor:pointer;border-radius:2px}.auth-card button:disabled{opacity:.55;cursor:default}.auth-card .form-error{margin:0;color:#a8372a;font-size:13px}.auth-card .auth-alt{font-size:12px;color:var(--ink-mute);text-align:center;margin:0}.auth-card a{color:var(--sage-deep);text-decoration:none}.auth-card a:hover{text-decoration:underline}.tree-picker{width:480px;background:var(--paper-soft);border:1px solid var(--rule);padding:32px}.tree-picker h1{font-family:var(--font-serif);font-style:var(--serif-italic);font-weight:400;margin:0 0 24px}.tree-picker .tree-row{display:block;padding:14px 16px;border:1px solid var(--rule);background:var(--paper);margin-bottom:8px;text-decoration:none;color:var(--ink);cursor:pointer;transition:background .15s,border-color .15s}.tree-picker .tree-row:hover{background:var(--paper-soft);border-color:var(--ink-mute)}.tree-picker .tree-row .name{font-family:var(--font-serif);font-size:18px;line-height:1.2}.tree-picker .tree-row .meta{font-size:11px;color:var(--ink-mute);margin-top:4px;letter-spacing:.06em;text-transform:uppercase}.tree-picker .picker-footer{margin-top:22px;padding-top:18px;border-top:1px solid var(--rule);font-size:11px;color:var(--ink-mute);display:flex;justify-content:space-between;align-items:center}.tree-picker .picker-footer button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:1px solid var(--rule);padding:5px 10px;font:inherit;font-size:11px;color:var(--ink-soft);cursor:pointer}.pc{background:var(--paper);border:var(--card-border-w) var(--card-border-style) var(--rule);padding:8px 11px 10px;border-radius:var(--card-radius);cursor:pointer;min-width:132px;transition:background .12s,border-color .12s,transform .12s,box-shadow .12s;position:relative;isolation:isolate;box-shadow:var(--card-shadow)}.pc-symbol-clip{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none;z-index:0;border-radius:inherit}.pc-bg-symbol{position:absolute;font-family:var(--font-sans);font-weight:900;line-height:.78;letter-spacing:-.04em;color:var(--ink);opacity:.085;-webkit-user-select:none;user-select:none;-webkit-text-stroke:1px currentColor;right:-14px;bottom:-28px;font-size:132px}.pc.tier-self .pc-bg-symbol{color:var(--paper);opacity:.18}.pc.tier-ancestor .pc-bg-symbol{color:var(--tier-ancestor);opacity:.18}.pc.tier-descendant .pc-bg-symbol{color:var(--tier-descendant);opacity:.18}.pc.tier-sibling .pc-bg-symbol{color:var(--tier-sibling);opacity:.18}.pc.tier-cousin .pc-bg-symbol{color:var(--tier-cousin);opacity:.18}.pc.tier-extended .pc-bg-symbol{color:var(--tier-extended);opacity:.18}.pc.tier-inlaw .pc-bg-symbol{color:var(--tier-inlaw);opacity:.22}.pc.tier-spouse .pc-bg-symbol{color:var(--tier-self);opacity:.2}.pc.is-compact .pc-bg-symbol{font-size:108px;right:-10px;bottom:-22px}.pc.is-tiny .pc-bg-symbol{font-size:68px;right:-6px;bottom:-16px}.pc>.given,.pc>.fam,.pc>.yrs{position:relative;z-index:1}.pc>.rel-tag{z-index:3}.pc:hover{background:var(--paper-soft);border-color:var(--ink-mute)}.pc .given{font-family:var(--font-serif);font-style:var(--serif-italic);font-weight:var(--given-weight);letter-spacing:var(--given-tracking);font-size:18px;line-height:1.05;color:var(--ink)}.pc .fam{font-size:11px;color:var(--ink-mute);letter-spacing:.08em}.pc .maiden{font-style:italic}.pc .yrs{font-family:var(--font-mono);font-size:10.5px;color:var(--ink-mute);margin-top:5px}.pc .age{color:var(--ink-soft)}.pc.tier-self{background:var(--ink);color:var(--paper);border-color:var(--ink)}.pc.tier-self .given,.pc.tier-self .fam,.pc.tier-self .yrs,.pc.tier-self .age{color:var(--paper)}.pc.tier-self .fam{color:#f5f0e6a6}.pc.tier-self .yrs{color:#f5f0e68c}.pc.tier-ancestor{border-color:var(--tier-ancestor);background:color-mix(in oklch,var(--tier-ancestor) 8%,var(--paper))}.pc.tier-descendant{border-color:var(--tier-descendant);background:color-mix(in oklch,var(--tier-descendant) 8%,var(--paper))}.pc.tier-sibling{border-color:var(--tier-sibling);background:color-mix(in oklch,var(--tier-sibling) 7%,var(--paper))}.pc.tier-cousin{border-color:var(--tier-cousin);background:color-mix(in oklch,var(--tier-cousin) 7%,var(--paper))}.pc.tier-extended{border-color:var(--tier-extended);background:color-mix(in oklch,var(--tier-extended) 7%,var(--paper))}.pc.tier-inlaw{border-color:var(--tier-inlaw);background:color-mix(in oklch,var(--tier-inlaw) 9%,var(--paper))}.pc.tier-spouse{border-color:var(--tier-self);background:color-mix(in oklch,var(--tier-self) 8%,var(--paper))}.pc.tier-unrelated{opacity:.42}.pc.has-accent{border-color:color-mix(in oklch,var(--accent-c) 60%,var(--rule));background:color-mix(in oklch,var(--accent-c) 9%,var(--paper))}.pc.has-accent .pc-bg-symbol{color:var(--accent-c);opacity:.16}.pc.has-accent .fam{color:color-mix(in oklch,var(--accent-c) 60%,var(--ink-mute))}.pc.has-accent:hover{border-color:var(--accent-c);background:color-mix(in oklch,var(--accent-c) 16%,var(--paper))}.pc .rel-tag{position:absolute;top:-9px;left:8px;background:var(--paper);border:1px solid currentColor;color:var(--ink-soft);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;padding:1px 6px;border-radius:999px;font-family:var(--font-mono);white-space:nowrap;max-width:calc(100% + 18px);overflow:hidden;text-overflow:ellipsis}.pc.tier-self .rel-tag{background:var(--paper);color:var(--ink);border-color:var(--paper)}.pc.tier-ancestor .rel-tag{color:var(--tier-ancestor);border-color:color-mix(in oklch,var(--tier-ancestor) 60%,var(--rule))}.pc.tier-descendant .rel-tag{color:var(--tier-descendant);border-color:color-mix(in oklch,var(--tier-descendant) 60%,var(--rule))}.pc.tier-sibling .rel-tag{color:var(--tier-sibling);border-color:color-mix(in oklch,var(--tier-sibling) 60%,var(--rule))}.pc.tier-cousin .rel-tag{color:var(--tier-cousin);border-color:color-mix(in oklch,var(--tier-cousin) 60%,var(--rule))}.pc.tier-extended .rel-tag{color:var(--tier-extended);border-color:color-mix(in oklch,var(--tier-extended) 60%,var(--rule))}.pc.tier-inlaw .rel-tag{color:var(--tier-inlaw);border-color:color-mix(in oklch,var(--tier-inlaw) 70%,var(--rule))}.pc.tier-spouse .rel-tag{color:var(--tier-self);border-color:color-mix(in oklch,var(--tier-self) 60%,var(--rule))}.gen-stage{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto}.gen-board{position:relative;min-width:100%;min-height:100%;padding:30px 40px 80px 200px}.gen-band{position:relative;border-bottom:1px dashed var(--rule);padding:28px 0}.gen-band>.label{position:absolute;left:-176px;top:32px;font-family:var(--font-serif);font-size:28px;font-style:var(--serif-italic);color:var(--ink-soft);pointer-events:none;line-height:1;width:160px;text-align:right}.gen-band>.yrs{position:absolute;left:-176px;top:64px;font-family:var(--font-mono);font-size:10px;color:var(--ink-mute);letter-spacing:.1em;width:160px;text-align:right}.gen-band>.people{display:flex;flex-wrap:wrap;gap:14px 22px}.band-greatest{background:linear-gradient(to bottom,transparent,var(--band-greatest) 30%,var(--band-greatest) 70%,transparent)}.band-silent{background:linear-gradient(to bottom,transparent,var(--band-silent) 30%,var(--band-silent) 70%,transparent)}.band-boomers{background:linear-gradient(to bottom,transparent,var(--band-boomers) 30%,var(--band-boomers) 70%,transparent)}.band-genx{background:linear-gradient(to bottom,transparent,var(--band-genx) 30%,var(--band-genx) 70%,transparent)}.band-millen{background:linear-gradient(to bottom,transparent,var(--band-millen) 30%,var(--band-millen) 70%,transparent)}.band-genz{background:linear-gradient(to bottom,transparent,var(--band-genz) 30%,var(--band-genz) 70%,transparent)}.band-alpha{background:linear-gradient(to bottom,transparent,var(--band-alpha) 30%,var(--band-alpha) 70%,transparent)}.band-lost{background:linear-gradient(to bottom,transparent,var(--band-lost) 30%,var(--band-lost) 70%,transparent)}.net-stage{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.net-scroll-area{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;cursor:grab}.net-scroll-area.is-panning{cursor:grabbing;-webkit-user-select:none;user-select:none}.net-scroll-area.is-panning .pc{pointer-events:none}.net-canvas{position:relative}.net-svg,.net-card-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.net-card-layer .pc{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;max-width:156px;overflow-wrap:break-word}.net-stage.is-egoless .pc.tier-unrelated{opacity:1}.net-card-layer .net-node,.net-territory{transition:opacity .15s}.net-fam-label{font-family:var(--font-sans);font-size:10px;font-weight:600;letter-spacing:.2em;paint-order:stroke;stroke:var(--map-land);stroke-width:3px;pointer-events:none;-webkit-user-select:none;user-select:none}.net-compass{position:absolute;left:20px;bottom:18px;z-index:5;color:var(--ink-soft);opacity:.45;pointer-events:none}.circle-stage{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center}.circle-svg{display:block}.circle-controls{position:absolute;top:18px;left:22px;z-index:2;display:flex;align-items:center;gap:8px;padding:6px 12px;background:color-mix(in oklab,var(--paper) 86%,transparent);border:1px solid var(--rule-soft);border-radius:999px;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.circle-controls__label{font-family:var(--font-sans);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute)}.circle-controls strong{font-family:var(--font-mono);font-size:14px;min-width:1ch;text-align:center;color:var(--ink)}.circle-controls button{width:24px;height:24px;display:grid;place-items:center;border:1px solid var(--rule);border-radius:50%;background:var(--paper);color:var(--ink);font-size:16px;line-height:1;cursor:pointer}.circle-controls button:hover:not(:disabled){background:var(--rule-soft)}.circle-controls button:disabled{opacity:.35;cursor:default}.desc-stage{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;padding:50px 60px}.desc-tree{display:flex;flex-direction:column;align-items:center;gap:36px;min-width:max-content}.desc-row{display:flex;gap:26px;align-items:flex-start;position:relative}.desc-cell{display:flex;flex-direction:column;align-items:center;gap:10px}.desc-couple{display:flex;gap:8px;align-items:center;padding:4px 6px}.desc-couple .amp{font-family:var(--font-serif);font-style:var(--serif-italic);font-size:22px;color:var(--ink-mute)}.desc-coparent{margin-top:4px;font-family:var(--font-serif);font-style:italic;font-size:11.5px;color:var(--ink-mute);letter-spacing:.02em;text-align:center;max-width:140px}.legend{position:absolute;left:18px;top:18px;background:#f5f0e6eb;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--rule);padding:9px 12px 10px;font-size:10.5px;line-height:1.35;max-width:200px;z-index:10}.legend .ttl{letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:6px;font-weight:600;font-size:9.5px}.legend .l{display:flex;align-items:center;gap:7px;padding:1px 0}.legend .swatch{width:12px;height:7px;border-radius:1px;flex:none}.legend button.fam-row{width:100%;min-width:max-content;padding:2px 4px;margin:0 -4px;border:1px solid transparent;border-radius:2px;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer}.legend button.fam-row:hover{background:var(--paper-soft)}.legend button.fam-row.is-pinned{background:var(--paper-soft);border-color:var(--rule)}.legend .fam-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.legend .cnt{margin-left:auto;font-family:var(--font-mono);font-size:9px;color:var(--ink-mute)}.legend .legend-more{color:var(--ink-mute);font-style:italic}.chip{display:inline-flex;align-items:center;gap:8px;padding:5px 10px;background:var(--paper);border:1px solid var(--rule);border-radius:999px;font-size:12px;color:var(--ink);margin:3px 4px 3px 0;cursor:pointer;transition:background .15s,border-color .15s;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:inherit}.chip:hover{background:var(--sage-tint);border-color:var(--sage-soft)}.chip .dot{width:7px;height:7px;border-radius:50%;background:var(--ink-mute)}.chip.parent .dot{background:var(--tier-ancestor)}.chip.child .dot{background:var(--tier-descendant)}.chip.spouse .dot{background:var(--tier-self)}.chip.sibling .dot{background:var(--tier-sibling)}.chip.cousin .dot{background:var(--tier-cousin)}.chip.extended .dot{background:var(--tier-extended)}.chip.inlaw .dot{background:var(--tier-inlaw)}.chip.unrelated .dot{background:var(--ink-mute)}.side .section-title{margin:26px 0 8px;font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute)}.side .row{display:grid;grid-template-columns:88px 1fr;gap:6px 14px;padding:8px 0;border-bottom:1px solid var(--rule-soft);font-size:13px}.side .row:last-child{border-bottom:0}.side .row .k{color:var(--ink-mute);font-size:11px;letter-spacing:.12em;text-transform:uppercase;padding-top:2px}.side .row .v{color:var(--ink)}.side .row .v.mono{font-family:var(--font-mono);font-size:12px}.side-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.side-clear{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:1px solid var(--rule);color:var(--ink-mute);font:inherit;font-size:11px;line-height:1;padding:3px 7px;cursor:pointer;border-radius:2px}.side-clear:hover{color:var(--ink);border-color:var(--ink-mute);background:var(--paper)}.picker{margin-top:28px;padding-top:18px;border-top:1px solid var(--rule);display:flex;flex-direction:column;gap:8px;min-height:0}.picker-header{display:flex;align-items:center;justify-content:space-between}.picker-search{-webkit-appearance:none;-moz-appearance:none;appearance:none;font:inherit;font-size:13px;padding:6px 10px;border:1px solid var(--rule);background:var(--paper);color:var(--ink);border-radius:2px;width:100%}.picker-search:focus{outline:none;border-color:var(--ink-mute)}.picker-list{display:flex;flex-direction:column;gap:1px;max-height:360px;overflow-y:auto;border:1px solid var(--rule-soft);background:var(--paper)}.picker-row{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;border-bottom:1px solid var(--rule-soft);font:inherit;font-size:13px;color:var(--ink);text-align:left;padding:5px 9px;cursor:pointer;display:flex;align-items:baseline;justify-content:space-between;gap:8px;line-height:1.3}.picker-row:last-child{border-bottom:0}.picker-row:hover{background:var(--paper-soft)}.picker-current{background:var(--ink);color:var(--paper)}.picker-current:hover{background:var(--ink)}.picker-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.picker-yrs{font-family:var(--font-mono);font-size:10.5px;color:var(--ink-mute);flex-shrink:0}.picker-current .picker-yrs{color:#f5f0e6a6}.picker-more,.picker-empty{padding:8px 10px;font-size:11.5px;font-style:italic;color:var(--ink-mute);text-align:center}
