:root{font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#172b24;background:#f4f6f2;font-synthesis:none}*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0}header{background:#fff;border-bottom:1px solid #e1e8e0;padding:27px clamp(20px,5vw,76px);display:flex;align-items:center;justify-content:space-between;gap:24px}h1{font-size:clamp(27px,3vw,38px);letter-spacing:-.04em;margin:4px 0}.sub{color:#6d7971;margin:8px 0 0}.eyebrow{font-size:10px;letter-spacing:.16em;font-weight:750;color:#77857b;margin:0 0 8px}.actions{display:flex;gap:10px;align-items:center}.button{font:inherit;font-size:13px;font-weight:650;border:1px solid #d5ddd5;border-radius:9px;background:#fff;padding:11px 15px;color:#243c31;cursor:pointer;text-decoration:none}.button:hover{border-color:#8a9f90}.button.primary{background:#2c5843;border-color:#2c5843;color:#fff}.button:disabled{opacity:.42;cursor:not-allowed}main{max-width:none;width:100%;margin:auto;padding:38px clamp(20px,5vw,76px) 80px}#notice{display:none;padding:12px 16px;margin-bottom:18px;background:#e8f1e8;border-radius:9px;color:#315b42;font-size:14px}#notice.error{display:block;background:#fae9e6;color:#8a3124}#notice:not(:empty){display:block}.welcome{min-height:420px;border:1px dashed #b8c7ba;border-radius:18px;background:#fafbf9;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px}.welcome h2{margin:14px 0 4px;font-size:25px}.welcome p{color:#6c7970;max-width:450px;line-height:1.6}.welcome small{margin-top:18px;color:#849087}.upload-icon{width:48px;height:48px;border-radius:15px;background:#e8efe8;color:#41664f;display:grid;place-items:center;font-size:29px}.tree-head{display:flex;align-items:end;justify-content:space-between;gap:18px;margin:5px 0 18px}.tree-head h2{margin:4px 0;font-size:25px}.tree-head p{margin:0;color:#718076;font-size:13px}.tree-head input{padding:11px 13px;border-radius:9px;border:1px solid #d8e0d9;font:inherit;width:240px}.legend{display:flex;align-items:center;gap:20px;color:#7b877f;font-size:12px;border-bottom:1px solid #e0e6e0;padding:12px 2px}.legend i{display:inline-block;width:9px;height:9px;border-radius:50%;background:#a3bd9a;margin-right:6px}.tree{padding-top:22px;display:flex;flex-direction:column;gap:27px}.generation{position:relative}.generation h3{font-size:11px;text-transform:uppercase;letter-spacing:.15em;color:#859188;margin:0 0 12px}.family-row{display:flex;flex-wrap:wrap;gap:16px;align-items:stretch}.family{background:#eaf1e7;border:1px solid #d6e2d1;border-radius:13px;padding:12px;min-width:210px;max-width:100%;position:relative}.family.unpartnered{background:#eef2f8;border-color:#dce3ef}.partners{display:flex;gap:8px;align-items:stretch;flex-wrap:wrap}.person{min-width:130px;max-width:210px;background:#fff;border:1px solid #e0e6df;border-radius:9px;padding:10px 12px;text-align:left;color:#273a30;cursor:pointer;box-shadow:0 2px 5px #213a2610}.person:hover{border-color:#7e9b80;box-shadow:0 4px 12px #213a2617;transform:translateY(-1px)}.person strong{display:block;font-size:13px;line-height:1.35}.person span{display:block;color:#818b83;font-size:11px;margin-top:5px}.children{position:relative;border-top:1px solid #d5dfd1;margin-top:12px;padding-top:11px;display:flex;gap:7px;flex-wrap:wrap}.family.unpartnered .children{border-color:#dce3ef}.children:after{content:"";position:absolute;top:-12px;left:50%;height:12px;width:1px;background:#bdcbb7}.family.unpartnered .children:after{background:#c6d0df}.children:before{content:"Kinder";width:100%;font-size:9px;text-transform:uppercase;letter-spacing:.12em;color:#89948b}.child{border:0;border-radius:20px;background:#ffffffb8;padding:6px 9px;font:inherit;color:#42584a;font-size:11px;cursor:pointer}.child{position:relative}.child:before{content:"";position:absolute;top:-12px;left:50%;height:12px;width:1px;background:#bdcbb7}.family.unpartnered .child:before{background:#c6d0df}.child:hover{background:white;color:#1c5438}.empty{background:white;border-radius:10px;padding:24px;color:#718076}.no-results{padding:20px;color:#768178}dialog{border:0;border-radius:16px;padding:0;width:min(460px,calc(100vw - 30px));box-shadow:0 18px 80px #1116}dialog::backdrop{background:#14231bb3;backdrop-filter:blur(2px)}#person-form{padding:25px}.modal-head{display:flex;justify-content:space-between;align-items:start;margin-bottom:20px}.modal-head h2{margin:3px 0;font-size:24px}.close{border:0;background:none;font-size:25px;cursor:pointer;color:#708076}#person-form label{font-size:12px;color:#5e6d62;display:block;margin:13px 0}#person-form input,#person-form select,#person-form textarea{display:block;width:100%;margin-top:6px;border:1px solid #d8e0d9;border-radius:8px;padding:10px 11px;font:inherit;font-size:14px;color:#24372d;background:#fff}.form-actions{display:flex;justify-content:end;gap:9px;margin-top:20px}@media(max-width:680px){header{align-items:flex-start;flex-direction:column}.actions{width:100%}.actions .button{flex:1;text-align:center}.tree-head{align-items:stretch;flex-direction:column}.tree-head input{width:100%}.family-row{display:grid;grid-template-columns:1fr}.family{min-width:0}.person{flex:1}.legend{align-items:flex-start;flex-direction:column;gap:6px}}

.tree-controls{display:flex;align-items:center;gap:8px;margin:14px 0;color:#6d7971;font-size:12px}.tree-controls select{min-width:220px;max-width:42vw;padding:9px 11px;border:1px solid #d8e0d9;border-radius:8px;background:white;font:inherit;color:#24372d}.tree-controls .button{padding:7px 12px}#tree-scroll{width:100%;min-width:0;overflow:auto;max-height:calc(100vh - 300px);padding:4px 0 20px}.tree{position:relative;transform-origin:top left;width:max-content;min-width:0;transition:width .15s ease,height .15s ease}.generation{min-width:100%;border-left:2px solid #d5e0d6;padding-left:14px}.generation h3{position:sticky;left:0;width:max-content;background:#f4f6f2;padding:3px 8px 3px 0}.family{max-width:none}.person.is-root{border:2px solid #356a9a;background:#eaf1f7}@media(max-width:680px){.tree-controls{flex-wrap:wrap}.tree-controls select{flex:1;max-width:none}.tree{min-width:0}}

.graph-canvas{position:relative;min-width:100%;}.tree-lines{position:absolute;left:0;top:0;overflow:visible;z-index:0;pointer-events:none}.generation-label{font:700 11px sans-serif;letter-spacing:1.5px;fill:#7b877f}.graph-person{position:absolute;z-index:1;width:188px;min-height:86px;padding:12px;text-align:left;border:1px solid #87928a;border-radius:8px;background:white;color:#273a30;box-shadow:0 2px 5px #213a2610;cursor:pointer;font:inherit}.graph-person strong{display:block;font-size:13px;line-height:1.35}.graph-person span{display:block;margin-top:6px;font-size:11px;color:#7a857d}.graph-person:hover{border-color:#356a9a;box-shadow:0 3px 10px #223b2c25}.graph-person.is-root{border:2px solid #356a9a;background:#eaf1f7}.tree-controls{position:sticky;top:0;background:#f4f6f2;z-index:2;padding:8px 0}
.tree-lines path{fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}.graph-person small{display:block;margin-top:7px;font-size:11px;color:#718076}.graph-canvas{margin:0 auto 12px}
@media print{body{background:white}header,.project-heading,.view-tabs,.tree-head,.tree-controls,.legend,#notice{display:none!important}main{max-width:none;margin:0;padding:0}#welcome,#people-panel,#families-panel,#sources-panel,#media-panel{display:none!important}#workspace{display:block!important}#tree-panel{display:block!important;border:0;padding:0}#tree-scroll{max-height:none;overflow:visible;padding:0}#tree{transform:none!important;min-width:0}.graph-canvas{transform:none!important;margin:0}dialog{display:none!important}}
.table-wrap{width:100%;overflow:auto;border:1px solid #e0e6e0;border-radius:12px;background:#fff}table{width:100%;border-collapse:collapse;text-align:left;font-size:13px}th,td{padding:12px 14px;border-bottom:1px solid #edf0ec;vertical-align:top}th{background:#f7f9f6;color:#6f7c72;font-size:11px;font-weight:700;letter-spacing:.04em;white-space:nowrap}tbody tr:last-child td{border-bottom:0}.partner-list,.child-list{display:flex;flex-wrap:wrap;gap:6px;min-width:210px}.partner-pill,.child-pill{display:inline-flex;align-items:center;max-width:240px;padding:5px 9px;border:1px solid #d8e5d8;border-radius:999px;background:#edf5eb;color:#294b37;line-height:1.2;white-space:normal}.partner-pill:before{content:"♥";font-size:10px;margin-right:6px;color:#527b5a}.member-count{display:block;margin:5px 0 0 3px;color:#748177;font-size:10px}.empty-partners{color:#89948b;font-style:italic}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.panel-head h3{margin:4px 0}.panel-head p{margin:0;color:#718076;font-size:13px}
.desktop-tree-canvas{position:relative;min-width:100%;margin:0 auto 12px}.desktop-tree-lines{position:absolute;left:0;top:0;overflow:visible;z-index:0;pointer-events:none}.desktop-tree-lines path{fill:none;stroke-linecap:round;stroke-linejoin:round}.desktop-tree-canvas .graph-person{width:176px;height:82px;min-height:82px;padding:9px 11px;border-radius:3px;box-shadow:none;background:#fff;color:#202020;font:13px Arial,sans-serif}.desktop-tree-canvas .graph-person strong{font-size:13px;font-weight:400;line-height:1.25}.desktop-tree-canvas .graph-person small{font-size:11px;line-height:1.2;margin-top:5px;color:#444}.desktop-tree-canvas .graph-person.is-root{border:2px solid #356a9a;background:#eaf1f7}.desktop-tree-canvas .graph-person:hover{box-shadow:0 2px 7px #223b2c20}

.auth-screen{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:20px;background:#14231bd9;backdrop-filter:blur(3px)}.auth-screen[hidden]{display:none}.auth-card{width:min(420px,100%);padding:30px;border-radius:16px;background:white;box-shadow:0 18px 80px #1116}.auth-card h2{margin:4px 0 8px;font-size:27px}.auth-card p:not(.eyebrow){color:#65736a;line-height:1.5}.auth-card label{display:block;margin:20px 0 6px;font-size:13px;color:#526156}.auth-card input{width:100%;padding:12px;border:1px solid #cfd9d0;border-radius:8px;font:inherit}.auth-card button{width:100%;margin-top:15px}.auth-card #auth-error{min-height:1.25em;margin:7px 0;color:#a33122;font-size:13px}

#tree-scroll{cursor:grab}#tree-scroll.dragging{cursor:grabbing;user-select:none}#tree-scroll.dragging *{user-select:none}

html.tree-only,html.tree-only body{height:100%;overflow:hidden}html.tree-only header,html.tree-only #notice,html.tree-only .project-heading,html.tree-only .view-tabs,html.tree-only .legend,html.tree-only #welcome{display:none!important}html.tree-only main{height:100vh;height:100dvh;max-width:none;padding:58px 12px 10px}html.tree-only #tree-window-toolbar{position:fixed;inset:0 0 auto;z-index:15;height:48px;padding:6px 14px;display:flex;align-items:center;justify-content:space-between;background:#fff;border-bottom:1px solid #dfe6df}html.tree-only #tree-window-toolbar[hidden]{display:none!important}html.tree-only #tree-window-toolbar>div{display:flex;gap:8px}html.tree-only #tree-panel{height:100%;min-height:0;display:flex;flex-direction:column}html.tree-only .tree-head{margin:0 0 6px}html.tree-only .tree-head p{display:none}html.tree-only .tree-controls{margin:4px 0;flex-wrap:wrap}html.tree-only #tree-scroll{flex:1;height:calc(100vh - 130px);height:calc(100dvh - 130px);max-height:none;min-height:0;padding:4px 0 10px}html.tree-only #tree{padding-top:8px}
html.tree-only #open-tree-window{display:none!important}
html.tree-only,html.tree-only body{height:auto;min-height:100%;overflow:auto}html.tree-only main{height:auto;min-height:100vh;max-width:none;padding:58px 12px 20px}html.tree-only #tree-panel{height:auto;min-height:0;display:block}html.tree-only #tree-scroll{display:block;flex:none;height:auto;max-height:calc(100vh - 170px);min-height:360px;overflow:auto}

dialog{max-height:calc(100vh - 36px);max-height:calc(100dvh - 36px);overflow:auto}dialog#editor{width:min(1200px,calc(100vw - 48px))}dialog#family-editor{width:min(1080px,calc(100vw - 48px))}dialog#name-editor,dialog#event-editor,dialog#source-editor,dialog#citation-editor,dialog#media-link-editor{width:min(900px,calc(100vw - 40px))}dialog#choice-editor{width:min(680px,calc(100vw - 36px))}@media(max-width:680px){dialog#editor,dialog#family-editor,dialog#name-editor,dialog#event-editor,dialog#source-editor,dialog#citation-editor,dialog#media-link-editor,dialog#choice-editor{width:calc(100vw - 20px);max-height:calc(100dvh - 20px)}}
