@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;450;500;550;600;650;700&family=Libre+Caslon+Display&display=swap');
:root{--ink:#253b32;--muted:#7a837b;--green:#365d49;--line:#e3e6df;--paper:#fafbf8;--serif:'Libre Caslon Display',Georgia,serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:'DM Sans',Arial,sans-serif;font-size:14px}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button{color:inherit}button:focus-visible,a:focus-visible{outline:3px solid #9eb99a;outline-offset:3px}button{transition:background .15s,box-shadow .15s}button:hover{filter:brightness(.97)}[hidden]{display:none!important}.header{height:85px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 48px;gap:80px}.brand{text-decoration:none;color:var(--ink);font-size:32px;font-weight:650;letter-spacing:-1.8px;display:flex;align-items:center}.brand-icon{font-size:42px;color:#6e8c56;margin-right:10px;font-weight:400}.brand-dot{color:#a2b06a}.header nav{display:flex;height:100%;gap:35px}.header nav button{border:0;background:none;font-size:14px;position:relative;color:#777f78;padding:0 2px}.header nav button.nav-active{color:var(--ink);font-weight:600}.nav-active:after{content:'';height:3px;background:#5b7658;position:absolute;bottom:0;left:0;right:0}.header nav span{border-radius:5px;background:#f0f2eb;padding:2px 6px;margin-left:6px;font-size:11px}.header-right{margin-left:auto;display:flex;align-items:center;gap:24px}.prototype{font-size:10px;letter-spacing:1.7px;color:#8c9588}.avatar{width:37px;height:37px;border:1px solid #d9e0cf;border-radius:50%;background:#edf1e5;font-size:11px;color:#58684e}main{padding:39px 48px 0;max-width:1800px;margin:auto}.intro{display:flex;justify-content:space-between;align-items:center;margin-bottom:29px;gap:20px}.eyebrow{font-size:9px;font-weight:650;letter-spacing:2px;color:#8a927b}h1{font-family:var(--serif);font-weight:400;font-size:46px;letter-spacing:-1.2px;margin:9px 0 6px}.intro p{color:var(--muted);margin:0;font-size:13px}.intro-actions{display:flex;gap:12px;align-items:center;margin-top:22px}.saved{font-size:10px;color:#8a9389;display:flex;align-items:center;gap:6px;margin-right:12px}.saved i{width:5px;height:5px;border-radius:50%;background:#7f9a6e}.button{border-radius:6px;padding:11px 17px;border:1px solid #dce2d6;background:#fff;font-size:12px;font-weight:550;white-space:nowrap;display:inline-flex;align-items:center;gap:8px}.primary{background:var(--green);border-color:var(--green);color:white}.button span{font-size:17px}.workspace{border:1px solid #dfe4d9;border-radius:9px;background:white;overflow:hidden;box-shadow:0 5px 25px #2f4a3610}.toolbar{height:60px;display:flex;align-items:center;padding:0 21px;gap:17px;border-bottom:1px solid var(--line);background:#fff;position:relative;z-index:2}.view-label{font-size:12px;font-weight:550;display:flex;gap:9px;align-items:center}.small-tree{font-size:24px;color:#637758}.down{color:#999f94;font-size:15px}.toolbar-divider{width:1px;height:22px;background:#e6e9e2;display:inline-block}.search-wrap{display:flex;align-items:center;gap:8px;color:#7f887b;position:relative}.search-wrap>span{font-size:25px}.search-wrap input{width:230px;font-size:11px;outline:none;border:0;background:transparent;padding:8px 0;color:var(--ink)}.search-wrap input::placeholder{color:#92998e}.toolbar-right{display:flex;gap:8px;align-items:center;margin-left:auto}.icon-button{width:30px;height:30px;display:inline-grid;place-items:center;border:0;background:transparent;border-radius:5px;font-size:21px;color:#65725f}.icon-button:hover{background:#eff3ea}#zoomLabel{min-width:34px;text-align:center;font-size:10px;color:#7b8577}.viewport{height:555px;background:#f2f4ed;overflow:hidden;position:relative;touch-action:none;cursor:grab;outline:none}.viewport.dragging{cursor:grabbing}.canvas-grain{position:absolute;inset:0;background-image:radial-gradient(#b7c1ab80 .7px,transparent .7px);background-size:20px 20px;pointer-events:none}#world{position:absolute;left:0;top:0;width:2000px;height:1200px;transform-origin:0 0;will-change:transform}#connectors{position:absolute;width:100%;height:100%;overflow:visible;pointer-events:none}.connection{fill:none;stroke:#abbba2;stroke-width:1.5}.spouse-line{stroke:#a9b99f;stroke-width:1.5;fill:none}.card{position:absolute;width:192px;height:104px;border:1px solid #dce2d5;border-radius:7px;background:#fff;box-shadow:0 3px 7px #34442a08;padding:14px 13px;cursor:pointer;text-align:left;transition:box-shadow .2s,border-color .2s}.card:hover{box-shadow:0 5px 15px #2c472324;border-color:#91a77f}.card.root{border:1.7px solid #638751;box-shadow:0 3px 11px #4f6a3920}.card-head{display:flex;gap:10px;align-items:center}.portrait{width:35px;height:35px;flex-shrink:0;border-radius:50%;background:#e8eee0;display:grid;place-items:center;font-family:var(--serif);font-size:17px;color:#708459;overflow:hidden}.portrait.rose{background:#f2e9e1;color:#a18670}.portrait.gold{background:#efeeda;color:#96904c}.portrait.slate{background:#e4ebe8;color:#7b8e8b}.card h3{font-size:11px;font-weight:600;margin:0 0 4px;color:#344337;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:118px}.card .dates{font-size:10px;color:#92998c}.card-bottom{display:flex;align-items:center;justify-content:space-between;margin-top:9px}.person-id{font-size:8px;letter-spacing:.6px;color:#a2aa9a}.card-plus{width:20px;height:20px;border:0;background:#f4f6f0;border-radius:50%;font-size:16px;line-height:1;display:grid;place-items:center;color:#73866b}.branch-button{position:absolute;width:24px;height:24px;border-radius:50%;border:1px solid #d5decc;background:#fff;color:#6e855f;font-size:17px;display:grid;place-items:center;padding:0;cursor:pointer;z-index:1;box-shadow:0 2px 5px #2c47230a}.generation-label{position:absolute;font-size:9px;letter-spacing:1.8px;color:#a1ac97;white-space:nowrap}.canvas-label{position:absolute;bottom:29px;left:27px;display:flex;gap:12px;align-items:center;pointer-events:none;color:#8b977f}.leaf{font-size:29px;color:#a1ae90}.canvas-label strong{font-family:var(--serif);font-size:19px;font-weight:400;color:#708164}.canvas-label div>span{font-size:9px;line-height:2}.canvas-help{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);font-size:9px;color:#98a28e;white-space:nowrap;pointer-events:none}.canvas-help>span{margin:0 9px}.workspace-footer{height:41px;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 22px;font-size:9px;color:#8a9481}.workspace-footer>span{display:flex;align-items:center;gap:7px}.legend-dot{width:6px;height:6px;border-radius:50%;background:#6b8d56}.legend-separator{margin:0 8px;color:#d1d8c9}.workspace-footer button{border:0;background:none;font-size:9px;color:#829078}.below{display:flex;align-items:center;justify-content:space-between;padding:27px 3px}.below>div{display:flex;gap:15px;align-items:center}.below>div>span{font-size:26px;color:#97a781}.below h2{font-family:var(--serif);font-weight:400;font-size:23px;margin:0 0 4px}.below p{font-size:11px;color:#8c9584;margin:0}.sample-label{font-size:8px;letter-spacing:1.6px;color:#a3ab9b}.panel{position:fixed;right:0;top:0;bottom:0;width:380px;z-index:10;background:#fff;box-shadow:-12px 0 80px #253b3229;padding:24px;overflow:auto}.panel-top{display:flex;justify-content:space-between;align-items:center;font-size:9px;letter-spacing:1.7px;color:#8e9984}.panel-portrait{width:85px;height:85px;font-size:34px;margin:32px 0 17px}.panel h2{font:38px var(--serif);margin:8px 0}.panel-dates{color:#839078;font-size:13px}.panel-id{font-size:10px;color:#a0aa96;margin-top:10px}.panel-section{border-top:1px solid var(--line);margin-top:25px;padding-top:20px}.panel-section h3{font-size:10px;letter-spacing:1px;text-transform:uppercase;color:#8a957e}.panel-section p{line-height:1.8;font-size:13px;color:#6c7a62;white-space:pre-wrap}.relative-row{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 0;border:0;border-bottom:1px solid #f0f2eb;background:transparent;text-align:left;font-size:12px}.relative-row small{color:#a0aa96}.panel-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:25px}dialog{border:1px solid #e1e7d9;border-radius:12px;color:var(--ink);width:460px;padding:27px;max-width:calc(100vw - 30px);max-height:90vh;box-shadow:0 20px 100px #18302126}dialog::backdrop{background:#23382a55;backdrop-filter:blur(3px)}.dialog-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:22px}.dialog-top h2{font:32px var(--serif);margin:7px 0 0}label{display:block;font-size:11px;font-weight:550;margin:14px 0}label>span{font-weight:400;font-size:10px;color:#9ba38f}label input,label select,label textarea{display:block;width:100%;padding:10px 11px;border:1px solid #dde3d6;border-radius:5px;margin-top:7px;background:#fcfdf9;color:var(--ink);outline-color:#8ca67a;font-size:12px}textarea{resize:vertical}.form-row{display:flex;gap:15px}.form-row label{width:50%;margin:0}.form-note{font-size:10px;line-height:1.6;color:#98a08f}.dialog-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:22px}.search-results{position:absolute;top:40px;left:0;min-width:270px;background:#fff;border:1px solid var(--line);box-shadow:0 8px 22px #243a2b18;border-radius:6px;padding:8px;max-height:300px;overflow:auto}.search-results button{display:block;text-align:left;width:100%;padding:10px;border:0;background:none;font-size:12px;border-radius:4px}.search-results button:hover{background:#f0f4ea}.search-results p{font-size:12px;padding:5px}#peopleList{max-height:55vh;overflow:auto}#toast{position:fixed;bottom:27px;left:50%;transform:translateX(-50%);background:#2d4937;color:#fff;padding:13px 22px;border-radius:7px;box-shadow:0 5px 25px #0002;font-size:12px;z-index:30}
@media(min-height:950px){.viewport{height:calc(100vh - 380px)}}@media(max-width:1000px){.header{padding:0 24px;gap:45px}main{padding:28px 24px 0}.saved{display:none}.intro-actions{gap:7px}.canvas-label{display:none}.sample-label{display:none}.toolbar{padding:0 12px;gap:10px}.search-wrap input{width:190px}}@media(max-width:650px){.header{height:68px;padding:0 18px;gap:25px}.brand{font-size:26px}.brand-icon{font-size:32px;margin-right:5px}.header nav{gap:18px}.header nav button{font-size:12px}.prototype{display:none}.header-right{gap:0}.avatar{width:30px;height:30px}main{padding:25px 14px 0}.intro{display:block;margin-bottom:20px}h1{font-size:39px}.eyebrow{font-size:8px}.intro-actions{margin-top:20px}.button{padding:9px 13px}.toolbar{height:55px;gap:5px}.view-label{font-size:10px;gap:5px}.view-label .down{display:none}.small-tree{font-size:20px}.search-wrap input{width:95px;font-size:10px}.search-wrap{gap:3px}.toolbar-divider{margin:0 3px}.toolbar-right{gap:1px}.icon-button{width:25px;font-size:18px}#zoomLabel{min-width:28px;font-size:9px}#collapseBtn{display:none}.viewport{height:500px}.workspace-footer{padding:0 10px;font-size:8px}.legend-separator{margin:0 2px}.workspace-footer button{font-size:8px}.canvas-help{font-size:8px}.below{padding:20px 5px}.below h2{font-size:21px}.below p{font-size:10px;line-height:1.7;max-width:280px}.panel{width:100%;max-width:380px}.toolbar>.toolbar-divider{display:none}}

/* Let the family workspace occupy the browser, with controls sized to the device. */
html,body{width:100%;height:100%;overflow:hidden}
body{height:100dvh;display:flex;flex-direction:column}
.header{height:68px;flex:none;padding:0 28px}
main{width:100%;max-width:none;margin:0;padding:0;flex:1;min-height:0;display:flex;flex-direction:column}
.intro{flex:none;margin:0;padding:19px 28px 20px;gap:16px}
h1{font-size:36px;margin:5px 0 3px}
.intro-actions{margin-top:0;flex-wrap:wrap;justify-content:flex-end}
.workspace{flex:1;min-height:0;display:flex;flex-direction:column;border:0;border-top:1px solid var(--line);border-radius:0;box-shadow:none}
.toolbar{flex:none;padding:0 28px}
.viewport{flex:1;min-height:0;height:auto}
.workspace-footer{flex:none}
.below{display:none}
@media(max-width:800px){.saved{display:none}.header{padding:0 20px;gap:35px}.intro{padding:16px 20px}.toolbar{padding:0 20px}.intro p{font-size:11px}.intro .eyebrow{font-size:8px}h1{font-size:31px}}
@media(max-width:650px){.header{height:58px;padding:0 14px;gap:20px}.header nav{gap:16px}.intro{display:flex;flex-wrap:wrap;align-items:center;padding:12px 14px;gap:10px}.intro .eyebrow,.intro p{display:none}h1{font-size:28px;margin:0}.intro-actions{margin:0;gap:6px;justify-content:flex-start}.intro-actions .button{font-size:10px;padding:7px 10px}.toolbar{height:auto;min-height:78px;flex-wrap:wrap;padding:8px 14px;gap:4px 8px}.view-label{flex:1;font-size:11px}.search-wrap{order:3;flex:0 0 100%;border-top:1px solid var(--line);padding-top:3px}.search-wrap input{width:100%;font-size:12px;padding:6px 0}.toolbar-right{margin-left:auto;gap:5px}.toolbar .icon-button{width:29px;height:29px}.search-results{top:37px;width:100%;min-width:0}.canvas-help{display:none}.workspace-footer{height:36px}.viewport{height:auto;min-height:0}dialog{max-height:calc(100dvh - 24px)}.panel{width:100%;max-width:380px}.header nav span{display:none}}
@media(max-width:360px){.header{gap:12px}.header nav{gap:12px}.brand{font-size:23px}.brand-icon{font-size:28px}.intro-actions{width:100%}.workspace-footer .legend-separator{margin:0}.workspace-footer{padding:0 7px;font-size:7px}.workspace-footer button{font-size:7px}}
@media(max-height:500px) and (min-width:651px){.header{height:48px}.intro{padding:8px 20px}.intro .eyebrow,.intro p{display:none}h1{font-size:28px}.toolbar{height:44px}.workspace-footer{height:28px}.canvas-label,.canvas-help{display:none}}
.auth-screen{position:fixed;inset:0;z-index:20;background:#f2f4ed;display:flex;align-items:center;justify-content:center;padding:20px;overflow:auto}.auth-card{width:430px;max-width:100%;background:#fff;padding:35px;border:1px solid #dde3d6;border-radius:12px;box-shadow:0 12px 50px #243a2b0a}.auth-card .brand{margin-bottom:30px}.auth-card h1{font-size:40px}.auth-card>p{color:var(--muted);font-size:12px;line-height:1.6}.auth-card form>.button{width:100%;justify-content:center;padding:12px;margin-top:8px}.text-button{border:0;background:none;padding:8px 0;font-size:11px;color:var(--green);text-align:left}.auth-card>.text-button{margin-top:14px}.error-message{font-size:12px;color:#a14035;line-height:1.6}.tree-row{border-bottom:1px solid var(--line);padding:12px 0;display:flex;gap:12px;align-items:center}.tree-open{flex:1;border:0;background:none;text-align:left;padding:8px 0}.tree-open strong{display:block;font-size:14px}.tree-open small{display:block;font-size:10px;color:var(--muted);margin-top:5px}.danger{color:#9f5d51}#createTreeForm{border-top:1px solid var(--line);margin-top:20px;padding-top:15px}#createTreeForm h3{font:24px var(--serif);margin:10px 0}.activity-entry{padding:13px 0;border-bottom:1px solid var(--line)}.activity-entry strong{display:block;font-size:12px}.activity-entry small{display:block;font-size:10px;color:var(--muted);margin-top:5px}#saveRecovery{position:fixed;bottom:0;left:0;right:0;background:#fff4dc;border-top:1px solid #dcc591;padding:12px 20px;z-index:12;display:flex;gap:15px;align-items:center;flex-wrap:wrap;font-size:12px}#saveRecovery span{flex:1;min-width:200px}#saveRecovery button{border:1px solid #cfc2a0;border-radius:4px;background:#fffaf0;padding:7px;font-size:11px}.header nav{gap:25px}.header{gap:50px}button:disabled{opacity:.55;cursor:wait}@media(max-width:650px){.header{gap:12px;padding:0 10px}.header nav{gap:12px}.header nav button{font-size:10px}.header-right{gap:8px}.header-right>.button{padding:6px;font-size:9px}.avatar{display:none}.brand{font-size:23px}.brand-icon{font-size:25px}.auth-card{padding:25px}.auth-screen{align-items:safe center}.tree-row{gap:9px}}@media(max-width:360px){.brand{font-size:21px}.brand-icon{display:none}.header nav{gap:10px}.header{gap:10px}}
.google-signin{margin:22px 0 0}.auth-divider{display:flex;align-items:center;gap:12px;font-size:10px;color:var(--muted);margin:18px 0}.auth-divider:before,.auth-divider:after{content:'';height:1px;background:var(--line);flex:1}#googleLinkButton{margin-top:15px}#accountMessage{font-size:12px;line-height:1.7;color:var(--muted)}#adminLink{text-decoration:none}@media(max-width:650px){.header{flex-wrap:wrap;height:auto;min-height:78px;padding:8px 12px;gap:5px}.header nav{order:3;flex:0 0 100%;height:28px;gap:25px}.header-right{gap:7px}.header-right .avatar{display:inline-grid;width:28px;height:28px;font-size:9px}.header-right>.button{font-size:10px;padding:6px 8px}.brand-icon{display:block}.header nav button{font-size:11px}}
.community-dialog{width:760px}.community-intro{font-size:12px;line-height:1.8;color:var(--muted);margin-bottom:22px}.discovery-card{display:flex;align-items:center;gap:14px;border:1px solid var(--line);padding:16px;border-radius:8px;margin-top:12px}.discovery-card>div:nth-child(2){flex:1}.discovery-card h3,.request-card h3{font-family:var(--serif);font-size:26px;font-weight:400;margin:0 0 5px}.discovery-card p,.request-card p{font-size:11px;line-height:1.7;color:var(--muted);margin:0 0 5px}.discovery-card small,.request-card small{font-size:10px;color:#929d87}.community-empty{padding:30px 12px;color:var(--muted);font-size:12px;line-height:1.8;text-align:center}.community-pagination{display:flex;align-items:center;justify-content:space-between;margin-top:18px;gap:10px;font-size:10px;color:var(--muted)}.request-card{border:1px solid var(--line);padding:20px;border-radius:8px;margin:14px 0}.request-head{display:flex;justify-content:space-between;margin-bottom:12px;font-size:9px;letter-spacing:1px;text-transform:uppercase;color:var(--muted)}.request-status{color:var(--green)}.request-actions{display:flex;gap:8px;margin-top:14px}.request-card blockquote{margin:12px 0;padding:9px 13px;background:#f4f6ef;border-left:2px solid #bccbab;font-size:12px;line-height:1.6;white-space:pre-wrap}.sharing-row{display:flex;align-items:center;gap:15px;justify-content:space-between;padding:13px 0;border-bottom:1px solid var(--line)}.sharing-row strong{font-size:12px}.sharing-row small{display:block;font-size:10px;color:var(--muted);margin-top:5px}.header{gap:28px}.header nav{gap:20px}@media(max-width:850px){.header{gap:18px;padding:0 18px}.header nav{gap:13px}.header nav button{font-size:11px}.header-right{gap:7px}}@media(max-width:650px){.header{padding:8px 12px}.header nav{overflow-x:auto;gap:22px;flex-shrink:0}.header nav button{white-space:nowrap;flex-shrink:0}.community-dialog{padding:22px}.discovery-card{flex-wrap:wrap;gap:10px}.discovery-card .button{margin-left:45px}.sharing-row{gap:8px}.sharing-row .button{font-size:9px;padding:7px}.request-card{padding:15px}.intro-actions{flex-wrap:wrap}.intro-actions .button{font-size:10px}}
body[data-tree-access=viewer] .card-plus{display:none}
.date-fieldset{border:1px solid var(--line);border-radius:8px;padding:12px 14px;margin:18px 0}.date-fieldset legend{font-size:11px;color:var(--green);padding:0 6px;font-weight:600}.date-grid{display:grid;grid-template-columns:1fr 1.3fr .8fr 1.6fr;gap:9px}.date-grid label{margin:0;min-width:0}.date-grid input,.date-grid select{padding:9px 6px;font-size:11px;min-width:0}.date-fieldset>label{margin-bottom:0}.portrait img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}.photo-controls{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:15px}.photo-controls a{text-decoration:none}.life-vitals p{font-size:12px;line-height:1.8}.timeline-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;gap:8px}.timeline-heading h3{margin:0}.timeline-heading .button{font-size:10px;padding:8px 10px}.life-event{border-left:2px solid #d5dfcb;padding:0 0 22px 16px;margin-left:5px;position:relative}.life-event:before{content:'';width:7px;height:7px;background:#9bb48b;border-radius:50%;position:absolute;top:3px;left:-4px}.life-event h4{font:23px var(--serif);margin:6px 0}.event-date{font-size:10px;color:#8a987e}.event-place{font-size:11px;color:#7f8d73}.life-event p{font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.8}.event-actions{display:flex;gap:18px}.event-pagination{display:flex;justify-content:space-between;align-items:center;font-size:9px;color:var(--muted)}@media(max-width:480px){.date-grid{grid-template-columns:1fr 1fr}.date-grid input,.date-grid select{font-size:12px;padding:10px 7px}.date-fieldset{padding:12px}.panel{padding:20px}.panel-dates{font-size:12px}}
