:root{
  --bg:#f6f7fb;--panel:#fff;--ink:#1f2937;--muted:#6b7280;--line:#dfe3ea;
  --accent:#3157d5;--accent2:#2447ba;--danger:#b42318;--male:#55a6d9;--female:#df8da6;
  --other:#98a2b3;--shadow:0 12px 35px rgba(31,41,55,.10)
}
*{box-sizing:border-box}
html,body{height:100%;margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:var(--ink);background:var(--bg)}
button,input,select,textarea{font:inherit}button{cursor:pointer}.hidden{display:none!important}.muted{color:var(--muted);font-size:.9em}.screen{min-height:100vh}
.auth-screen{display:grid;grid-template-columns:1.1fr .9fr;align-items:center;gap:60px;max-width:1100px;margin:auto;padding:40px}.brand-block h1{font-size:3rem;margin:.4rem 0}.brand-block p{font-size:1.15rem;color:var(--muted);max-width:520px}.logo-mark{width:58px;height:58px;border-radius:18px;background:var(--accent);color:#fff;display:grid;place-items:center;font-weight:800;font-size:1.35rem}.auth-card{background:var(--panel);border:1px solid var(--line);border-radius:24px;padding:28px;box-shadow:var(--shadow)}
.tabs{display:flex;background:#f1f3f8;border-radius:12px;padding:4px;margin-bottom:22px}.tab{flex:1;border:0;background:transparent;padding:10px;border-radius:9px}.tab.active{background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.06)}.tab-panel{display:none}.tab-panel.active{display:grid}.form{gap:14px}.form label{display:grid;gap:6px;font-weight:600;font-size:.93rem}.form input,.form select,.form textarea,.field{width:100%;border:1px solid #cfd5df;border-radius:10px;padding:11px 12px;background:#fff;outline:none}.form input:focus,.form select:focus,.form textarea:focus,.field:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(49,87,213,.12)}
.primary,.ghost,.danger{border-radius:10px;padding:10px 14px;border:1px solid transparent;font-weight:700}.primary{background:var(--accent);color:#fff}.primary:hover{background:var(--accent2)}.ghost{background:#fff;border-color:var(--line);color:var(--ink)}.ghost:hover{background:#f8fafc}.danger{background:#fff;border-color:#fecaca;color:var(--danger)}.compact{padding:7px 10px}.icon-btn{width:38px;height:38px;border-radius:10px;border:1px solid var(--line);background:#fff;font-size:1.25rem}.icon-btn.compact{width:34px;height:34px}.icon-btn:disabled{opacity:.4;cursor:not-allowed}
.topbar{height:68px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 16px;gap:10px;position:relative;z-index:20}.topbar.simple{justify-content:space-between}.topbar.simple>div{display:flex;gap:12px;align-items:center}.dashboard-main{max-width:1100px;margin:0 auto;padding:36px 24px}.section-head{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:22px}.section-head h2{margin:0 0 4px}.section-head p{margin:0;color:var(--muted)}.tree-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}.tree-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:20px;box-shadow:0 4px 18px rgba(31,41,55,.04);cursor:pointer}.tree-card:hover{border-color:#b9c3d4;transform:translateY(-1px)}.tree-card h3{margin:0 0 8px}.tree-meta{display:flex;justify-content:space-between;color:var(--muted);font-size:.9rem}.empty-card{border:1px dashed #bfc7d5;border-radius:18px;padding:34px;color:var(--muted);text-align:center}
.treebar{display:grid;grid-template-columns:auto minmax(180px,auto) auto minmax(220px,1fr) auto auto auto auto;align-items:center}.tree-title{display:flex;gap:8px;align-items:center;white-space:nowrap;min-width:0}.tree-title>div{min-width:0}.tree-title strong{display:block;overflow:hidden;text-overflow:ellipsis}.focus-label{font-size:.72rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;max-width:230px}.pill{font-size:.68rem;text-transform:uppercase;padding:3px 7px;border-radius:99px;background:#eef2ff;color:#3446a8}.view-count{font-size:.75rem;color:var(--muted);border-left:1px solid var(--line);padding-left:8px}.focus-tools{display:flex;gap:6px}.search-wrap{position:relative;max-width:520px}.search-wrap>input{width:100%;border:1px solid var(--line);background:#f7f8fb;border-radius:10px;padding:9px 12px}.search-results{position:absolute;left:0;right:0;top:44px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);max-height:330px;overflow:auto;z-index:40}.search-item{padding:10px 12px;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:10px}.search-item:hover{background:#f5f7fb}.search-item .sub{font-size:.76rem;color:var(--muted)}
.tree-layout{height:calc(100vh - 68px);display:grid;grid-template-columns:1fr 350px}.canvas-wrap{position:relative;overflow:hidden;background-color:#fafbfe;background-image:radial-gradient(#d9dee8 1px,transparent 1px);background-size:22px 22px}.canvas-wrap svg{width:100%;height:100%;touch-action:none;user-select:none}.canvas-hint{position:absolute;left:14px;bottom:14px;background:rgba(255,255,255,.92);border:1px solid var(--line);padding:7px 10px;border-radius:9px;color:var(--muted);font-size:.78rem;box-shadow:0 4px 14px rgba(31,41,55,.06)}
.side-panel{background:#fff;border-left:1px solid var(--line);overflow:auto;padding:20px}.empty-panel{text-align:center;color:var(--muted);padding:70px 20px}.empty-panel h3{color:var(--ink)}.big-icon{font-size:2rem}.person-head{display:flex;align-items:center;gap:12px}.avatar{width:58px;height:58px;border-radius:50%;object-fit:cover;background:#eef2ff;display:grid;place-items:center;color:#3346a8;font-weight:800;font-size:1.15rem}.person-head h2{font-size:1.2rem;margin:0}.focus-badge{display:inline-flex;margin-top:5px;font-size:.72rem;background:#eef2ff;color:#3446a8;padding:3px 7px;border-radius:99px}.detail-list{display:grid;gap:10px;margin:20px 0}.detail{display:grid;grid-template-columns:95px 1fr;gap:8px;font-size:.92rem}.detail span:first-child{color:var(--muted)}.button-row{display:flex;flex-wrap:wrap;gap:8px}.relation-list{margin-top:20px;border-top:1px solid var(--line);padding-top:16px}.relation-list h4{margin:14px 0 8px}.relation-chip{display:inline-flex;align-items:center;gap:2px;margin:3px 4px 3px 0;padding:5px 8px;background:#f3f5f9;border-radius:999px;font-size:.82rem;cursor:pointer}.relation-chip:hover{background:#e9edf5}.side-loading{padding:10px 0;color:var(--muted);font-size:.9rem}.branch-note{margin-top:12px;padding:10px 12px;border-radius:10px;background:#f7f8fc;color:var(--muted);font-size:.86rem}
dialog{border:0;border-radius:18px;padding:0;box-shadow:var(--shadow);width:min(600px,calc(100vw - 28px))}dialog::backdrop{background:rgba(15,23,42,.42)}#modalBody{padding:24px}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.modal-head h3{margin:0}.close-btn{border:0;background:transparent;font-size:1.4rem}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}.modal-actions.spread{align-items:center}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:12px}.check-list{display:grid;gap:8px;padding:8px 0}.check-row{display:flex;gap:8px;align-items:center}.grow{flex:1}
.relationship-result{border:1px solid var(--line);background:#f8f9fc;border-radius:14px;padding:16px;margin-top:16px}.relationship-result strong{display:block;font-size:1.2rem;margin-bottom:6px}.path-list{margin-top:12px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}.path-person{padding:5px 8px;background:#fff;border:1px solid var(--line);border-radius:999px;font-size:.82rem}
.toast{position:fixed;top:18px;left:50%;transform:translateX(-50%) translateY(-20px);opacity:0;background:#111827;color:#fff;padding:10px 14px;border-radius:10px;z-index:1000;transition:.2s;pointer-events:none}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}.toast.error{background:#9f1239}

/* SVG family tree */
.node-card{fill:#fff;stroke:#cfd6e2;stroke-width:1.4;filter:drop-shadow(0 4px 7px rgba(31,41,55,.08))}.node-card.gender-male{stroke:var(--male)}.node-card.gender-female{stroke:var(--female)}.node-card.gender-other{stroke:var(--other)}.node-card.selected{stroke:var(--accent);stroke-width:3}.node-card.focus{stroke:#1d4ed8;stroke-width:3}.node-highlight .node-card{stroke:#3157d5;stroke-width:3}.node-name{font-size:13px;font-weight:750;fill:#1f2937}.node-meta{font-size:10.5px;fill:#6b7280}.node-avatar{fill:#eef2ff}.node-avatar.gender-male{fill:#edf7fd}.node-avatar.gender-female{fill:#fff1f5}.node-avatar-text{font-size:11px;font-weight:800;fill:#3446a8;text-anchor:middle;dominant-baseline:middle}.focus-dot{fill:#3157d5}.focus-text{font-size:8px;font-weight:800;fill:#3157d5;text-anchor:end}.edge-parent{fill:none;stroke:#9aa5b5;stroke-width:1.45;stroke-linecap:round;stroke-linejoin:round}.edge-spouse{stroke:#667085;stroke-width:1.8;stroke-linecap:round}.edge-highlight{stroke:#3157d5!important;stroke-width:3.4!important}.branch-marker{cursor:pointer}.branch-marker circle{fill:#fff;stroke:#94a3b8;stroke-width:1.2;filter:drop-shadow(0 2px 3px rgba(31,41,55,.12))}.branch-marker:hover circle{stroke:#3157d5;fill:#eef2ff}.branch-marker text{font-size:9.5px;font-weight:800;fill:#475467;text-anchor:middle;dominant-baseline:central;pointer-events:none}
.rel-x{border:0;background:transparent;color:#98a2b3;font-weight:800;padding:0 0 0 4px;line-height:1}.rel-x:hover{color:#b42318}

@media(max-width:1050px){.view-count{display:none}.treebar{grid-template-columns:auto minmax(150px,auto) auto minmax(180px,1fr) auto auto auto}.treebar #fitBtn{display:none}}
@media(max-width:800px){.auth-screen{grid-template-columns:1fr;padding:22px}.brand-block h1{font-size:2rem}.treebar{height:auto;padding:8px;grid-template-columns:auto minmax(0,1fr) auto auto}.tree-title{overflow:hidden}.tree-title strong{overflow:hidden;text-overflow:ellipsis}.focus-tools{display:none}.search-wrap{grid-column:1/-1;order:9;max-width:none}.tree-layout{height:calc(100vh - 118px);grid-template-columns:1fr}.side-panel{position:absolute;right:0;top:118px;bottom:0;width:min(92vw,350px);z-index:15;box-shadow:-12px 0 30px rgba(0,0,0,.08)}.side-panel:has(.empty-panel:not(.hidden)){display:none}.treebar #relationshipBtn,.treebar #fitBtn{display:none}.two-col{grid-template-columns:1fr}.canvas-hint{max-width:calc(100% - 28px);font-size:.72rem}}

/* v2.1 genealogy integrity safeguards */
.rule-note{margin-top:-4px;padding:9px 11px;border-radius:10px;background:#f7f8fc;color:var(--muted);font-size:.82rem;border:1px solid #e8eaf0}
.integrity-warning{margin-top:10px;padding:10px 12px;border-radius:10px;background:#fff7ed;border:1px solid #fed7aa;color:#9a3412;font-size:.84rem;line-height:1.4}
select:disabled{background:#f3f4f6;color:#667085;cursor:not-allowed}
