:root{--bg: #0b1020;--bg2: #0f1630;--panel: rgba(22, 30, 58, .72);--panel-solid: #161e3a;--panel2: rgba(34, 45, 82, .6);--line: rgba(148, 170, 255, .12);--line2: rgba(148, 170, 255, .22);--text: #e8ecff;--text2: #a9b3d6;--text3: #6f7aa3;--accent: #f2c46d;--accent2: #ffdb94;--accent-ink: #2a1d00;--teal: #5fd4c4;--male: #5b9cff;--male-bg: rgba(91, 156, 255, .16);--female: #ff7aa8;--female-bg: rgba(255, 122, 168, .16);--unknown: #a8b0c8;--unknown-bg: rgba(168, 176, 200, .14);--danger: #ff6b6b;--warn: #ffb547;--ok: #5fd48a;--radius: 16px;--radius-sm: 10px;--shadow: 0 20px 50px -20px rgba(0, 0, 0, .6), 0 2px 8px rgba(0, 0, 0, .25);--glow: 0 0 0 1px var(--line), 0 18px 40px -18px rgba(0, 0, 0, .7);--font: "Inter", -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, sans-serif;--serif: "Cormorant Garamond", "Iowan Old Style", Georgia, serif;--sidebar: 248px;color-scheme:dark}:root[data-theme=light]{--bg: #eef1f8;--bg2: #f7f8fc;--panel: rgba(255, 255, 255, .82);--panel-solid: #ffffff;--panel2: rgba(240, 243, 252, .9);--line: rgba(30, 45, 100, .1);--line2: rgba(30, 45, 100, .18);--text: #18203d;--text2: #4f5a80;--text3: #8a93b3;--accent: #c48a1c;--accent2: #a8740f;--accent-ink: #fff;--male-bg: rgba(91, 156, 255, .14);--female-bg: rgba(255, 122, 168, .14);--shadow: 0 18px 40px -22px rgba(30, 40, 90, .35), 0 2px 6px rgba(30, 40, 90, .08);--glow: 0 0 0 1px var(--line), 0 16px 34px -20px rgba(30, 40, 90, .35);color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font);background:var(--bg);color:var(--text);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased;overflow:hidden}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--accent);text-decoration:none}::selection{background:#f2c46d59}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line2);border-radius:10px;border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-track{background:transparent}.app{display:grid;grid-template-columns:var(--sidebar) 1fr;height:100%;background:radial-gradient(1200px 700px at 85% -10%,rgba(95,120,255,.18),transparent 60%),radial-gradient(900px 600px at -10% 110%,rgba(242,196,109,.1),transparent 60%),linear-gradient(180deg,var(--bg2),var(--bg))}.sidebar{border-right:1px solid var(--line);background:linear-gradient(180deg,rgba(255,255,255,.03),transparent 30%),var(--panel);-webkit-backdrop-filter:blur(24px) saturate(140%);backdrop-filter:blur(24px) saturate(140%);display:flex;flex-direction:column;min-height:0;z-index:20}.brand{display:flex;align-items:center;gap:12px;padding:20px 18px 14px}.brand-mark{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:conic-gradient(from 200deg,#f2c46d,#ff8fb4,#7aa8ff,#5fd4c4,#f2c46d);box-shadow:0 6px 20px -6px #f2c46d99;color:#1a1330}.brand-name{font-family:var(--serif);font-size:24px;font-weight:700;letter-spacing:.3px}.brand-sub{font-size:11px;color:var(--text3);margin-top:-3px;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav{overflow-y:auto;padding:6px 10px 16px;flex:1}.nav-group{margin-top:14px}.nav-title{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:1.2px;color:var(--text3);padding:0 10px 6px}.nav-item{display:flex;align-items:center;gap:11px;width:100%;padding:8px 10px;border:0;background:transparent;border-radius:10px;color:var(--text2);cursor:pointer;text-align:left;font-size:13.5px;transition:background .15s,color .15s}.nav-item:hover{background:var(--panel2);color:var(--text)}.nav-item.active{background:linear-gradient(90deg,#f2c46d2e,#f2c46d0a);color:var(--text);box-shadow:inset 2px 0 0 var(--accent)}.nav-item svg{flex:none;opacity:.9}.nav-item .badge{margin-left:auto}.sidebar-foot{padding:12px;border-top:1px solid var(--line);display:flex;gap:8px;align-items:center}.main{display:flex;flex-direction:column;min-width:0;min-height:0}.topbar{height:62px;flex:none;display:flex;align-items:center;gap:14px;padding:0 22px;border-bottom:1px solid var(--line);background:var(--panel);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);z-index:15}.topbar h1{font-size:17px;margin:0;font-weight:650;letter-spacing:.2px;white-space:nowrap}.topbar .spacer{flex:1}.content{flex:1;min-height:0;overflow:auto;position:relative}.page{padding:26px 28px 60px;max-width:1500px;margin:0 auto}.page.wide{max-width:none}.fill{position:absolute;top:0;right:0;bottom:0;left:0}.card{background:var(--panel);border-radius:var(--radius);box-shadow:var(--glow);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);padding:18px 20px}.card h3,.card h2{margin:0 0 12px;font-size:14px;font-weight:650;letter-spacing:.2px;display:flex;align-items:center;gap:8px}.card h3 .muted{font-weight:450}.serif{font-family:var(--serif)}.muted{color:var(--text2)}.faint{color:var(--text3)}.small{font-size:12px}.tiny{font-size:11px}.row{display:flex;gap:10px;align-items:center}.row.wrap{flex-wrap:wrap}.col{display:flex;flex-direction:column;gap:10px}.grow{flex:1;min-width:0}.grid{display:grid;gap:18px}.grid.c2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.c3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.c4{grid-template-columns:repeat(4,minmax(0,1fr))}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sep{height:1px;background:var(--line);margin:14px 0}.center{display:grid;place-items:center}.btn{display:inline-flex;align-items:center;gap:7px;justify-content:center;padding:8px 14px;border-radius:10px;border:1px solid var(--line2);background:var(--panel2);color:var(--text);cursor:pointer;font-weight:550;font-size:13px;transition:transform .08s,background .15s,border-color .15s,box-shadow .15s;white-space:nowrap}.btn:hover{border-color:var(--accent)}.btn:active{transform:translateY(1px)}.btn.primary{background:linear-gradient(180deg,var(--accent2),var(--accent));color:var(--accent-ink);border-color:transparent;box-shadow:0 8px 22px -10px #f2c46dcc}.btn.primary:hover{filter:brightness(1.06)}.btn.ghost{background:transparent;border-color:transparent;color:var(--text2)}.btn.ghost:hover{background:var(--panel2);color:var(--text)}.btn.danger{color:var(--danger)}.btn.danger:hover{border-color:var(--danger)}.btn.sm{padding:5px 10px;font-size:12px;border-radius:8px}.btn.icon{padding:7px}.btn:disabled{opacity:.45;cursor:default}.seg{display:inline-flex;flex-wrap:wrap;max-width:100%;background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:3px;gap:2px}.seg button{border:0;background:transparent;padding:6px 12px;border-radius:8px;color:var(--text2);cursor:pointer;font-size:12.5px;font-weight:550;display:inline-flex;align-items:center;gap:6px}.seg button.on{background:var(--panel-solid);color:var(--text);box-shadow:0 2px 8px #00000040}.input,.select,textarea.input{width:100%;padding:9px 12px;border-radius:10px;border:1px solid var(--line2);background:#0000002e;outline:none;transition:border-color .15s,box-shadow .15s}:root[data-theme=light] .input,:root[data-theme=light] .select{background:#fff}.input:focus,.select:focus{border-color:var(--accent);box-shadow:0 0 0 3px #f2c46d2e}textarea.input{resize:vertical;min-height:80px;line-height:1.5}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--text2) 50%),linear-gradient(135deg,var(--text2) 50%,transparent 50%);background-position:calc(100% - 16px) 50%,calc(100% - 11px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:30px}.select option{background:var(--panel-solid)}label.field{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--text2);font-weight:550}.hint{font-size:11.5px;color:var(--text3)}.search{position:relative}.search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--text3);pointer-events:none}.search .input{padding-left:34px}.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:99px;font-size:11px;font-weight:600;background:var(--panel2);color:var(--text2);border:1px solid var(--line)}.badge.gold{background:#f2c46d29;color:var(--accent);border-color:#f2c46d4d}.badge.red{background:#ff6b6b24;color:var(--danger);border-color:#ff6b6b4d}.badge.orange{background:#ffb54724;color:var(--warn);border-color:#ffb5474d}.badge.green{background:#5fd48a24;color:var(--ok);border-color:#5fd48a4d}.badge.blue{background:var(--male-bg);color:var(--male)}.badge.pink{background:var(--female-bg);color:var(--female)}.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:99px;background:var(--panel2);border:1px solid var(--line);font-size:12px;cursor:pointer}.chip:hover{border-color:var(--accent)}.avatar{position:relative;flex:none;border-radius:50%;overflow:hidden;display:grid;place-items:center;font-weight:700;color:#fff;letter-spacing:.5px;-webkit-user-select:none;user-select:none;box-shadow:0 0 0 2px var(--ring, transparent),0 6px 16px -6px #0009}.avatar img{width:100%;height:100%;object-fit:cover}.avatar.male{background:linear-gradient(140deg,#6fa9ff,#3b5fd1);--ring: rgba(91,156,255,.55)}.avatar.female{background:linear-gradient(140deg,#ff9fc0,#d14b82);--ring: rgba(255,122,168,.55)}.avatar.unknown{background:linear-gradient(140deg,#b6bdd3,#6b7393);--ring: rgba(168,176,200,.5)}.avatar.deceased:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;box-shadow:inset 0 0 0 1.5px #00000040}.plist{display:flex;flex-direction:column}.prow{display:flex;align-items:center;gap:12px;padding:9px 10px;border-radius:12px;cursor:pointer;transition:background .12s}.prow:hover{background:var(--panel2)}.prow.active{background:#f2c46d1f}.prow .pname{font-weight:600}.prow .pmeta{font-size:12px;color:var(--text2)}.pcard{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:14px;background:var(--panel-solid);border:1px solid var(--line);cursor:pointer;transition:transform .15s,box-shadow .15s,border-color .15s;box-shadow:0 10px 24px -14px #0009;position:relative;overflow:hidden}.pcard:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--sexc, var(--unknown))}.pcard.male{--sexc: var(--male)}.pcard.female{--sexc: var(--female)}.pcard:hover{transform:translateY(-2px);border-color:var(--line2);box-shadow:0 16px 34px -14px #000000b3}.kpi{position:relative;overflow:hidden}.kpi .val{font-size:30px;font-weight:700;letter-spacing:-.5px;font-variant-numeric:tabular-nums}.kpi .lbl{color:var(--text2);font-size:12.5px;font-weight:550}.kpi .ico{position:absolute;right:16px;top:16px;width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:var(--panel2);color:var(--accent)}.bar{height:7px;border-radius:9px;background:var(--panel2);overflow:hidden}.bar>i{display:block;height:100%;border-radius:9px;background:linear-gradient(90deg,var(--accent),var(--accent2))}.hero{position:relative;border-radius:22px;overflow:hidden;padding:30px 32px;background:radial-gradient(600px 300px at 90% 0%,rgba(122,168,255,.35),transparent 60%),radial-gradient(500px 300px at 0% 100%,rgba(242,196,109,.25),transparent 60%),linear-gradient(135deg,#1a2350,#121936);box-shadow:var(--shadow);border:1px solid var(--line2);color:#eef1ff}:root[data-theme=light] .hero{background:radial-gradient(600px 300px at 90% 0%,rgba(122,168,255,.35),transparent 60%),radial-gradient(500px 300px at 0% 100%,rgba(242,196,109,.35),transparent 60%),linear-gradient(135deg,#2a3570,#1b2350)}.hero h2{font-family:var(--serif);font-size:40px;margin:0;font-weight:700;line-height:1.05}.hero .sub{color:#b9c2ea;margin-top:6px}.modal-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#0508149e;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:100;display:grid;place-items:center;padding:20px;animation:fade .15s}.modal{width:min(640px,100%);max-height:calc(100vh - 40px);overflow:auto;background:var(--panel-solid);border-radius:20px;box-shadow:0 40px 80px -20px #000000b3,0 0 0 1px var(--line2);animation:pop .18s cubic-bezier(.2,.9,.3,1.2)}.modal.lg{width:min(920px,100%)}.modal.xl{width:min(1200px,100%)}.modal-head{display:flex;align-items:center;gap:10px;padding:18px 22px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel-solid);z-index:2}.modal-head h3{margin:0;font-size:16px;flex:1}.modal-body{padding:20px 22px}.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:14px 22px;border-top:1px solid var(--line);position:sticky;bottom:0;background:var(--panel-solid)}@keyframes fade{0%{opacity:0}}@keyframes pop{0%{opacity:0;transform:scale(.96) translateY(8px)}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}.rise{animation:rise .35s ease both}.toasts{position:fixed;bottom:22px;right:22px;display:flex;flex-direction:column;gap:8px;z-index:200}.toast{background:var(--panel-solid);border:1px solid var(--line2);padding:11px 16px;border-radius:12px;box-shadow:var(--shadow);animation:rise .25s;font-size:13px;max-width:380px}.toast.err{border-color:var(--danger)}table.tbl{width:100%;border-collapse:collapse}.tbl th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--text3);font-weight:600;padding:8px 10px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel-solid)}.tbl td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top}.tbl tr.click{cursor:pointer}.tbl tr.click:hover td{background:var(--panel2)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:18px;overflow-x:auto}.tabs button{background:none;border:0;padding:10px 14px;color:var(--text2);cursor:pointer;font-weight:550;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;display:inline-flex;gap:7px;align-items:center}.tabs button.on{color:var(--text);border-bottom-color:var(--accent)}.evlist{position:relative;padding-left:26px}.evlist:before{content:"";position:absolute;left:9px;top:6px;bottom:6px;width:2px;background:linear-gradient(180deg,var(--accent),var(--line2));border-radius:2px}.ev{position:relative;padding:8px 12px;border-radius:12px;margin-bottom:6px;cursor:pointer;transition:background .12s}.ev:hover{background:var(--panel2)}.ev:before{content:"";position:absolute;left:-22px;top:15px;width:10px;height:10px;border-radius:50%;background:var(--bg);border:2px solid var(--accent)}.ev .evt{font-weight:600}.ev .evd{color:var(--text2);font-size:12.5px}.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px}.gitem{border-radius:14px;overflow:hidden;background:var(--panel-solid);border:1px solid var(--line);cursor:pointer;transition:transform .15s}.gitem:hover{transform:translateY(-3px)}.gitem .thumb{aspect-ratio:1;background:var(--panel2) center/cover no-repeat;display:grid;place-items:center;color:var(--text3)}.gitem .cap{padding:8px 10px;font-size:12px}.chart-wrap{position:relative;width:100%;height:100%;overflow:hidden;cursor:grab;touch-action:none}.chart-wrap:active{cursor:grabbing}.chart-wrap svg{width:100%;height:100%;display:block}.toolbar{position:absolute;top:14px;left:14px;right:14px;display:flex;gap:10px;align-items:center;z-index:5;pointer-events:none;flex-wrap:wrap}.toolbar>*{pointer-events:auto}.floating{background:var(--panel);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--line2);border-radius:14px;box-shadow:var(--shadow)}.zoomctl{position:absolute;right:16px;bottom:16px;display:flex;flex-direction:column;gap:4px;padding:5px;z-index:5}.legend{position:absolute;left:16px;bottom:16px;padding:10px 14px;font-size:12px;z-index:5}.report{background:#fffdf8;color:#2a2418;border-radius:6px;padding:56px 64px;box-shadow:var(--shadow);max-width:900px;margin:0 auto;font-family:var(--serif);font-size:17px;line-height:1.6}.report h1{font-size:36px;margin:0 0 4px;font-weight:700}.report h2{font-size:24px;margin:30px 0 8px;border-bottom:1px solid #e3d9c4;padding-bottom:4px}.report h3{font-size:19px;margin:18px 0 4px}.report .meta{color:#7a6c50;font-size:14px}.report table{width:100%;border-collapse:collapse;font-family:var(--font);font-size:13px}.report th,.report td{text-align:left;padding:6px 8px;border-bottom:1px solid #ece4d3;vertical-align:top}.report th{color:#7a6c50;font-weight:600}.report a{color:#8a5a00}.report .ornament{text-align:center;color:#c2a46a;letter-spacing:8px;margin:18px 0}@media print{body{overflow:visible;background:#fff}.sidebar,.topbar,.no-print,.toolbar,.zoomctl{display:none!important}.app{display:block;background:#fff}.content{overflow:visible}.report{box-shadow:none;padding:0;max-width:none}.print-svg svg{width:100%!important;height:auto!important}}.welcome{min-height:100%;display:grid;place-items:center;padding:40px}.welcome-card{max-width:860px;text-align:center}.welcome h1{font-family:var(--serif);font-size:64px;margin:10px 0 0;line-height:1}.choice{padding:26px 20px;border-radius:18px;background:var(--panel);border:1px solid var(--line2);cursor:pointer;transition:transform .15s,border-color .15s;text-align:center}.choice:hover{transform:translateY(-4px);border-color:var(--accent)}.choice .ci{width:56px;height:56px;border-radius:16px;margin:0 auto 12px;display:grid;place-items:center;background:var(--panel2);color:var(--accent)}.picker{position:relative}.picker-list{position:absolute;left:0;right:0;top:calc(100% + 4px);background:var(--panel-solid);border:1px solid var(--line2);border-radius:12px;box-shadow:var(--shadow);max-height:300px;overflow:auto;z-index:50;padding:4px}.dropzone{border:2px dashed var(--line2);border-radius:16px;padding:30px;text-align:center;color:var(--text2);transition:border-color .15s,background .15s;cursor:pointer}.dropzone.over{border-color:var(--accent);background:#f2c46d0f}.quiz-opt{padding:14px 16px;border-radius:14px;border:1px solid var(--line2);background:var(--panel2);cursor:pointer;text-align:left;transition:transform .1s,border-color .15s}.quiz-opt:hover{border-color:var(--accent)}.quiz-opt.right{border-color:var(--ok);background:#5fd48a26}.quiz-opt.wrong{border-color:var(--danger);background:#ff6b6b1f}.three-label{pointer-events:none}.tag3d{pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;gap:8px;padding:6px 12px 6px 6px;border-radius:99px;background:#0f1630d1;border:1px solid rgba(255,255,255,.14);color:#eef;white-space:nowrap;font-size:12px;box-shadow:0 8px 20px -8px #000000b3;transition:transform .15s,border-color .15s}.tag3d:hover{transform:scale(1.08);border-color:var(--accent)}.tag3d.focus{border-color:var(--accent);box-shadow:0 0 0 3px #f2c46d4d,0 8px 20px -8px #000000b3}@media (max-width: 1100px){.grid.c4,.grid.c3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 900px){.page .grid[style*=grid-template-columns],.page.wide[style*=grid-template-columns],.modal .grid[style*=grid-template-columns]{grid-template-columns:minmax(0,1fr)!important}.page.wide>.card[style*=sticky]{position:static!important;max-height:340px!important}}@media (max-width: 820px){.app{grid-template-columns:1fr}.sidebar{position:fixed;left:0;top:0;bottom:0;width:270px;transform:translate(-100%);transition:transform .2s}.sidebar.open{transform:none;box-shadow:var(--shadow)}.grid.c2,.grid.c3,.grid.c4{grid-template-columns:minmax(0,1fr)}.page{padding:18px 16px 50px}.topbar{padding:0 14px}.hide-sm{display:none!important}}@media (min-width: 821px){.show-sm{display:none!important}}@media (max-width: 1100px){.dash-top{grid-template-columns:minmax(0,1fr)!important}}@keyframes spin{to{transform:rotate(360deg)}}.spin,.lucide-loader-2,.lucide-loader-circle{animation:spin 1s linear infinite}
