:root{--ink: #2a2826;--ink-soft: #5a5650;--paper: #f7f4ef;--paper-deep: #efeae2;--leaf: #2f5d4a;--leaf-soft: #4a7a64;--blush: #c4a484;--line: rgba(42, 40, 38, .12);--shadow: 0 18px 50px rgba(42, 40, 38, .1);--font-hand: "Caveat", cursive;--font-display: "Fraunces", Georgia, serif;--font-body: "Nunito", system-ui, sans-serif;--blood: #8b0000;--nav-h: 88px;color:var(--ink);background:var(--paper);font-family:var(--font-body);line-height:1.55;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*,*:before,*:after{box-sizing:border-box}html,body,#root{min-height:100%;margin:0;background:var(--paper)}body{background:var(--paper)}a{color:inherit;text-decoration:none}button,input,textarea,select{font:inherit}img{max-width:100%;display:block}.app-shell{min-height:100vh;display:flex;flex-direction:column}.main{flex:1}.topnav{position:sticky;top:0;z-index:40;min-height:var(--nav-h);display:flex;align-items:center;padding:.75rem 1.25rem;background:var(--paper);border:none;isolation:isolate}.topnav:after{content:"";position:absolute;left:0;right:0;top:100%;height:3.25rem;pointer-events:none;background:linear-gradient(to bottom,var(--paper) 0%,color-mix(in srgb,var(--paper) 72%,transparent) 45%,transparent 100%)}.topnav:has(.nav-row.open):after{opacity:0}.nav-row{display:flex;align-items:center;justify-content:space-evenly;width:100%;gap:.5rem}.brand{display:flex;flex-direction:column;align-items:center;line-height:1;text-align:center;flex:1.4 1 0;min-width:max-content;z-index:1}.brand-mark{font-family:var(--font-hand);font-size:clamp(1.85rem,3.2vw,2.6rem);font-weight:700;color:var(--blood);letter-spacing:.01em;white-space:nowrap}.brand-sub{font-family:var(--font-hand);font-size:.95rem;letter-spacing:.04em;text-transform:none;color:var(--ink-soft);margin-top:.1rem;white-space:nowrap}.nav-link{padding:0;border-radius:0;font-family:var(--font-hand);font-size:clamp(1.15rem,1.6vw,1.35rem);font-weight:600;color:var(--ink);background:transparent;transition:color .2s ease,transform .2s ease;text-align:center;flex:1 1 0;white-space:nowrap}.nav-link:hover,.nav-link.active{color:var(--blood);background:transparent;transform:translateY(-1px)}.menu-btn{display:none;position:absolute;right:1.25rem;top:50%;transform:translateY(-50%);background:transparent;border:none;padding:.25rem;cursor:pointer;color:var(--ink)}@media(max-width:1100px){.menu-btn{display:inline-flex}.topnav{justify-content:center;padding-right:3rem}.nav-row{display:none}.nav-row.open{display:flex;flex-direction:column;align-items:center;gap:.65rem;position:absolute;top:100%;left:0;right:0;z-index:1;padding:.75rem 1rem 1.5rem;background:linear-gradient(to bottom,var(--paper) 0%,var(--paper) 70%,color-mix(in srgb,var(--paper) 0%,transparent) 100%);margin-bottom:.35rem}.nav-link{flex:none}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;border:none;border-radius:999px;padding:.65rem 1.15rem;cursor:pointer;font-weight:700;transition:transform .15s ease,background .2s ease,box-shadow .2s ease}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn-primary{background:var(--leaf);color:#f7f4ef;box-shadow:0 8px 20px #2f5d4a40}.btn-primary:hover{background:var(--leaf-soft)}.btn-ghost{background:transparent;color:var(--ink);border:1px solid var(--line)}.btn-ghost:hover{background:#2a28260a}.btn-danger{background:#8b3a3a;color:#fff}.btn-sm{padding:.4rem .85rem;font-size:.88rem}.hero{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:1.75rem;padding:clamp(1rem,3vw,2rem) 1.25rem 3rem;min-height:auto;animation:fadeIn .9s ease both}.hero-frame{width:min(980px,94vw);margin:0 auto;animation:riseIn .85s ease both}.hero-slideshow{position:relative;overflow:hidden;aspect-ratio:3 / 2;background:var(--paper)}.hero-slideshow:after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;box-shadow:inset 0 0 48px 28px var(--paper),inset 0 0 90px 55px var(--paper)}.hero-slideshow img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;opacity:0;transition:opacity var(--hero-fade, 1.2s) ease-in-out;filter:contrast(1.05);pointer-events:none;will-change:opacity;z-index:0}.hero-slideshow img.is-active{opacity:1;z-index:1}.hero-slideshow img.is-dim{opacity:.2;z-index:1}.hero-slideshow img.is-incoming{opacity:1;z-index:2}.hero-frame img{width:100%;height:auto;display:block;filter:contrast(1.05)}.hero-copy{position:relative;z-index:1;text-align:center;color:var(--ink);max-width:32rem;animation:riseIn 1s .12s ease both}.hero-line{font-family:var(--font-hand);font-size:clamp(1.45rem,3vw,1.85rem);font-weight:500;margin:0 0 1.25rem;color:var(--ink-soft);line-height:1.25}.hero-ctas{display:flex;flex-wrap:wrap;gap:.75rem;justify-content:center}.home-cookbook{padding:.5rem 1.25rem 4rem}.home-cookbook-inner{width:min(980px,94vw);margin:0 auto;display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);align-items:center;gap:clamp(1.5rem,4vw,3rem)}.home-cookbook-copy{animation:riseIn .85s ease both}.home-cookbook-copy h2{font-family:var(--font-hand);font-size:clamp(2.4rem,5vw,3.4rem);font-weight:700;color:var(--blood);margin:0 0 .65rem;line-height:.95}.home-cookbook-copy p{margin:0 0 1.35rem;color:var(--ink-soft);font-size:1.05rem;max-width:26rem;line-height:1.45}.home-cookbook-art{position:relative;animation:riseIn 1s .1s ease both}.home-cookbook-art:after{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;box-shadow:inset 0 0 36px 22px var(--paper),inset 0 0 70px 42px var(--paper)}.home-cookbook-art img{width:100%;height:auto;display:block;mix-blend-mode:multiply}@media(max-width:760px){.home-cookbook-inner{grid-template-columns:1fr;text-align:center}.home-cookbook-copy p{margin-left:auto;margin-right:auto}.home-cookbook-art{order:-1;max-width:320px;margin:0 auto}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes riseIn{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}.page{width:min(1100px,calc(100% - 2rem));margin:0 auto;padding:2.5rem 0 4rem;animation:riseIn .55s ease both}.page.tree-page{width:min(1280px,calc(100% - 1rem))}.page-header{margin-bottom:2rem}.page-header h1{font-family:var(--font-hand);font-size:clamp(2.6rem,6vw,3.8rem);margin:0;line-height:1;font-weight:600}.page-header p{margin:.6rem 0 0;color:var(--ink-soft);max-width:36rem}.section-rule{height:1px;background:var(--line);border:none;margin:1.25rem 0 1.75rem}.book-shelf{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;justify-items:center;max-width:520px;margin-left:auto;margin-right:auto}@media(max-width:700px){.book-shelf{grid-template-columns:repeat(2,1fr);max-width:340px}}@media(max-width:420px){.book-shelf{grid-template-columns:1fr;max-width:160px}}.cookbook-search{position:relative;width:min(340px,100%);margin:.25rem 0 .75rem}.cookbook-search-icon{position:absolute;left:.75rem;top:50%;transform:translateY(-50%);color:var(--ink-soft);pointer-events:none}.cookbook-search input{width:100%;padding:.55rem 2rem .55rem 2.15rem;border:1px solid var(--line);background:#fffdf8;font:inherit;color:var(--ink)}.cookbook-search input:focus{outline:2px solid rgba(47,93,74,.25);outline-offset:1px}.cookbook-search-clear{position:absolute;right:.4rem;top:50%;transform:translateY(-50%);border:none;background:transparent;color:var(--ink-soft);cursor:pointer;display:grid;place-items:center;padding:.3rem}.cookbook-search-results ul{list-style:none;margin:.75rem 0 0;padding:0;display:grid;gap:.45rem}.cookbook-search-hit{display:block;padding:.75rem .9rem;background:#fffdf8;border:1px solid var(--line);color:inherit;text-decoration:none}.cookbook-search-hit:hover{border-color:var(--leaf)}.cookbook-search-hit strong{display:block;font-family:var(--font-hand);font-size:1.35rem;font-weight:600;line-height:1.1}.cookbook-search-hit .muted{display:block;font-size:.85rem;margin:.15rem 0 .35rem}.book-spine{width:100%;max-width:148px;aspect-ratio:3 / 4;border:none;cursor:pointer;border-radius:3px 10px 10px 3px;padding:.85rem .65rem;text-align:center;color:#f7f4ef;background:linear-gradient(90deg,rgba(0,0,0,.18) 0 6px,transparent 6px),linear-gradient(160deg,var(--leaf) 0%,#1f3f32 100%);box-shadow:4px 8px 18px #2a282629;transition:transform .25s ease,box-shadow .25s ease;display:flex;flex-direction:column;justify-content:space-between;align-items:center;animation:riseIn .6s ease both;text-decoration:none}.book-spine:nth-child(2){background:linear-gradient(90deg,rgba(0,0,0,.18) 0 8px,transparent 8px),linear-gradient(160deg,#6b4e37,#3d2b1c)}.book-spine:nth-child(3){background:linear-gradient(90deg,rgba(0,0,0,.18) 0 8px,transparent 8px),linear-gradient(160deg,#3d5568,#243542)}.book-spine:nth-child(4){background:linear-gradient(90deg,rgba(0,0,0,.18) 0 8px,transparent 8px),linear-gradient(160deg,#7a4e5a,#4a2d36)}.book-spine:nth-child(5){background:linear-gradient(90deg,rgba(0,0,0,.18) 0 8px,transparent 8px),linear-gradient(160deg,#5a6b3d,#313c20)}.book-spine:nth-child(6){background:linear-gradient(90deg,rgba(0,0,0,.18) 0 8px,transparent 8px),linear-gradient(160deg,#4a5f78,#2a3748)}.book-spine:hover{transform:translateY(-6px) rotate(-1deg);box-shadow:7px 14px 26px #2a282633}.book-spine h3{font-family:var(--font-hand);font-size:1.35rem;margin:0;line-height:1.05;writing-mode:horizontal-tb;text-align:center;width:100%}.book-spine span{font-size:.72rem;opacity:.85;text-align:center;width:100%}.postcard-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:1.35rem}.postcard{background:#fffdf8;border:1px solid var(--line);box-shadow:var(--shadow);padding:0;overflow:hidden;cursor:pointer;text-align:left;color:inherit;transition:transform .2s ease;position:relative}.postcard:after{content:"";position:absolute;inset:10px;border:1px dashed rgba(42,40,38,.12);pointer-events:none}.postcard:hover{transform:translateY(-4px) rotate(-.4deg)}.postcard-img{height:180px;background:repeating-linear-gradient(-12deg,transparent,transparent 10px,rgba(42,40,38,.03) 10px,rgba(42,40,38,.03) 11px),var(--paper-deep);display:grid;place-items:center;color:var(--ink-soft);font-family:var(--font-hand);font-size:1.6rem;position:relative;z-index:1}.postcard-img>img{width:100%;height:100%;object-fit:cover}.postcard-plate{position:relative;width:148px;height:148px;filter:drop-shadow(0 10px 16px rgba(42,40,38,.18))}.postcard-plate-food{position:absolute;inset:20px;width:calc(100% - 40px);height:calc(100% - 40px);border-radius:50%;object-fit:cover;display:block;background:#efe6d8;z-index:0}.postcard-plate-rim{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1}.postcard-body{padding:1.1rem 1.2rem 1.35rem;position:relative;z-index:1}.postcard-body h3{font-family:var(--font-hand);font-size:1.75rem;margin:0 0 .35rem;line-height:1}.postcard-meta{font-size:.85rem;color:var(--ink-soft)}.recipe-sheet{background:#fffdf8;border:1px solid var(--line);box-shadow:var(--shadow);padding:clamp(1.25rem,3vw,2.25rem);position:relative}.recipe-sheet:before{content:"";position:absolute;inset:14px;border:1px dashed rgba(42,40,38,.14);pointer-events:none}.recipe-layout{display:grid;gap:1.5rem}@media(min-width:800px){.recipe-layout{grid-template-columns:1.1fr .9fr}}.recipe-photo{min-height:240px;background:var(--paper-deep);overflow:hidden;position:relative}.recipe-photo img{width:100%;height:100%;object-fit:cover;min-height:280px;display:block}.recipe-photo-note{margin:0;padding:.55rem .75rem;font-size:.88rem;color:var(--ink-soft);background:#fffdf8f2;border-top:1px solid var(--line)}.recipe-photo-gallery{display:flex;flex-direction:column;gap:.75rem}.recipe-photo-thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:.55rem}.recipe-photo-thumb{margin:0;background:var(--paper-deep);border:1px solid var(--line);overflow:hidden}.recipe-photo-thumb img{width:100%;aspect-ratio:1;object-fit:cover;display:block}.recipe-photo-thumb figcaption{padding:.35rem .45rem;font-size:.75rem;color:var(--ink-soft);line-height:1.25}.recipe-photo-add{display:flex;justify-content:flex-start}.recipe-photo-default{border:1px solid var(--line);overflow:hidden;background:var(--paper-deep)}.recipe-photo-default img{width:100%;max-height:220px;object-fit:cover;display:block}.recipe-photo-edit-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.75rem}.recipe-photo-edit-card{display:flex;flex-direction:column;gap:.4rem}.recipe-photo-edit-thumb{position:relative;border:1px solid var(--line);overflow:hidden;background:var(--paper-deep)}.recipe-photo-edit-thumb img{width:100%;aspect-ratio:1;object-fit:cover;display:block}.cover-badge{position:absolute;left:.4rem;top:.4rem;background:#2f5d4aeb;color:#fff;font-size:.68rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:.15rem .4rem}.recipe-photo-pending-row{display:flex;flex-wrap:wrap;gap:.45rem;margin:.75rem 0}.recipe-photo-pending-row img{width:72px;height:72px;object-fit:cover;border:1px solid var(--line)}.recipe-sheet h1{font-family:var(--font-hand);font-size:clamp(2.4rem,5vw,3.4rem);margin:0 0 .35rem;line-height:.95}.meta-row{display:flex;flex-wrap:wrap;gap:.75rem 1.25rem;color:var(--ink-soft);font-size:.92rem;margin-bottom:1rem}.recipe-sheet h2{font-family:var(--font-display);font-size:1.15rem;margin:1.25rem 0 .5rem}.recipe-sheet ul,.recipe-sheet ol{margin:0;padding-left:1.2rem}.recipe-sheet li+li{margin-top:.35rem}.story{font-family:var(--font-hand);font-size:1.45rem;color:var(--ink-soft);margin:.75rem 0 0}.recipe-origin{margin:.35rem 0 0;font-family:var(--font-hand);font-size:1.35rem}.recipe-origin .muted{display:inline-block;margin-right:.45rem;font-family:var(--font-body);font-size:.75rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;vertical-align:middle}.flair-row{display:flex;flex-wrap:wrap;gap:.45rem .75rem;align-items:center;margin:.35rem 0 .5rem}.flair-chip{font-family:var(--font-hand);font-size:1.25rem;font-weight:600;background:none;border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;gap:.2rem;line-height:1}.flair-chip.static{cursor:default}.flair-chip:not(.static):hover{text-decoration:underline}.flair-create input[type=color]{width:48px;height:40px;padding:.15rem;border-radius:8px;border:1px solid var(--line);background:#fff;cursor:pointer}.flair-preview{font-family:var(--font-hand);font-size:1.5rem;margin:0}.stack{display:flex;flex-direction:column;gap:.85rem}.row{display:flex;flex-wrap:wrap;gap:.65rem;align-items:center}.field{display:flex;flex-direction:column;gap:.35rem}.field label{font-size:.82rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft)}.field input,.field textarea,.field select{border:1px solid var(--line);background:#fff;border-radius:12px;padding:.7rem .85rem;color:var(--ink)}.field textarea{min-height:110px;resize:vertical}.panel{background:#fffdf8cc;border:1px solid var(--line);padding:1.15rem 1.25rem;margin-top:1.25rem}.panel h3{font-family:var(--font-display);margin:0 0 .75rem;font-size:1.1rem}.signed-in-as{margin:.75rem 0 0}.signed-in-as strong{color:var(--ink);font-weight:700}.peer-edit-banner{padding:.85rem 1rem;background:color-mix(in srgb,var(--leaf) 8%,#fffdf8);border:1px solid color-mix(in srgb,var(--leaf) 22%,var(--line))}.peer-edit-banner strong{font-family:var(--font-display);display:block;margin-bottom:.25rem}.peer-edit-banner .muted{margin:0 0 .85rem}.peer-proposal{padding:1rem 0;border-top:1px solid var(--line)}.peer-proposal:first-of-type{border-top:none;padding-top:0}.peer-proposal.is-leading{background:color-mix(in srgb,var(--leaf) 6%,transparent);margin:0 -.5rem;padding-left:.5rem;padding-right:.5rem}.peer-proposal-top{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start;margin-bottom:.65rem}.peer-proposal-top p{margin:.35rem 0 0}.peer-leading{display:inline-block;font-size:.72rem;letter-spacing:.04em;text-transform:uppercase;color:var(--leaf);font-weight:700;margin-right:.45rem}.peer-votes{display:flex;align-items:center;gap:.35rem;flex-shrink:0}.peer-vote{display:inline-flex;align-items:center;gap:.3rem;border:1px solid var(--line);background:#fffdf8;color:var(--ink-soft);padding:.3rem .5rem;cursor:pointer;font:inherit;font-size:.85rem}.peer-vote.is-on{border-color:var(--leaf);color:var(--leaf);background:color-mix(in srgb,var(--leaf) 10%,#fffdf8)}.peer-vote.is-on.down{border-color:var(--blood);color:var(--blood);background:color-mix(in srgb,var(--blood) 8%,#fffdf8)}.peer-score{min-width:1.75rem;text-align:center;font-weight:700;font-size:.9rem;color:var(--ink)}.peer-preview{margin-top:.85rem;padding-top:.85rem;border-top:1px dashed var(--line)}.peer-preview h4{margin:.75rem 0 .35rem;font-family:var(--font-display);font-size:.95rem}.comment{padding:.75rem 0;border-top:1px solid var(--line)}.comment:first-of-type{border-top:none;padding-top:0}.comment strong{display:block;margin-bottom:.2rem}.muted{color:var(--ink-soft);font-size:.9rem}.empty{padding:2rem;text-align:center;color:var(--ink-soft);border:1px dashed var(--line);background:#ffffff59}.modal-backdrop{position:fixed;inset:0;background:#2a282673;display:grid;place-items:center;z-index:80;padding:1rem;animation:fadeIn .2s ease}.modal{width:min(440px,100%);background:var(--paper);border:1px solid var(--line);box-shadow:var(--shadow);padding:1.5rem;animation:riseIn .25s ease}.modal h2{font-family:var(--font-hand);font-size:2.2rem;margin:0 0 .35rem;line-height:1}.tabs{display:flex;gap:.35rem;margin:1rem 0}.tab{flex:1;border:1px solid var(--line);background:transparent;padding:.55rem;border-radius:999px;cursor:pointer;font-weight:700}.tab.active{background:var(--leaf);color:#f7f4ef;border-color:var(--leaf)}.divider{display:flex;align-items:center;gap:.75rem;color:var(--ink-soft);font-size:.85rem;margin:1rem 0}.divider:before,.divider:after{content:"";flex:1;height:1px;background:var(--line)}.google-btn{width:100%;display:flex;justify-content:center;min-height:44px}.error{color:#8b3a3a;font-size:.9rem;margin:.35rem 0 0}.list-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem}.soft-block{background:#fffdf8bf;border:1px solid var(--line);padding:1.15rem 1.25rem}.soft-block h3{font-family:var(--font-hand);font-size:1.7rem;margin:0 0 .35rem;line-height:1}.news-item{padding:1.35rem 0;border-bottom:1px solid var(--line)}.news-item h3{font-family:var(--font-display);margin:0 0 .35rem}.album-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:1rem}.album-card{position:relative}.album-card-link{display:block}.album-card-delete{position:absolute;top:.5rem;right:.5rem;opacity:0;z-index:2;transition:opacity .2s ease}.album-card:hover .album-card-delete{opacity:1}.album-tile{position:relative;overflow:hidden;background:var(--paper-deep);aspect-ratio:1;border:1px solid var(--line)}.album-tile img,.album-tile video,.album-tile>div{width:100%;height:100%;object-fit:cover;transition:transform .35s ease}.album-media-open img,.album-media-open video,.album-media-open>div{width:100%;height:100%;object-fit:cover}.album-tile:hover img,.album-tile:hover video{transform:scale(1.04)}.album-empty-cover{width:100%;height:100%;display:grid;place-items:center;color:var(--ink-soft)}.album-tile .cap{position:absolute;left:0;right:0;bottom:0;padding:.65rem .75rem;background:linear-gradient(transparent,#2a2826b3);color:#f7f4ef;font-size:.85rem}.album-tile .delete{position:absolute;top:.5rem;right:.5rem;opacity:0;transition:opacity .2s ease;z-index:2}.album-tile:hover .delete{opacity:1}.album-media-open{display:block;width:100%;height:100%;padding:0;border:none;background:transparent;cursor:pointer;position:absolute;inset:0}.album-media-tile .cap{pointer-events:none}.video-badge{position:absolute;top:.5rem;left:.5rem;font-family:var(--font-hand);font-size:1rem;background:#2a2826b3;color:#f7f4ef;padding:.15rem .55rem;z-index:1}.media-lightbox{width:min(720px,100%)}.lightbox-media{width:100%;max-height:60vh;object-fit:contain;background:#111}.ai-upload-modal{width:min(520px,100%)}.ai-upload-modal h2{font-family:var(--font-hand);font-size:2rem;margin:0;line-height:1}.drop-zone{margin-top:1rem;border:2px dashed var(--line);background:#fafafa;min-height:200px;display:grid;place-items:center;cursor:pointer;overflow:hidden;transition:border-color .2s ease,background .2s ease}.drop-zone.dragging{border-color:var(--leaf);background:#2f5d4a0f}.drop-zone img{width:100%;max-height:280px;object-fit:contain;display:block}.drop-zone-empty{display:flex;flex-direction:column;align-items:center;gap:.35rem;padding:1.5rem;color:var(--ink-soft);text-align:center}.drop-zone-empty strong{font-family:var(--font-hand);font-size:1.5rem;color:var(--ink);font-weight:600}.drop-zone-empty span{font-size:.9rem}.lineage-chapter{margin-bottom:2rem}.lineage-chapter h2{font-family:var(--font-hand);font-size:2.2rem;margin:0 0 .5rem;line-height:1}.lineage-chapter p{font-family:var(--font-display);font-size:1.08rem;color:var(--ink-soft);max-width:42rem}.tree-gate-page{display:grid;place-items:center;min-height:min(70vh,640px)}.tree-gate{width:min(460px,100%);background:#fffdf8;border:1px solid var(--line);box-shadow:var(--shadow);padding:2rem 1.75rem;text-align:center}.tree-gate h1{font-family:var(--font-hand);font-size:2.4rem;margin:.35rem 0 .5rem;line-height:1}.tree-gate-icon{width:56px;height:56px;margin:0 auto;border-radius:50%;display:grid;place-items:center;background:#8b000014;color:#8b0000}.tree-gate form{text-align:left;margin-top:1.25rem}.tree-gate-quiz{margin-top:1.25rem}.tree-gate-or{margin:1.1rem 0 .35rem}.tree-gate-password-toggle{border:none;background:none;padding:0;font:inherit;font-size:.9rem;color:var(--leaf);cursor:pointer;text-decoration:underline;text-underline-offset:2px}.tree-gate-password-toggle:hover{color:var(--ink)}.tree-canvas-wrap{width:100%;background:var(--paper)}.tree-canvas{width:100%;overflow:visible;padding:1.25rem 0 .5rem;background:var(--paper)}.tree-canvas-scale{width:100%;overflow:hidden}.tree-forest{display:flex;justify-content:center;align-items:flex-start;gap:1.25rem;width:max-content;max-width:none;margin:0 auto;padding:.35rem .5rem 1rem;will-change:transform}.tree-branch{display:flex;flex-direction:column;align-items:center}.tree-couple{display:flex;align-items:flex-start;justify-content:center;gap:.25rem;position:relative;z-index:1}.hair-style-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(76px,1fr));gap:.45rem}.hair-style-btn{border:1px solid var(--line);background:#fff;border-radius:12px;padding:.35rem;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:.2rem;font-size:.7rem;color:var(--ink-soft)}.hair-style-btn.active{border-color:var(--leaf);box-shadow:0 0 0 2px #2f5d4a26}.hair-style-thumb{width:48px;height:48px;border-radius:50%;overflow:hidden}.person-contact-grid{display:grid;gap:.45rem}.person-contact-grid p{margin:0;display:grid;gap:.1rem}.person-contact-grid .muted{font-size:.78rem;text-transform:uppercase;letter-spacing:.04em}.person-kids-list{display:flex;flex-wrap:wrap;gap:.55rem}.person-kid-chip{display:flex;flex-direction:column;align-items:center;gap:.3rem;border:1px solid var(--line);background:#fff;padding:.45rem .55rem;cursor:pointer;font-size:.78rem;font-weight:600;color:inherit;min-width:76px}.person-kid-chip:hover{border-color:var(--leaf)}.tree-person-wrap{display:flex;align-items:center;gap:.35rem}.tree-person{display:flex;flex-direction:column;align-items:center;gap:.4rem;border:none;background:transparent;cursor:pointer;padding:.25rem .25rem .5rem;color:inherit;min-width:96px}.tree-person.selected .family-avatar,.tree-person:hover .family-avatar{transform:translateY(-3px)}.tree-person-name{font-family:var(--font-body);font-weight:700;font-size:.9rem;text-align:center;line-height:1.25;max-width:120px;overflow:visible}.tree-role-icon{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;margin-top:.2rem;flex-shrink:0}.tree-role-icon.born{color:#2f5d4a;background:#2f5d4a1f}.tree-role-icon.married{color:#9a3412;background:#9a34121f}.person-role-line{align-items:center;gap:.4rem;flex-wrap:wrap}.tree-person.married-in .tree-person-name{font-weight:600}.tree-branch.depth-2 .tree-person-name,.tree-branch.depth-3 .tree-person-name{font-size:.82rem;max-width:100px}.tree-person-years{font-size:.75rem;font-weight:600;text-align:center;color:var(--ink-soft)}.tree-heart{display:grid;place-items:center;margin-top:1.85rem;flex-shrink:0;width:28px;height:28px;border-radius:50%}.tree-heart.married{color:#0284c7;background:#0ea5e926}.tree-heart.divorced{color:#b91c1c;background:#b91c1c1f;outline:2px dashed #b91c1c;outline-offset:1px;width:30px;height:30px}.tree-key-sample{margin-top:0;width:24px;height:24px}.tree-key-sample.divorced{width:26px;height:26px}.tree-descendants{display:flex;flex-direction:column;align-items:center;width:100%;margin-top:.15rem}.tree-stem{width:2px;height:24px;background:#cbd5e1;flex-shrink:0}.tree-child-row{display:flex;justify-content:center;align-items:flex-start;gap:0;width:100%;position:relative}.tree-child-slot{display:flex;flex-direction:column;align-items:center;position:relative;padding:24px .85rem 0}.tree-child-slot:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:#cbd5e1}.tree-child-slot:first-child:before{left:50%}.tree-child-slot:last-child:before{right:50%}.tree-child-slot:only-child:before{display:none}.tree-child-slot:after{content:"";position:absolute;top:0;left:50%;width:2px;height:24px;background:#cbd5e1;transform:translate(-50%)}.tree-child-row.single .tree-child-slot{padding-top:0}.tree-child-row.single .tree-child-slot:after{display:none}.tree-branch.depth-1{padding:0 .15rem}.tree-generation{position:relative;margin-bottom:2.75rem}.tree-branch-rail{width:min(70%,520px);height:28px;margin:0 auto 1.25rem;border-top:2px solid #cbd5e1;border-left:2px solid #cbd5e1;border-right:2px solid #cbd5e1;border-radius:12px 12px 0 0}.tree-units{display:flex;justify-content:center;align-items:flex-start;flex-wrap:wrap;gap:1.75rem 2.5rem}.tree-unit{position:relative;display:flex;align-items:flex-start;justify-content:center;gap:.35rem;padding-bottom:1.25rem}.tree-drop-line{position:absolute;left:50%;bottom:0;width:2px;height:18px;background:#cbd5e1;transform:translate(-50%)}.family-avatar{border-radius:50%;overflow:hidden;background:#eef2ff;flex-shrink:0;transition:transform .2s ease}.family-avatar img,.family-avatar .cartoon-avatar-svg{width:100%;height:100%;object-fit:cover;display:block}.tree-color-bar{display:flex;height:10px;border-radius:999px;overflow:hidden;margin:1.25rem 0 .85rem}.tree-color-bar span{flex:1}.tree-key{display:flex;flex-wrap:wrap;justify-content:center;gap:.65rem 1.25rem;padding:.35rem .5rem .5rem;margin-bottom:1rem;font-size:.8rem;color:var(--ink-soft)}.tree-key-item{display:inline-flex;align-items:center;gap:.4rem}.tree-key-ring{width:14px;height:14px;border-radius:50%;flex-shrink:0}.tree-key-ring.solid{box-shadow:0 0 0 2.5px #2f5d4a;background:transparent}.tree-key-ring.dashed{outline:2px dashed #9a3412;outline-offset:0;background:transparent}.avatar-preset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:.55rem}.avatar-preset-btn{border:1px solid var(--line);background:#fff;border-radius:12px;padding:.45rem;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:.25rem;font-size:.72rem;color:var(--ink-soft)}.avatar-preset-btn.active{border-color:var(--leaf);box-shadow:0 0 0 2px #2f5d4a26}.avatar-preset-thumb{width:52px;height:52px;border-radius:50%;overflow:hidden}.ring-color-row{display:flex;flex-wrap:wrap;gap:.45rem}.ring-swatch{width:28px;height:28px;border-radius:50%;border:2px solid transparent;cursor:pointer}.ring-swatch.active{border-color:var(--ink);box-shadow:0 0 0 2px #fff,0 0 0 4px var(--ink)}.person-node{width:180px;background:#fffdf8;border:1px solid var(--line);padding:.95rem 1rem;text-align:center;box-shadow:0 10px 24px #2a282614;cursor:pointer;transition:transform .2s ease,border-color .2s ease}.person-node:hover,.person-node.selected{transform:translateY(-3px);border-color:var(--leaf)}.person-node h4{font-family:var(--font-hand);font-size:1.45rem;margin:0;line-height:1.05}.person-node .years{font-size:.82rem;color:var(--ink-soft);margin-top:.25rem}.gen-label{width:100%;text-align:center;font-size:.75rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:.35rem}.person-modal{width:min(560px,100%);max-height:min(90vh,900px);overflow-y:auto}.person-modal h2{font-family:var(--font-hand);font-size:2.2rem;margin:0;line-height:1}.person-section-title{font-family:var(--font-display);font-size:1rem;margin:.75rem 0 .35rem;color:var(--ink-soft);letter-spacing:.04em;text-transform:uppercase}.footer{border-top:1px solid var(--line);padding:1.25rem 1.5rem;text-align:center;color:var(--ink-soft);font-family:var(--font-body);font-size:.9rem;letter-spacing:.02em}
