.react-flow{direction:ltr}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__connection-path,.react-flow__edge-path{stroke:#b1b1b7;stroke-width:1;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:-webkit-grab;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background:#1a192b;border:1px solid #fff;border-radius:100%}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translateX(-50%)}.react-flow__attribution{font-size:10px;background:hsla(0,0%,100%,.5);padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-group,.react-flow__node-input,.react-flow__node-output{padding:10px;border-radius:3px;width:150px;font-size:12px;color:#222;text-align:center;border:1px solid #1a192b;background-color:#fff}.react-flow__node-default.selectable:hover,.react-flow__node-group.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover{box-shadow:0 1px 4px 1px rgba(0,0,0,.08)}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:hsla(0,0%,94%,.25)}.react-flow__nodesselection-rect,.react-flow__selection{background:rgba(0,89,220,.08);border:1px dotted rgba(0,89,220,.8)}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px rgba(0,0,0,.08)}.react-flow__controls-button{background:#fefefe;border:none;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:5px}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__minimap svg{display:block}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.bottom,.react-flow__resize-control.top{cursor:ns-resize}.react-flow__resize-control.bottom.right,.react-flow__resize-control.top.left{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:#3367d9;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.bottom.left,.react-flow__resize-control.handle.top.left{left:0}.react-flow__resize-control.handle.bottom.right,.react-flow__resize-control.handle.top.right{left:100%}.react-flow__resize-control.line{border:0 solid #3367d9}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.bottom,.react-flow__resize-control.line.top{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}:root{--bg:#f9f6f0;--fg:#2f2a24;--muted:#7a7267;--card:#fffdf9;--card-sunken:#f3eee5;--line:#e7dfd2;--line-strong:#d8cdbc;--primary:#5d4432;--primary-fg:#fdf9f2;--accent:#b08947;--accent-fg:#fffdf9;--danger:#a13a3a;--danger-bg:#f9e9e6;--success:#4a6b46;--success-bg:#ecf2e9;--warning:#95643c;--warning-bg:#f8efe3;--k-spouse-bg:#f1e8f7;--k-spouse-fg:#6d3f9e;--k-spouse-bd:#c9a8e8;--k-parent-bg:#e3f0f9;--k-parent-fg:#1f6c9f;--k-parent-bd:#a8cfe8;--k-child-bg:#eaf2e6;--k-child-fg:#3f6f38;--k-child-bd:#bcdec0;--k-sibling-bg:#f9efdd;--k-sibling-fg:#95643c;--k-sibling-bd:#ecd3a8;--k-gen-bg:#efece5;--k-gen-fg:#6b6459;--k-gen-bd:#d8d2c6;--k-samegen-bg:#f8e8ef;--k-samegen-fg:#a83d72;--k-samegen-bd:#ecbcd4;--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--shadow-sm:0 1px 3px rgba(62,43,30,.06);--shadow-md:0 4px 14px rgba(62,43,30,.1);--duration-fast:150ms;--duration-base:200ms;--ease-standard:cubic-bezier(0.23,1,0.32,1);--z-sticky:1100;--z-popover:1300;--shell-h:56px;--legend-h:37px;color-scheme:light}html[data-skin=pine]{--bg:#f4f7f2;--fg:#232a24;--muted:#6e7a6e;--card:#fcfefb;--card-sunken:#e9f0e6;--line:#dbe4d8;--line-strong:#c3d1bf;--primary:#34503a;--primary-fg:#f2f8f1;--accent:#466f3b;--accent-fg:#f4faf2;--shadow-sm:0 1px 3px rgba(35,52,37,.06);--shadow-md:0 4px 14px rgba(35,52,37,.1)}html[data-skin=azure]{--bg:#f3f6f9;--fg:#232a33;--muted:#6b7684;--card:#fcfdfe;--card-sunken:#e8eef4;--line:#dae2ea;--line-strong:#c2cfda;--primary:#2f4a63;--primary-fg:#f2f7fb;--accent:#386e94;--accent-fg:#f3f8fb;--shadow-sm:0 1px 3px rgba(30,45,60,.06);--shadow-md:0 4px 14px rgba(30,45,60,.1)}html[data-mode=dark]{--bg:#16120e;--fg:#ece5da;--muted:#a89e90;--card:#1f1913;--card-sunken:#141009;--line:hsla(0,0%,100%,.09);--line-strong:hsla(0,0%,100%,.16);--primary:#c9a67a;--primary-fg:#241a10;--accent:#d4af6e;--accent-fg:#241a10;--danger:#e08a80;--danger-bg:#3a2320;--success:#9dc294;--success-bg:#22301f;--warning:#e0b478;--warning-bg:#362a1a;--k-spouse-bg:#2b2033;--k-spouse-fg:#cfa9ef;--k-spouse-bd:#59406e;--k-parent-bg:#1a2a36;--k-parent-fg:#96c7e8;--k-parent-bd:#2f4d63;--k-child-bg:#1e2b1a;--k-child-fg:#a8d49b;--k-child-bd:#3a5232;--k-sibling-bg:#33271a;--k-sibling-fg:#e0b478;--k-sibling-bd:#5c462a;--k-gen-bg:#241f18;--k-gen-fg:#c5bba9;--k-gen-bd:#3f382e;--k-samegen-bg:#321f2a;--k-samegen-fg:#eba3c6;--k-samegen-bd:#5c3648;--shadow-sm:0 1px 3px rgba(0,0,0,.4);--shadow-md:0 4px 14px rgba(0,0,0,.5);color-scheme:dark}html[data-mode=dark][data-skin=pine]{--bg:#10150f;--fg:#e4ebe1;--muted:#9caa99;--card:#171f16;--card-sunken:#0b0f0a;--primary:#8fbf85;--primary-fg:#12200f;--accent:#a3cf8f;--accent-fg:#14240f}html[data-mode=dark][data-skin=azure]{--bg:#0e1319;--fg:#e2e8ee;--muted:#98a4b0;--card:#151c24;--card-sunken:#090d12;--primary:#8ab2d4;--primary-fg:#0f1a24;--accent:#9cc4de;--accent-fg:#0f1a24}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:-apple-system,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:16px;line-height:1.6}a{color:var(--accent)}button{cursor:pointer;font-family:inherit}:focus-visible{outline:none;box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--ring);border-radius:var(--radius-sm)}.muted{color:var(--muted)}.success-msg{color:var(--success);background:var(--success-bg);margin-bottom:12px}.error,.success-msg{border-radius:var(--radius-sm);padding:6px 10px;font-size:14px}.error{color:var(--danger);background:var(--danger-bg);margin-top:8px}html.theme-anim,html.theme-anim *{transition:background-color var(--duration-base) var(--ease-standard),color var(--duration-base) var(--ease-standard),border-color var(--duration-base) var(--ease-standard)}.skip-link{position:absolute;left:12px;top:-48px;z-index:calc(var(--z-popover) + 1);padding:8px 14px;background:var(--primary);color:var(--primary-fg);border-radius:var(--radius-sm);transition:top var(--duration-fast)}.skip-link:focus-visible{top:12px}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;transition-duration:.01ms!important}}.shell{position:-webkit-sticky;position:sticky;top:0;z-index:var(--z-sticky);height:var(--shell-h);background:var(--card);border-bottom:1px solid var(--line)}.shell-inner{height:100%;display:flex;align-items:center;gap:12px;padding:0 16px}.brand{gap:8px;color:var(--fg);font-size:17px;font-weight:700;letter-spacing:-.01em}.brand,.brand-mark{display:inline-flex;align-items:center}.brand-mark{justify-content:center;width:28px;height:28px;border-radius:var(--radius-sm);background:var(--primary);color:var(--primary-fg)}.brand-mark svg{width:17px;height:17px}.shell-title{font-size:16px;font-weight:600;margin:0;max-width:32vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-div{width:1px;height:20px;background:var(--line-strong);flex:none}.spacer{flex:1 1}.count{font-size:13px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.count,.icon-btn{color:var(--muted)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:var(--radius-sm);background:transparent;transition:background var(--duration-fast),color var(--duration-fast);flex:none}.icon-btn:hover{background:var(--card-sunken);color:var(--fg)}.icon-btn svg{width:18px;height:18px}.tp-anchor{position:relative;flex:none}.tp-panel{position:absolute;top:calc(100% + 8px);right:0;z-index:var(--z-popover);width:232px;padding:14px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-md)}.tp-cap{font-size:12px;font-weight:600;letter-spacing:.08em;color:var(--muted);margin-bottom:6px}.tp-seg{display:flex;background:var(--card-sunken);border-radius:var(--radius-sm);padding:3px;gap:2px;margin-bottom:12px}.tp-seg button{flex:1 1;border:none;background:transparent;color:var(--muted);font-size:13px;padding:5px 0;border-radius:4px}.tp-seg button:hover{color:var(--fg)}.tp-seg button.active{background:var(--card);color:var(--fg);font-weight:600;box-shadow:var(--shadow-sm)}.tp-skins{display:flex;flex-direction:column;gap:4px}.tp-skin{display:flex;align-items:center;gap:10px;width:100%;border:1px solid transparent;background:transparent;color:var(--fg);font-size:14px;padding:7px 8px;border-radius:var(--radius-sm);text-align:left}.tp-skin:hover{background:var(--card-sunken)}.tp-skin.active{border-color:var(--primary)}.tp-dots{display:inline-flex;gap:3px;flex:none}.tp-dots i{width:14px;height:14px;border-radius:50%;border:1px solid var(--line-strong)}.tp-check{margin-left:auto;color:var(--primary);font-size:13px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;border:1px solid transparent;border-radius:var(--radius-sm);background:var(--primary);color:var(--primary-fg);font-size:14px;font-weight:500;text-decoration:none;transition:filter var(--duration-fast),background var(--duration-fast),transform .1s}.btn:hover{filter:brightness(.93)}html[data-mode=dark] .btn:hover{filter:brightness(1.07)}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.5;pointer-events:none}.btn.secondary{background:transparent;color:var(--fg);border-color:var(--line-strong)}.btn.secondary:hover{background:var(--card-sunken);filter:none}.btn.sm{padding:4px 10px;font-size:12px}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}.field label{font-size:13px;color:var(--muted)}.field input,.field select,input,select{padding:8px 10px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);font-size:14px;font-family:inherit;background:var(--card);color:var(--fg)}.field input::placeholder,input::placeholder{color:var(--muted);opacity:.7}.panel{max-width:420px;margin:40px auto;padding:24px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.panel h1{margin-top:0;font-size:22px;letter-spacing:-.01em}.tree-page{display:flex;flex-direction:column;height:100dvh}.tree-content{flex:1 1;min-height:0;display:flex}.tree-wrap{width:100%;height:100%}.legend{display:flex;align-items:center;flex-wrap:wrap;gap:4px 14px;min-height:var(--legend-h);padding:5px 16px;font-size:12px;color:var(--muted);background:var(--card);border-bottom:1px solid var(--line)}.legend .chip{display:inline-flex;align-items:center;gap:6px}.sw{display:inline-block;width:10px;height:10px;border-radius:3px;border:1px solid}.sw.spouse{background:var(--k-spouse-bg);border-color:var(--k-spouse-bd)}.sw.parent{background:var(--k-parent-bg);border-color:var(--k-parent-bd)}.sw.child{background:var(--k-child-bg);border-color:var(--k-child-bd)}.sw.sibling{background:var(--k-sibling-bg);border-color:var(--k-sibling-bd)}.sw.gen{background:var(--k-gen-bg);border-color:var(--k-gen-bd)}.sw.samegen{background:var(--k-samegen-bg);border-color:var(--k-samegen-bd)}.sw.self{background:var(--card);border-color:var(--primary);box-shadow:0 0 0 1.5px var(--primary)}.empty-state{padding:24px;color:var(--muted);font-size:14px}.skel{height:14px;margin-bottom:10px;border-radius:var(--radius-sm);background:linear-gradient(90deg,var(--card-sunken) 25%,var(--card) 50%,var(--card-sunken) 75%);background-size:200% 100%;animation:skel-shimmer 1.6s ease-in-out infinite}@keyframes skel-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.person-node{border:1px solid var(--line-strong);border-radius:var(--radius-md);background:var(--card);padding:6px 10px;font-size:12px;text-align:center;min-width:72px;box-shadow:var(--shadow-sm)}.person-node .name{font-weight:600;color:var(--fg)}.person-node .dates{color:var(--muted);font-size:10px}.person-node .kinship{font-size:10px;line-height:1.2;color:var(--accent)}.person-node.spouse{background:var(--k-spouse-bg);border-color:var(--k-spouse-bd)}.person-node.spouse .kinship{color:var(--k-spouse-fg)}.person-node.parent{background:var(--k-parent-bg);border-color:var(--k-parent-bd)}.person-node.parent .kinship{color:var(--k-parent-fg)}.person-node.child{background:var(--k-child-bg);border-color:var(--k-child-bd)}.person-node.child .kinship{color:var(--k-child-fg)}.person-node.sibling{background:var(--k-sibling-bg);border-color:var(--k-sibling-bd)}.person-node.sibling .kinship{color:var(--k-sibling-fg)}.person-node.ancestor,.person-node.descendant{background:var(--k-gen-bg);border-color:var(--k-gen-bd)}.person-node.ancestor .kinship,.person-node.descendant .kinship{color:var(--k-gen-fg)}.person-node.sameGen{background:var(--k-samegen-bg);border-color:var(--k-samegen-bd)}.person-node.sameGen .kinship{color:var(--k-samegen-fg)}.person-node.selected{border-color:var(--primary);box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--primary)}.person-node.selected .kinship{color:var(--primary);font-weight:600}.react-flow__attribution{background:transparent;color:var(--muted);font-size:9px}.react-flow__controls{border-radius:var(--radius-sm);overflow:hidden;box-shadow:var(--shadow-md)}.react-flow__controls-button{background:var(--card);border-bottom:1px solid var(--line);color:var(--fg);width:28px;height:28px}.react-flow__controls-button:hover{background:var(--card-sunken)}.react-flow__controls-button svg{fill:currentColor}.react-flow__minimap{border-radius:var(--radius-sm);overflow:hidden;box-shadow:var(--shadow-md)}.react-flow__edge-path{stroke:var(--line-strong)}.react-flow__edge.selected .react-flow__edge-path{stroke:var(--accent)}.react-flow__handle{width:7px;height:7px;background:var(--line-strong);border:none}.react-flow__background circle{fill:var(--line-strong)}.pp-input{width:100%;padding:8px 10px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);font-size:14px;font-family:inherit;color:var(--fg)}.pp-input,.pp-menu{background:var(--card)}.pp-menu{position:absolute;z-index:var(--z-popover);top:100%;left:0;right:0;margin:4px 0 0;padding:4px;list-style:none;max-height:240px;overflow-y:auto;border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:var(--shadow-md)}.pp-option{display:block;width:100%;text-align:left;padding:6px 8px;border:none;background:transparent;color:var(--fg);font-size:14px;border-radius:4px}.pp-option.selected,.pp-option:hover{background:var(--card-sunken)}.pp-option.selected{color:var(--primary);font-weight:600}.relatives-panel{width:280px;flex-shrink:0;overflow-y:auto;border-left:1px solid var(--line);background:var(--card);padding:14px;font-size:13px}.rp-title{font-weight:600;margin-bottom:10px;font-size:15px}.rp-group{margin-bottom:12px}.rp-cap{font-size:11px;color:var(--muted);margin-bottom:4px;letter-spacing:.04em}.rp-row{display:flex;align-items:baseline;gap:6px;width:100%;padding:3px 6px;border:none;background:transparent;color:var(--fg);font-size:13px;border-radius:4px;text-align:left}.rp-row.active,.rp-row:hover{background:var(--card-sunken)}.rp-kin{font-size:11px;white-space:nowrap;min-width:64px;color:var(--accent)}.rp-kin.c-spouse{color:var(--k-spouse-fg)}.rp-kin.c-parent{color:var(--k-parent-fg)}.rp-kin.c-child{color:var(--k-child-fg)}.rp-kin.c-sibling{color:var(--k-sibling-fg)}.rp-kin.c-gen{color:var(--k-gen-fg)}.rp-kin.c-samegen{color:var(--k-samegen-fg)}.rp-name{overflow:hidden;text-overflow:ellipsis}.home-main{flex:1 1}.hero{max-width:1200px;margin:0 auto;padding:72px 24px 88px;display:grid;grid-template-columns:1.05fr .95fr;grid-gap:56px;gap:56px}.eyebrow,.hero{align-items:center}.eyebrow{display:inline-flex;gap:8px;margin:0 0 20px;font-size:13px;font-weight:600;letter-spacing:.12em;color:var(--accent)}.eyebrow:before{content:"";width:20px;height:1px;background:var(--accent)}.display{margin:0 0 20px;font-family:Georgia,Times New Roman,Songti SC,SimSun,serif;font-size:42px;line-height:1.3;font-weight:700;letter-spacing:-.01em;text-wrap:balance}.lede{margin:0 0 32px;max-width:34em;font-size:16px;line-height:1.85;color:var(--muted)}.cta-row{display:flex;align-items:center;gap:20px}.cta-row .link,.foot a,.text-link{color:var(--fg);font-size:14px;text-decoration:underline;-webkit-text-decoration-color:transparent;text-decoration-color:transparent;text-underline-offset:4px;transition:-webkit-text-decoration-color var(--duration-fast);transition:text-decoration-color var(--duration-fast);transition:text-decoration-color var(--duration-fast),-webkit-text-decoration-color var(--duration-fast)}.cta-row .link:hover,.foot a:hover,.text-link:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.hero-preview{margin:0;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);padding:18px 18px 12px}.hero-preview svg{display:block;width:100%;height:auto}.hero-preview figcaption{padding:10px 4px 2px;border-top:1px solid var(--line);margin-top:12px;font-size:12.5px;color:var(--muted);display:flex;justify-content:space-between}.features{max-width:1200px;margin:0 auto;padding:32px 24px 72px}.section-head{max-width:560px;margin-bottom:28px}.section-head h2{margin:0 0 8px;font-size:24px;font-weight:700;letter-spacing:-.01em}.section-head p{margin:0;color:var(--muted);font-size:15px}.bento{display:grid;grid-template-columns:repeat(12,1fr);grid-auto-flow:dense;grid-gap:14px;gap:14px}.cell{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-lg);padding:26px;box-shadow:var(--shadow-sm);transition:box-shadow var(--duration-base),transform var(--duration-base)}.cell:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.cell h3{margin:14px 0 8px;font-size:17px;font-weight:600}.cell p{margin:0;font-size:14px;line-height:1.75;color:var(--muted)}.c-a{grid-column:span 7}.c-b,.c-c{grid-column:span 5}.c-d{grid-column:span 7}.cell-icon{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--radius-md);background:var(--card-sunken);color:var(--accent)}.cell-icon svg{width:21px;height:21px}.demo-search{margin-top:16px;display:flex;align-items:center;gap:10px;height:40px;padding:0 14px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg);color:var(--muted);font-size:13.5px}.demo-search svg{width:15px;height:15px;flex:none}.demo-search kbd{margin-left:auto;font-family:inherit;font-size:11px;color:var(--muted);border:1px solid var(--line-strong);border-radius:4px;padding:1px 6px}.demo-result{margin-top:8px;display:flex;gap:8px;font-size:13px;color:var(--muted)}.demo-result,.tag{align-items:center}.tag{display:inline-flex;padding:2px 8px;border-radius:999px;font-size:12px;line-height:1.5;border:1px solid}.tag.spouse{background:var(--k-spouse-bg);color:var(--k-spouse-fg);border-color:var(--k-spouse-bd)}.tag.samegen{background:var(--k-samegen-bg);color:var(--k-samegen-fg);border-color:var(--k-samegen-bd)}.story{background:var(--card-sunken);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:80px 24px}.story-inner{max-width:680px;margin:0 auto}.story-inner h2{margin:0 0 20px;font-family:Georgia,Times New Roman,Songti SC,SimSun,serif;font-size:27px;font-weight:700;letter-spacing:.01em;text-wrap:balance}.story-inner p{margin:0 0 16px;font-size:16px;line-height:2;color:var(--fg);text-wrap:pretty}.story-inner p:last-child{margin-bottom:0;color:var(--muted)}.cta-strip{max-width:1200px;margin:0 auto;padding:72px 24px;text-align:center}.cta-strip h3{margin:0 0 24px;font-family:Georgia,Times New Roman,Songti SC,SimSun,serif;font-size:24px;font-weight:700;letter-spacing:.01em}.foot{border-top:1px solid var(--line);padding:24px;display:flex;align-items:center;justify-content:space-between;gap:16px;max-width:1200px;margin:0 auto;font-size:13px;color:var(--muted)}.foot nav{display:flex;gap:18px}.hide-m{display:initial}@media (max-width:880px){.hero{grid-template-columns:1fr;gap:40px;padding:48px 20px 56px}.display{font-size:31px}.display br{display:none}.bento{grid-template-columns:1fr}.c-a,.c-b,.c-c,.c-d{grid-column:auto}.cta-strip,.story{padding:56px 20px}}@media (max-width:768px){.hide-m{display:none!important}.shell-inner{padding:0 12px}.tree-content{flex-direction:column}.tree-canvas{min-height:320px}.relatives-panel{width:100%;border-left:none;border-top:1px solid var(--line);max-height:40vh}}