:root{--ink:#0f172a;--ink-muted:#64748b;--ink-faint:#94a3b8;--surface:#fff;--surface-muted:#f8fafc;--surface-sunken:#f1f5f9;--border:#0f172a14;--border-strong:#0f172a1f;--accent:#0ea5e9;--accent-strong:#0284c7;--accent-glow:#0ea5e938;--accent-violet:#6366f1;--accent-violet-soft:#6366f124;--header-ink:#f8fafc;--success:#10b981;--success-soft:#10b98124;--warning:#d97706;--warning-soft:#f59e0b24;--radius-sm:10px;--radius-md:14px;--radius-lg:18px;--radius-pill:9999px;--shadow-xs:0 1px 2px #0f172a0d;--shadow-sm:0 2px 10px #0f172a0f;--shadow-md:0 8px 30px #0f172a14;--shadow-lg:0 20px 50px #0f172a1f;--ease-out:cubic-bezier(.22, 1, .36, 1);--touch-form-font-size:16px}html{-webkit-text-size-adjust:100%}.app{flex-direction:column;width:100%;height:100%;font-family:inherit;display:flex;overflow:hidden}.header{color:var(--header-ink);z-index:100;box-shadow:var(--shadow-sm);background:linear-gradient(125deg,#0f172a 0%,#1e293b 48%,#172554 100%);border-bottom:1px solid #ffffff0f;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:14px;padding:10px 20px;display:flex;position:sticky;top:0}.header-left{flex-direction:row;align-items:center;gap:10px;min-width:0;display:flex}.app-logo{object-fit:contain;border-radius:50%;flex-shrink:0;width:40px;height:40px;box-shadow:0 1px 4px #00000040}.app-title{letter-spacing:-.02em;white-space:nowrap;color:#f1f5f9;margin:0;font-size:1.125rem;font-weight:600}.header-trailing{flex-shrink:0;align-items:center;gap:12px;min-width:0;margin-left:auto;display:flex}.header-search-wrap{width:min(400px,42vw);min-width:160px;max-width:400px}.header-right{flex-shrink:0;align-items:center;gap:8px;display:flex}.header-mobile-actions{flex-shrink:0;align-items:center;gap:6px;display:none;position:relative}.btn-header-icon{color:var(--header-ink);border-radius:var(--radius-sm);width:42px;height:42px;transition:background .2s var(--ease-out), transform .15s var(--ease-out);background:0 0;border:none;justify-content:center;align-items:center;padding:0;font-family:inherit;font-size:13px;font-weight:500;display:inline-flex}.btn-header-icon:hover{background:#ffffff24}.mobile-header-menu{-webkit-backdrop-filter:blur(16px);border-radius:var(--radius-md);min-width:188px;box-shadow:var(--shadow-lg);z-index:250;background:#1e293bf5;border:1px solid #ffffff1a;padding:6px;position:absolute;top:calc(100% + 8px);right:0}.mobile-header-menu-item{text-align:left;color:#f1f5f9;border-radius:var(--radius-sm);cursor:pointer;width:100%;transition:background .15s var(--ease-out);background:0 0;border:none;padding:12px 14px;font-family:inherit;font-size:14px;display:block}.mobile-header-menu-item:hover{background:#ffffff1a}.mobile-header-menu-item+.mobile-header-menu-item{margin-top:2px}.mobile-header-menu-item.is-self-summary{text-overflow:ellipsis;white-space:nowrap;max-width:min(280px,85vw);font-size:15px;font-weight:600;overflow:hidden}button{cursor:pointer;font-family:inherit}.btn-chronicle{color:#fef3c7;border-radius:var(--radius-sm);white-space:nowrap;cursor:pointer;transition:background .2s var(--ease-out), border-color .2s, box-shadow .2s;background:#fbbf2424;border:1px solid #fbbf2459;padding:7px 14px;font-family:inherit;font-size:13px;font-weight:600}.btn-chronicle:hover{background:#fbbf243d;border-color:#fcd34d8c;box-shadow:0 0 0 3px #fbbf241f}.btn-self-settings{color:#f8fafc;border-radius:var(--radius-sm);white-space:nowrap;text-overflow:ellipsis;max-width:180px;transition:background .2s var(--ease-out), border-color .2s, box-shadow .2s;background:#ffffff1f;border:1px solid #fff3;align-items:center;gap:8px;padding:7px 14px;font-size:13px;font-weight:600;display:inline-flex;overflow:hidden}.btn-self-settings-icon{opacity:.95;flex:none;justify-content:center;align-items:center;display:inline-flex}.btn-self-settings-label{text-overflow:ellipsis;overflow:hidden}.btn-self-settings.has-self{text-align:left}.btn-self-settings:hover{background:#fff3;border-color:#38bdf873;box-shadow:0 0 0 3px #38bdf81f}.btn-back-tree{color:#f8fafc;border-radius:var(--radius-sm);white-space:nowrap;transition:background .2s var(--ease-out);background:#ffffff1a;border:1px solid #ffffff2e;padding:7px 14px;font-size:13px;font-weight:500;display:none}.btn-back-tree:hover{background:#ffffff2e}.tree-control-btn{-webkit-backdrop-filter:blur(12px);color:var(--ink);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);transition:background .2s var(--ease-out), box-shadow .2s, border-color .2s, transform .15s var(--ease-out);background:#ffffffeb;min-width:88px;padding:9px 16px;font-size:13px;font-weight:500}.tree-control-btn:hover{background:var(--surface);border-color:var(--border-strong);box-shadow:var(--shadow-float);transform:translateY(-1px)}.tree-control-btn:disabled{opacity:.4;cursor:not-allowed;box-shadow:none;transform:none}.tree-control-btn:disabled:hover{box-shadow:none;background:#ffffffeb;transform:none}.tree-control-btn-primary{background:var(--accent-strong);color:#fff;border-color:#0000}.tree-control-btn-primary:hover{background:var(--accent);border-color:#0000}.tree-control-btn-spouses-on{color:#5b21b6;background:linear-gradient(135deg,#ede9fe 0%,#fae8ff 100%);border-color:#8b5cf659}.tree-control-btn-spouses-on:hover{background:linear-gradient(135deg,#ddd6fe 0%,#f5d0fe 100%);border-color:#8b5cf680}.tree-fab-group{right:calc(16px + env(safe-area-inset-right,0px));bottom:calc(28px + env(safe-area-inset-bottom,0px));border:1px solid var(--border);-webkit-backdrop-filter:blur(12px);box-shadow:var(--shadow-sm);background:#fffffff0;border-radius:14px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.tree-fab-btn{border:0;border-top:1px solid var(--border);width:44px;height:44px;color:var(--ink-muted);cursor:pointer;transition:background .15s var(--ease-out), color .15s var(--ease-out);background:0 0;justify-content:center;align-items:center;padding:0;display:flex}.tree-fab-btn:first-child{border-top:0}.tree-fab-btn:hover:not(:disabled){color:var(--accent-strong);background:#0ea5e914}.tree-fab-btn.is-on{color:var(--accent-strong);background:#0ea5e91a}.tree-fab-btn:disabled{opacity:.45;cursor:not-allowed}.tooltip-anchor{display:inline-flex}.tooltip{z-index:3000;pointer-events:none;transform-origin:50%;opacity:0;position:fixed}.tooltip--left{animation:tooltip-in-left 80ms var(--ease-out) forwards;transform:translate(calc(-100% - 10px),-50%)scale(.98)}.tooltip--right{animation:tooltip-in-right 80ms var(--ease-out) forwards;transform:translate(10px,-50%)scale(.98)}.tooltip--top{animation:tooltip-in-top 80ms var(--ease-out) forwards;transform:translate(-50%,calc(-100% - 10px))scale(.98)}.tooltip--bottom{animation:tooltip-in-bottom 80ms var(--ease-out) forwards;transform:translate(-50%,10px)scale(.98)}.tooltip-inner{color:#fff;white-space:nowrap;text-overflow:ellipsis;background:#0f172aeb;border-radius:10px;max-width:min(70vw,320px);padding:6px 10px;font-size:12px;line-height:1.2;overflow:hidden;box-shadow:0 8px 24px #0f172a2e}@keyframes tooltip-in-left{to{opacity:1;transform:translate(calc(-100% - 10px),-50%)scale(1)}}@keyframes tooltip-in-right{to{opacity:1;transform:translate(10px,-50%)scale(1)}}@keyframes tooltip-in-top{to{opacity:1;transform:translate(-50%,calc(-100% - 10px))scale(1)}}@keyframes tooltip-in-bottom{to{opacity:1;transform:translate(-50%,10px)scale(1)}}.tree-node-person.tree-node--male{fill:#eff6ff;stroke:#3b82f6;stroke-width:1.25px}.tree-node-person.tree-node--female{fill:#fdf2f8;stroke:#e11d48;stroke-width:1.25px}.tree-node-person.tree-node--neutral{fill:#fff;stroke:#cbd5e1;stroke-width:1.25px}.tree-node-person.is-self{fill:#ecfdf5;stroke:#10b981;stroke-width:2px}.tree-node-person.is-selected{stroke:#0ea5e9;stroke-width:2.75px;filter:drop-shadow(0 4px 12px #0ea5e959)}.tree-node-spouse{fill:#faf5ff;stroke:#a855f7;stroke-width:2px;stroke-dasharray:6 4}.tree-node-spouse.is-selected-spouse{stroke:#0ea5e9;stroke-width:2.75px;stroke-dasharray:none;filter:drop-shadow(0 4px 12px #0ea5e959)}.tree-link-parent-child,.tree-link-marriage{pointer-events:none}.tree-action-rect--collapse{fill:#fff;stroke:#0ea5e9;stroke-width:1.25px;filter:drop-shadow(0 2px 6px #0f172a1f)}.tree-action-rect--expand{fill:#fff;stroke:#8b5cf6;stroke-width:1.25px;filter:drop-shadow(0 2px 6px #0f172a1f)}.main-content{flex:1;display:flex;overflow:hidden}.tree-container{border-right:1px solid var(--border);background-color:#eef2f6;background-image:radial-gradient(circle at 1px 1px,#0f172a0f 1px,#0000 0);background-size:24px 24px;flex:1;position:relative;overflow:hidden}.detail-drawer-shell{background:var(--surface);border-left:1px solid var(--border);transition:width .28s var(--ease-out), min-width .28s var(--ease-out), max-width .28s var(--ease-out);flex-direction:row;flex-shrink:0;align-items:stretch;display:flex;overflow:hidden;box-shadow:-8px 0 40px #0f172a0f}.detail-drawer-shell.desktop-open{width:360px;min-width:360px;max-width:360px}.detail-drawer-shell.desktop-collapsed{width:44px;min-width:44px;max-width:44px}.detail-drawer-rail{cursor:pointer;width:100%;min-height:0;color:var(--ink-muted);transition:background .2s var(--ease-out);background:linear-gradient(#f8fafc 0%,#f1f5f9 100%);border:none;flex:1;justify-content:center;align-items:center;padding:16px 0;font-family:inherit;font-weight:600;display:flex}.detail-drawer-rail:hover{color:var(--accent-strong);background:linear-gradient(#e0f2fe 0%,#dbeafe 100%)}.detail-drawer-rail-text{writing-mode:vertical-rl;text-orientation:mixed;letter-spacing:.2em;font-size:14px;font-weight:600}.detail-drawer-panel{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden auto}.detail-drawer-panel[hidden]{display:none!important}.detail-drawer-toolbar{border-bottom:1px solid var(--border);background:var(--surface-muted);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:12px 16px;display:flex}.detail-drawer-toolbar-title{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);font-size:12px;font-weight:600}.detail-drawer-close{border-radius:var(--radius-sm);width:36px;height:36px;color:var(--ink-muted);cursor:pointer;transition:background .15s var(--ease-out), color .15s;background:0 0;border:none;justify-content:center;align-items:center;margin:-4px -6px -4px 0;line-height:0;display:flex}.detail-drawer-close:hover{background:var(--surface-sunken);color:var(--ink)}.search-bar{width:100%;position:relative}.search-input{border-radius:var(--radius-pill);color:#f8fafc;width:100%;transition:border-color .2s var(--ease-out), box-shadow .2s, background .2s;background:#ffffff1a;border:1px solid #ffffff2e;outline:none;padding:9px 16px;font-family:inherit;font-size:14px}.search-input::placeholder{color:#f8fafc73}.search-input:focus{background:#ffffff29;border-color:#38bdf88c;box-shadow:0 0 0 3px #38bdf82e}.search-dropdown{-webkit-backdrop-filter:blur(16px);border:1px solid var(--border);border-radius:var(--radius-md);z-index:200;max-height:320px;box-shadow:var(--shadow-lg);background:#fffffffa;list-style:none;position:absolute;top:calc(100% + 8px);left:0;right:0;overflow-y:auto}.search-result-item{cursor:pointer;color:var(--ink);border-bottom:1px solid var(--border);transition:background .15s var(--ease-out);justify-content:space-between;align-items:center;gap:12px;min-height:48px;padding:11px 16px;display:flex}.search-result-item:last-child{border-bottom:none}.search-result-item:hover{background:#0ea5e914}.result-name{letter-spacing:-.01em;font-size:14px;font-weight:600}.result-meta{color:var(--ink-muted);text-align:right;flex-shrink:0;max-width:52%;font-size:12px}.detail-panel{color:var(--ink);flex:1;min-height:0;padding:20px;font-size:14px;line-height:1.65}.detail-empty{min-height:0;color:var(--ink-muted);text-align:center;flex:1;justify-content:center;align-items:center;padding:24px;font-size:14px;display:flex}.detail-header{border-bottom:1px solid var(--border);margin-bottom:20px;padding-bottom:16px}.detail-title-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.detail-name{letter-spacing:-.03em;color:var(--ink);font-size:1.5rem;font-weight:700}.self-badge{color:#fff;border-radius:var(--radius-pill);background:linear-gradient(135deg,#10b981 0%,#059669 100%);padding:4px 10px;font-size:11px;font-weight:600;box-shadow:0 2px 8px #10b98140}.detail-subtitle{color:var(--ink-muted);flex-wrap:wrap;align-items:center;gap:6px 8px;margin-top:6px;font-size:13px;display:flex}.detail-subtitle-sep{color:var(--ink-faint);-webkit-user-select:none;user-select:none;font-weight:400}.detail-panel--spouse .detail-header{border-bottom-color:#a855f740}.spouse-detail-badge{color:#fff;border-radius:var(--radius-pill);background:linear-gradient(135deg,#a855f7 0%,#7c3aed 100%);padding:4px 10px;font-size:11px;font-weight:600;box-shadow:0 2px 8px #7c3aed40}.detail-subtitle--spouse{flex-direction:column;align-items:flex-start;gap:4px}.spouse-partner-line{color:var(--ink-muted);font-size:12px}.btn-view-partner-detail{background:var(--accent-violet-soft);color:#5b21b6;border-radius:var(--radius-sm);cursor:pointer;transition:background .2s var(--ease-out), border-color .2s, transform .15s var(--ease-out);border:1px solid #8b5cf659;margin-top:12px;padding:8px 16px;font-family:inherit;font-size:13px;font-weight:500}.btn-view-partner-detail:hover{background:#8b5cf633;border-color:#8b5cf680;transform:translateY(-1px)}.detail-section--muted{border-bottom:none;margin-bottom:8px;padding-bottom:0}.spouse-kinship-note{color:var(--ink-muted);margin:0;font-size:12px;line-height:1.55}.gender-badge{border-radius:var(--radius-pill);padding:3px 8px;font-size:11px;font-weight:600}.gender-badge.male{color:#2563eb;background:#3b82f61f}.gender-badge.female{color:#e11d48;background:#e11d481a}.btn-set-self{color:var(--ink-faint);cursor:pointer;text-underline-offset:3px;transition:color .15s var(--ease-out), text-decoration-color .15s;background:0 0;border:none;border-radius:0;margin:0;padding:0;font-family:inherit;font-size:12px;font-weight:500;-webkit-text-decoration:underline #94a3b88c;text-decoration:underline #94a3b88c}.btn-set-self:hover{color:var(--accent-strong);text-decoration-color:#0ea5e973}.btn-set-self:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}.detail-section{background:var(--surface-muted);border-radius:var(--radius-md);border:1px solid var(--border);margin-bottom:12px;padding:14px 16px}.detail-section:last-child{margin-bottom:0}.detail-section h3{color:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;font-size:11px;font-weight:600}.birth-death-row{margin-bottom:3px;font-size:13px}.unknown{color:var(--ink-faint);font-style:italic}.spouse-list{list-style:none}.spouse-item{background:var(--surface);border-radius:var(--radius-sm);border:1px solid var(--border);border-left:3px solid #a855f7;margin-bottom:8px;padding:10px 12px;font-size:13px}.spouse-order{color:var(--ink-muted);margin-bottom:2px;font-size:11px;font-weight:600;display:block}.spouse-name{color:var(--ink);font-weight:600}.spouse-origin{color:var(--ink-muted);font-size:12px}.spouse-dates{color:var(--ink-muted);margin-top:2px;font-size:12px;display:block}.spouse-notes{color:var(--ink-muted);margin-top:2px;font-size:12px;font-style:italic;display:block}.notes-text{color:var(--ink-muted);font-size:13px;line-height:1.75}.adopted-notice{color:#b45309;background:var(--warning-soft);border-radius:var(--radius-sm);border:1px solid #f59e0b59;padding:10px 14px;font-size:12px}.kinship-section{border-radius:var(--radius-md);background:linear-gradient(145deg,#0ea5e914 0%,#6366f10f 100%);border:1px solid #0ea5e933;padding:16px}.kinship-section h3{color:var(--accent-strong)!important;margin-bottom:12px!important}.kinship-result{flex-direction:column;gap:6px;display:flex}.kinship-row{flex-wrap:wrap;gap:8px;font-size:13px;display:flex}.kinship-label{color:var(--ink-muted);flex-shrink:0}.kinship-value{color:var(--ink);font-weight:500}.kinship-value.highlight{color:var(--accent-strong);letter-spacing:-.02em;font-size:15px;font-weight:700}.kinship-value.description{color:var(--ink-muted);font-size:12px;font-weight:400}.ancestor-section{background:var(--success-soft);border-radius:var(--radius-md);border:1px solid #10b98140;padding:16px}.ancestor-section h3{color:#047857!important;margin-bottom:12px!important}.ancestor-list{flex-direction:column;gap:4px;list-style:none;display:flex}.ancestor-item{position:relative}.ancestor-item:before{content:"↑";color:var(--ink-faint);margin-right:4px;font-size:12px}.ancestor-link{border-radius:var(--radius-sm);cursor:pointer;color:#047857;transition:background .15s var(--ease-out);text-align:left;background:0 0;border:none;align-items:center;gap:6px;min-height:32px;padding:6px 10px;font-size:13px;display:inline-flex}.ancestor-link:hover{background:#10b98126}.ancestor-gen{color:var(--ink-muted);border-radius:var(--radius-pill);background:#fffc;padding:2px 8px;font-size:11px;font-weight:500}.ancestor-name{font-weight:600}.ancestor-rel{color:#059669;border-radius:var(--radius-pill);background:#ffffffe6;padding:2px 8px;font-size:11px;font-weight:600}.detail-footer{border-top:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;margin-top:20px;padding-top:16px;padding-bottom:40px;display:flex}.detail-id{color:var(--ink-faint);font-size:11px;font-family:var(--font-mono)}.btn-navigate{color:var(--accent-strong);border-radius:var(--radius-sm);transition:background .2s var(--ease-out), transform .15s var(--ease-out);background:#0ea5e91a;border:1px solid #0ea5e959;padding:7px 14px;font-size:12px;font-weight:600}.btn-navigate:hover{background:#0ea5e92e;transform:translateY(-1px)}.modal-overlay{-webkit-backdrop-filter:blur(6px);z-index:1000;background:#0f172a73;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-content{background:var(--surface);border-radius:var(--radius-lg);width:100%;max-width:480px;max-height:80vh;box-shadow:var(--shadow-lg);border:1px solid var(--border);flex-direction:column;display:flex;overflow:hidden}.modal-header{border-bottom:1px solid var(--border);background:var(--surface-muted);justify-content:space-between;align-items:center;padding:18px 22px;display:flex}.modal-header h2{letter-spacing:-.02em;color:var(--ink);font-size:1.05rem;font-weight:700}.modal-header-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.btn-modal-clear{color:#b91c1c;border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap;transition:background .2s var(--ease-out), border-color .2s;background:#ef444414;border:1px solid #ef444440;padding:7px 14px;font-family:inherit;font-size:13px;font-weight:500}.btn-modal-clear:hover:not(:disabled){background:#ef444424;border-color:#ef444466}.btn-modal-clear:disabled{opacity:.45;cursor:not-allowed}.modal-close{color:var(--ink-muted);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;min-width:36px;min-height:36px;padding:6px;line-height:0;transition:background .15s,color .15s;display:inline-flex}.modal-close:hover{background:var(--surface-sunken);color:var(--ink)}.welcome-self-overlay{z-index:999}.welcome-self-content{text-align:center;max-width:440px;padding:24px 22px 22px}.welcome-self-brand{flex-direction:column;align-items:center;gap:12px;margin-bottom:16px;display:flex}.welcome-self-logo{object-fit:contain;width:80px;height:80px;box-shadow:var(--shadow-sm);border-radius:50%}.welcome-self-title{letter-spacing:-.02em;color:var(--ink);margin:0;font-size:1.2rem;font-weight:700;line-height:1.35}.welcome-self-desc{color:var(--ink);text-align:left;margin:0 0 12px;font-size:.92rem;line-height:1.65}.welcome-self-desc strong{color:var(--ink);font-weight:700}.welcome-self-hint{color:var(--ink-muted);text-align:left;margin:0 0 22px;font-size:.85rem;line-height:1.55}.welcome-self-actions{flex-direction:column;gap:10px;display:flex}.btn-welcome-primary{border-radius:var(--radius-md);background:var(--accent-strong);color:#fff;cursor:pointer;box-shadow:none;transition:background .2s var(--ease-out);border:none;padding:12px 20px;font-family:inherit;font-size:15px;font-weight:600}.btn-welcome-primary:hover{background:var(--accent)}.btn-welcome-secondary{border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);color:var(--ink-muted);cursor:pointer;padding:10px 18px;font-family:inherit;font-size:14px;font-weight:500;transition:background .2s,color .2s,border-color .2s}.btn-welcome-secondary:hover{background:var(--surface-sunken);color:var(--ink)}@media (width>=480px){.welcome-self-actions{flex-flow:wrap;justify-content:center}.btn-welcome-primary,.btn-welcome-secondary{min-width:140px}}.modal-search{border-bottom:1px solid var(--border);padding:14px 22px}.modal-filter-input{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-muted);outline:none;width:100%;padding:10px 14px;font-family:inherit;font-size:14px;transition:border-color .2s,box-shadow .2s}.modal-filter-input:focus{box-shadow:0 0 0 3px var(--accent-glow);background:var(--surface);border-color:#0ea5e980}.modal-person-list{flex:1;list-style:none;overflow-y:auto}.modal-person-item{cursor:pointer;border-bottom:1px solid var(--border);transition:background .15s var(--ease-out);justify-content:space-between;align-items:center;min-height:48px;padding:12px 22px;display:flex}.modal-person-item:hover{background:#0ea5e90f}.modal-person-item.is-self{background:var(--success-soft)}.modal-person-info{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.modal-person-name{color:var(--ink);letter-spacing:-.01em;font-size:14px;font-weight:600}.modal-person-gen{color:var(--ink-muted);background:var(--surface-sunken);border-radius:var(--radius-pill);padding:2px 8px;font-size:12px;font-weight:500}.modal-person-id{color:var(--ink-faint);font-size:11px;font-family:var(--font-mono)}.modal-checkmark{color:var(--success);font-size:18px;font-weight:700}.modal-no-results{text-align:center;color:var(--ink-muted);padding:28px;font-size:14px}@media (width<=768px){.search-input,.modal-filter-input{font-size:var(--touch-form-font-size)}.tree-fab-group{bottom:calc(28px + env(safe-area-inset-bottom,0px))}.app input:not([type=button]):not([type=submit]):not([type=reset]):not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=image]):not([type=file]):not([type=hidden]),.app select,.app textarea{font-size:var(--touch-form-font-size)}.header{flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px}.header-mobile-actions{display:flex}.header-trailing{flex-direction:column;flex:1 0 100%;order:4;align-items:stretch;gap:8px;width:100%;max-width:100%;margin-left:0;display:none}.header--mobile-search-open .header-trailing{display:flex}.header-search-wrap{width:100%;max-width:100%;min-width:unset}.header-left{flex:1;min-width:0}.header-right{display:none}.app-logo{width:34px;height:34px}.app-title{font-size:16px}.btn-back-tree{display:none}.main-content{flex-direction:column;position:relative}.tree-container{border-right:none;flex:1;height:100%;transition:opacity .3s}.tree-container.mobile-hidden{display:none}.detail-drawer-shell{z-index:10;background:#fff;border-left:none;flex-shrink:0;width:100%;height:100%;transition:none;display:none;position:absolute;inset:0}.detail-drawer-shell.mobile-visible{flex-direction:column;display:flex}.detail-drawer-mobile-close{top:calc(10px + env(safe-area-inset-top,0px));right:calc(10px + env(safe-area-inset-right,0px));border-radius:var(--radius-sm);width:40px;height:40px;color:var(--ink-muted);z-index:20;background:#ffffffeb;border:none;justify-content:center;align-items:center;display:flex;position:absolute}.detail-drawer-mobile-close:hover{background:var(--surface);color:var(--ink)}.detail-drawer-shell.desktop-open,.detail-drawer-shell.desktop-collapsed{width:100%!important;min-width:unset!important;max-width:unset!important}.detail-drawer-rail{display:none!important}.detail-drawer-panel{flex-direction:column;flex:1;min-height:0;overflow-y:auto;display:flex!important}.detail-drawer-panel[hidden]{display:flex!important}.detail-drawer-toolbar{display:none!important}}@media (width>=769px){.btn-back-tree{display:none!important}.tree-container.mobile-hidden{display:block!important}.detail-drawer-shell{display:flex!important;position:static!important}.detail-drawer-shell.mobile-visible{display:flex!important}}.chronicle-backdrop{z-index:1100;-webkit-backdrop-filter:blur(8px);padding:max(12px, env(safe-area-inset-top)) max(12px, env(safe-area-inset-right)) max(12px, env(safe-area-inset-bottom)) max(12px, env(safe-area-inset-left));background:#0f172a80;justify-content:center;align-items:stretch;display:flex;position:fixed;inset:0}.chronicle-modal{background:var(--surface);border-radius:var(--radius-lg);width:100%;max-width:920px;max-height:100%;box-shadow:var(--shadow-lg);border:1px solid var(--border);flex-direction:column;display:flex;overflow:hidden}.chronicle-modal-header{border-bottom:1px solid var(--border);background:linear-gradient(180deg, #fffbeb 0%, var(--surface) 100%);flex-shrink:0;justify-content:space-between;align-items:flex-start;gap:16px;padding:16px 18px 14px;display:flex}.chronicle-modal-titles{min-width:0}.chronicle-doc-title{letter-spacing:-.02em;color:var(--ink);margin:0;font-size:1.2rem;font-weight:700;line-height:1.35}.chronicle-doc-subtitle{color:var(--ink-muted);margin:6px 0 0;font-size:.95rem;font-weight:500}.chronicle-doc-dateline{color:var(--ink-faint);margin:4px 0 0;font-size:.8rem}.chronicle-close{border-radius:var(--radius-sm);width:40px;height:40px;color:var(--ink-muted);cursor:pointer;transition:background .2s var(--ease-out), color .2s;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;display:inline-flex}.chronicle-close:hover{color:var(--ink);background:#0f172a0f}.chronicle-close:focus-visible{outline:none;box-shadow:0 0 0 3px #0ea5e92e}.chronicle-modal-body{flex:1;grid-template-columns:minmax(140px,200px) 1fr;gap:0;min-height:0;display:grid}.chronicle-toc{border-right:1px solid var(--border);background:var(--surface-muted);max-height:100%;padding:14px 12px 14px 16px;overflow-y:auto}.chronicle-toc-label{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);margin:0 0 8px;font-size:11px;font-weight:700}.chronicle-toc ul{margin:0;padding:0;list-style:none}.chronicle-toc li{margin-bottom:6px}.chronicle-toc a{color:var(--accent-strong);border-radius:4px;padding:4px 0;font-size:12px;line-height:1.35;text-decoration:none;display:block}.chronicle-toc a:hover{text-decoration:underline}.chronicle-toc-details{border-bottom:1px solid var(--border);background:var(--surface-muted);flex-shrink:0}.chronicle-toc-summary{cursor:pointer;min-height:48px;color:var(--ink);-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:10px;padding:12px 16px;font-family:inherit;font-size:14px;font-weight:600;list-style:none;display:flex}.chronicle-toc-summary::-webkit-details-marker{display:none}.chronicle-toc-summary-text{flex:1;min-width:0}.chronicle-toc-chevron{color:var(--ink-muted);transition:transform .2s var(--ease-out);flex-shrink:0}.chronicle-toc-details[open] .chronicle-toc-chevron{transform:rotate(180deg)}.chronicle-toc--dropdown{border-right:none;max-height:none;padding:4px 12px 12px 16px;overflow:visible}.chronicle-toc-details[open] .chronicle-toc--dropdown{-webkit-overflow-scrolling:touch;max-height:min(38vh,240px);overflow-y:auto}.chronicle-scroll{min-height:0;padding:18px 20px 28px;overflow-y:auto}.chronicle-section{margin-bottom:28px;scroll-margin-top:12px}.chronicle-section:last-child{margin-bottom:0}.chronicle-section-title{color:var(--ink);border-bottom:2px solid #fbbf2473;margin:0 0 14px;padding-bottom:8px;font-size:1.05rem;font-weight:700}.chronicle-subheading{color:#92400e;margin:20px 0 10px;font-size:.95rem;font-weight:700}.chronicle-paragraph{color:var(--ink);text-align:justify;text-justify:inter-ideograph;margin:0 0 14px;font-size:.92rem;line-height:1.75}.chronicle-paragraph-tight{white-space:pre-wrap}.chronicle-figure{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-muted);margin:12px 0 18px;padding:10px}.chronicle-figure-link{border-radius:calc(var(--radius-md) - 2px);background:#fff;border:1px solid #0f172a14;display:block;overflow:hidden}.chronicle-image{object-fit:contain;width:100%;height:auto;max-height:56vh;display:block}.chronicle-figcaption{color:var(--ink-muted);margin-top:10px;font-size:.85rem;line-height:1.55}.chronicle-map-embed{border-radius:var(--radius-md);border:1px solid var(--border);background:var(--surface-muted);aspect-ratio:4/3;margin-top:12px;overflow:hidden}.chronicle-map-embed iframe{border:0;width:100%;height:100%;display:block}.chronicle-dl{margin:12px 0 0}.chronicle-dl-row{grid-template-columns:7rem 1fr;gap:8px 12px;margin-bottom:8px;font-size:.88rem;line-height:1.5;display:grid}.chronicle-dl-row dt{color:var(--ink-muted);margin:0;font-weight:600}.chronicle-dl-row dd{color:var(--ink);margin:0}.chronicle-dl-credits .chronicle-dl-row{grid-template-columns:6.5rem 1fr}.chronicle-appendix-sub{margin-bottom:22px}.chronicle-appendix-subtitle{color:#78350f;margin:0 0 10px;font-size:.9rem;font-weight:700}.chronicle-poem{letter-spacing:.12em;background:var(--surface-sunken);border-radius:var(--radius-sm);border:1px solid var(--border);padding:12px 16px;font-family:Songti SC,STSong,SimSun,serif;font-size:1.05rem;line-height:1.85}.chronicle-poem-line{text-align:center}.chronicle-lines{color:var(--ink);margin:0;padding-left:1.1rem;font-size:.88rem;line-height:1.65}.chronicle-lines li{margin-bottom:4px}.chronicle-section-colophon .chronicle-section-title{font-size:.95rem}.chronicle-colophon-text{color:var(--ink);text-align:left;white-space:pre-line;margin:0 0 12px;font-size:.92rem;line-height:1.65}.chronicle-compiled-date{color:var(--ink-muted);margin:12px 0 0;font-size:.85rem}@media (width<=640px){.chronicle-modal-body{grid-template-columns:unset;flex-direction:column;display:flex}.chronicle-scroll{flex:1;min-height:0}.chronicle-dl-row{grid-template-columns:1fr;gap:2px}.chronicle-dl-credits .chronicle-dl-row{grid-template-columns:1fr}}:root{--font-sans:"Outfit", "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, "SFMono-Regular", "Menlo", monospace}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;height:100%;overflow:hidden}body{font-family:var(--font-sans);color:#0f172a;background-color:#eef1f6;background-image:radial-gradient(120% 80% at 50% -20%,#0ea5e917,#0000),radial-gradient(80% 50% at 100%,#6366f10d,#0000);height:100%;line-height:1.5;overflow:hidden}#root{flex-direction:column;width:100%;height:100dvh;display:flex}
