:root{color:var(--lineage-text);background:var(--lineage-bg);font-synthesis:none;text-rendering:optimizelegibility;--lineage-ink-950:#141310;--lineage-ink-900:#1f1d19;--lineage-ink-700:#3a362e;--lineage-paper-50:#fdfaf2;--lineage-paper-100:#f7f4ec;--lineage-paper-200:#e5dfcf;--lineage-bg:#f7f4ec;--lineage-surface:#fff;--lineage-text:#1f1d19;--lineage-text-secondary:#8a8578;--lineage-text-placeholder:#b0a995;--lineage-on-primary:#fdf8f2;--lineage-cinnabar:#b03a2e;--lineage-cinnabar-hover:#963026;--lineage-gold:#a8863d;--lineage-gender-male:#3a5a78;--lineage-gender-female:#b03a2e;--lineage-tree-accent:#b03a2e;--lineage-font-display:"Kaiti SC", "KaiTi", "STKaiti", serif;--lineage-shadow:0 10px 26px #1f1d190f}*{box-sizing:border-box}html,body,#root{min-height:100%}body{background:var(--lineage-bg);margin:0;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,Segoe UI,Roboto,sans-serif;overflow-x:hidden}#root{min-height:100vh}button,input,textarea,select{font:inherit}.app-shell{min-height:100vh}.app-header{z-index:100;-webkit-backdrop-filter:blur(14px);background:#ffffffb8;border-bottom:1px solid #1f1d1914;justify-content:space-between;align-items:center;height:56px;padding:0 24px;display:flex;position:sticky;top:0}.app-header__left,.app-header__account{align-items:center;min-width:0;display:flex}.app-header__left{flex:1;gap:16px}.app-header__account{flex-shrink:0;gap:12px}.app-header .app-header__title{color:var(--lineage-text);font-family:var(--lineage-font-display);white-space:nowrap;flex-shrink:0;margin:0}.app-header__title-short{display:none}.app-header__family-select{width:160px}.family-select__create{border-top:1px solid var(--lineage-paper-200);padding:8px 12px}.app-header .app-header__menu{background:0 0;border-bottom:0;flex:1;min-width:120px}.app-header .app-header__role{color:#1f1d1999;white-space:nowrap;font-size:13px}.app-header .app-header__logout{color:var(--lineage-text)}.app-content{background:var(--lineage-bg);padding:24px}.login-page{background:var(--lineage-paper-100);grid-template-columns:minmax(0,1fr) minmax(440px,40%);min-height:100svh;display:grid}.login-brand{background:linear-gradient(155deg,#141310 0%,#1f1d19 48%,#2a2620 100%);justify-content:center;align-items:center;padding:60px 48px;display:flex;position:relative;overflow:hidden}.login-brand__decor{border:1px solid #ffffff12;border-radius:50%;position:absolute}.login-brand__decor--top{width:290px;height:290px;top:-90px;right:-70px}.login-brand__decor--bottom{width:210px;height:210px;bottom:-55px;left:-50px}.login-brand__content{z-index:1;text-align:center;max-width:480px;position:relative}.login-brand__seal-container{margin-bottom:30px}.login-brand__seal{background:#b03a2e1f;border:2px solid #b03a2e59;border-radius:6px;justify-content:center;align-items:center;width:80px;height:80px;display:inline-flex;box-shadow:inset 0 0 24px #b03a2e14}.login-brand__seal .anticon{color:var(--lineage-cinnabar);font-size:36px}.login-brand .login-brand__title{color:var(--lineage-paper-100);font-family:var(--lineage-font-display);letter-spacing:.22em;margin:0;font-size:clamp(30px,3vw,40px);font-weight:400}.login-brand__divider{justify-content:center;align-items:center;gap:12px;margin:24px 0;display:flex}.login-brand__divider span{background:#ffffff2e;width:44px;height:1px}.login-brand__divider i{background:#b03a2eb3;border-radius:50%;width:5px;height:5px}.login-brand .login-brand__tagline{color:#ffffff9e;letter-spacing:.14em;font-size:15px;display:block}.login-brand__features{flex-wrap:wrap;justify-content:center;gap:10px;margin-top:40px;display:flex}.login-brand__features span{color:#ffffff8f;background:#ffffff0f;border:1px solid #ffffff1a;border-radius:999px;padding:6px 18px;font-size:13px}.login-panel{justify-content:center;align-items:center;padding:clamp(32px,5vw,72px);display:flex}.login-card{background:var(--lineage-surface);width:min(100%,420px);box-shadow:var(--lineage-shadow);border:1px solid #1f1d1914;border-radius:8px;padding:42px 38px 34px}.login-card__header{text-align:center;margin-bottom:34px}.login-card .login-card__header h3{font-family:var(--lineage-font-display);margin:0 0 4px;font-weight:600}.login-card .ant-input-affix-wrapper{background:#fdfaf2;border-color:#e5dfcf;height:48px}.login-card__submit{margin-top:28px;margin-bottom:0}.login-card__submit .ant-btn{letter-spacing:.28em;height:48px;font-size:15px}.family-tree{background:radial-gradient(circle at 18% 0,#b03a2e0a,#0000 34%),linear-gradient(135deg,#ffffffb8,#f7f1e9b8),#f7f4ec;border:1px solid #1f1d191f;border-radius:10px;min-height:520px;position:relative;overflow:hidden;box-shadow:0 18px 48px #1f1d190d,inset 0 1px #ffffffc7}.family-tree--empty{place-items:center;min-height:480px;display:grid}.family-tree__canvas{outline:none;width:100%;height:clamp(520px,70vh,780px);display:block}.family-tree__canvas .tree-node-name{font-family:var(--lineage-font-display)}.family-tree__canvas [data-focus-state],.family-tree__canvas g[role=button]{transition:opacity .22s,stroke .22s,stroke-width .22s,fill .22s}.family-tree__controls{z-index:2;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fffdf9d1;border:1px solid #1f1d191a;border-radius:8px;padding:4px;position:absolute;top:16px;right:16px;box-shadow:0 8px 24px #1f1d190f}.family-tree__controls .ant-btn{box-shadow:none;color:#4a453c;background:0 0;border-color:#0000}.family-tree__controls .ant-btn:hover,.family-tree__controls .ant-btn:focus-visible{color:var(--lineage-ink-700);background:#1f1d190f}.family-tree__controls .ant-btn:active{background:#1f1d191f}.family-tree__hint{z-index:2;color:#6f6a5f;letter-spacing:.02em;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:none;background:#fffdf9c2;border:1px solid #1f1d1914;border-radius:999px;padding:6px 10px;font-size:11px;position:absolute;bottom:16px;left:18px}.family-tree [role=button]:focus-visible rect[data-node-card]{stroke:var(--lineage-tree-accent);stroke-width:2.5px}.tree-page__alert{margin-bottom:16px}.tree-summary{border-color:var(--lineage-paper-200);margin-bottom:16px;box-shadow:0 5px 18px #1f1d190a}.tree-summary__content,.tree-summary__stats,.tree-toolbar,.person-drawer__section-title{align-items:center;display:flex}.tree-summary__content,.tree-toolbar{justify-content:space-between;gap:16px}.tree-summary__stats{flex-wrap:wrap;gap:32px}.tree-summary__ratio>span{font-size:12px}.tree-summary__ratio>div{margin-top:3px;font-size:15px;font-weight:600}.tree-summary__male{color:var(--lineage-gender-male)}.tree-summary__female{color:var(--lineage-gender-female)}.tree-toolbar{margin-bottom:16px}.tree-toolbar__filters{flex-wrap:wrap;gap:8px;display:flex}.tree-toolbar__search{width:190px}.tree-toolbar__generation{width:130px}.tree-toolbar__descendant{width:230px}.tree-page__error-empty{background:#fbf8f1;border:1px solid #e5dfcf;border-radius:12px;place-items:center;min-height:480px;display:grid}.person-drawer .ant-drawer-header-title{min-width:0}.person-drawer .ant-drawer-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.person-drawer__footer{justify-content:flex-end;display:flex}.person-drawer__content{gap:20px;display:grid}.person-drawer__section{border-top:1px solid var(--lineage-paper-200);gap:12px;padding-top:18px;display:grid}.person-drawer__section-title{gap:6px}.person-drawer__section-title .ant-tag{margin:0}.person-card.ant-card{background:var(--lineage-paper-50);border-color:var(--lineage-ink-700)}.person-card__gender{font-size:20px}.person-card__gender--male{color:var(--lineage-gender-male)}.person-card__gender--female{color:var(--lineage-gender-female)}.person-card__name{color:var(--lineage-text);font-family:var(--lineage-font-display);font-size:18px;font-weight:700}.person-card__relations{margin-top:12px}.person-card__relations .ant-tag{margin-bottom:4px}.page-loading{place-items:center;min-height:calc(100vh - 120px);display:grid}.person-detail{width:min(100%,1080px);margin:0 auto}.person-detail__topbar{margin-bottom:16px}.person-detail__hero{background:var(--lineage-paper-50);border-color:#ddd6c6;margin-bottom:20px;box-shadow:0 5px 18px #1f1d190a}.person-detail__gender{font-size:22px}.person-detail__gender--male{color:var(--lineage-gender-male)}.person-detail__gender--female{color:var(--lineage-gender-female)}.person-detail__name{color:var(--lineage-text);font-family:var(--lineage-font-display);font-size:20px;font-weight:650}.person-detail__descriptions .ant-descriptions-item-content{word-break:keep-all}.person-detail__layout{grid-template-columns:300px minmax(0,1fr);align-items:start;gap:20px;display:grid}.person-detail__aside{position:sticky;top:76px}.person-detail__aside .ant-typography{color:#6f6a5f;margin:0;line-height:1.85}.person-detail__aside .is-placeholder{color:var(--lineage-text-placeholder)}.person-detail__main{gap:20px;min-width:0;display:grid}.relationship-list{gap:8px;display:grid}.family-overview{gap:10px;display:grid}.family-overview__group{gap:6px;display:grid}.family-overview__title{font-size:12px}.family-overview__tag{cursor:pointer;transition:border-color .2s,color .2s}.family-overview__tag:hover,.family-overview__tag:focus-visible{border-color:var(--lineage-cinnabar);color:var(--lineage-cinnabar)}.empty-state{text-align:center;justify-items:center;gap:10px;padding:18px 0 8px;display:grid}.empty-state__art{opacity:.9}.empty-state__desc{font-size:13px}.empty-state__action{margin-top:2px}.relationship-list__item{border:1px solid var(--lineage-paper-200);background:#fbf8f1;border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}.relationship-list__item .ant-tag{margin:0}.person-form__grid{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:18px;display:grid}.person-form .ant-input-number,.person-form .ant-picker{width:100%}.fuzzy-date .ant-input-number{width:40%}.fuzzy-date .ant-select{width:30%}.fuzzy-date .ant-input-number input{text-align:center}.admin-page{border:1px solid var(--lineage-paper-200);background:var(--lineage-surface);border-radius:12px;padding:24px;box-shadow:0 5px 18px #1f1d190a}.admin-page .admin-page__title{color:var(--lineage-text);font-family:var(--lineage-font-display);margin:0 0 12px;font-size:24px}.gen-alias-empty{color:var(--lineage-text-placeholder);padding:20px}.alias-unset{color:var(--lineage-text-placeholder)}.admin-toolbar{margin-bottom:16px}.alias-edit{width:260px}.admin-page__alert,.event-timeline__toolbar{margin-bottom:16px}.event-timeline__filter{width:100px}.event-timeline__desc{margin:4px 0 0}.event-timeline__place{font-size:12px}.event-timeline__actions{flex-shrink:0}.event-timeline__card{border:1px solid var(--lineage-paper-200);background:var(--lineage-surface);border-radius:8px;padding:10px 14px;position:relative}.event-timeline__heading,.event-timeline__footer{justify-content:space-between;align-items:center;gap:8px;display:flex}.event-timeline__footer{margin-top:5px}.event-timeline--compact .ant-timeline-item:last-child{padding-bottom:0}@media (width<=900px){.login-page{grid-template-columns:1fr}.login-brand{min-height:290px;padding:40px 24px}.login-brand__seal-container{margin-bottom:18px}.login-brand__seal{width:64px;height:64px}.login-brand__divider{margin:16px 0}.login-brand__features{margin-top:24px}.login-panel{padding:28px 18px 40px}}@media (width<=720px){.app-header{padding:0 10px}.app-header__left{gap:6px}.app-header__title-full,.app-header__role,.app-header__logout-label{display:none}.app-header__title-short{display:inline}.app-header__family-select{width:112px}.app-header__menu{min-width:52px}.app-header__menu .ant-menu-item{padding-inline:12px}.app-header__menu .ant-menu-title-content{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.app-header__account{gap:0}.app-header__logout{width:38px;padding-inline:8px}.app-content{padding:12px}.login-brand{min-height:250px;padding-block:30px}.login-brand .login-brand__title{letter-spacing:.14em;font-size:28px}.login-brand__tagline{font-size:13px}.login-brand__features{gap:6px;margin-top:18px}.login-brand__features span{padding:4px 10px;font-size:12px}.login-card{padding:32px 24px 26px}.family-tree{overflow:auto}.family-tree__canvas{width:1100px;height:560px}.family-tree__controls{width:max-content;margin:10px 0 -42px 10px;position:sticky;top:10px;left:10px}.family-tree__hint{display:none}.event-timeline__heading,.event-timeline__footer{flex-wrap:wrap;align-items:flex-start}.tree-summary__content,.tree-toolbar{flex-direction:column;align-items:stretch}.tree-summary__stats{justify-content:space-between;gap:12px}.tree-summary__content>.ant-btn{align-self:flex-start}.tree-toolbar__filters{grid-template-columns:minmax(0,1fr) minmax(120px,.7fr);gap:8px;width:100%;display:grid}.tree-toolbar__descendant{grid-column:1/-1}.tree-toolbar__search,.tree-toolbar__generation,.tree-toolbar__descendant{width:100%}.person-drawer__footer{justify-content:flex-start}.person-detail__layout{grid-template-columns:1fr}.person-detail__aside{position:static}.admin-page{padding:16px 12px}}@media (width<=560px){.person-form__grid{grid-template-columns:1fr}.person-detail__hero .ant-card-head{padding-block:14px}.person-detail__hero .ant-card-head-wrapper{flex-direction:column;align-items:flex-start;gap:10px}.person-detail__hero .ant-card-extra{width:100%;margin-inline-start:0}.person-detail__actions{width:100%}.person-detail__main .ant-card-head{padding-block:12px}.person-detail__main .ant-card-head-wrapper{flex-direction:column;align-items:flex-start;gap:8px}.person-detail__main .ant-card-extra{margin-inline-start:0}.relationship-list__item{align-items:flex-start}}.ant-message .ant-message-notice-content{color:var(--lineage-paper-50);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#1f1d19eb;border:1px solid #ffffff14;padding:9px 16px;box-shadow:0 10px 28px #1f1d193d}.ant-message .ant-message-notice-content .anticon-check-circle{color:#7fae8f}.ant-message .ant-message-notice-content .anticon-close-circle{color:#e07a6a}.ant-message .ant-message-notice-content .anticon-info-circle{color:#b8c4d6}.ant-message .ant-message-notice-content .anticon-exclamation-circle{color:#d9b36a}.admin-page .ant-table-thead>tr>th{border-bottom-color:var(--lineage-paper-200);color:#6f6a5f;background:#f4f0e6;font-weight:600}.admin-page .ant-table-tbody>tr>td{border-bottom-color:#efe9db}.admin-page .ant-table-tbody>tr:hover>td{background:#fbf8f1}::selection{background:var(--lineage-cinnabar);color:var(--lineage-paper-50)}.ant-btn{letter-spacing:.06em}.family-tree__canvas g[role=button]:hover rect[data-node-card]{stroke:var(--lineage-cinnabar);stroke-width:1.6px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{border:2px solid var(--lineage-bg);background:#c8c2b4;border-radius:5px}::-webkit-scrollbar-track{background:0 0}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.family-tree__spouse-popover{z-index:5;border:1px solid var(--lineage-paper-200);background:var(--lineage-surface);border-radius:10px;min-width:320px;max-width:420px;padding:6px;position:absolute;box-shadow:0 12px 32px #1f1d1929}.family-tree__spouse-popover-head{border-bottom:1px solid var(--lineage-paper-200);color:var(--lineage-text);margin-bottom:4px;padding:6px 10px 8px;font-size:12px;font-weight:700}.family-tree__spouse-popover-arrow{background:var(--lineage-surface);border-bottom:1px solid var(--lineage-paper-200);border-left:1px solid var(--lineage-paper-200);width:12px;height:12px;position:absolute;top:14px;left:-7px;transform:rotate(45deg)}.family-tree__spouse-popover--flipped .family-tree__spouse-popover-arrow{left:auto;right:-7px;transform:rotate(225deg)}.family-tree__spouse-popover-row{width:100%;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:7px 10px;display:flex}.family-tree__spouse-popover-row:hover{background:var(--lineage-paper-100)}.family-tree__spouse-popover-row .no{color:var(--lineage-cinnabar);white-space:nowrap;font-size:12px}.family-tree__spouse-popover-row .name{color:var(--lineage-text);font-size:13px;font-weight:600}.family-tree__spouse-popover-row .period{color:var(--lineage-text-secondary);white-space:nowrap;font-size:12px}.family-tree__spouse-popover-row .status{white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px}.family-tree__spouse-popover-row .status.on{color:#2f5d3f;background:#e6f0e9}.family-tree__spouse-popover-row .status.off{color:#8a5a3a;background:#f3e8e0}.family-tree__spouse-popover-row .kids{color:var(--lineage-text-secondary);flex-basis:100%;font-size:11px}
