:root{--text:#3f3b46;--text-h:#08060d;--bg:#fdfcfb;--surface:#fff;--border:#e5e4e7;--accent:#8a5cf6;--accent-contrast:#fff;--danger:#d9534f;--male:#4a90d9;--female:#e0679a;--shadow:#0000001a 0 10px 15px -3px, #0000000d 0 4px 6px -2px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;font:16px/145% var(--sans);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--text:#d1cfd6;--text-h:#f3f4f6;--bg:#16171d;--surface:#1e1f27;--border:#33343d;--accent:#a879fb;--accent-contrast:#16171d;--shadow:#0006 0 10px 15px -3px, #00000040 0 4px 6px -2px}}*{box-sizing:border-box}html,body{touch-action:pan-x pan-y;margin:0}#root{flex-direction:column;min-height:100svh;display:flex}h1,h2{font-family:var(--sans);color:var(--text-h);margin:0;font-weight:600}.app{flex-direction:column;height:100svh;display:flex}.auth-gate{background:var(--bg);justify-content:center;align-items:center;height:100svh;padding:20px;display:flex}.auth-card{background:var(--surface);border:1px solid var(--border);width:100%;max-width:340px;box-shadow:var(--shadow);border-radius:12px;padding:28px}.auth-card h1{text-align:center;margin-bottom:20px;font-size:20px}.auth-tabs{border:1px solid var(--border);border-radius:8px;margin-bottom:16px;display:flex;overflow:hidden}.auth-tabs button{background:var(--bg);border:none;border-radius:0;flex:1}.auth-tabs button.active{background:var(--accent);color:var(--accent-contrast)}.auth-card form{flex-direction:column;gap:14px;display:flex}.auth-card label{color:var(--text-h);flex-direction:column;gap:4px;font-size:13px;font-weight:600;display:flex}.auth-card input{border:1px solid var(--border);background:var(--bg);font:inherit;color:inherit;border-radius:8px;padding:10px 12px}.auth-card .btn-primary{justify-content:center}.auth-error{color:var(--danger);font-size:12px}.auth-hint{text-align:center;margin-top:14px}.auth-link{color:var(--accent);background:0 0;border:none;justify-content:center;padding:4px;font-size:12px;text-decoration:underline}.auth-link:hover{opacity:.8;border-color:#0000}.admin-card{max-width:520px}.admin-section{border-top:1px solid var(--border);margin-top:20px;padding-top:16px}.admin-section h2{margin-bottom:10px;font-size:14px}.admin-section form,.admin-request-list{flex-direction:column;gap:10px;display:flex}.admin-request-item{border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:10px;display:flex}.admin-request-info{flex-direction:column;gap:2px;font-size:13px;display:flex}.admin-request-form{align-items:center;gap:6px;display:flex}.admin-request-form input{border:1px solid var(--border);background:var(--bg);font:inherit;color:inherit;border-radius:6px;width:130px;padding:6px 8px}.admin-whoami{margin-top:-8px;margin-bottom:12px}.admin-table{flex-direction:column;gap:10px;margin-bottom:12px;display:flex}.admin-table-row{border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:10px;display:flex}.admin-table-actions{gap:6px;display:flex}.admin-subsection{border-top:1px solid var(--border);margin-top:16px;padding-top:14px}.admin-subsection label{color:var(--text-h);flex-direction:column;gap:4px;margin-bottom:10px;font-size:13px;font-weight:600;display:flex}.admin-subsection input{border:1px solid var(--border);background:var(--bg);border-radius:8px;padding:8px 10px;font-weight:400}.pending-modal{width:560px}.pending-changes-list h2{margin-bottom:12px}.pending-batch-list{flex-direction:column;gap:12px;display:flex}.pending-batch-card{border:1px solid var(--border);border-radius:10px;padding:12px}.pending-batch-meta{justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;display:flex}.pending-op-list{flex-direction:column;gap:8px;margin-bottom:10px;list-style:none;display:flex}.pending-op{background:var(--bg);border-radius:8px;padding:8px 10px}.pending-op-title{color:var(--text-h);font-size:13px;font-weight:600}.pending-op-details{opacity:.8;flex-direction:column;gap:2px;margin-top:4px;font-size:12px;list-style:none;display:flex}.pending-batch-actions{justify-content:flex-end;gap:8px;display:flex}.toolbar{border-bottom:1px solid var(--border);background:var(--surface);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:12px 20px;display:flex;position:relative}.toolbar h1{font-size:20px}.toolbar-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.toolbar-pair{display:contents}.menu-toggle{padding:6px 10px;font-size:18px;line-height:1;display:none}.session-badge{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:6px 10px;font-size:12px}button,.btn-file,select,input,textarea{font:inherit;color:inherit}button,.btn-file{border:1px solid var(--border);background:var(--surface);cursor:pointer;border-radius:8px;align-items:center;padding:8px 14px;display:inline-flex}button:hover,.btn-file:hover{border-color:var(--accent)}.btn-primary{background:var(--accent);color:var(--accent-contrast);border-color:var(--accent)}.btn-danger{color:var(--danger);border-color:var(--danger)}button:disabled{opacity:.4;cursor:not-allowed}button:disabled:hover{border-color:var(--border)}select{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:8px 10px}.loading,.empty-state{height:100%;color:var(--text);flex-direction:column;justify-content:center;align-items:center;gap:16px;display:flex}.main-area{flex:1;min-height:0;display:flex}.tree-scroll{flex:1;padding:40px;position:relative;overflow:auto}.unlinked-panel{border-left:1px solid var(--border);background:var(--surface);flex-shrink:0;width:220px;padding:16px;overflow-y:auto}.unlinked-panel h2{margin-bottom:4px;font-size:14px}.unlinked-panel .hint{margin-bottom:12px;line-height:1.4}.unlinked-list{flex-direction:column;gap:6px;display:flex}.unlinked-item{text-align:left;background:0 0;border:1px solid #0000;border-radius:8px;align-items:center;gap:8px;width:100%;padding:6px 8px;display:flex}.unlinked-item:hover{border-color:var(--border);background:var(--bg)}.unlinked-photo{border:2px solid var(--border);background:var(--bg);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:13px;display:flex;overflow:hidden}.unlinked-photo img{object-fit:cover;width:100%;height:100%}.unlinked-name{text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.unhide-btn{border-radius:6px;flex-shrink:0;padding:3px 8px;font-size:11px}.family-tree{position:relative}.tree-zoom-wrap{transform-origin:0 0;display:inline-block}.zoom-controls{z-index:40;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:10px;align-items:center;gap:2px;padding:4px;display:flex;position:fixed;bottom:20px;right:20px}.zoom-controls button{background:0 0;border:none;border-radius:6px;justify-content:center;min-width:36px;padding:6px 8px;font-size:15px;font-weight:600}.zoom-controls button:hover{background:var(--bg);border-color:#0000}.person-slot{pointer-events:none;z-index:0;justify-content:center;align-items:center;padding:10px 14px;display:flex;position:absolute}.person-slot.menu-open{z-index:30}.person-card{background:var(--surface);border:2px solid var(--border);cursor:pointer;text-align:center;pointer-events:auto;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;padding:8px;transition:border-color .15s,transform .15s;display:flex;position:relative}.set-root-btn{border:1px solid var(--border);background:var(--surface);width:20px;height:20px;color:var(--text);opacity:.35;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:opacity .15s,color .15s,border-color .15s;display:flex;position:absolute;top:4px;right:4px}.person-card:hover .set-root-btn,.set-root-btn:hover,.set-root-btn:focus-visible{opacity:1;color:var(--accent);border-color:var(--accent)}.add-relative-wrap{position:absolute;top:4px;left:4px}.add-relative-btn{border:1px solid var(--border);background:var(--surface);width:20px;height:20px;color:var(--text);opacity:.35;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:14px;font-weight:700;line-height:1;transition:opacity .15s,color .15s,border-color .15s;display:flex}.person-card:hover .add-relative-btn,.add-relative-btn:hover,.add-relative-btn:focus-visible{opacity:1;color:var(--accent);border-color:var(--accent)}.add-relative-menu{z-index:5;background:var(--surface);border:1px solid var(--border);min-width:140px;box-shadow:var(--shadow);cursor:default;border-radius:8px;flex-direction:column;margin-top:4px;display:flex;position:absolute;top:100%;left:0;overflow:hidden}.add-relative-menu button{text-align:left;color:var(--text-h);background:0 0;border:none;border-radius:0;padding:8px 12px;font-size:13px;font-weight:400}.add-relative-menu button:hover:not(:disabled){background:var(--bg);border-color:#0000}.add-relative-menu button:disabled{color:var(--text);opacity:.4;cursor:not-allowed}.hide-partner-btn{border:1px solid var(--border);background:var(--surface);width:20px;height:20px;color:var(--text);opacity:.35;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:opacity .15s,color .15s,border-color .15s;display:flex;position:absolute;bottom:4px;left:4px}.person-card:hover .hide-partner-btn,.hide-partner-btn:hover,.hide-partner-btn:focus-visible{opacity:1;color:var(--danger);border-color:var(--danger)}.person-card:hover{border-color:var(--accent);transform:translateY(-2px)scale(1.02)}.person-card.is-root{border-color:var(--accent);box-shadow:var(--shadow)}.person-card.is-collapsed{border-style:dashed}.collapse-toggle{border:1px solid var(--border);background:var(--surface);width:20px;height:20px;color:var(--text);z-index:2;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:14px;font-weight:700;line-height:1;display:flex;position:absolute;bottom:-10px;left:50%;transform:translate(-50%)}.collapse-toggle:hover,.collapse-toggle:focus-visible{border-color:var(--accent);color:var(--accent)}.person-card.is-collapsed .collapse-toggle{background:var(--accent);border-color:var(--accent);color:var(--accent-contrast)}.sibling-toggle{border:1px solid var(--border);background:var(--surface);width:20px;height:20px;color:var(--text);opacity:.35;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:10px;line-height:1;transition:opacity .15s,color .15s,border-color .15s,background .15s;display:flex;position:absolute;bottom:4px;right:4px}.person-card:hover .sibling-toggle,.sibling-toggle:hover,.sibling-toggle:focus-visible{opacity:1;color:var(--accent);border-color:var(--accent)}.sibling-toggle.is-active{opacity:1;background:var(--accent);border-color:var(--accent);color:var(--accent-contrast)}.person-card.gender-male .person-photo{border-color:var(--male)}.person-card.gender-female .person-photo{border-color:var(--female)}.placeholder-card{cursor:default;opacity:.7;border-style:dashed}.placeholder-card:hover{border-color:var(--border);transform:none}.placeholder-mark{border:2px dashed var(--border);width:56px;height:56px;color:var(--text);opacity:.6;border-radius:50%;justify-content:center;align-items:center;font-size:20px;font-weight:600;display:flex}.person-avatar{flex-shrink:0;position:relative}.person-photo{border:2px solid var(--border);background:var(--bg);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:56px;height:56px;display:flex;overflow:hidden}.person-birth-order{background:var(--accent);min-width:16px;height:16px;color:var(--accent-contrast);text-align:center;border-radius:999px;padding:0 3px;font-size:10px;font-weight:700;line-height:16px;position:absolute;bottom:-2px;right:-2px}.person-photo img{object-fit:cover;width:100%;height:100%}.person-initial{color:var(--text-h);font-size:20px;font-weight:600}.person-name{color:var(--text-h);text-overflow:ellipsis;white-space:nowrap;max-width:100%;margin-top:6px;font-size:13px;font-weight:600;overflow:hidden}.person-years{color:var(--text);opacity:.75;font-size:11px}.modal-overlay{z-index:100;background:#0006;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{background:var(--surface);width:420px;max-width:100%;max-height:90vh;box-shadow:var(--shadow);border-radius:14px;padding:24px;overflow-y:auto}.modal h2{margin-bottom:16px}.modal form{flex-direction:column;gap:14px;display:flex}.modal label{color:var(--text-h);flex-direction:column;flex:1;gap:4px;font-size:13px;font-weight:600;display:flex}.modal input,.modal select,.modal textarea{border:1px solid var(--border);background:var(--bg);border-radius:8px;padding:8px 10px;font-weight:400}.form-row{gap:12px;display:flex}fieldset{border:1px solid var(--border);border-radius:8px;padding:10px 12px}legend{padding:0 6px;font-size:12px;font-weight:600}fieldset select{width:100%;margin-bottom:6px}.birth-order-field{margin-top:4px}.birth-order-field input{width:100%}.search-select{margin-bottom:6px;position:relative}.search-select-input-wrap{align-items:center;display:flex;position:relative}.search-select-input-wrap input{width:100%;padding-right:28px}.search-select-clear{width:20px;height:20px;color:var(--text);opacity:.6;background:0 0;border:none;border-radius:50%;padding:0;font-size:15px;line-height:1;position:absolute;right:4px}.search-select-clear:hover{opacity:1;border-color:#0000}.search-select-menu{z-index:10;background:var(--surface);border:1px solid var(--border);max-height:160px;box-shadow:var(--shadow);border-radius:8px;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto}.search-select-option{cursor:pointer;padding:7px 10px;font-size:14px;font-weight:400}.search-select-option:hover,.search-select-option.is-selected{background:var(--accent-bg,#8a5cf61f)}.search-select-empty{opacity:.6;padding:7px 10px;font-size:13px}.partner-search{width:100%;margin-bottom:8px}.checkbox-list{flex-direction:column;gap:6px;max-height:140px;display:flex;overflow-y:auto}.checkbox-item{align-items:center;gap:8px;font-weight:400;flex-direction:row!important}.checkbox-item.is-disabled{opacity:.45}.checkbox-item-name{flex:1}.hidden-tag{opacity:.7;flex-shrink:0;align-items:center;gap:6px;font-size:11px;display:flex}.sub-label{opacity:.7;margin:6px 0 2px;font-size:11px;font-weight:600}.sub-label:first-child{margin-top:0}.readonly-list{flex-direction:column;gap:4px;max-height:140px;font-size:13px;list-style:none;display:flex;overflow-y:auto}.readonly-list li{background:var(--bg);border-radius:6px;padding:4px 8px}.phone-list{flex-direction:column;gap:6px;margin-bottom:8px;display:flex}.phone-row{align-items:center;gap:6px;display:flex}.phone-row input{flex:1}.phone-remove-btn{border-radius:6px;flex-shrink:0;width:28px;height:28px;padding:0;font-size:16px;line-height:1}.phone-add-btn{padding:6px 10px;font-size:12px}.address-list{flex-direction:column;gap:10px;margin-bottom:8px;display:flex}.address-row{align-items:flex-start;gap:6px;display:flex}.address-row-fields{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.maps-link-row{align-items:center;gap:6px;display:flex}.maps-link-row input{flex:1;min-width:0}.maps-visit-btn{border:1px solid var(--border);background:var(--surface);cursor:pointer;font:inherit;color:inherit;white-space:nowrap;border-radius:8px;flex-shrink:0;align-items:center;padding:8px 14px;text-decoration:none;display:inline-flex}.maps-visit-btn:hover{border-color:var(--accent)}.maps-visit-btn.is-disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.hint{opacity:.6;font-size:12px}.photo-upload{border:2px dashed var(--border);cursor:pointer;background:var(--bg);border-radius:50%;justify-content:center;align-self:center;align-items:center;width:96px;height:96px;display:flex;overflow:hidden}.photo-upload img{object-fit:cover;width:100%;height:100%}.photo-placeholder{color:var(--text);opacity:.6;font-size:12px}.modal-actions{align-items:center;gap:8px;margin-top:6px;display:flex}.modal-actions .spacer{flex:1}@media (width<=720px){.toolbar{flex-wrap:nowrap;padding:10px 14px}.toolbar h1{font-size:17px}.menu-toggle{display:inline-flex}.toolbar-actions{background:var(--surface);border-bottom:1px solid var(--border);box-shadow:var(--shadow);z-index:50;flex-direction:column;align-items:stretch;gap:8px;padding:12px 14px 16px;display:none;position:absolute;top:100%;left:0;right:0}.toolbar-actions.is-open{display:flex}.toolbar-actions select,.toolbar-actions button,.toolbar-actions .btn-file{justify-content:center;width:100%}.toolbar-pair{gap:8px;display:flex}.toolbar-pair select,.toolbar-pair button,.toolbar-pair .btn-file,.toolbar-pair .session-badge{text-align:center;flex:1;width:auto;min-width:0}.tree-scroll{padding:20px}.zoom-controls{bottom:12px;right:12px}.unlinked-panel{width:160px}.modal,.auth-card{padding:18px}.auth-tabs{flex-wrap:wrap}.auth-tabs button{flex:50%;padding:8px 6px;font-size:12px}}
