/* Vendored typefaces — Newsreader (variable opsz+wght) · Libre Franklin ·
   Spline Sans Mono, all SIL OFL; latin + latin-ext. The surfaces load no
   third-party origins. License: static/fonts/OFL.txt · manifest: VENDORED.md */
@font-face{font-family:'Newsreader';font-style:italic;font-weight:400 500;font-display:swap;src:url(../fonts/newsreader-italic-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Newsreader';font-style:italic;font-weight:400 500;font-display:swap;src:url(../fonts/newsreader-italic-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Newsreader';font-style:normal;font-weight:400 600;font-display:swap;src:url(../fonts/newsreader-normal-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Newsreader';font-style:normal;font-weight:400 600;font-display:swap;src:url(../fonts/newsreader-normal-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Libre Franklin';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/libre-franklin-normal-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Libre Franklin';font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/libre-franklin-normal-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Spline Sans Mono';font-style:normal;font-weight:400 500;font-display:swap;src:url(../fonts/spline-sans-mono-normal-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Spline Sans Mono';font-style:normal;font-weight:400 500;font-display:swap;src:url(../fonts/spline-sans-mono-normal-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}

/* Built-to-swap (§6b): a bespoke face is add @font-face + fit four
   descriptors to Newsreader + repoint --serif. See static/css/canon.css. */

:root{
/* the canonical set (design-tokens-v2 §2) — identical to canon.css so a
   palette swap is one edit per surface; --hb (header texture) is workspace-only. */
--ground:#F7F3EA;--paper:#FBF8F2;--paper-raised:#FCFAF5;--paper-elevated:#FDFBF7;
--gold-tint:#F4ECDA;--neutral-outer:#E6E2DA;
--backdrop:radial-gradient(circle at 50% 0%,#DAD1BE,#CBC0A7 50%,#BCB199);
--ink:#15120E;--ink-2:#1A1714;--ink-body:#2C2722;--ink-3:#3D3833;
--muted:#5C544A;--muted-2:#6E665C;--meta:#8A8275;--meta-mono:#A79D8C;--faint:#B7AE9D;
--gold:#C9A24B;--gold-accent:#B08A3E;--gold-deep:#A8812F;
--gilt-rule:linear-gradient(90deg,#A8812F,#C9A24B 60%,#A8812F);
--brand-band:linear-gradient(90deg,#6E5526,#9A7B36 52%,#6E5526);
--hairline:#EDE7DA;--card-border:#EAE2D2;--gold-border:#E2D3AE;--neutral-border:#DDD4C2;
--allergy:#9E3B2E;--allergy-text:#8C3324;--success:#5B7A52;
--sms:#4E6E84;--sms-text:#3E5A6E;--email:#A6603C;
--gold-tag-bd:#E8D7AC;--gold-tag-bg:#FBF3DD;--gold-tag-tx:#8A6D24;
--blue-tag-bd:#C9D8DF;--blue-tag-bg:#EAF0F3;--blue-tag-tx:#3E5A6E;
--sage-tag-bd:#CADBC1;--sage-tag-bg:#EAF1E6;--sage-tag-tx:#4E6B45;
--allergy-chip-bd:#ECD4CC;--allergy-chip-bg:#F7E9E3;--allergy-chip-tx:#8C3324;
--success-bn-bd:#D7E0CB;--success-bn-bg:#EDF1E7;--success-bn-tx:#4E6B45;
--rail-tag-bd:#E0C795;--rail-tag-bg:#FBF4E2;--rail-tag-tx:#9A7D3E;
--amber-bg:#FAF3E2;--amber-bd:#EAD9AE;--amber-tx:#8A6D2F;
--visit-well:#5B7A52;--visit-acute:#5E7E92;--visit-followup:#8A5B7A;
--serif:'Newsreader',Georgia,serif;
--sans:'Libre Franklin',-apple-system,sans-serif;
--mono:'Spline Sans Mono',ui-monospace,monospace;
--t-hero:36px;--t-title:30px;--t-name:26px;--t-card:17px;--t-note:15px;
--t-body:13.5px;--t-button:12px;--t-label:10px;--t-meta:10.5px;
--lh-tight:1.04;--lh-snug:1.2;--lh-body:1.6;--lh-loose:1.85;
--tr-tight:-.015em;--tr-label:.20em;--tr-kicker:.18em;--tr-meta:.04em;
}
*{box-sizing:border-box;margin:0;padding:0;}
body{background:var(--ground);color:var(--ink-2);font-family:var(--sans);font-size:var(--t-body);line-height:var(--lh-body);
 -webkit-font-smoothing:antialiased;min-height:100vh;}
body::after{content:"";position:fixed;inset:0;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22300%22%20height%3D%22300%22%3E%3Cfilter%20id%3D%22g%22%3E%3CfeTurbulence%20type%3D%22fractalNoise%22%20baseFrequency%3D%220.9%22%20numOctaves%3D%222%22%20stitchTiles%3D%22stitch%22%2F%3E%3CfeColorMatrix%20type%3D%22saturate%22%20values%3D%220%22%2F%3E%3C%2Ffilter%3E%3Crect%20width%3D%22300%22%20height%3D%22300%22%20filter%3D%22url%28%23g%29%22%20opacity%3D%220.05%22%2F%3E%3C%2Fsvg%3E");z-index:50;}
a{color:var(--gold-accent);}
button:focus-visible,a:focus-visible{outline:2px solid var(--gold-accent);outline-offset:2px;}
.sheet{max-width:700px;margin:46px auto 36px;background:var(--paper);border:1px solid var(--card-border);
 border-radius:14px;box-shadow:0 26px 64px -34px color-mix(in srgb,var(--ink) 28%,transparent);padding:46px 54px 38px;position:relative;}
.lh{text-align:center;}
.lh .nm{font-family:var(--serif);font-size:var(--t-name);font-weight:600;letter-spacing:var(--tr-meta);}
.lh .pl{font-size:var(--t-label);letter-spacing:var(--tr-label);text-transform:uppercase;color:var(--meta);margin-top:5px;}
.rule{height:1.5px;background:linear-gradient(90deg,transparent,var(--gold) 50%,transparent);opacity:.8;margin:20px 0 30px;}
.h1{font-family:var(--serif);font-size:var(--t-name);font-weight:600;text-align:center;}
.sub{text-align:center;color:var(--meta);font-size:var(--t-button);margin-top:4px;}
.step{font-size:var(--t-label);letter-spacing:var(--tr-label);text-transform:uppercase;color:var(--meta);font-weight:600;margin:32px 0 12px;}
.body{color:var(--muted);}
.colophon{text-align:center;font-size:var(--t-meta);color:var(--faint);letter-spacing:var(--tr-meta);margin:0 auto 40px;max-width:700px;}

/* ── booking (docs/canon/family-booking.html, ported to the shell) ── */
.back{position:absolute;top:18px;left:22px;font-size:var(--t-meta);letter-spacing:var(--tr-meta);color:var(--meta);text-decoration:none;}
.back:hover{color:var(--ink-2);}
.picks{display:flex;gap:12px;}
.pick{flex:1;border:1px solid var(--card-border);border-radius:12px;padding:13px 17px;cursor:pointer;background:transparent;
 text-align:left;font-family:var(--sans);transition:border-color .15s,background .15s;text-decoration:none;display:block;}
.pick .pn{font-family:var(--serif);font-size:var(--t-note);font-weight:600;color:var(--ink-2);}
.pick .pa{font-size:var(--t-meta);color:var(--meta);margin-top:1px;}
.pick:hover{border-color:var(--gold-accent);}
.pick.on{border-color:var(--gold-accent);background:var(--gold-tint);box-shadow:inset 0 0 0 1px var(--gold-accent);}
.offer{display:block;width:100%;text-align:left;border:1px solid var(--card-border);border-radius:12px;padding:14px 18px;
 margin-bottom:10px;cursor:pointer;background:transparent;font-family:var(--sans);text-decoration:none;
 transition:border-color .15s,background .15s;}
.offer .on-t{font-family:var(--serif);font-size:var(--t-note);font-weight:600;color:var(--ink-2);}
.offer .on-m{font-size:var(--t-button);color:var(--meta);margin-top:2px;}
.offer:hover{border-color:var(--gold-accent);}
.offer.on{border-color:var(--gold-accent);background:var(--gold-tint);box-shadow:inset 0 0 0 1px var(--gold-accent);}
.fnote{font-size:var(--t-button);color:var(--faint);font-style:italic;font-family:var(--serif);margin-top:2px;}
.days{display:flex;gap:18px;flex-wrap:wrap;}
.day .dl{font-size:var(--t-label);letter-spacing:var(--tr-kicker);text-transform:uppercase;color:var(--meta);font-weight:600;margin-bottom:8px;}
.day .ss{display:flex;flex-direction:column;gap:7px;}
.slot{border:1px solid var(--neutral-border);border-radius:999px;padding:6.5px 15px;font-family:var(--mono);font-size:var(--t-button);
 background:transparent;color:var(--muted);cursor:pointer;transition:all .15s;}
.slot:hover{border-color:var(--gold-accent);color:var(--ink-2);}
.cta{margin-top:4px;background:var(--ink);color:var(--paper);border:none;border-radius:10px;
 padding:11px 24px;font-family:var(--sans);font-size:var(--t-body);font-weight:500;cursor:pointer;}
.cta:hover{background:var(--ink-2);}
.cnote{font-size:var(--t-button);color:var(--meta);margin-top:11px;}
.calm{font-family:var(--serif);font-style:italic;color:var(--meta);font-size:var(--t-body);}
/* the booking confirmations: a quiet note, never a banner */
.fnote-ok{margin-top:14px;background:var(--gold-tint);border:1px solid var(--gold-border);border-radius:12px;
 padding:14px 18px;font-size:var(--t-body);color:var(--muted);}
.upcoming{border-top:1px solid var(--gold-border);margin-top:10px;padding-top:4px;}
.up-row{display:flex;align-items:baseline;gap:12px;padding:11px 0;border-bottom:1px solid var(--hairline);}
.up-when{font-family:var(--mono);font-size:var(--t-body);color:var(--ink-2);}
.up-what{font-size:var(--t-button);color:var(--meta);}
.up-sp{flex:1;}
.up-cancel{border:none;background:transparent;color:var(--meta);font-family:var(--sans);font-size:var(--t-button);
 cursor:pointer;text-decoration:underline;}
.up-cancel:hover{color:var(--ink-2);}
.up-office{font-size:var(--t-meta);color:var(--faint);font-style:italic;}
/* dev act-as picker — visibly provisional */
.devbar{background:var(--ink);color:var(--paper);font-size:var(--t-meta);letter-spacing:var(--tr-meta);text-align:center;padding:5px;
 font-family:var(--sans);}
/* ── hub · messages · records · letters · pay (Seam 6) ── */
.pmenu{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:24px 0 4px;}
.pmenu a{border:1px solid var(--card-border);border-radius:999px;padding:6px 15px;
 font-size:var(--t-button);color:var(--muted);text-decoration:none;}
.pmenu a:hover{border-color:var(--gold-accent);color:var(--ink-2);}
.pmsg{display:block;border:1px solid var(--card-border);border-radius:12px;padding:12px 16px;
 margin-bottom:8px;text-decoration:none;}
.pmsg:hover{border-color:var(--gold-accent);}
.pmsg-snip{font-size:var(--t-button);color:var(--muted);line-height:var(--lh-body);}
.pmsg-meta{font-family:var(--mono);font-size:var(--t-meta);color:var(--faint);margin-top:4px;}
.pcontract{margin:14px 0;border:1px solid var(--card-border);border-left:3px solid var(--gold-border);
 border-radius:0 12px 12px 0;padding:12px 16px;background:var(--paper-raised);
 font-size:var(--t-button);color:var(--muted);line-height:var(--lh-body);}
.pcontract b{color:var(--ink-2);}
.thread{display:flex;flex-direction:column;gap:10px;}
.bubble{max-width:80%;border:1px solid var(--card-border);border-radius:12px;padding:11px 15px;}
.bubble.you{align-self:flex-end;background:var(--gold-tint);border-color:var(--gold-border);}
.bubble.them{align-self:flex-start;background:var(--paper);}
.bub-who{font-size:var(--t-label);letter-spacing:var(--tr-meta);text-transform:uppercase;color:var(--meta);font-weight:600;}
.bub-body{font-size:var(--t-body);color:var(--muted);line-height:var(--lh-body);margin-top:3px;}
.bub-when{font-family:var(--mono);font-size:var(--t-meta);color:var(--faint);margin-top:4px;}
.pcompose{margin-top:4px;}
.pcompose textarea,.pchild{display:block;width:100%;font-family:var(--sans);font-size:var(--t-button);
 color:var(--ink-2);background:var(--paper-elevated);border:1px solid var(--neutral-border);
 border-radius:10px;padding:10px 13px;margin-bottom:10px;line-height:var(--lh-body);resize:vertical;}
.reclist{display:flex;flex-direction:column;gap:8px;}
.recrow{display:flex;align-items:baseline;gap:12px;border:1px solid var(--card-border);border-radius:12px;
 padding:12px 16px;text-decoration:none;}
a.recrow:hover{border-color:var(--gold-accent);}
.recrow.off{opacity:.65;}
.recname{font-family:var(--serif);font-size:var(--t-note);font-weight:600;color:var(--ink-2);}
.recmeta{font-size:var(--t-button);color:var(--meta);}
.recget{margin-left:auto;font-size:var(--t-meta);color:var(--faint);font-style:italic;}
.imtable{width:100%;border-collapse:collapse;margin-top:6px;}
.imtable th{text-align:left;font-size:var(--t-label);letter-spacing:var(--tr-meta);text-transform:uppercase;
 color:var(--meta);font-weight:600;padding:7px 8px;border-bottom:1px solid var(--gold-border);}
.imtable td{padding:8px;border-bottom:1px solid var(--hairline);font-size:var(--t-button);color:var(--muted);}
.imv{font-weight:600;color:var(--ink-2);}
.imd,.imdate,.imchirp{font-family:var(--mono);font-size:var(--t-meta);}
.imattest{margin-top:16px;font-size:var(--t-meta);color:var(--faint);font-style:italic;line-height:var(--lh-body);}
.payseam{border:1px solid var(--card-border);border-radius:12px;padding:16px 18px;background:var(--paper-raised);}
.payel,.paymandate{font-size:var(--t-button);color:var(--muted);line-height:var(--lh-body);margin-bottom:12px;}
.payel b{color:var(--ink-2);}
.cta:disabled{opacity:.5;cursor:not-allowed;}
@media print{.noprint{display:none;}.sheet{box-shadow:none;border:none;margin:0;}}
@media (max-width:760px){.sheet{margin:18px 12px;padding:34px 24px;}.picks{flex-direction:column;}.bubble{max-width:100%;}}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important;}}
