:root{--paper:#f6f2e9;--ivory:#fffdf8;--ink:#25342d;--muted:#748078;--green:#204f43;--line:#dedbd1;--gold:#bd9261;--shadow:0 24px 70px rgba(31,49,39,.13)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:"Noto Sans SC","PingFang SC",sans-serif}button,input,select{font:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}.topbar{height:86px;padding:0 max(6%,calc((100vw - 1350px)/2));display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e8e3d8;background:var(--ivory)}.brand{display:flex;align-items:center;gap:14px}.brand-mark{display:grid;place-items:center;width:43px;height:43px;background:var(--green);color:#f4e9d5;border-radius:4px;font:600 25px "Noto Serif SC",serif}.brand strong{display:block;font:600 18px "Noto Serif SC",serif;letter-spacing:.12em}.brand small{display:block;margin-top:2px;color:var(--muted);font-size:10px;letter-spacing:.2em}.top-note{color:#75877a;font-size:12px;letter-spacing:.18em}.hero{min-height:475px;display:grid;grid-template-columns:1.1fr .9fr;background:#e7e7d9;overflow:hidden}.hero-content{padding:64px 5% 60px max(7%,calc((100vw - 1300px)/2));position:relative;z-index:1}.eyebrow{font-size:11px;letter-spacing:.3em;color:#7a806f;display:flex;align-items:center;gap:12px}.eyebrow-line{height:1px;width:28px;background:var(--gold)}h1,h2,h3{font-family:"Noto Serif SC",serif}.hero h1{font-size:clamp(40px,4.4vw,68px);line-height:1.32;font-weight:500;letter-spacing:.08em;margin:24px 0}.hero h1 em{font-style:normal;color:var(--green)}.hero p{max-width:480px;color:#6d7469;line-height:2;font-size:14px}.hero-link{display:inline-flex;align-items:center;gap:44px;background:var(--green);color:#fff;padding:16px 24px;margin-top:26px;font-size:13px;letter-spacing:.12em}.hero-link:hover,.search-box button:hover{background:#316b59}.hero-link span{font-size:18px}.hero-art{position:relative;background:radial-gradient(circle at 55% 48%,#d8ded0 0 19%,transparent 19.2%),repeating-radial-gradient(circle at 55% 48%,transparent 0 38px,rgba(46,88,67,.07) 39px 40px),linear-gradient(135deg,#d4ded0,#a9bdb0);display:flex;align-items:center;justify-content:center}.hero-art:before{content:"";position:absolute;width:320px;height:320px;border:1px solid rgba(255,255,255,.4);transform:rotate(45deg)}.seal{border:3px double #9c7a53;box-shadow:0 0 0 13px rgba(255,255,255,.3),var(--shadow);width:208px;height:208px;border-radius:50%;display:flex;align-items:center;justify-content:center;gap:4px;color:#8e714f;background:#f1ead8;font:500 84px "Noto Serif SC",serif;position:relative}.seal span{font-size:42px;align-self:center;margin-top:47px}.art-caption{position:absolute;bottom:42px;color:#607768;letter-spacing:.42em;font-size:12px}.summary{max-width:1240px;margin:-36px auto 0;position:relative;z-index:2;background:var(--ivory);box-shadow:0 12px 44px rgba(48,56,46,.07);min-height:126px;display:grid;grid-template-columns:1fr 1fr 1fr 1.5fr;align-items:center}.summary>div{padding:25px 35px;border-right:1px solid var(--line)}.summary-label{display:block;color:var(--muted);font-size:11px;letter-spacing:.15em;margin-bottom:5px}.summary strong{font:500 31px Georgia,serif;color:var(--green)}.summary small{margin-left:5px;color:var(--muted);font-size:11px}.summary p{padding:0 34px;color:var(--muted);font-size:12px;line-height:1.9}.explore{max-width:1240px;margin:0 auto;padding:90px 0 100px}.section-head{display:flex;justify-content:space-between;align-items:end}.section-kicker{color:var(--gold);font-size:11px;letter-spacing:.22em}.section-head h2{font-size:32px;font-weight:500;letter-spacing:.09em;margin:10px 0 30px}.section-head p{color:var(--muted);font-size:12px;margin-bottom:37px}.search-box{display:flex;align-items:center;background:var(--ivory);border:1px solid #dedbd1;height:64px;box-shadow:0 4px 25px rgba(35,50,35,.035)}.search-icon{font-size:29px;color:#8a9688;padding:0 22px}.search-box input{border:0;outline:0;background:none;min-width:0;flex:1;font-size:14px}.search-box select{border:0;border-left:1px solid var(--line);outline:0;background:transparent;color:#59695d;padding:0 24px;height:32px;min-width:140px}.search-box button{align-self:stretch;border:0;background:var(--green);color:white;padding:0 37px;letter-spacing:.15em}.results-meta{display:flex;justify-content:space-between;color:#8a9189;font-size:12px;margin:25px 0 18px}.results{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.person-card{border:1px solid #e4e0d5;background:var(--ivory);padding:19px 22px;text-align:left;display:flex;align-items:center;gap:16px;min-width:0;transition:transform .2s,border-color .2s,box-shadow .2s}.person-card:hover{transform:translateY(-3px);border-color:#bbc9bb;box-shadow:0 8px 28px rgba(38,71,50,.08)}.avatar{width:48px;height:48px;flex:none;border-radius:50%;object-fit:cover;background:#e9e9db;color:#4d775f;display:grid;place-items:center;font:500 20px "Noto Serif SC",serif}.person-main{min-width:0;flex:1}.person-main strong{display:block;font:500 17px "Noto Serif SC",serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.person-main small{display:block;color:#8b958b;font-size:11px;margin-top:6px}.person-arrow{color:#9cae9f;font-size:20px}.more-wrap{text-align:center;margin-top:30px}.more-button{border:1px solid #b8c6b9;background:none;padding:13px 32px;color:var(--green)}.empty{grid-column:1/-1;text-align:center;padding:60px;color:var(--muted);background:var(--ivory)}.detail-panel{position:fixed;top:0;right:0;height:100dvh;width:min(100%,520px);background:var(--ivory);z-index:20;box-shadow:var(--shadow);transform:translateX(105%);transition:transform .25s;overflow-y:auto}.detail-panel.open{transform:none}.panel-top{height:74px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;padding:0 30px;color:#697b69;font-size:12px;letter-spacing:.15em}.panel-top button{border:0;background:none;color:#69806f;font-size:30px}.person-detail{padding:34px 34px 60px}.detail-identity{display:flex;align-items:center;gap:20px;margin-bottom:25px}.detail-identity .avatar{width:74px;height:74px;font-size:29px}.detail-identity h2{margin:0;font-size:29px;font-weight:500}.detail-identity p{font-size:12px;color:var(--muted);margin:8px 0 0}.detail-badge{display:inline-block;background:#e9efe7;color:#4b775c;font-size:11px;padding:5px 9px;margin-bottom:25px}.detail-section{border-top:1px solid var(--line);padding:24px 0}.detail-section h3{font-size:15px;font-weight:500;margin:0 0 16px}.detail-section p{line-height:2;color:#5b665b;font-size:13px;white-space:pre-wrap;margin:0}.relationship{display:grid;grid-template-columns:1fr 1fr;gap:10px}.relation-button{border:1px solid var(--line);padding:11px 13px;background:#faf9f3;text-align:left;color:#304739}.relation-button:hover{border-color:#8fae95}.relation-button small{display:block;font-size:10px;color:#8a958a;margin-bottom:5px}.relation-button strong{font-size:14px;font-weight:500}.pending{background:#f6f1e5;color:#94764d;padding:12px 15px;font-size:12px;line-height:1.8}.scrim{position:fixed;inset:0;background:rgba(20,35,28,.28);z-index:19}footer{border-top:1px solid var(--line);max-width:1240px;margin:0 auto;padding:26px 0 38px;display:flex;justify-content:space-between;color:#9a9f94;font-size:11px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}@media(max-width:1280px){.summary,.explore,footer{margin-left:5%;margin-right:5%}}@media(max-width:800px){.topbar{height:72px;padding:0 5%}.top-note{display:none}.hero{grid-template-columns:1fr}.hero-content{padding:52px 7% 62px}.hero-art{height:230px}.seal{width:140px;height:140px;font-size:58px}.seal span{font-size:30px;margin-top:32px}.art-caption{bottom:15px}.summary{grid-template-columns:repeat(3,1fr);margin-top:0}.summary>div{padding:20px}.summary p{grid-column:1/-1;margin:0;padding:12px 20px 20px;border-top:1px solid var(--line)}.explore{padding:60px 0}.results{grid-template-columns:repeat(2,1fr)}}@media(max-width:560px){.hero h1{font-size:43px}.summary strong{font-size:24px}.summary>div{padding:15px 12px}.summary-label{font-size:10px}.section-head p{display:none}.section-head h2{font-size:27px}.search-box{height:auto;flex-wrap:wrap}.search-icon{padding:0 13px}.search-box input{height:57px}.search-box select{width:50%;height:50px;border-left:0;border-top:1px solid var(--line);padding-left:18px}.search-box button{width:50%;height:50px}.results{grid-template-columns:1fr}.results-meta{gap:14px}.results-meta #result-note{display:none}.person-detail{padding:25px}.relationship{grid-template-columns:1fr 1fr}footer{display:block}footer span{display:block;margin-top:4px}}
.top-nav{display:flex;align-items:center;gap:22px;color:#64756a;font-size:12px}.top-nav a:hover{color:var(--green);text-decoration:underline;text-underline-offset:6px}
.profile-facts{display:grid;grid-template-columns:95px 1fr;gap:10px;margin:0;font-size:13px;line-height:1.7}.profile-facts dt{color:var(--muted)}.profile-facts dd{margin:0;white-space:pre-wrap}
.lineage-path{background:#f5f6ef;border:1px solid var(--line);padding:12px 14px;margin-bottom:20px}.lineage-path small{display:block;color:var(--muted);margin-bottom:8px}.lineage-links{display:flex;gap:6px;flex-wrap:wrap}.lineage-links button{border:0;background:#e4ece0;color:var(--green);padding:5px 8px;font-size:11px}.lineage-links button:hover{background:#cfe0ce}
.archive-section{max-width:1240px;margin:0 auto;padding:30px 0 80px}.archive-note{color:var(--muted);font-size:12px;line-height:1.8;margin:-12px 0 22px}.generation-list{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.generation-card{border:1px solid var(--line);background:var(--ivory);padding:20px;text-align:left;min-height:116px}.generation-card:hover,.album-card:hover{border-color:#82a38b;box-shadow:0 5px 22px rgba(35,75,45,.09)}.generation-card small,.generation-card span{display:block;color:var(--muted);font-size:11px}.generation-card strong{display:block;margin:8px 0;font:500 19px "Noto Serif SC",serif;color:var(--green);overflow-wrap:anywhere}.archive-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.archive-empty{grid-column:1/-1;background:var(--ivory);border:1px solid var(--line);padding:35px;color:var(--muted);font-size:13px;line-height:1.8}.archive-card{background:var(--ivory);border:1px solid var(--line);padding:22px}.archive-card summary{cursor:pointer;font:500 18px "Noto Serif SC",serif}.archive-card small{display:block;color:var(--muted);margin:9px 0}.archive-card p{white-space:pre-wrap;line-height:1.8;font-size:13px}.archive-image{display:block;max-width:100%;height:auto;margin-top:10px}.album-card{background:var(--ivory);border:1px solid var(--line);padding:0 0 18px;text-align:left;overflow:hidden}.album-card img,.album-cover{display:grid;place-items:center;width:100%;height:180px;object-fit:cover;background:#e1e7dd;color:#7f9d83;font:500 55px "Noto Serif SC",serif}.album-card strong,.album-card small{display:block;padding:0 18px}.album-card strong{margin-top:15px;font-size:16px}.album-card small{margin-top:5px;color:var(--muted)}.album-detail{margin-top:25px;background:var(--ivory);border:1px solid var(--line);padding:26px}.album-detail h3{margin:0}.album-detail p{white-space:pre-wrap;color:var(--muted);font-size:13px}.photo-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:15px}.photo-grid figure{margin:0}.photo-grid img{width:100%;height:190px;object-fit:cover}.photo-grid figcaption{color:var(--muted);font-size:11px;line-height:1.6}
@media(max-width:1280px){.archive-section{margin-left:5%;margin-right:5%}}@media(max-width:800px){.generation-list{grid-template-columns:repeat(3,1fr)}.archive-grid{grid-template-columns:repeat(2,1fr)}.photo-grid{grid-template-columns:repeat(3,1fr)}.top-nav{gap:12px}}@media(max-width:560px){.topbar{height:auto;min-height:72px;flex-wrap:wrap;padding:12px 5%}.top-nav{width:100%;overflow:auto;padding-top:12px;white-space:nowrap}.generation-list,.archive-grid{grid-template-columns:repeat(2,1fr)}.photo-grid{grid-template-columns:repeat(2,1fr)}.archive-section{padding-bottom:50px}.generation-card{padding:13px}.generation-card strong{font-size:16px}}
.locked main,.locked footer,.locked .top-nav{display:none}.auth-gate{min-height:calc(100vh - 86px);display:grid;place-items:center;padding:30px;background:linear-gradient(135deg,#e2e8dc,#f6f2e9)}.auth-gate[hidden],.account-actions[hidden]{display:none}.login-card{width:min(100%,420px);background:var(--ivory);box-shadow:var(--shadow);padding:35px;display:grid;gap:11px}.login-card h1{font-size:31px;margin:8px 0}.login-card p{font-size:13px;color:var(--muted);line-height:1.7}.login-card label{font-size:12px;color:var(--green);margin-top:8px}.login-card input,.edit-form input,.edit-form textarea,.edit-form select{border:1px solid var(--line);background:white;padding:11px;min-width:0;width:100%;color:var(--ink)}.login-card button,.edit-form button{border:0;background:var(--green);color:white;padding:13px;margin-top:10px}.login-card #login-error,.form-error{color:#a53f30;font-size:12px}.account-actions{display:flex;align-items:center;gap:9px;font-size:12px;color:var(--muted)}.account-actions button,.account-actions a{border:1px solid var(--line);background:var(--ivory);color:var(--green);padding:7px 10px}.edit-form{display:grid;gap:9px;padding:20px 0}.edit-form label{font-size:12px;color:var(--muted);margin-top:6px}.edit-form textarea{min-height:90px;resize:vertical}.edit-action{border:1px solid #b8c9b7;background:#f4f8f2;color:var(--green);padding:10px 14px;margin:0 0 20px 10px;font-size:12px}.local-badge{background:#e6efe2;color:var(--green);padding:7px 10px;font-size:11px;display:inline-block;margin:0 0 12px}
@media(max-width:900px){.topbar{height:auto;min-height:72px;flex-wrap:wrap;padding-top:12px;padding-bottom:12px}.account-actions{order:2;width:100%;justify-content:flex-end}.top-nav{order:1}.auth-gate{min-height:calc(100vh - 72px)}}
.admin-main { max-width: 900px; margin: 3rem auto; padding: 0 1.5rem 5rem; }
.admin-main h1 { margin: 0 0 1rem; }
.admin-main .edit-form { max-width: 460px; margin: 2rem 0; }
.admin-credential { margin: 1.5rem 0; padding: 1.25rem; border: 1px solid #b87b50; border-radius: 12px; background: #fff7ea; }
.admin-credential code { display: block; overflow-wrap: anywhere; font-size: 1.15rem; user-select: all; }
.admin-user { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem; padding: .8rem 0; border-bottom: 1px solid #ddd8cd; }
.admin-user span { flex: 1 1 260px; }
.admin-user button { padding: .5rem .8rem; }
