:root{--ink: #0e1320;--ink-2: #151c2c;--ink-3: #1d2638;--line: rgba(239, 230, 210, .12);--paper: #efe6d2;--paper-dim: rgba(239, 230, 210, .62);--gold: #c9a45c;--gold-soft: #d9c08a;--serif: "Cormorant Garamond", Georgia, serif;--sans: "Inter", system-ui, sans-serif;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:radial-gradient(ellipse at 50% -10%,#1f2a44 0%,var(--ink) 60%) fixed,var(--ink);color:var(--paper);font-family:var(--sans);font-size:14px;-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;cursor:pointer}.muted{color:var(--paper-dim)}.welcome{min-height:100%;display:grid;place-items:center;padding:48px 16px}.welcome-inner{max-width:640px;text-align:center}.eyebrow{color:var(--gold);letter-spacing:.3em;text-transform:uppercase;font-size:12px}.welcome h1{font-family:var(--serif);font-weight:600;font-size:clamp(38px,6vw,64px);line-height:1.05;margin:12px 0 20px}.welcome h1 em{color:var(--gold-soft);font-weight:500}.lede{font-size:17px;line-height:1.6;color:var(--paper-dim);margin:0 auto 36px;max-width:540px}.dropzone{border:1.5px dashed rgba(201,164,92,.55);border-radius:18px;padding:40px 24px;display:flex;flex-direction:column;gap:6px;cursor:pointer;background:#c9a45c0d;transition:background .2s,border-color .2s,transform .2s}.dropzone strong{font-family:var(--serif);font-size:24px;font-weight:600}.dropzone span{color:var(--paper-dim)}.dropzone:hover,.dropzone:focus-visible,.dropzone.over{background:#c9a45c1f;border-color:var(--gold);transform:translateY(-1px)}.error{color:#f1948a}.link{background:none;border:none;color:var(--gold-soft);margin-top:22px;font-size:15px}.link:hover{text-decoration:underline}.privacy{font-size:12.5px;color:var(--paper-dim);margin-top:28px}.howto{font-size:13px;color:var(--paper-dim);margin-top:8px}.howto summary{cursor:pointer}.app{height:100%;display:grid;grid-template-rows:auto 1fr;grid-template-columns:1fr auto}.topbar{grid-column:1 / -1;display:flex;align-items:center;gap:18px;padding:10px 18px;border-bottom:1px solid var(--line);background:#0e1320d9;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);flex-wrap:wrap;position:relative;z-index:5}.brand{background:none;border:0;padding:0;font-family:var(--serif);font-size:24px;font-weight:700;cursor:pointer;white-space:nowrap}.brand-mark{color:var(--gold)}.tabs{display:flex;gap:2px;background:var(--ink-2);padding:3px;border-radius:10px;border:1px solid var(--line)}.tabs button{background:none;border:none;padding:6px 14px;border-radius:7px;color:var(--paper-dim)}.tabs button.active{background:var(--ink-3);color:var(--paper);box-shadow:inset 0 0 0 1px #c9a45c59}.gens{display:flex;align-items:center;gap:8px;color:var(--paper-dim);font-size:12.5px}.gens-value{font-variant-numeric:tabular-nums;white-space:nowrap}.gens input{accent-color:var(--gold);width:90px}.stats{color:var(--paper-dim);font-size:12px;margin-left:auto}.ghost{background:none;border:1px solid var(--line);border-radius:8px;padding:6px 12px;color:var(--paper-dim)}.ghost:hover{color:var(--paper);border-color:var(--paper-dim)}.stage{position:relative;overflow:hidden;min-width:0}.search{position:relative}.search input{background:var(--ink-2);border:1px solid var(--line);border-radius:10px;color:var(--paper);padding:8px 12px;width:260px;font:inherit}.search input:focus{outline:none;border-color:var(--gold)}.search-results{position:absolute;top:110%;left:0;width:320px;list-style:none;margin:0;padding:6px;background:var(--ink-2);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 40px #00000080}.search-results button{display:flex;justify-content:space-between;gap:12px;width:100%;padding:7px 10px;border:0;border-radius:8px;background:none;text-align:left}.search-results button:hover{background:var(--ink-3)}.search-results small{color:var(--paper-dim);white-space:nowrap}.fan{height:100%;display:flex;flex-direction:column;align-items:center}.fan svg{flex:none}.fan-seg{cursor:pointer}.fan-seg path:not([fill=none]){stroke:var(--ink);stroke-width:1.2;transition:filter .15s,opacity .15s;opacity:.88}.fan-seg path.odd{opacity:.8}.fan-seg:hover path:not([fill=none]){opacity:1;filter:brightness(1.25)}.fan-seg.selected path:not([fill=none]),.fan-seg.selected circle{stroke:var(--gold);stroke-width:2.5;opacity:1}.fan-root circle{stroke:var(--gold);stroke-width:1}.fan-empty{fill:none;stroke:#efe6d221;stroke-dasharray:3 4}.fan-label{pointer-events:none}.fan-name{fill:var(--paper);font-family:var(--serif);font-weight:700}.fan-years{fill:#efe6d2bf;font-family:var(--sans)}.legend{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 16px;padding:10px 20px;font-size:12px;color:var(--paper-dim)}.legend-title{color:var(--gold-soft)}.legend-item{display:inline-flex;align-items:center;gap:6px;text-transform:capitalize}.legend-item i{width:11px;height:11px;border-radius:3px;display:inline-block}.legend-hint{opacity:.7;font-style:italic}.tooltip{position:fixed;z-index:20;pointer-events:none;background:#151c2cf5;border:1px solid var(--line);border-radius:10px;padding:8px 12px;display:flex;flex-direction:column;gap:2px;box-shadow:0 10px 30px #00000073;max-width:280px}.tooltip strong{font-family:var(--serif);font-size:17px}.timeline{height:100%;display:flex;flex-direction:column;position:relative}.tl-head{flex:none;border-bottom:1px solid var(--line);background:var(--ink)}.tl-body{flex:1;overflow-y:auto;overflow-x:hidden}.tl-tick{fill:var(--paper-dim);font-size:11px}.tl-band-title{fill:var(--gold-soft);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.tl-band-label{fill:#fff;font-size:11px;font-weight:600;pointer-events:none}.tl-band-label.small{font-size:10px;font-weight:500}.tl-grid{stroke:#efe6d20f}.tl-gen-sep{stroke:#c9a45c40}.tl-row{cursor:pointer}.tl-row-bg{fill:transparent}.tl-row:hover .tl-row-bg{fill:#efe6d20a}.tl-row.selected .tl-row-bg{fill:#c9a45c1a}.tl-name{fill:var(--paper);font-family:var(--serif);font-size:15px;font-weight:600}.tl-gen{fill:var(--paper-dim);font-size:10.5px}.tl-bar{fill:var(--gold-soft)}.tl-bar.f{fill:#e3c9a0}.tl-row.selected .tl-bar{stroke:#fff;stroke-width:1.5}.tl-bar-label{fill:var(--ink);font-size:10.5px;font-weight:600;pointer-events:none}.tl-marr{fill:var(--ink);stroke:var(--gold);stroke-width:1.5}.tl-cursor{stroke:var(--gold);stroke-width:1;stroke-dasharray:3 3;pointer-events:none}.tl-card{position:absolute;top:150px;width:300px;z-index:4;pointer-events:none;background:#151c2cf5;border:1px solid var(--line);border-radius:14px;padding:14px 16px;box-shadow:0 16px 40px #00000080;display:flex;flex-direction:column;gap:6px}.tl-card-year{font-family:var(--serif);font-size:34px;font-weight:700;color:var(--gold-soft);line-height:1}.tl-card-regime{border-left:3px solid;padding-left:8px;font-weight:600}.tl-card-event{display:flex;align-items:center;gap:7px;font-size:13px}.tl-card-event i{width:8px;height:8px;border-radius:50%;flex:none}.tl-card ul{list-style:none;margin:6px 0 0;padding:8px 0 0;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:3px}.tl-card li{display:flex;justify-content:space-between;gap:10px;font-size:13px}.tl-card li b{color:var(--gold-soft);font-weight:500;white-space:nowrap}.tl-legend{flex:none;border-top:1px solid var(--line)}.panel{width:400px;border-left:1px solid var(--line);background:#151c2cb3;overflow-y:auto;padding:22px 22px 40px;position:relative}.panel-close{position:absolute;top:10px;right:12px;background:none;border:none;font-size:24px;color:var(--paper-dim)}.panel-head{display:flex;gap:14px;align-items:center;margin-bottom:14px}.avatar{width:64px;height:64px;border-radius:50%;flex:none;display:grid;place-items:center;object-fit:cover;font-family:var(--serif);font-size:24px;font-weight:700;border:1.5px solid var(--gold);background:linear-gradient(135deg,#2c3a5c,#1a2236)}.avatar.f{background:linear-gradient(135deg,#5c3a4a,#2a1a24)}.panel h2{font-family:var(--serif);font-size:28px;line-height:1.1;margin:0 0 4px}.occupation{font-style:italic;color:var(--gold-soft);margin-top:3px}.primary{width:100%;border:1px solid rgba(201,164,92,.5);background:#c9a45c1a;color:var(--gold-soft);border-radius:10px;padding:8px;margin-bottom:14px}.primary:hover{background:#c9a45c33}.summary{background:var(--ink-2);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:8px}.summary p{margin:0 0 8px;font-family:var(--serif);font-size:18px}.chips{display:flex;flex-wrap:wrap;gap:6px}.chip{background:var(--ink-3);border-radius:20px;padding:3px 10px;font-size:12px;color:var(--paper-dim)}.chip b{color:var(--paper)}.panel section{margin-top:20px}.panel h3{font-family:var(--serif);font-size:20px;font-weight:600;color:var(--gold-soft);margin:0 0 10px;border-bottom:1px solid var(--line);padding-bottom:6px}.fam-group{display:flex;flex-direction:column;gap:3px;margin-bottom:10px}.fam-group .label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--paper-dim)}.children{padding-left:12px;border-left:1px solid var(--line);display:flex;flex-direction:column;gap:2px}.person-link{display:flex;justify-content:space-between;gap:8px;background:none;border:none;padding:4px 6px;border-radius:6px;text-align:left}.person-link:hover{background:var(--ink-3)}.person-link small{color:var(--paper-dim);white-space:nowrap}.chrono{list-style:none;padding:0;margin:0;position:relative}.chrono:before{content:"";position:absolute;left:47px;top:6px;bottom:6px;width:1px;background:var(--line)}.chrono li{display:grid;grid-template-columns:38px 18px 1fr;gap:0 4px;padding:6px 0;align-items:start}.chrono-year{font-size:12px;color:var(--paper-dim);padding-top:2px;font-variant-numeric:tabular-nums}.chrono-dot{width:9px;height:9px;border-radius:50%;background:var(--gold);margin:5px 0 0 5px;position:relative;z-index:1;box-shadow:0 0 0 3px var(--ink-2)}.chrono-title{font-weight:500}.chrono-detail{font-size:12.5px;color:var(--paper-dim);line-height:1.45;margin-top:1px}.chrono-where{font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--gold);margin-top:2px}.chrono-local .chrono-dot{border-radius:2px;transform:rotate(45deg)}.chrono-sources{font-size:11.5px;color:var(--paper-dim);margin-top:3px}.chrono-sources a{color:var(--gold-soft);text-decoration:underline;text-underline-offset:2px}.chrono-life .chrono-title{font-family:var(--serif);font-size:17px;font-weight:700;color:var(--paper)}.chrono-family .chrono-dot{background:var(--gold-soft);transform:scale(.75)}.chrono-link{background:none;border:0;padding:0;text-align:left;font:inherit;color:inherit}.chrono-link:hover,.chrono-link:focus-visible{text-decoration:underline}.chrono-ruler .chrono-title{color:var(--paper-dim)}.chrono-ruler .chrono-dot{border-radius:2px;transform:rotate(45deg) scale(.85)}@media (max-width: 900px){.app{grid-template-columns:1fr;grid-template-rows:auto 1fr auto}.panel{width:auto;max-height:50vh;border-left:none;border-top:1px solid var(--line)}.search input{width:180px}.stats{display:none}}.panel-actions{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.panel-actions .primary{margin-bottom:0}.panel-actions .ghost{width:100%}.home-badge{text-align:center;color:var(--gold-soft);font-size:12.5px;padding:6px}.warning{background:#e67e221f;border:1px solid rgba(230,126,34,.45);color:#f5cba7;border-radius:10px;padding:10px 12px;font-size:13px;line-height:1.45;margin:0 0 12px}.facts{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.facts li{display:flex;flex-direction:column;gap:1px;font-size:13px}.facts .label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--paper-dim)}.tl-stripe{opacity:.95}.tl-elsewhere{color:var(--gold-soft);font-size:11px}.summary .where{font-family:var(--sans);font-size:12px;color:var(--paper-dim);margin:-2px 0 8px}.tl-head{-webkit-user-select:none;user-select:none}.tl-head .tl-band-item{cursor:pointer}.tl-band-item:hover rect{filter:brightness(1.25)}.tl-head.scrollable{cursor:grab}.tl-head.scrollable:active{cursor:grabbing}.tl-range{color:var(--gold-soft);font-variant-numeric:tabular-nums;margin-left:4px}.tl-territory{fill:var(--gold-soft);font-family:var(--serif);font-size:15px;font-weight:700}.tl-stripe-unplaced{fill:none;stroke:#efe6d273;stroke-width:1;stroke-dasharray:3 3}.tl-card-regime small{color:var(--paper-dim);font-weight:400}.tl-card li.tl-group{display:block}.tl-card .tl-group+.tl-group{margin-top:8px}.tl-group-title{border-left:3px solid var(--line);padding-left:7px;margin-bottom:3px;font-size:12px;font-weight:600;color:var(--paper)}.tl-group-title small{color:var(--paper-dim);font-weight:400}.tl-group-title.unplaced{border-left-style:dashed;color:var(--paper-dim);font-style:italic}.tl-card .tl-group ul{border-top:none;margin:0;padding:0 0 0 10px}.legend-item i.unplaced{background:#3a3f4b;outline:1px dashed rgba(239,230,210,.45)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.fan-seg{animation:fade-in .42s ease-out 80ms both}@media (prefers-reduced-motion: reduce){.fan-seg{animation:none}}.tl-hscroll{position:relative;flex:none;height:12px;margin:4px 0;border-radius:6px;background:#efe6d20f;cursor:pointer}.tl-hscroll:focus-visible{outline:2px solid var(--gold);outline-offset:2px}.tl-hscroll-thumb{position:absolute;top:2px;bottom:2px;min-width:24px;border-radius:4px;background:#c9a45c8c;cursor:grab;touch-action:none}.tl-hscroll-thumb:active{cursor:grabbing;background:var(--gold)}.tl-hscroll-thumb.full{opacity:.35;cursor:default}.ft{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.ft-svg{display:block;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.ft-svg.panning{cursor:grabbing}.ft-cam,.ft-node{transition:transform .55s cubic-bezier(.65,0,.35,1)}.ft-svg.panning .ft-cam{transition:none}.ft-node{animation:fade-in .45s ease-out both}.ft-links{animation:fade-in .3s ease-out .45s both}.ft-link{fill:none;stroke:#d9c08a73;stroke-width:1.4}.ft-ring{fill:var(--ink);stroke:var(--gold);stroke-width:1.5}.ft-card{cursor:pointer}.ft-card-bg{fill:#e8dcc0;stroke:#7a5c34;stroke-width:1.2;filter:drop-shadow(0 3px 6px rgba(0,0,0,.45))}.ft-card-rule{fill:none;stroke:#7a5c348c;stroke-width:.8}.ft-card:hover .ft-card-bg,.ft-card:focus-visible .ft-card-bg{fill:#f1e7cf;stroke:#9a7442}.ft-card:focus{outline:none}.ft-card.focus .ft-card-bg{fill:#f3e9d0;stroke:var(--gold);stroke-width:2.4}.ft-card.focus .ft-card-rule{stroke:#9a7442}.ft-card.selected .ft-card-bg{fill:#f6edd8}.ft-card.estimated .ft-card-rule{stroke-dasharray:3 2.5}.ft-card.sibling,.ft-card.spouse{opacity:.9}.ft-given,.ft-surname,.ft-dates{font-family:var(--serif);fill:#2e2214}.ft-given{font-size:16px;font-weight:600}.ft-surname{font-size:14.5px;font-weight:600;font-variant:small-caps;letter-spacing:.05em;fill:#5a3d1c}.ft-dates{font-size:13px;font-style:italic;fill:#4a3820;font-variant-numeric:oldstyle-nums}.ft-fleuron{color:#8a8172}.ft-fleuron path{stroke:currentColor;stroke-width:1.2}.ft-fleuron rect{fill:currentColor}.ft-more{fill:var(--gold);opacity:.7}.ft-rail-bg{fill:var(--ink);stroke:var(--line)}.ft-tick{fill:var(--paper-dim);font-size:10.5px;font-variant-numeric:tabular-nums}.ft-grid{stroke:#efe6d20f}.ft-reign-line{stroke:#efe6d20d;stroke-dasharray:2 4}.ft-band-item{cursor:pointer}.ft-band-item:hover rect{filter:brightness(1.25)}.ft-info{top:auto;bottom:14px;width:290px;max-height:calc(100% - 28px);overflow:hidden}.ft-hint{margin-top:4px;font-size:11px;color:var(--paper-dim);font-style:italic}@media (prefers-reduced-motion: reduce){.ft-cam,.ft-node{transition:none}.ft-node,.ft-links{animation:none}}.tl-saint rect{fill:#d9c08a47;stroke:#d9c08abf;stroke-width:.8}.tl-saint:hover rect{fill:#d9c08a8c}.tl-saint text{fill:var(--paper);font-family:var(--serif);font-size:13px;letter-spacing:.01em;font-style:italic;pointer-events:none}.tl-card-saints{color:var(--gold-soft);font-family:var(--serif);font-style:italic;font-size:13px}.avatar.saint{background:radial-gradient(circle,#d9c08a59,#d9c08a14 70%);border-color:var(--gold);color:var(--gold);font-size:24px}.saint-summary{font-family:var(--serif);font-size:16px;line-height:1.45;margin:14px 0 4px}.saint-mark{color:var(--gold)}.saint-dot{background:var(--gold)}.person-link .near{color:var(--gold-soft);font-style:italic;font-size:12px}.saint-source{margin-top:18px;font-size:11.5px;font-style:italic}.sources{list-style:none;margin:0;padding:0;display:grid;gap:8px}.sources a{color:var(--gold-soft);text-decoration:underline;text-underline-offset:2px}.sources small{display:block;color:var(--paper-dim);font-size:11.5px}
