:root{
  --bg:#faf7f2;--surface:#ffffff;--surface-2:#f3eee6;--text:#2b2620;--muted:#6f665b;--border:#e3dbcf;
  --accent:#2f6b4f;--accent-2:#3f8a67;--accent-ink:#ffffff;--warn:#a5531b;--danger:#b23a3a;--ok:#2f6b4f;
  --male:#e6eef8;--male-b:#7d9cc4;--female:#f8e8ee;--female-b:#c47d98;--other:#eeeae2;--other-b:#a39a8b;
  --me:#f2c14e;--shadow:0 1px 2px rgba(40,30,20,.06),0 4px 14px rgba(40,30,20,.06);
  --radius:12px;--serif:'Fraunces',Georgia,'Times New Roman',serif;--sans:'Inter',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
}
@media (prefers-color-scheme:dark){:root{
  --bg:#171512;--surface:#211e1a;--surface-2:#2a2621;--text:#ede6db;--muted:#a69d90;--border:#3a342d;
  --accent:#5fb48a;--accent-2:#79c79f;--accent-ink:#10140f;--warn:#e0995e;--danger:#e07a7a;
  --male:#1f2a38;--male-b:#5d7fa8;--female:#35222a;--female-b:#a8667f;--other:#2a2722;--other-b:#857c6e;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 4px 14px rgba(0,0,0,.25);
}}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 var(--sans)}
a{color:var(--accent)}a:hover{color:var(--accent-2)}
h1,h2,h3{font-family:var(--serif);font-weight:600;line-height:1.2;margin:.2em 0 .5em}
h1{font-size:1.9rem}h2{font-size:1.35rem}h3{font-size:1.1rem}
.muted{color:var(--muted)}.small{font-size:.875rem}.nowrap{white-space:nowrap}
/* top bar */
.topbar{background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:20}
.topbar-in{max-width:1180px;margin:0 auto;display:flex;align-items:center;gap:18px;padding:10px 16px;flex-wrap:wrap}
.brand{font-family:var(--serif);font-size:1.3rem;font-weight:700;color:var(--text);text-decoration:none;display:flex;align-items:center;gap:8px}
.brand svg{width:26px;height:26px;color:var(--accent)}
.nav{display:flex;gap:4px;flex-wrap:wrap;flex:1}
.nav a{color:var(--muted);text-decoration:none;padding:6px 10px;border-radius:8px;font-weight:500;font-size:.95rem}
.nav a:hover,.nav a.on{background:var(--surface-2);color:var(--text)}
.userbox{display:flex;gap:10px;align-items:center;font-size:.9rem}
main{max-width:1180px;margin:0 auto;padding:22px 16px 60px}
/* cards & layout */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px;margin-bottom:18px}
.grid{display:grid;gap:18px}.grid-2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.grid-3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.spread{justify-content:space-between}
.stack>*+*{margin-top:10px}
/* buttons */
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);background:var(--surface);color:var(--text);
  padding:8px 14px;border-radius:9px;font:500 .95rem var(--sans);cursor:pointer;text-decoration:none;line-height:1.2}
.btn:hover{background:var(--surface-2);color:var(--text)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn-primary:hover{background:var(--accent-2);color:var(--accent-ink)}
.btn-danger{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,var(--border))}
.btn-sm{padding:5px 10px;font-size:.85rem}
.btn-big{padding:14px 18px;font-size:1.05rem;border-radius:12px;justify-content:center}
/* forms */
form .field{margin-bottom:14px}
label{display:block;font-weight:600;font-size:.9rem;margin-bottom:4px}
input[type=text],input[type=password],input[type=email],input[type=number],input[type=date],input[type=datetime-local],
input[type=url],input[type=search],input[type=tel],select,textarea{width:100%;padding:9px 11px;border:1px solid var(--border);
  border-radius:8px;background:var(--surface);color:var(--text);font:inherit}
input:focus,select:focus,textarea:focus{outline:2px solid color-mix(in srgb,var(--accent) 45%,transparent);border-color:var(--accent)}
input[type=checkbox]{width:18px;height:18px;vertical-align:middle;margin-right:6px}
.check label{display:inline;font-weight:500}
.help{color:var(--muted);font-size:.82rem;margin-top:3px}
.errorlist{color:var(--danger);font-size:.88rem;margin:4px 0 0;padding-left:18px}
.form-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0 16px}
.pd{display:grid;grid-template-columns:1.4fr .8fr 1fr;gap:8px}
.hp{position:absolute;left:-9999px;height:0;overflow:hidden}
fieldset{border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin:0 0 14px}
legend{font-weight:600;padding:0 6px}
/* messages */
.msgs{list-style:none;padding:0;margin:0 0 16px}
.msgs li{padding:10px 14px;border-radius:9px;margin-bottom:8px;border:1px solid var(--border);background:var(--surface)}
.msgs .success{border-color:var(--ok);background:color-mix(in srgb,var(--ok) 10%,var(--surface))}
.msgs .error{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,var(--surface))}
.msgs .warning,.msgs .info{border-color:var(--warn);background:color-mix(in srgb,var(--warn) 10%,var(--surface))}
/* people */
.avatar{width:44px;height:44px;border-radius:50%;object-fit:cover;background:var(--surface-2);display:inline-grid;place-items:center;
  font-family:var(--serif);font-weight:700;color:var(--muted);flex:none;border:1px solid var(--border)}
