:root{--paper:#ead9b7;--paper-light:#fff8e9;--paper-deep:#d8bf8d;--ink:#211712;--muted:#665344;--oxblood:#6f2330;--oxblood-dark:#48141d;--forest:#274c3e;--forest-dark:#17352b;--bronze:#a47135;--gold:#d6ad62;--line:#8a633e;--card:#fffaf0;--shadow:0 15px 34px rgba(53,32,18,.22)}*{box-sizing:border-box}html{min-height:100%}body{margin:0;color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;background:radial-gradient(circle at 18% 10%,rgba(255,255,255,.55),transparent 28%),repeating-linear-gradient(0deg,rgba(91,61,35,.025) 0 1px,transparent 1px 4px),linear-gradient(115deg,#d8bf8d 0%,#f5ead2 45%,#ead5ad 100%);min-height:100vh}a{color:var(--forest-dark)}.site-header{min-height:82px;display:flex;align-items:center;gap:18px;padding:12px 24px;color:#fff8e9;background:linear-gradient(100deg,var(--oxblood-dark),var(--oxblood) 58%,#7f3440);border-bottom:4px solid var(--bronze);position:sticky;top:0;z-index:50;box-shadow:0 8px 24px rgba(47,19,17,.24)}.brand{font-family:Georgia,"Times New Roman",serif;font-size:25px;font-weight:700;margin-right:auto;letter-spacing:.2px;color:#fff8e9;text-decoration:none}.brand small{display:block;font-family:Inter,system-ui,sans-serif;font-size:10px;letter-spacing:2.3px;text-transform:uppercase;color:#e6cfa2;margin-bottom:2px}.site-header nav{display:flex;gap:10px;flex-wrap:wrap}.site-header nav a{color:#fff8e9;text-decoration:none;padding:9px 10px;border-radius:8px;font-weight:700}.site-header nav a:hover{background:#ffffff18}.page-shell{max-width:1450px;margin:0 auto;padding:28px}.site-footer{text-align:center;padding:30px;color:#6f5a49;font-size:13px}.card{background:linear-gradient(#fffdf6,#f7ead1);border:2px solid #b18a59;border-radius:15px;padding:20px;box-shadow:var(--shadow)}.card h1,.card h2,.card h3{font-family:Georgia,serif;color:var(--oxblood-dark)}.landing{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(280px,.8fr);gap:30px;align-items:center;min-height:calc(100vh - 170px)}.landing-copy h1{font:700 clamp(38px,6vw,72px)/1 Georgia,serif;color:var(--oxblood-dark);margin:.2em 0}.landing-copy p{font-size:18px;line-height:1.7;color:#4d3b2d}.founder-photo{min-height:440px;border-radius:50% / 46%;border:6px solid #f8edd7;outline:3px solid var(--gold);outline-offset:6px;box-shadow:0 0 0 10px rgba(164,113,53,.13),0 0 34px 14px rgba(214,173,98,.45),var(--shadow);background:radial-gradient(circle at 50% 27%,#e8d5b7 0 17%,#b89a75 18% 31%,#7a5e47 32% 49%,#49372d 50% 100%);overflow:hidden}.founder-photo img{width:100%;height:100%;object-fit:cover}.btn,.button{display:inline-block;border:1px solid #c49b60;background:#fff6e3;color:#352318;padding:10px 13px;border-radius:9px;cursor:pointer;font-weight:700;text-decoration:none}.btn:hover,.button:hover{transform:translateY(-1px)}.btn.primary,.button.primary{background:var(--forest);color:white;border-color:#416b5b}.btn.danger{background:#8a2838;color:white;border-color:#681d2a}.btn.small{padding:7px 10px;font-size:13px}.form-card{max-width:720px;margin:30px auto}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.field{margin:12px 0}.field label{display:block;font-weight:800;margin:0 0 5px;color:#463326}.field input,.field select,.field textarea,.search-input{width:100%;padding:11px 12px;border:1px solid #aa8a60;border-radius:8px;background:#fffdf6;color:var(--ink);font:inherit}.field textarea{min-height:120px;resize:vertical}.help{font-size:12px;color:var(--muted)}.flash{max-width:900px;margin:0 auto 16px;padding:12px 14px;border-radius:9px;border-left:5px solid}.flash.success{background:#e4f4e7;border-color:#2f7846}.flash.warning{background:#fff1c7;border-color:#b47a25}.flash.error{background:#ffe3df;border-color:#9d1f2e}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:18px}.toolbar .search-input{max-width:360px}.tree-zoom-controls{display:inline-flex;align-items:center;gap:4px;padding:3px;border:1px solid #b99b70;border-radius:10px;background:rgba(255,248,233,.76)}.tree-zoom-controls .btn{min-width:34px;padding:6px 9px}.tree-zoom-value{min-width:58px!important;font-variant-numeric:tabular-nums}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.stat strong{display:block;font:700 28px Georgia,serif;color:var(--oxblood-dark)}table{width:100%;border-collapse:collapse;background:#fffaf0;border:1px solid #c7aa7d}th,td{padding:10px;border-bottom:1px solid #dbc6a5;text-align:left;vertical-align:top}th{background:#ead9b7;color:#3f2c20}.split{display:grid;grid-template-columns:1fr 1fr;gap:20px}.profile-grid{display:grid;grid-template-columns:320px minmax(0,1fr);gap:26px}.profile-photo{width:250px;height:300px;margin:auto;border-radius:12px;background:#8e7255;overflow:hidden;border:5px solid #f5e8ce;box-shadow:var(--shadow)}.profile-photo.deceased{border-radius:50% / 46%;outline:2px solid var(--gold);outline-offset:4px;box-shadow:0 0 0 7px rgba(164,113,53,.16),0 0 23px 10px rgba(214,173,98,.58),inset 0 0 14px rgba(48,28,17,.28)}.profile-photo img{width:100%;height:100%;object-fit:cover;will-change:transform}.facts{display:grid;grid-template-columns:160px 1fr}.facts>div{padding:9px 0;border-bottom:1px solid #d8c09b}.facts .label{font-weight:800;color:var(--forest-dark)}.section-title{margin-top:28px;border-bottom:2px solid #b89667;padding-bottom:7px}.tree-page{max-width:none;padding:0}.tree-layout{display:block;min-height:calc(100vh - 82px)}.tree-canvas{overflow:auto;padding:34px 40px 60px;cursor:grab;scroll-behavior:auto}.tree-canvas.is-panning,.tree-canvas.is-panning *{cursor:grabbing!important;user-select:none}.tree-canvas.is-panning .person-card{transform:none}.tree-columns{display:flex;align-items:flex-start;gap:90px;min-width:1200px;padding:24px;position:relative;isolation:isolate;zoom:1}.generation{display:flex;flex-direction:column;gap:32px;min-width:365px}.generation-title{font:700 14px Georgia,serif;color:var(--oxblood-dark);text-transform:uppercase;letter-spacing:1px}.couple-card{display:flex;gap:22px;align-items:stretch;position:relative;z-index:2}.couple-card:not(.single-partner):not(.solo-card):before{content:"";position:absolute;left:170px;top:50%;width:22px;border-top:4px solid var(--line);z-index:-1}.tree-connectors{position:absolute;left:0;top:0;overflow:visible;pointer-events:none;z-index:0}.tree-trunk,.tree-rail,.tree-branch{fill:none;stroke:var(--line);stroke-linecap:round;stroke-linejoin:round}.tree-trunk{stroke-width:3.8}.tree-rail{stroke-width:3.1;opacity:.96}.tree-branch{stroke-width:2.9}.tree-branch.adopted{stroke-dasharray:9 6}.tree-branch.foster{stroke-dasharray:3 7;stroke-width:2.4}.tree-branch.family{stroke-width:2.9}.person-card{width:170px;background:linear-gradient(#fffdf6,#f7ead1);border:2px solid #b18a59;border-top:5px solid var(--forest);border-radius:15px;padding:10px;text-align:center;box-shadow:var(--shadow);cursor:pointer;transition:.15s;text-decoration:none;color:var(--ink)}.person-card:hover{transform:translateY(-3px)}.person-card .portrait{height:132px;border-radius:9px;background:#8e7255;overflow:hidden;border:4px solid #f5e8ce}.person-card .portrait img{width:100%;height:100%;object-fit:cover;will-change:transform}.person-card.deceased{border-top-color:var(--oxblood)}.person-card.deceased .portrait{width:112px;height:132px;margin:auto;border-radius:50% / 46%;outline:2px solid var(--gold);outline-offset:3px;box-shadow:0 0 0 6px rgba(164,113,53,.16),0 0 22px 8px rgba(214,173,98,.56)}.person-card h3{font:700 16px Georgia,serif;margin:10px 0 3px}.person-card p{margin:0;font-size:12px;color:#725d4b}.tree-panel{position:sticky;top:82px;height:calc(100vh - 82px);overflow:auto;border-left:4px solid var(--bronze);background:#fff8e9ee;padding:24px}.legend{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:9px}.legend-oval{width:24px;height:31px;border-radius:50% / 46%;background:#8d765d;border:2px solid var(--gold);box-shadow:0 0 11px 4px rgba(214,173,98,.5)}.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:15px}.media-item{background:#fffaf0;border:1px solid #c7aa7d;border-radius:12px;padding:10px}.media-thumb{height:170px;background:#e1ceb0;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}.media-thumb img{width:100%;height:100%;object-fit:cover}.comparison{display:grid;grid-template-columns:1fr 1fr;gap:14px}.comparison img{width:100%;max-height:520px;object-fit:contain;background:#211712;border-radius:10px}.rating-stars{display:flex;gap:5px;font-size:24px}.rating-stars label{cursor:pointer}.message-thread{max-width:850px;margin:auto}.message{max-width:75%;padding:11px 13px;border-radius:14px;background:#fffaf0;border:1px solid #c7aa7d;margin:10px 0}.message.mine{margin-left:auto;background:#e7f0e7;border-color:#8da48f}.admin-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.admin-link{text-decoration:none}.admin-link .card{height:100%}.badge{display:inline-block;padding:3px 8px;border-radius:99px;background:#ead9b7;font-size:11px;font-weight:800}.badge.admin{background:#6f2330;color:white}.badge.pending{background:#f3ce75}.muted{color:var(--muted)}code{background:#ead9b7;padding:2px 5px;border-radius:5px}.notice{padding:13px 15px;background:#fff1c7;border-left:5px solid var(--oxblood);border-radius:8px}.danger-box{padding:14px;background:#ffe3df;border:1px solid #d28a82;border-left:5px solid #9d1f2e;border-radius:9px}.install-note{background:#e7f0e7;border-left:5px solid var(--forest);padding:14px;border-radius:8px}
@media(max-width:600px){.page-shell{padding:18px}.landing,.profile-grid,.split{grid-template-columns:1fr}.landing{padding-bottom:25px}.founder-photo{min-height:340px;max-width:360px;margin:auto}.stats,.admin-grid{grid-template-columns:1fr 1fr}.tree-layout{display:block}.tree-panel{display:none}.tree-canvas{padding:20px;cursor:auto}.tree-zoom-controls{display:none}.tree-columns{display:block;min-width:0;padding:0;zoom:1!important}.generation{min-width:0;border-bottom:1px solid #b99b70;padding-bottom:20px;margin-bottom:20px}.couple-card{display:grid;grid-template-columns:1fr 1fr}.tree-connectors,.couple-card:before{display:none}.person-card{width:auto}.form-grid,.comparison{grid-template-columns:1fr}.site-header{position:relative;flex-wrap:wrap}.site-header nav{width:100%}}@media(max-width:560px){.stats,.admin-grid,.couple-card{grid-template-columns:1fr}.facts{grid-template-columns:1fr}.facts .label{padding-bottom:0}.profile-photo{width:210px;height:260px}}

.portrait-focus-previews{display:flex;gap:34px;align-items:flex-start;justify-content:center;margin:24px 0 18px}.portrait-focus-previews>div{text-align:center}.portrait-focus-frame{position:relative;overflow:hidden;background:#8e7255;border:5px solid #f5e8ce;box-shadow:var(--shadow);cursor:grab;touch-action:none;user-select:none}.portrait-focus-frame.is-adjusting{cursor:grabbing}.portrait-focus-frame img{width:100%;height:100%;object-fit:cover;display:block;pointer-events:none;user-select:none;will-change:transform}.portrait-focus-frame.tree-sample{width:170px;height:132px;border-radius:9px}.portrait-focus-frame.profile-sample{width:250px;height:300px;border-radius:12px}.portrait-focus-frame.deceased{border-radius:50% / 46%;outline:2px solid var(--gold);outline-offset:4px;box-shadow:0 0 0 7px rgba(164,113,53,.16),0 0 23px 10px rgba(214,173,98,.58),inset 0 0 14px rgba(48,28,17,.28)}.portrait-focus-frame.tree-sample.deceased{width:112px;height:132px}.focus-crosshair{position:absolute;left:50%;top:50%;width:28px;height:28px;transform:translate(-50%,-50%);border:1px solid rgba(255,255,255,.82);border-radius:50%;box-shadow:0 0 0 1px rgba(0,0,0,.38);pointer-events:none}.focus-crosshair:before,.focus-crosshair:after{content:"";position:absolute;background:rgba(255,255,255,.82);box-shadow:0 0 1px rgba(0,0,0,.8)}.focus-crosshair:before{left:13px;top:-8px;width:1px;height:44px}.focus-crosshair:after{top:13px;left:-8px;height:1px;width:44px}.focus-sliders{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px}.focus-sliders input[type=range]{width:100%}@media(max-width:650px){.portrait-focus-previews{flex-direction:column;align-items:center}.focus-sliders{grid-template-columns:1fr}}


/* Printable family tree --------------------------------------------------- */
.print-tree-heading{display:none}
@media print{
  @page{size:landscape;margin:.35in}
  html,body{background:#fff!important;color:#111!important;overflow:visible!important}
  body.printing-family-tree .site-header,
  body.printing-family-tree .site-footer,
  body.printing-family-tree .toolbar,
  body.printing-family-tree .flash{display:none!important}
  body.printing-family-tree .page-shell{max-width:none!important;width:auto!important;margin:0!important;padding:0!important}
  body.printing-family-tree .tree-layout{display:block!important;min-height:0!important}
  body.printing-family-tree .tree-canvas{overflow:visible!important;padding:0!important;cursor:default!important}
  body.printing-family-tree .print-tree-heading{display:block!important;margin:0 0 14px;padding:0 0 8px;border-bottom:2px solid #8a5b35}
  body.printing-family-tree .print-tree-heading h1{font:700 20pt Georgia,serif;margin:0 0 3px;color:#421923}
  body.printing-family-tree .print-tree-heading p{font:10pt Georgia,serif;margin:0;color:#5a5148}
  body.printing-family-tree .tree-columns{display:flex!important;align-items:flex-start!important;gap:42px!important;min-width:0!important;width:max-content!important;max-width:none!important;padding:10px 8px 16px!important;overflow:visible!important;isolation:isolate!important;zoom:1!important}
  body.printing-family-tree .generation{display:flex!important;flex-direction:column!important;gap:20px!important;min-width:250px!important;border:0!important;padding:0!important;margin:0!important;break-inside:avoid-page}
  body.printing-family-tree .generation-title{font-size:9pt!important;color:#421923!important}
  body.printing-family-tree .couple-card{display:flex!important;grid-template-columns:none!important;gap:14px!important;break-inside:avoid!important;page-break-inside:avoid!important}
  body.printing-family-tree .person-card{width:112px!important;padding:7px!important;border-width:1px!important;border-top-width:3px!important;border-radius:8px!important;box-shadow:none!important;background:#fff!important;color:#111!important;break-inside:avoid!important;page-break-inside:avoid!important}
  body.printing-family-tree .person-card:hover{transform:none!important}
  body.printing-family-tree .person-card .portrait{height:88px!important;border-width:2px!important;background:#ddd!important}
  body.printing-family-tree .person-card.deceased .portrait{width:74px!important;height:88px!important;outline-width:1px!important;outline-offset:1px!important;box-shadow:0 0 7px 2px rgba(150,110,45,.35)!important}
  body.printing-family-tree .person-card h3{font-size:9pt!important;margin:6px 0 2px!important}
  body.printing-family-tree .person-card p{font-size:7.5pt!important;color:#444!important}
  body.printing-family-tree .couple-card:not(.single-partner):not(.solo-card):before{left:112px!important;width:14px!important;border-top-width:3px!important}
  /* Mobile CSS hides connectors below 900px. Print preview can report a
     narrow CSS viewport even when launched from desktop, so explicitly turn
     both connector systems back on for printing. */
  body.printing-family-tree .tree-connectors{display:block!important;position:absolute!important;left:0!important;top:0!important;overflow:visible!important;pointer-events:none!important;z-index:1!important}
  body.printing-family-tree .tree-trunk,body.printing-family-tree .tree-rail,body.printing-family-tree .tree-branch{stroke:#6f573b!important;fill:none!important;opacity:1!important}
  body.printing-family-tree .tree-trunk{stroke-width:2.4!important}
  body.printing-family-tree .tree-rail{stroke-width:2.1!important}
  body.printing-family-tree .tree-branch{stroke-width:1.9!important}
  body.printing-family-tree .couple-card:not(.single-partner):not(.solo-card):before{display:block!important;content:""!important}
  body.printing-family-tree .tree-link{display:block!important;fill:none!important;stroke:#765b3d!important;stroke-width:1.8!important;stroke-linecap:round!important;stroke-linejoin:round!important}
  body.printing-family-tree .tree-link.adopted{stroke-dasharray:7 5!important}
  body.printing-family-tree .tree-link.foster{stroke-dasharray:2 5!important;stroke-width:1.5!important}
  body.printing-family-tree.print-tree-no-photos .person-card .portrait{display:none!important}
  body.printing-family-tree.print-tree-no-photos .person-card{width:108px!important;min-height:42px!important;padding:6px!important}
  body.printing-family-tree.print-tree-no-photos .person-card h3{margin:1px 0 2px!important}
  body.printing-family-tree.print-tree-no-photos .couple-card:not(.single-partner):not(.solo-card):before{left:108px!important}
  body.printing-family-tree a{text-decoration:none!important;color:inherit!important}
}

/* v0.9.13 public read-only ancestry tree */
@media(min-width:601px) and (max-width:1100px){
  .page-shell{padding:20px}
  .site-header{position:relative;flex-wrap:wrap;padding:10px 16px;gap:10px}
  .site-header nav{width:100%;gap:5px}
  .site-header nav a{padding:7px 8px;font-size:13px}
  .tree-page{padding:0}
  .tree-layout{min-height:0}
  .tree-canvas{padding:20px 18px 44px;cursor:auto;-webkit-overflow-scrolling:touch;touch-action:pan-x pan-y}
  .tree-columns{gap:58px;min-width:1050px;padding:18px}
  .generation{gap:24px;min-width:300px}
  .couple-card{gap:16px}
  .couple-card:not(.single-partner):not(.solo-card):before{left:142px;width:16px;border-top-width:3px}
  .person-card{width:142px;padding:8px;border-radius:12px}
  .person-card .portrait{height:108px;border-width:3px}
  .person-card.deceased .portrait{width:92px;height:108px}
  .person-card h3{font-size:14px;margin:8px 0 2px}
  .person-card p{font-size:11px}
  .tree-zoom-controls{display:inline-flex}
  .toolbar{gap:7px;margin-bottom:12px}
  .toolbar .search-input{max-width:280px}
  .public-tree-canvas{max-height:520px;overflow:auto;-webkit-overflow-scrolling:touch}
  .public-tree-columns{display:flex!important;gap:52px!important;min-width:950px!important;padding:10px 12px 24px!important}
  .public-tree-columns .generation{min-width:260px!important}
  .public-tree-columns .couple-card{display:flex!important;gap:14px!important}
  .public-tree-columns .public-person-card{width:126px!important}
  .public-tree-columns .tree-connectors{display:block!important}
}

.public-tree-section{margin:34px 0 12px;padding:28px 0 0;border-top:1px solid #b99b70}.public-tree-intro{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:16px}.public-tree-intro h2{font:700 30px Georgia,serif;color:var(--oxblood);margin:8px 0}.public-tree-intro p{max-width:800px;margin:0;color:var(--muted)}.public-tree-layout{min-height:0}.public-tree-canvas{max-height:560px;overflow:auto;padding:22px;background:rgba(255,250,240,.76);border:1px solid #b99b70;border-radius:12px;cursor:default}.public-tree-columns{padding:8px 10px 26px}.public-person-card{width:150px;min-height:58px;padding:10px 9px;cursor:default;text-decoration:none}.public-person-card:hover{transform:none}.public-person-card h3{margin:0 0 4px;font-size:14px}.public-person-card p{min-height:1em}.public-person-card.deceased{border-top-color:var(--gold)}
@media(max-width:600px){.public-tree-intro{align-items:flex-start;flex-direction:column}.public-tree-canvas{max-height:none;overflow:visible;padding:14px}.public-tree-columns{display:block!important;min-width:0!important;padding:0!important}.public-tree-columns .generation{min-width:0!important}.public-tree-columns .tree-connectors,.public-tree-columns .couple-card:before{display:none!important}.public-tree-columns .public-person-card{width:auto}}


/* v0.9.16 administrator authenticator QR setup */
.totp-setup-grid{display:grid;grid-template-columns:minmax(240px,300px) minmax(0,1fr);gap:24px;align-items:start;margin:22px 0}.totp-qr{width:260px;height:260px;max-width:100%;margin:0 auto;background:#fff;border:1px solid #b99b70;border-radius:12px;padding:10px;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 20px rgba(53,32,18,.13)}.totp-qr svg{display:block;width:100%;height:100%}.totp-privacy-note{text-align:center;max-width:290px;margin:8px auto 0}.totp-secret{display:block;margin:8px 0 12px;padding:9px 10px;font-size:17px;line-height:1.4;word-break:break-all}.totp-uri-details{margin-top:10px}.totp-uri-details summary{cursor:pointer;font-weight:700}.totp-uri-details code{display:block;margin-top:8px;word-break:break-all;font-size:11px;line-height:1.45}@media(max-width:650px){.totp-setup-grid{grid-template-columns:1fr}.totp-qr{width:240px;height:240px}}

/* v0.9.20 relationship finder + branch printing */
.tree-tool-panel{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:-4px 0 18px;padding:12px 14px;border:2px solid #b18a59;border-left:6px solid var(--oxblood);border-radius:10px;background:#fff8e9;box-shadow:0 8px 20px rgba(53,32,18,.12)}.tree-tool-panel[hidden]{display:none!important}.tree-tool-copy{display:flex;flex-direction:column;gap:2px;min-width:260px;flex:1}.tree-tool-copy strong{font:700 17px Georgia,serif;color:var(--oxblood-dark)}.tree-tool-copy span{font-weight:700}.tree-tool-copy small{color:var(--muted);line-height:1.4}.tree-tool-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.branch-direction{padding:8px 10px;border:1px solid #aa8a60;border-radius:8px;background:#fffdf6;color:var(--ink);font:inherit}.branch-photo-choice{display:flex;align-items:center;gap:5px;font-weight:700;white-space:nowrap}.relationship-picking .person-card,.branch-picking .person-card{cursor:crosshair}.person-card.relationship-selected,.person-card.branch-selected{outline:4px solid var(--oxblood);outline-offset:4px}.person-card.relationship-path-person{box-shadow:0 0 0 4px rgba(164,113,53,.28),var(--shadow)}.relationship-overlay{position:absolute;left:0;top:0;overflow:visible;pointer-events:none;z-index:1}.relationship-trace{fill:none;stroke:var(--oxblood);stroke-width:7;stroke-linecap:round;stroke-linejoin:round;opacity:.48}.relationship-floating-label{position:absolute;z-index:4;transform:translate(-50%,-50%);max-width:260px;padding:7px 11px;border:2px solid var(--oxblood);border-radius:999px;background:#fff8e9;color:var(--oxblood-dark);font:700 13px Georgia,serif;text-align:center;box-shadow:0 5px 14px rgba(53,32,18,.18);pointer-events:none}
@media(max-width:900px){.tree-tool-panel{margin:0 0 14px;align-items:flex-start}.tree-tool-actions{width:100%}.relationship-overlay{display:block}.relationship-floating-label{max-width:190px;font-size:11px}.person-card.relationship-selected,.person-card.branch-selected{outline-width:3px;outline-offset:2px}}
@media print{body.printing-family-tree .tree-tool-panel,body.printing-family-tree .relationship-overlay,body.printing-family-tree .relationship-floating-label{display:none!important}body.printing-family-tree .branch-print-hidden,body.printing-family-tree .branch-print-empty{display:none!important}body.printing-family-tree .branch-print-single:before{display:none!important}}

/* v0.9.25 bulk archive intake + media archive */
.bulk-intake-head h1,.media-library-head h1{margin-bottom:6px}.bulk-intake-head p,.media-library-head p{margin:0}.bulk-upload-card{margin-top:18px}.bulk-drop-zone{position:relative;margin:16px 0;border:2px dashed #a97d4f;border-radius:14px;background:rgba(255,253,246,.62);overflow:hidden}.bulk-drop-zone input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.bulk-drop-zone label{display:flex;min-height:118px;align-items:center;justify-content:center;flex-direction:column;gap:7px;padding:20px;text-align:center;cursor:pointer}.bulk-drop-zone label strong{font:700 21px Georgia,serif;color:var(--oxblood-dark)}.bulk-drop-zone label span{font-size:13px;color:var(--muted)}.bulk-upload-actions{margin-bottom:0}.bulk-progress{margin-top:14px}.bulk-progress-track{height:12px;border:1px solid #aa8a60;background:#ead9b7;border-radius:999px;overflow:hidden;margin-bottom:7px}.bulk-progress-track span{display:block;width:0;height:100%;background:var(--forest);transition:width .15s ease}.bulk-tag-toolbar{display:grid;grid-template-columns:auto minmax(240px,520px) auto auto minmax(140px,1fr);align-items:center;gap:10px;margin:12px 0 18px}.bulk-person-picker{display:grid;gap:6px}.bulk-person-picker input,.bulk-tag-toolbar select{width:100%;padding:10px 11px;border:1px solid #aa8a60;border-radius:8px;background:#fffdf6;color:var(--ink);font:inherit}.bulk-media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(185px,1fr));gap:14px}.bulk-media-item{display:flex;flex-direction:column;gap:8px;min-width:0;padding:10px;border:1px solid #c7aa7d;border-radius:12px;background:#fffaf0}.bulk-media-select{font-size:12px;font-weight:800;color:var(--forest-dark)}.bulk-media-select input{vertical-align:middle}.bulk-media-preview{height:165px;border-radius:9px;background:#e1ceb0;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;text-decoration:none;color:var(--ink)}.bulk-media-preview img{width:100%;height:100%;object-fit:cover}.bulk-file-icon{font-size:42px;line-height:1}.bulk-media-name{font-size:13px;overflow-wrap:anywhere}.bulk-tag-badges{display:flex;gap:5px;flex-wrap:wrap;min-height:19px}.bulk-tag-badges .badge{white-space:normal}[data-bulk-finish][hidden]{display:none!important}.bulk-finish-form{margin-top:20px;margin-bottom:0;padding-top:16px;border-top:1px solid #dbc6a5}.media-library-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:15px}.media-library-item{display:flex;flex-direction:column;gap:8px;min-width:0;padding:10px;border:1px solid #c7aa7d;border-radius:12px;background:#fffaf0;color:var(--ink);text-decoration:none}.media-library-item:hover{transform:translateY(-2px)}.media-library-preview{height:180px;border-radius:9px;background:#e1ceb0;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center}.media-library-preview img{width:100%;height:100%;object-fit:cover}.media-library-item strong{overflow-wrap:anywhere}.media-library-item small{color:var(--muted);line-height:1.35}.media-library-item .badge{align-self:flex-start}.media-pagination{justify-content:center}
@media(max-width:760px){.bulk-tag-toolbar{grid-template-columns:1fr}.bulk-tag-toolbar>label{margin-bottom:-5px}.bulk-media-grid,.media-library-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.bulk-media-preview,.media-library-preview{height:145px}}
@media(max-width:460px){.bulk-media-grid,.media-library-grid{grid-template-columns:1fr}.bulk-media-preview,.media-library-preview{height:210px}}

/* v0.9.27 upward ancestral canopy --------------------------------------- */
.tree-columns{display:block;gap:0}
.descendant-columns{display:flex;align-items:flex-start;gap:90px;width:max-content;min-width:1200px;position:relative}
.ancestor-canopy{display:flex;flex-direction:column;gap:26px;width:max-content;margin:0 0 54px;padding:4px 0 12px;position:relative;z-index:2}
.ancestor-canopy-heading{display:flex;align-items:baseline;gap:12px;padding:0 2px 2px;border-bottom:1px solid rgba(138,99,62,.45)}
.ancestor-canopy-heading strong{font:700 18px Georgia,serif;color:var(--oxblood-dark)}
.ancestor-canopy-heading span{font-size:12px;color:var(--muted)}
.ancestor-generation{display:flex;flex-direction:column;gap:9px;position:relative}
.ancestor-generation-title{font-size:12px;color:#765431;letter-spacing:.8px}
.ancestor-generation-groups{display:flex;align-items:stretch;justify-content:center;gap:26px;min-width:max-content;position:relative}
.ancestor-couple-card{gap:14px}
.ancestor-couple-card:not(.single-partner):not(.solo-card):before{left:138px;width:14px;border-top-width:3px;border-top-color:#9a7447}
.person-card.ancestor-person-card{width:138px;padding:8px;border-top-color:var(--bronze);background:linear-gradient(#fbf3df,#ead8b7);box-shadow:0 9px 22px rgba(53,32,18,.16)}
.person-card.ancestor-person-card .portrait{height:98px;border-width:3px;filter:saturate(.82) sepia(.12)}
.person-card.ancestor-person-card.deceased .portrait{width:82px;height:98px;box-shadow:0 0 0 4px rgba(164,113,53,.12),0 0 14px 5px rgba(214,173,98,.38)}
.person-card.ancestor-person-card h3{font-size:14px;margin:8px 0 2px}
.person-card.ancestor-person-card p{font-size:11px}
.founding-couple-card .person-card{box-shadow:0 0 0 2px rgba(164,113,53,.28),var(--shadow)}
.tree-ancestor-link{fill:none;stroke:#987148;stroke-width:2.7;stroke-linecap:round;stroke-linejoin:round;opacity:.9}
.tree-ancestor-link.adopted{stroke-dasharray:8 6}
.tree-ancestor-link.foster{stroke-dasharray:3 7;stroke-width:2.3}
.tree-ancestor-link.family{stroke-width:2.7}
.public-tree-columns .ancestor-person-card{min-height:54px;background:linear-gradient(#fbf3df,#eee0c5);border-top-color:#9c7545}
.public-tree-columns .ancestor-canopy{margin-bottom:34px}

@media(min-width:601px) and (max-width:1100px){
  .tree-columns{display:block;gap:0}
  .descendant-columns{gap:58px;min-width:1050px}
  .ancestor-canopy{gap:21px;margin-bottom:40px}
  .ancestor-generation-groups{gap:18px}
  .person-card.ancestor-person-card{width:118px;padding:7px}
  .person-card.ancestor-person-card .portrait{height:82px}
  .person-card.ancestor-person-card.deceased .portrait{width:70px;height:82px}
  .ancestor-couple-card{gap:12px}
  .ancestor-couple-card:not(.single-partner):not(.solo-card):before{left:118px;width:12px}
  .public-tree-columns{display:block!important;min-width:950px!important}
  .public-tree-columns .descendant-columns{display:flex!important;gap:52px!important;min-width:950px!important}
}

@media(max-width:600px){
  .tree-columns{display:block;min-width:0}
  .descendant-columns{display:block;min-width:0;width:auto;margin-left:0!important}
  .ancestor-canopy{display:block;width:auto!important;margin:0 0 28px;padding:0 0 20px;border-bottom:2px solid #b99b70}
  .ancestor-canopy-heading{display:block;margin-bottom:18px}
  .ancestor-canopy-heading strong,.ancestor-canopy-heading span{display:block}
  .ancestor-canopy-heading span{margin-top:3px}
  .ancestor-generation{margin-bottom:18px}
  .ancestor-generation-groups{display:flex;flex-direction:column;width:auto!important;min-width:0;gap:10px}
  .ancestor-couple-card{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  .ancestor-couple-card.solo-card,.ancestor-couple-card.single-partner{grid-template-columns:1fr}
  .person-card.ancestor-person-card{width:auto}
  .ancestor-couple-card:before{display:none!important}
  .tree-ancestor-link{display:none}
  .public-tree-columns{display:block!important;min-width:0!important}
  .public-tree-columns .descendant-columns{display:block!important;min-width:0!important;width:auto!important;margin-left:0!important}
}

@media print{
  body.printing-family-tree .tree-columns{display:block!important;width:max-content!important;min-width:0!important}
  body.printing-family-tree .descendant-columns{display:flex!important;align-items:flex-start!important;gap:42px!important;min-width:0!important;width:max-content!important}
  body.printing-family-tree .ancestor-canopy{display:flex!important;gap:16px!important;margin:0 0 28px!important;padding:0 0 8px!important;width:max-content!important;break-inside:avoid-page}
  body.printing-family-tree .ancestor-canopy-heading{padding-bottom:4px!important}
  body.printing-family-tree .ancestor-canopy-heading strong{font-size:10pt!important}
  body.printing-family-tree .ancestor-canopy-heading span{font-size:7.5pt!important}
  body.printing-family-tree .ancestor-generation{gap:5px!important;break-inside:avoid-page}
  body.printing-family-tree .ancestor-generation-groups{display:flex!important;gap:12px!important}
  body.printing-family-tree .ancestor-couple-card{display:flex!important;gap:10px!important}
  body.printing-family-tree .person-card.ancestor-person-card{width:96px!important;background:#f8f2e7!important;border-top-color:#987148!important}
  body.printing-family-tree .person-card.ancestor-person-card .portrait{height:70px!important}
  body.printing-family-tree .person-card.ancestor-person-card.deceased .portrait{width:60px!important;height:70px!important}
  body.printing-family-tree .ancestor-couple-card:not(.single-partner):not(.solo-card):before{left:96px!important;width:10px!important;border-top-width:2px!important}
  body.printing-family-tree .tree-ancestor-link{display:block!important;stroke:#765b3d!important;stroke-width:1.7!important;fill:none!important;opacity:1!important}
}

/* v0.9.34 clipboard picture intake */
.paste-upload-target{display:flex;flex-direction:column;align-items:center;gap:4px;margin:12px 0 16px;padding:15px 18px;border:2px dashed #7d6650;border-radius:12px;background:#f4ead7;color:var(--ink);text-align:center;cursor:copy;outline:none}
.paste-upload-target strong{font:700 17px Georgia,serif;color:var(--oxblood-dark)}
.paste-upload-target span,.paste-upload-target small{color:var(--muted)}
.paste-upload-target:focus{border-color:var(--forest);box-shadow:0 0 0 4px rgba(65,107,91,.18)}
.paste-upload-target.has-pasted-file{border-style:solid;border-color:var(--forest);background:#e7f0e7}
.paste-upload-target.has-pasted-file small{color:var(--forest-dark);font-weight:800}

/* v0.9.40 remarriages: plain single-card display; old stack classes no longer exist */
.multi-partner-card{align-items:flex-start}
.remarriage-group,.remarriage-display,.remarriage-option-card{position:relative;width:170px;min-width:170px;padding:0}
.remarriage-display{background:transparent!important;border:0!important;box-shadow:none!important}
.remarriage-display:before,.remarriage-display:after,.remarriage-option-card:before,.remarriage-option-card:after{content:none!important;display:none!important}
.remarriage-option-card{display:none;pointer-events:none}.remarriage-option-card.is-active{display:block;pointer-events:auto}.remarriage-option-card.is-active .person-card{outline:3px solid rgba(164,113,53,.5);outline-offset:2px}
.remarriage-option-card .person-card{border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;outline:0!important}
.remarriage-option-card .person-card:hover{transform:none}.remarriage-option-card .person-card.descendant-highlight .portrait{outline:4px solid #d49a2d;outline-offset:3px}.remarriage-option-card .person-card.descendant-root .portrait{outline-color:var(--oxblood)}
.partner-card-selector{position:relative;z-index:25;width:170px;margin-top:9px;padding:7px;border:1px solid #b18a59;border-radius:10px;background:#f7ecd6;box-shadow:0 5px 12px rgba(53,32,18,.12)}
.partner-card-selector-head{display:flex;justify-content:space-between;gap:8px;margin-bottom:6px;color:var(--muted);font-size:9px;line-height:1.2;text-transform:uppercase;letter-spacing:.45px}.partner-card-selector-head strong{color:var(--oxblood-dark)}
.partner-card-choices{display:grid;gap:5px}.partner-card-choice{display:block;width:100%;padding:6px 8px;border:1px solid #aa8a60;border-radius:7px;background:#fffaf0;color:#4b382a;text-align:left;cursor:pointer;box-shadow:0 2px 5px rgba(53,32,18,.08)}
.partner-card-choice span{display:block;font:700 11px Georgia,serif;white-space:normal;line-height:1.15}.partner-card-choice small{display:block;margin-top:2px;color:var(--muted);font-size:9px;line-height:1.2}
.partner-card-choice .partner-card-children{margin-top:5px;padding-top:4px;border-top:1px solid rgba(138,99,62,.28);font-weight:700;line-height:1.3;white-space:normal}
.partner-card-choice:hover,.partner-card-choice:focus{border-color:var(--oxblood);background:#fff;outline:none}.partner-card-choice.is-active{border-color:var(--oxblood-dark);background:var(--oxblood);color:#fff;box-shadow:0 0 0 3px rgba(111,35,48,.15)}.partner-card-choice.is-active small{color:#f5e5c8}
.partner-card-choice.is-active .partner-card-children{border-top-color:rgba(255,255,255,.3)}
.partner-card-choice.shows-children{outline:3px solid #d49a2d;outline-offset:2px}
.ancestor-couple-card .remarriage-group,.ancestor-couple-card .remarriage-display,.ancestor-couple-card .remarriage-option-card,.ancestor-couple-card .partner-card-selector{width:138px;min-width:138px}
.relationship-overlay{z-index:40}.relationship-trace{stroke:#b57b19;stroke-width:10;opacity:1;filter:drop-shadow(0 0 3px #fff8e9) drop-shadow(0 2px 3px rgba(53,32,18,.55))}.relationship-floating-label{z-index:45}
.relationship-result-active .tree-connectors path{opacity:.16}.relationship-result-active .person-card:not(.relationship-path-person){opacity:.22;filter:grayscale(.75)}.relationship-result-active .person-card.relationship-path-person{position:relative;z-index:42;opacity:1;filter:none;box-shadow:0 0 0 5px #d49a2d,var(--shadow)}
.person-card.relationship-path-person:after{content:attr(data-path-step);position:absolute;left:-11px;top:-12px;display:flex;align-items:center;justify-content:center;width:25px;height:25px;border:3px solid #fff8e9;border-radius:50%;background:var(--oxblood);color:#fff;font:800 12px Arial,sans-serif;box-shadow:0 2px 6px rgba(53,32,18,.35)}
.family-union-focus .tree-connectors [data-couple-id].family-union-muted{opacity:.09!important}
.family-union-focus .tree-connectors [data-couple-id].family-union-active{opacity:1!important;stroke:#c07c0d!important;stroke-width:7!important;filter:drop-shadow(0 0 2px #fff8e9)}
.person-card.family-union-child{outline:5px solid #d49a2d;outline-offset:3px;box-shadow:0 0 0 8px rgba(255,248,233,.85),var(--shadow)}
.descendant-focus .person-card:not(.descendant-highlight){opacity:.42;filter:grayscale(.55)}
.descendant-focus .tree-connectors [data-child-ids]{opacity:.08!important}
.descendant-focus .tree-connectors [data-child-ids].descendant-connector-active{opacity:1!important;stroke-width:6!important;filter:drop-shadow(0 0 2px #fff8e9)}
.person-card.descendant-highlight{opacity:1;filter:none;outline:4px solid #d49a2d;outline-offset:3px;box-shadow:0 0 0 7px rgba(255,248,233,.82),var(--shadow)}
.person-card.descendant-root{position:relative;outline-color:var(--oxblood);box-shadow:0 0 0 8px rgba(111,35,48,.2),var(--shadow)}
@media(min-width:601px) and (max-width:1100px){.remarriage-group,.remarriage-display,.remarriage-option-card,.partner-card-selector{width:142px;min-width:142px;padding:0}.ancestor-couple-card .remarriage-group,.ancestor-couple-card .remarriage-display,.ancestor-couple-card .remarriage-option-card,.ancestor-couple-card .partner-card-selector{width:118px;min-width:118px}}
@media(max-width:600px){.remarriage-group,.remarriage-display,.remarriage-option-card,.partner-card-selector{width:100%;min-width:0;padding-right:0}}
@media print{body.printing-family-tree .partner-card-selector{display:none!important}}
@media print{body.printing-family-tree .remarriage-group{width:auto!important;min-width:0!important;padding:0!important}body.printing-family-tree .remarriage-display{display:flex!important;gap:10px!important;width:auto!important;padding:0!important}body.printing-family-tree .remarriage-option-card{display:block!important;position:relative!important;width:auto!important;z-index:auto!important;pointer-events:auto!important}body.printing-family-tree .remarriage-option-card.is-active .person-card{outline:none!important}body.printing-family-tree .descendant-focus .person-card{opacity:1!important;filter:none!important}}

/* v0.9.35 photographic archive and identification workspace */
.gallery-tabs{display:flex;gap:7px;flex-wrap:wrap;margin:12px 0}.gallery-filter{display:grid;grid-template-columns:minmax(180px,2fr) minmax(170px,1fr) 90px minmax(150px,1fr) auto auto;gap:8px;align-items:center}.gallery-filter input,.gallery-filter select,.subject-identify-form input,.subject-identify-form select{width:100%;padding:9px 10px;border:1px solid #aa8a60;border-radius:8px;background:#fffdf6;color:var(--ink);font:inherit}.gallery-grid .media-library-item small:first-of-type{font-weight:700;color:var(--forest-dark)}.gallery-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px}.album-list{display:grid;gap:12px}.album-card{display:block;color:var(--ink);text-decoration:none}.album-card h2{margin-top:0}.identify-layout{display:grid;grid-template-columns:minmax(0,2fr) minmax(240px,1fr);gap:18px;align-items:start}.photo-marker-stage{position:relative;background:#2e281f;border-radius:12px;overflow:hidden;line-height:0}.photo-marker-stage img{display:block;width:100%;height:auto}.photo-marker,.photo-marker-key{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border:3px solid white;border-radius:50%;background:var(--oxblood);color:white;font:800 12px Arial,sans-serif;box-shadow:0 2px 9px rgba(0,0,0,.55)}.photo-marker{position:absolute;transform:translate(-50%,-50%);cursor:help}.photo-marker.possible,.photo-marker-key.possible{background:#b87318}.photo-marker.unknown,.photo-marker-key.unknown{background:#4c6075}.photo-marker.draft{background:var(--forest);pointer-events:none}.identify-panel{padding:14px;border:1px solid #c7aa7d;border-radius:12px;background:#fff8e9}.subject-list{margin-top:18px}.subject-row{display:grid;grid-template-columns:auto minmax(150px,1fr) minmax(280px,2fr) auto;gap:10px;align-items:center;padding:10px 0;border-top:1px solid #dbc6a5}.subject-identify-form{display:grid;grid-template-columns:minmax(140px,1fr) 105px minmax(140px,1fr) auto;gap:7px;align-items:center}
@media(max-width:900px){.gallery-filter{grid-template-columns:1fr 1fr}.identify-layout{grid-template-columns:1fr}.subject-row{grid-template-columns:auto 1fr}.subject-identify-form{grid-column:1/-1;grid-template-columns:1fr 1fr}.subject-row>form:last-child{grid-column:2}}
@media(max-width:560px){.gallery-filter,.gallery-fields,.subject-identify-form{grid-template-columns:1fr}.photo-marker,.photo-marker-key{width:27px;height:27px}.subject-row{align-items:start}}
