:root{--night: #050d18;--deep: #08182a;--panel: #0b1a2c;--panel-soft: #0f2336;--edge: #1c3a55;--cyan: #22d3ee;--cyan-soft: #7dd3fc;--ink: #dbeefb;--ink-dim: #86a6bd;--rose: #f472b6;--danger: #fb7185;--radius: 14px;--sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--serif: "Fraunces", Georgia, "Times New Roman", serif}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:radial-gradient(1200px 700px at 70% -10%,rgba(34,211,238,.12),transparent 60%),radial-gradient(900px 600px at 10% 110%,rgba(244,114,182,.08),transparent 55%),var(--night);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased}h1,h2,h3{font-family:var(--serif);font-weight:600;letter-spacing:-.01em;margin:0 0 .4rem}h1{font-size:1.6rem}h2{font-size:1.25rem}h3{font-size:1rem}p{margin:0 0 .6rem}a{color:inherit}:focus-visible{outline:2px solid var(--cyan);outline-offset:2px;border-radius:6px}.app-shell{display:flex;flex-direction:column;height:100%}.app-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem 1rem;padding:.85rem 1.4rem;border-bottom:1px solid var(--edge);background:#050d18d1;backdrop-filter:blur(8px);position:sticky;top:0;z-index:20}.brand{display:inline-flex;align-items:center;flex:none;white-space:nowrap;gap:.6rem;font-family:var(--serif);font-size:1.1rem;text-decoration:none}.brand-mark{width:12px;height:12px;border-radius:50%;background:var(--cyan);box-shadow:0 0 0 4px #22d3ee2e,10px 9px 0 -3px var(--rose)}.app-header nav{display:flex;gap:.35rem;flex-wrap:wrap}.app-header nav a{padding:.35rem .8rem;border-radius:999px;text-decoration:none;color:var(--ink-dim);border:1px solid transparent}.app-header nav a:hover{color:var(--ink)}.app-header nav a.is-active{color:var(--cyan);border-color:#22d3ee66;background:#22d3ee14}.app-header nav .nav-auth-btn{display:inline-flex;align-items:center;padding:.35rem .8rem;border-radius:999px;color:var(--ink-dim);border:1px solid transparent;background:none;font:inherit;cursor:pointer}.app-header nav .nav-auth-btn:hover{color:var(--ink)}.nav-icon{vertical-align:-2px;margin-right:.35rem}.app-main{flex:1;min-height:0;overflow-y:auto;padding:1.2rem 1.4rem 1.6rem}.app-footer{text-align:center;padding:.7rem 1rem 1.1rem;color:var(--ink-dim);font-size:.75rem}.app-footer a{color:var(--cyan-soft)}.graph-page{display:flex;flex-direction:column;gap:.75rem;height:100%}.graph-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;flex-wrap:wrap}.legend{display:flex;gap:.45rem;list-style:none;margin:0;padding:0;flex-wrap:wrap}.legend-item{display:inline-flex;align-items:center;gap:.45rem;padding:.3rem .75rem;border-radius:999px;border:1px solid var(--edge);background:#0b1a2cb3;color:var(--ink);font:inherit;font-size:.85rem;cursor:pointer}.legend-item.is-off{opacity:.4;text-decoration:line-through}.legend-dot{width:9px;height:9px;border-radius:50%;flex:none}.graph-search{position:relative;min-width:220px}.search-results{position:absolute;z-index:15;top:calc(100% + 4px);left:0;right:0;list-style:none;margin:0;padding:.25rem;background:var(--panel);border:1px solid var(--edge);border-radius:10px;box-shadow:0 18px 40px #00000073}.search-results button{width:100%;text-align:left;padding:.4rem .6rem;background:none;border:0;color:var(--ink);font:inherit;border-radius:7px;cursor:pointer}.search-results button:hover{background:#22d3ee1f}.graph-stage{position:relative;flex:1;min-height:460px;display:flex}.graph-canvas{position:relative;flex:1;border:1px solid var(--edge);border-radius:var(--radius);overflow:hidden;background:radial-gradient(900px 520px at 50% 40%,rgba(19,60,88,.55),transparent 70%),linear-gradient(#061321d1,#061321e0),url(https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Landscape_Madagascar_05.jpg/1920px-Landscape_Madagascar_05.jpg) center/cover,#061321}.graph-svg{width:100%;height:100%;display:block;cursor:grab;touch-action:none}.graph-svg:active{cursor:grabbing}.link{stroke:#2b7c9b;stroke-opacity:.55;transition:stroke-opacity .18s ease,stroke .18s ease}.link-spouse{stroke:var(--rose);stroke-opacity:.5;stroke-dasharray:6 4}.link-sibling{stroke-dasharray:2 5}.link.is-active,.link.is-selected{stroke:var(--cyan);stroke-opacity:1}.link.is-faded{stroke-opacity:.1}.node{cursor:pointer;transition:opacity .18s ease}.node.is-faded{opacity:.18}.node-disc{transition:stroke-width .15s ease}.node:hover .node-disc,.node.is-neighbour .node-disc{stroke-width:3}.node.is-selected .node-disc{stroke-width:4;filter:url(#node-glow)}.node.is-selected .node-halo{opacity:.3}.node-label{fill:var(--cyan-soft);font-family:var(--sans);font-size:11px;paint-order:stroke;stroke:#04101c;stroke-width:3px;stroke-linejoin:round;pointer-events:none}.node-initials{font-family:var(--serif);pointer-events:none}.node-dagger{fill:var(--ink-dim);font-size:11px;pointer-events:none}.graph-controls{position:absolute;top:.8rem;right:.8rem;display:flex;flex-direction:column;gap:.35rem}.graph-controls button{width:34px;height:34px;border-radius:9px;border:1px solid var(--edge);background:#081523e6;color:var(--cyan);font-size:1rem;cursor:pointer}.graph-controls button:hover{border-color:var(--cyan)}.graph-hint,.graph-stats{color:var(--ink-dim);font-size:.78rem;margin:0}.graph-hint{position:absolute;right:.9rem;bottom:.7rem;pointer-events:none}.detail-panel{position:absolute;top:0;right:0;bottom:0;width:min(380px,92vw);padding:1.3rem 1.3rem 2rem;overflow-y:auto;background:#081421f5;border:1px solid var(--edge);border-radius:var(--radius);box-shadow:-24px 0 60px #00000080;animation:slide-in .22s ease-out}@keyframes slide-in{0%{transform:translate(18px);opacity:0}}.detail-close{position:absolute;top:.6rem;right:.8rem;border:0;background:none;color:var(--ink-dim);font-size:1.5rem;line-height:1;cursor:pointer}.detail-header{display:flex;gap:.9rem;align-items:center;margin-bottom:1rem}.detail-photo{width:78px;height:78px;border-radius:50%;border:2px solid var(--cyan);overflow:hidden;flex:none;display:grid;place-items:center;background:var(--panel-soft);font-family:var(--serif);font-size:1.4rem}.detail-photo img{width:100%;height:100%;object-fit:cover}.detail-header h2{margin-bottom:.15rem}.detail-sub{color:var(--ink-dim);font-size:.85rem;margin-bottom:.4rem}.family-chip{display:inline-block;padding:.12rem .55rem;border-radius:999px;border:1px solid;font-size:.75rem}.detail-facts{display:grid;gap:.55rem;margin:0 0 1rem;padding:.9rem;border-radius:11px;background:#0f233699}.detail-facts div{display:grid;grid-template-columns:7.5rem 1fr;gap:.5rem}.detail-facts dt{color:var(--ink-dim);font-size:.82rem}.detail-facts dd{margin:0}.detail-description{font-size:.93rem;color:#c3dced;border-left:2px solid rgba(34,211,238,.4);padding-left:.8rem;max-width:62ch}.relatives-group{margin-bottom:.8rem}.relatives-group h4{margin:0 0 .35rem;font-size:.78rem;color:var(--ink-dim);font-weight:500}.relatives-group ul{list-style:none;margin:0;padding:0;display:grid;gap:.25rem}.relatives-group button{display:flex;align-items:center;gap:.55rem;width:100%;padding:.3rem .4rem;border:0;border-radius:9px;background:none;color:var(--ink);font:inherit;text-align:left;cursor:pointer}.relatives-group button:hover{background:#22d3ee1a}.relatives-group em{display:block;font-style:normal;font-size:.75rem;color:var(--ink-dim)}.relative-avatar,.record-avatar{width:32px;height:32px;border-radius:50%;overflow:hidden;flex:none;display:grid;place-items:center;background:var(--panel-soft);border:1px solid var(--edge);font-size:.72rem;color:var(--cyan-soft)}.relative-avatar img,.record-avatar img{width:100%;height:100%;object-fit:cover}.detail-edit{margin-top:.6rem}.page{max-width:1180px;margin:0 auto}.two-columns{display:grid;grid-template-columns:minmax(320px,420px) 1fr;gap:1.2rem;align-items:start}.two-columns>.page-hero{grid-column:1 / -1}.page-hero{position:relative;min-height:130px;margin:0 0 1.2rem;padding:2.1rem 1.4rem 1.2rem;display:flex;align-items:flex-end;background-size:cover;background-position:center;border-radius:var(--radius);border:1px solid var(--edge);overflow:hidden}.page-hero:before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(5,13,24,.25) 0%,rgba(5,13,24,.6) 60%,var(--night) 100%)}.page-hero-content{position:relative;z-index:1}.page-hero h1{display:flex;align-items:center;margin:0;text-shadow:0 2px 14px rgba(0,0,0,.65)}.page-hero-sub{margin:.35rem 0 0;color:#e7f3fb;font-size:.85rem;max-width:58ch;text-shadow:0 1px 10px rgba(0,0,0,.7)}.card{background:#0b1a2cbf;border:1px solid var(--edge);border-radius:var(--radius);padding:1.2rem}.card-head{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-bottom:.6rem}.page-intro{color:var(--ink-dim);font-size:.88rem;max-width:52ch}.form{display:grid;gap:.85rem;margin-top:.9rem}.field{display:grid;gap:.3rem;border:0;padding:0;margin:0;min-width:0}.field>span,.field legend{font-size:.82rem;color:var(--ink-dim)}.field-hint{color:var(--ink-dim);font-size:.75rem}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:.7rem}.input{width:100%;padding:.55rem .7rem;border-radius:10px;border:1px solid var(--edge);background:#071626;color:var(--ink);font:inherit}.input:focus{border-color:var(--cyan);outline:none}.input-compact{width:auto;padding:.35rem .6rem;font-size:.85rem}textarea.input{resize:vertical}.palette{display:flex;gap:.4rem;flex-wrap:wrap}.swatch{width:26px;height:26px;border-radius:50%;border:2px solid transparent;cursor:pointer}.swatch.is-active{border-color:#fff;transform:scale(1.12)}.btn{padding:.5rem 1rem;border-radius:10px;border:1px solid var(--cyan);background:#22d3ee24;color:var(--cyan);font:inherit;font-weight:500;cursor:pointer}.btn:hover{background:#22d3ee3d}.btn:disabled{opacity:.55;cursor:progress}.btn-ghost{border-color:var(--edge);background:transparent;color:var(--ink)}.btn-quiet{border-color:transparent;background:transparent;color:var(--ink-dim);padding:.3rem .5rem}.btn-quiet:hover{color:var(--ink);background:#ffffff0d}.btn-danger:hover{color:var(--danger)}.form-actions{display:flex;gap:.5rem;align-items:center}.form-error,.panel-error{color:var(--danger);font-size:.85rem}.photo-field{display:flex;gap:.9rem;align-items:flex-start}.photo-preview{width:88px;height:88px;border-radius:12px;border:1px dashed var(--edge);overflow:hidden;display:grid;place-items:center;flex:none;color:var(--ink-dim);font-size:.72rem;text-align:center}.photo-preview img{width:100%;height:100%;object-fit:cover}.photo-actions{display:grid;gap:.4rem;flex:1;min-width:0}.record-list{list-style:none;margin:0;padding:0;display:grid;gap:.4rem}.record-list li{display:flex;align-items:center;gap:.7rem;padding:.6rem .7rem;border-radius:11px;background:#0f233673;border:1px solid transparent}.record-list li:hover{border-color:var(--edge)}.record-body{flex:1;min-width:0}.record-body p{margin:.15rem 0 0;font-size:.82rem;color:var(--ink-dim);max-width:60ch}.record-meta{display:block;font-size:.78rem;color:var(--ink-dim)}.record-actions{display:flex;gap:.2rem;flex:none}.person-group h3{margin:1rem 0 .4rem;color:var(--ink-dim);font-family:var(--sans);font-size:.8rem;font-weight:500}.relation-badge{padding:.15rem .5rem;border-radius:999px;font-size:.72rem;border:1px solid var(--edge);color:var(--cyan-soft);flex:none}.badge-spouse{color:var(--rose);border-color:#f472b673}.panel-state{color:var(--ink-dim);font-size:.88rem}.empty-state{max-width:460px;margin:12vh auto;text-align:center}.slide-stage{width:100%;aspect-ratio:16 / 9;border-radius:12px;overflow:hidden;background:var(--panel-soft);display:flex}.slide-stage img{width:100%;height:100%;object-fit:cover}.slide-caption{margin:.6rem 0 0;color:var(--ink-dim);font-size:.85rem;text-align:center}.slide-controls{display:flex;align-items:center;justify-content:center;gap:.8rem;margin-top:.8rem}.slide-controls .btn-ghost{width:36px;height:36px;padding:0;display:grid;place-items:center;border-radius:50%;font-size:1.2rem;line-height:1}.slide-dots{display:flex;gap:.4rem}.slide-dot{width:8px;height:8px;border-radius:50%;border:0;background:var(--edge);cursor:pointer;padding:0}.slide-dot.is-active{background:var(--cyan)}.chat-card{display:flex;flex-direction:column;gap:.8rem;max-width:640px;margin:0 auto}.chat-log{display:flex;flex-direction:column;gap:.5rem;max-height:55vh;overflow-y:auto;padding-right:.2rem}.chat-bubble{padding:.55rem .85rem;border-radius:12px;font-size:.9rem;max-width:85%}.chat-user{align-self:flex-end;background:#22d3ee29;border:1px solid rgba(34,211,238,.3)}.chat-assistant{align-self:flex-start;background:#0f2336b3;border:1px solid var(--edge)}.chat-typing{opacity:.6}.chat-composer{display:flex;gap:.5rem}.chat-composer .input{flex:1}.path-chain{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.6rem}.path-card{display:grid;justify-items:center;gap:.3rem;width:140px;padding:.9rem .6rem;border:2px solid var(--edge);border-radius:14px;background:#0f233680;text-align:center}.path-card strong{font-size:.85rem}.path-card span{font-size:.76rem;color:var(--ink-dim)}.path-avatar{width:56px;height:56px;border-radius:50%;overflow:hidden;background:var(--panel-soft);display:grid;place-items:center;font-weight:600;color:var(--cyan-soft)}.path-avatar img{width:100%;height:100%;object-fit:cover}.path-arrow{font-size:.75rem;color:var(--ink-dim);white-space:nowrap;padding:0 .2rem}@media (max-width: 900px){.two-columns{grid-template-columns:1fr}.detail-panel{width:100%;border-radius:var(--radius) var(--radius) 0 0;top:auto;height:62%}.field-row{grid-template-columns:1fr}.app-main{padding:1rem}}@media (prefers-reduced-motion: reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}