.avatar.lg{width:120px;height:120px;font-size:2.4rem}
.person-row{display:flex;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--border)}
.person-row:last-child{border-bottom:0}
.tag{display:inline-block;font-size:.75rem;padding:2px 8px;border-radius:99px;background:var(--surface-2);color:var(--muted);border:1px solid var(--border)}
.tag.bio{border-color:var(--accent);color:var(--accent)}
.kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px}.kv dt{color:var(--muted)}.kv dd{margin:0}
table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:top}
th{font-size:.82rem;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.03em}
.table-wrap{overflow-x:auto}
/* calendar */
.cal{display:grid;grid-template-columns:repeat(7,1fr);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--border);gap:1px}
.cal .hd{background:var(--surface-2);padding:6px;text-align:center;font-size:.8rem;font-weight:600;color:var(--muted)}
.cal .day{background:var(--surface);min-height:110px;padding:6px;font-size:.82rem}
.cal .day.empty{background:var(--bg)}
.cal .day.today{outline:2px solid var(--accent);outline-offset:-2px}
.cal .num{font-weight:700;font-size:.85rem;margin-bottom:4px;color:var(--muted)}
.cal .today .num{color:var(--accent)}
.cal .ev{display:block;text-decoration:none;padding:2px 5px;border-radius:5px;margin-bottom:3px;line-height:1.25;color:var(--text);
  background:var(--surface-2);overflow:hidden;text-overflow:ellipsis}
.cal .ev.birthday{background:color-mix(in srgb,#e8a33d 18%,var(--surface))}
.cal .ev.anniversary{background:color-mix(in srgb,#c4577d 16%,var(--surface))}
.cal .ev.memorial{background:color-mix(in srgb,#8a8a8a 18%,var(--surface))}
.cal .ev.event{background:color-mix(in srgb,var(--accent) 20%,var(--surface))}
.cal-list{display:none}
@media (max-width:760px){.cal{display:none}.cal-list{display:block}}
/* tree */
#tree-wrap{position:relative;height:calc(100vh - 210px);min-height:460px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;touch-action:none}
#tree-svg{width:100%;height:100%;cursor:grab;user-select:none}
#tree-svg.drag{cursor:grabbing}
.tn rect{stroke-width:1.5}
.tn.M rect{fill:var(--male);stroke:var(--male-b)}.tn.F rect{fill:var(--female);stroke:var(--female-b)}.tn.X rect{fill:var(--other);stroke:var(--other-b)}
.tn.me rect{stroke:var(--me);stroke-width:4}
.tn.dead text.nm{font-style:italic}
.tn text{fill:var(--text);font-family:var(--sans)}.tn text.nm{font-weight:600;font-size:13px}.tn text.yr{font-size:11px;fill:var(--muted)}
.tn{cursor:pointer}.tn:hover rect{filter:brightness(.96)}
.edge{fill:none;stroke:var(--muted);stroke-width:1.6}
.edge.biological{stroke-dasharray:none}.edge.legal{stroke-dasharray:7 4}.edge.step,.edge.foster,.edge.guardian,.edge.other{stroke-dasharray:2 4}
.marriage{stroke:#c4577d;stroke-width:2.2}.marriage.ended{stroke-dasharray:4 4;opacity:.6}
.tree-tools{position:absolute;top:10px;right:10px;display:flex;gap:6px;flex-direction:column}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:.82rem;color:var(--muted);margin-top:8px}
.legend svg{vertical-align:middle}
/* docs */
.doc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px}
.doc-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden;text-decoration:none;color:var(--text)}
.doc-card .thumb{height:120px;display:grid;place-items:center;background:var(--surface-2);font-size:2.4rem}
.doc-card .thumb img{width:100%;height:100%;object-fit:cover}
.doc-card .meta{padding:8px 10px;font-size:.85rem}
.viewer{width:100%;height:78vh;border:1px solid var(--border);border-radius:10px;background:var(--surface-2)}
.viewer-img{max-width:100%;max-height:78vh;display:block;margin:0 auto;border-radius:8px}
/* auth pages */
.auth{max-width:520px;margin:30px auto}
.big-choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.match{display:flex;gap:12px;align-items:flex-start;padding:12px;border:1px solid var(--border);border-radius:10px;margin-bottom:8px;cursor:pointer}
.match:has(input:checked){border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--surface))}
.match input{margin-top:4px}
.score{font-size:.78rem;color:var(--muted)}
footer{max-width:1180px;margin:0 auto;padding:20px 16px;color:var(--muted);font-size:.8rem}
@media (max-width:600px){h1{font-size:1.5rem}.card{padding:14px}.userbox .uname{display:none}}
/* contact editor */
.csec .crows{margin:12px 0}
.crow{border:1px solid var(--border);border-radius:10px;padding:10px;margin-bottom:8px;background:var(--surface)}
.crow-line{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.crow .c-type{flex:0 0 140px}.crow .c-grow{flex:1 1 220px}.crow .c-label{flex:0 1 170px}
.crow .c-actions{display:flex;gap:8px;align-items:center;margin-left:auto}
.c-primary{display:inline-flex;align-items:center;gap:4px;font-weight:500;font-size:.85rem;margin:0;cursor:pointer;white-space:nowrap}
.c-primary input{margin:0}
.c-del{display:none}
.crow-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:8px}
.crow-grid label{font-size:.78rem;font-weight:500;color:var(--muted);margin-bottom:2px}
.crow-grid .c-span2{grid-column:span 2}
@media (max-width:640px){.crow .c-type{flex:1 1 45%}.crow .c-label{flex:1 1 100%}.crow-grid{grid-template-columns:1fr 1fr}}
