:root{--background: #f7f4ee;--foreground: #20201d;--muted: #ebe4da;--muted-foreground: #695f52;--card: #fffaf2;--card-foreground: #20201d;--border: #d8ccbb;--primary: #315f5a;--primary-foreground: #f9fbf8;--accent: #b88b4a;--accent-foreground: #21180c;--danger: #9d382c;--text-xs: .78rem;--text-sm: .875rem;--text-base: 1rem;--text-md: 1.0625rem;--text-lg: 1.125rem;--text-xl: 1.5rem;--text-2xl: clamp(1.8rem, 3vw, 2.5rem)}*{box-sizing:border-box}html{min-height:100%}body{min-height:100%;margin:0;background:var(--background);color:var(--foreground);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans SC,PingFang SC,Microsoft YaHei,Helvetica Neue,Arial,sans-serif;font-size:var(--text-base);line-height:1.5}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}.site-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px clamp(16px,4vw,40px);border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--background) 92%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.brand{font-weight:700;letter-spacing:0}nav{display:flex;gap:12px;flex-wrap:wrap;color:var(--muted-foreground)}.page{width:min(1180px,calc(100% - 32px));margin:0 auto;padding:28px 0 56px}.page-header{display:grid;gap:8px;margin-bottom:22px}.page-header.compact-header{margin-bottom:12px}.top-actions{display:flex;margin-bottom:18px}.eyebrow{color:var(--muted-foreground);font-size:var(--text-sm)}h1,h2,h3,p{margin:0}h1{font-size:var(--text-2xl);line-height:1.15}h2{font-size:var(--text-xl)}h3{font-size:var(--text-lg)}.muted{color:var(--muted-foreground)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}.card{border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--card-foreground);padding:16px}.person-card{display:grid;gap:12px;min-height:190px}.person-card.clickable{cursor:pointer;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}.person-card.clickable:hover,.person-card.clickable:focus-visible{border-color:var(--primary);box-shadow:0 10px 22px #00000014;outline:none;transform:translateY(-1px)}.person-main{display:flex;align-items:center;gap:12px}.avatar{width:54px;height:54px;flex:0 0 auto;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--primary) 16%,var(--card));border:1px solid var(--border);color:var(--primary);font-weight:700}.avatar.large{width:92px;height:92px;font-size:var(--text-xl)}.person-main h2{font-size:1.2rem}.meta-list{display:grid;gap:8px}.meta-row{display:grid;grid-template-columns:90px minmax(0,1fr);gap:10px}.meta-row span:first-child{color:var(--muted-foreground)}.spaced{margin-top:18px}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:auto}.button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:38px;padding:8px 12px;border-radius:8px;border:1px solid var(--border);background:var(--card);color:var(--foreground);cursor:pointer}.button svg{width:17px;height:17px;flex:0 0 auto;stroke-width:2.2}.button:hover,.button:focus-visible{border-color:var(--primary);outline:none}.button.primary{background:var(--primary);color:var(--primary-foreground);border-color:var(--primary)}.person-english-name{font-size:var(--text-md)}.status-card{display:grid;gap:12px;max-width:680px}.loading-page{min-height:calc(100vh - 72px);display:grid;place-items:center}.status-card.loading{justify-items:center;text-align:center;width:min(100%,460px)}.search-panel{display:grid;gap:14px;margin-bottom:20px;padding-top:16px}.search-input{width:100%;min-height:46px;border-radius:8px;border:1px solid var(--border);background:var(--card);color:var(--foreground);padding:10px 12px}.search-summary{display:flex;justify-content:space-between;color:var(--muted-foreground);font-size:var(--text-sm)}.family-tree-section{display:grid;gap:14px;margin-bottom:28px;padding-top:10px}.section-title{font-size:var(--text-xl);line-height:1.25}.family-tree-scroll{overflow-x:auto;border:1px solid var(--border);border-radius:8px;background:color-mix(in srgb,var(--card) 80%,var(--background))}.family-tree{display:grid;gap:54px;min-width:920px;padding:26px 28px}.tree-generation{display:grid;grid-template-columns:74px minmax(0,1fr);gap:22px;align-items:center}.generation-label{color:var(--muted-foreground);font-weight:700;text-align:right}.tree-units{display:flex;justify-content:center;column-gap:34px;row-gap:28px;flex-wrap:wrap}.tree-unit{position:relative;display:grid;justify-items:center;gap:10px}.tree-unit.has-children:after{content:"";position:absolute;bottom:-34px;left:50%;width:1px;height:34px;background:var(--border)}.tree-people{display:flex;align-items:stretch;gap:8px}.tree-person{width:172px;min-height:82px;display:flex;align-items:center;gap:9px;border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--foreground);padding:10px;text-align:left;cursor:pointer;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}.tree-person:hover,.tree-person:focus-visible{border-color:var(--primary);box-shadow:0 10px 20px #00000012;outline:none;transform:translateY(-1px)}.avatar.compact{width:40px;height:40px;font-size:var(--text-sm)}.tree-person-text{min-width:0;display:grid;gap:2px}.tree-person-text strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-person-text span{color:var(--muted-foreground);font-size:.85rem}.empty-state{border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--muted-foreground);padding:18px}.person-detail-panel{display:grid;max-width:420px}.person-detail-card{display:grid;gap:14px}.detail-layout{display:grid;grid-template-columns:minmax(240px,340px) 1fr;gap:16px;align-items:start}.relation-groups{display:grid;gap:12px}.relation-group{display:grid;gap:8px;border-top:1px solid var(--border);padding-top:12px}.relation-group:first-child{border-top:0;padding-top:0}.relation-group-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.relation-count{min-width:24px;height:24px;border-radius:999px;display:inline-grid;place-items:center;background:var(--muted);color:var(--muted-foreground);font-size:var(--text-sm)}.relation-chip-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px}.relation-chip{min-height:58px;display:grid;gap:2px;align-content:center;border:1px solid var(--border);border-radius:8px;padding:9px 10px;background:color-mix(in srgb,var(--card) 78%,var(--background))}.relation-chip:hover,.relation-chip:focus-visible{border-color:var(--primary);outline:none}.relation-chip span:first-child{font-weight:700}.relation-chip span:last-child{color:var(--muted-foreground);font-size:var(--text-sm)}.graph-section{display:grid;gap:12px;margin-top:18px}.section-heading{display:grid;gap:4px}.relationship-map{position:relative;display:grid;justify-items:center;gap:10px;border:1px solid var(--border);border-radius:8px;background:linear-gradient(90deg,color-mix(in srgb,var(--border) 24%,transparent) 1px,transparent 1px) center / 44px 44px,linear-gradient(color-mix(in srgb,var(--border) 24%,transparent) 1px,transparent 1px) center / 44px 44px,color-mix(in srgb,var(--card) 88%,var(--background));padding:18px}.map-section{width:100%;display:grid;gap:9px;justify-items:center}.map-section-heading{display:inline-flex;align-items:center;gap:7px;color:var(--muted-foreground)}.map-section-heading h3{font-size:var(--text-sm)}.map-section-heading span{min-width:22px;height:22px;border-radius:999px;display:inline-grid;place-items:center;background:color-mix(in srgb,var(--muted) 82%,var(--card));color:var(--muted-foreground);font-size:var(--text-xs);font-weight:700}.map-node-row{display:flex;flex-wrap:wrap;justify-content:center;gap:9px}.map-section.wide{margin-top:8px;border-top:1px solid var(--border);padding-top:14px}.map-middle{width:100%;display:grid;grid-template-columns:minmax(176px,1fr) minmax(216px,auto) minmax(176px,1fr);gap:14px;align-items:center}.map-side{min-height:126px;display:grid;gap:8px;align-content:center;justify-items:center;border:1px dashed var(--border);border-radius:8px;padding:12px;background:color-mix(in srgb,var(--card) 72%,var(--background))}.map-side-list{width:100%;display:grid;gap:8px}.map-person{width:min(214px,100%);min-height:76px;display:flex;align-items:center;gap:9px;border:1px solid var(--border);border-radius:8px;background:color-mix(in srgb,var(--card) 92%,var(--background));color:var(--foreground);padding:9px;text-align:left;cursor:pointer;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}.map-person:hover,.map-person:focus-visible{border-color:var(--primary);box-shadow:0 10px 20px #00000012;outline:none;transform:translateY(-1px)}.map-person.center{width:min(250px,100%);min-height:92px;border-color:var(--primary);background:var(--primary);color:var(--primary-foreground);box-shadow:0 16px 28px #0000001a}.map-person.center .avatar{background:color-mix(in srgb,var(--primary-foreground) 20%,var(--primary));color:var(--primary-foreground)}.map-person.center .map-person-text span,.map-person.center .map-person-text small{color:color-mix(in srgb,var(--primary-foreground) 78%,var(--primary))}.map-person.compact-node{width:100%;min-height:68px}.map-person-text{min-width:0;display:grid;gap:1px}.map-person-text strong,.map-person-text span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.map-person-text span,.map-person-text small{color:var(--muted-foreground)}.map-person-text small{font-size:.85rem}.map-line.vertical{position:relative;width:1px;height:24px;background:color-mix(in srgb,var(--primary) 34%,var(--border))}.map-line.vertical:before,.map-line.vertical:after{content:"";position:absolute;left:50%;width:7px;height:7px;border-radius:999px;background:color-mix(in srgb,var(--primary) 46%,var(--border));transform:translate(-50%)}.map-line.vertical:before{top:-2px}.map-line.vertical:after{bottom:-2px}.map-empty{color:var(--muted-foreground);font-size:var(--text-sm)}.admin-shell{display:grid;gap:18px}.admin-login-shell{max-width:640px;margin:0 auto;width:100%}.admin-login-card{gap:18px;padding:clamp(22px,4vw,34px)}.admin-login-card .admin-form{max-width:none}.admin-login-card .button.primary{width:100%}.admin-top-grid{display:grid;grid-template-columns:minmax(260px,.85fr) minmax(360px,1.35fr);gap:16px;align-items:start}.admin-workspace{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(280px,.75fr);gap:16px;align-items:start}.admin-panel,.admin-card{display:grid;gap:14px}.admin-card{align-content:start}.tool-panel{display:grid;gap:10px;border-top:1px solid var(--border);padding-top:14px}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.admin-form{display:grid;gap:12px;max-width:420px}.admin-form label{display:grid;gap:6px;color:var(--muted-foreground)}.admin-form.wide{max-width:none;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));align-items:end}.admin-form.compact-form{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.csv-file-field{display:grid;gap:6px}.csv-file-label{color:var(--muted-foreground)}.csv-file-control{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;min-height:50px;border:1px solid var(--border);border-radius:8px;background:color-mix(in srgb,var(--background) 78%,var(--card));padding:8px}.csv-file-name{min-width:0;display:flex;align-items:center;gap:8px;color:var(--muted-foreground)}.csv-file-name svg{width:18px;height:18px;flex:0 0 auto;color:var(--primary)}.csv-file-name span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.csv-file-button{min-height:34px;white-space:nowrap}.admin-form input,.admin-form select,.admin-form textarea{min-height:42px;border:1px solid var(--border);border-radius:8px;background:var(--background);color:var(--foreground);padding:8px 10px}.admin-form textarea{resize:vertical}.form-full{grid-column:1 / -1}.relation-fieldset{display:grid;gap:10px;margin:4px 0 0;border:1px solid var(--border);border-radius:8px;padding:12px}.relation-fieldset legend{padding:0 6px;color:var(--foreground);font-weight:700}.relation-fields{gap:10px}.admin-form select.multi-select{min-height:138px;padding:6px}.button:disabled{cursor:not-allowed;opacity:.5}.button.danger{border-color:color-mix(in srgb,var(--danger) 45%,var(--border));color:var(--danger)}.button.danger:hover,.button.danger:focus-visible{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 8%,var(--card))}.button.compact{min-height:32px;padding:5px 9px}.button.icon-only{width:38px;min-width:38px;min-height:38px;padding:0}.button.compact.icon-only{width:36px;min-width:36px;min-height:36px}.section-title-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.summary-grid{display:grid;grid-template-columns:repeat(2,minmax(120px,1fr));gap:10px}.summary-item{display:grid;gap:4px;border:1px solid var(--border);border-radius:8px;padding:12px;background:color-mix(in srgb,var(--background) 68%,var(--card))}.summary-item span{color:var(--muted-foreground)}.summary-item strong{font-size:var(--text-xl)}.pagination{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;color:var(--muted-foreground);font-size:var(--text-sm)}.page-size-control{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.page-size-control select{min-height:36px;border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--foreground);padding:6px 28px 6px 10px}.table-toolbar{display:flex;justify-content:flex-start}.table-search-input{width:min(100%,420px);min-height:42px;border:1px solid var(--border);border-radius:8px;background:var(--background);color:var(--foreground);padding:8px 10px}.table-search-input:focus{border-color:var(--primary);outline:none}.data-table{display:grid;overflow-x:auto;border:1px solid var(--border);border-radius:8px;background:color-mix(in srgb,var(--card) 76%,var(--background))}.data-row{display:grid;grid-template-columns:96px minmax(150px,1fr) minmax(110px,150px) minmax(128px,auto);gap:12px;align-items:center;min-width:620px;padding:11px 12px;border-top:1px solid var(--border)}.person-row{grid-template-columns:minmax(170px,1fr) minmax(128px,auto)}.data-head{color:var(--muted-foreground);font-size:var(--text-sm);border-top:0;background:color-mix(in srgb,var(--muted) 54%,var(--card));font-weight:700}.data-row:not(.data-head):hover{background:color-mix(in srgb,var(--muted) 35%,transparent)}.data-empty{padding:18px 12px;color:var(--muted-foreground);text-align:center}.relationship-row{grid-template-columns:minmax(170px,1fr) 110px minmax(170px,1fr) 56px}.relationship-form{max-width:none;grid-template-columns:1fr;align-items:stretch}.row-actions{display:flex;gap:8px;flex-wrap:nowrap;justify-content:flex-end}.checklist{display:grid;gap:8px;padding-left:18px}.notification-region{position:fixed;right:18px;bottom:18px;z-index:50;display:grid;gap:10px;width:min(360px,calc(100vw - 36px));pointer-events:none}.notification-toast{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:start;border:1px solid var(--border);border-left-width:4px;border-radius:8px;background:color-mix(in srgb,var(--card) 94%,var(--background));color:var(--foreground);box-shadow:0 18px 34px #0000001f;padding:12px;pointer-events:auto}.notification-toast.info{border-left-color:var(--accent)}.notification-toast.success{border-left-color:var(--primary)}.notification-toast.error{border-left-color:var(--danger)}.notification-toast p{min-width:0;color:var(--foreground);font-size:var(--text-sm)}.notification-close{width:30px;height:30px;display:inline-grid;place-items:center;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--muted-foreground);cursor:pointer}.notification-close:hover,.notification-close:focus-visible{border-color:var(--border);color:var(--foreground);outline:none}.notification-close svg{width:16px;height:16px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:grid;place-items:center;padding:18px;background:#20201d57}.confirm-modal{width:min(420px,100%);display:grid;gap:16px;border:1px solid var(--border);border-left:4px solid var(--danger);border-radius:8px;background:color-mix(in srgb,var(--card) 96%,var(--background));box-shadow:0 22px 42px #0000002e;padding:16px}.modal-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.modal-close{width:34px;height:34px;display:inline-grid;place-items:center;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--muted-foreground);cursor:pointer}.modal-close:hover,.modal-close:focus-visible{border-color:var(--border);color:var(--foreground);outline:none}.modal-close svg{width:17px;height:17px}.modal-body{display:grid;gap:6px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}@media(max-width:760px){.site-header{align-items:flex-start;flex-direction:column}.page{width:min(100% - 24px,1180px);padding-top:20px}.family-tree{min-width:860px;gap:48px;padding:18px}.tree-generation{grid-template-columns:58px minmax(0,1fr);gap:16px}.tree-units{justify-content:flex-start;column-gap:26px;row-gap:24px}.tree-unit.has-children:after{bottom:-30px;height:30px}.tree-person{width:154px}.detail-layout,.relation-chip-list{grid-template-columns:1fr}.relationship-map{align-items:stretch;justify-items:stretch;background:var(--card);padding:14px}.map-section,.map-side{justify-items:stretch}.map-section-heading{justify-content:space-between}.map-node-row,.map-side-list{display:grid;grid-template-columns:1fr}.map-middle{grid-template-columns:1fr}.map-person,.map-person.center{width:100%}.map-person.center{min-height:82px}.map-line.vertical{justify-self:center}.admin-top-grid,.admin-workspace{grid-template-columns:1fr}.admin-login-shell{max-width:none}.admin-login-card{padding:20px}.summary-grid{grid-template-columns:1fr 1fr}.section-title-row{align-items:stretch;flex-direction:column}.pagination{justify-content:flex-start}.table-search-input{width:100%}.button.icon-only,.button.compact.icon-only{width:42px;min-width:42px;min-height:42px}.admin-form.wide,.admin-form.compact-form,.csv-file-control{grid-template-columns:1fr}.csv-file-button{width:100%}.notification-region{right:12px;bottom:12px;left:12px;width:auto}.modal-backdrop{align-items:center;justify-items:stretch;padding:12px}.confirm-modal{width:100%}.modal-actions{display:grid;grid-template-columns:1fr}}
