/* ══════════════════════════════════════════════════════════════
   DEEPCAR DENTAL CARE — design system v3
   The Space Dental landing-page language, extended to a full site:
   Manrope, ink & bone, centred axis labels, pill buttons, hairline
   tiers — with slightly stronger weights and rules for legibility.
   ══════════════════════════════════════════════════════════════ */
@font-face{font-family:'Manrope';font-style:normal;font-weight:200 800;font-display:swap;src:url(/assets/fonts/manrope-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}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--ink:#0E0E0E;--ink-soft:#171717;--ink-2:#1F1F1F;--bone:#FAF8F3;--blush:#F1EDE5;--stone:#E7E1D7;--paper:#FFFFFF;--taupe:#B5A79C;--taupe-deep:#7E7069;--brass:#A98859;--brass-2:#C4A46F;--accent:#0F5E4B;--accent-2:#15755D;--accent-light:#8ED1BC;--accent-soft:#E4EFEA;--alert:#0E0E0E;--blue:#0E0E0E;--blue-deep:#2c2c2c;--gauze:#F4EEE8;--porcelain:#FBF8F4;--graphite:#0E0E0E;--slate:#1F1F1F;--mist:rgba(14,14,14,.18);--on-ink:#FFFFFF;--on-ink-2:rgba(255,255,255,.76);--on-ink-3:rgba(255,255,255,.52);--on-ink-line:rgba(255,255,255,.22);--t1:var(--ink);--t2:rgba(14,14,14,.72);--t3:rgba(14,14,14,.48);--on-bone-2:var(--t2);--on-bone-3:var(--t3);--line:rgba(14,14,14,.18);--line-strong:rgba(14,14,14,.32);--pad:clamp(20px,4vw,44px);--max:1240px;--r:2px;--bar:40px;--text:'Manrope',system-ui,-apple-system,'Segoe UI',sans-serif;--display:var(--text);--mono:var(--text);--ease:cubic-bezier(.2,.7,.2,1);--ease-out:cubic-bezier(.16,1,.3,1);--fs-meta:13px;--fs-small:16px;--fs-body:clamp(17px, 0.4vw + 13.5px, 19px);--fs-lead:clamp(17px, 0.6vw + 14.5px, 20px);--fs-h3:clamp(19px, 0.5vw + 16px, 21px);--fs-h3-lg:clamp(22px, 1.4vw + 16px, 28px);--fs-h2:clamp(28px, 2.8vw, 40px);--fs-display:clamp(44px, 6.6vw, 94px);--measure:66ch;--gap:clamp(44px, 5.5vw, 80px);--t-body:rgba(14, 14, 14, .82)}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;scroll-padding-top:100px}
body{font-family:var(--text);background:var(--bone);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden;font-size:15.5px;line-height:1.65;font-weight:400}
img,iframe{display:block;max-width:100%}
img{height:auto}
a{color:inherit}
button{font-family:inherit}
::selection{background:var(--accent);color:#fff}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}
.skip{position:absolute;left:-9999px;top:8px;z-index:200;background:var(--ink);color:var(--bone);padding:10px 16px;border-radius:100px}
.skip:focus{left:12px}
.wrap{max-width:var(--max);margin:0 auto;width:100%;padding-left:var(--pad);padding-right:var(--pad)}
.band{padding:var(--gap) 0}
.band--tight{padding:calc(var(--gap)*.6) 0}
.band--blush,.band--bone2{background:var(--blush)}
.band--ink{background:var(--ink);color:var(--on-ink)}

.band__foot{display:flex;flex-wrap:wrap;gap:14px 26px;align-items:center;margin-top:clamp(28px,3.5vw,44px);justify-content:flex-start}

/* ── type ──────────────────────────────────────────────── */
.display{font-weight:300;line-height:.94;text-wrap:balance;font-size:var(--fs-display);letter-spacing:-.048em}
.display em,.em{font-style:normal;font-weight:600;letter-spacing:-.055em;color:var(--accent)}
.hero--ink .display em{color:var(--accent-light)}
.h2{font-weight:300;letter-spacing:-.045em;line-height:1;font-size:clamp(30px,4.8vw,58px);text-wrap:balance}
.h3{font-weight:500;line-height:1.15;font-size:var(--fs-h3-lg);letter-spacing:-.015em}
.h4{font-weight:600;font-size:16px;letter-spacing:-.02em}
.lede{font-size:clamp(15.5px,1.6vw,19px);line-height:1.6;font-weight:400;color:var(--t2);text-wrap:pretty}
.lede--ink,.band--ink .lede,.hero--ink .lede{color:var(--on-ink-2)}
.fine{line-height:1.6;color:var(--t3);font-size:13px;max-width:72ch}
.fine--ink,.band--ink .fine{color:var(--on-ink-3)}
.label{font-weight:600;text-transform:uppercase;color:var(--t3);display:flex;align-items:center;justify-content:center;gap:18px;width:100%;text-align:center;font-size:11px;letter-spacing:.24em}
.label::before,.label::after{content:"";flex:1;height:1px;background:var(--line);max-width:190px}
.label--ink,.band--ink .label,.hero--ink .label{color:var(--on-ink-3)}
.band--ink .label::before,.band--ink .label::after,.hero--ink .label::before,.hero--ink .label::after,.label--ink::before,.label--ink::after{background:var(--on-ink-line)}
.label--left,.split .label,.panel .label,.mega .label,.drawer .label,.foot .label,.calc .label,.pricebox .label,.form .label,.mapcard .label,.lcard .label,.bio .label,.hero__kicker{justify-content:flex-start;text-align:left}
.label--left::after,.split .label::after,.panel .label::after,.mega .label::after,.drawer .label::after,.foot .label::after,.calc .label::after,.pricebox .label::after,.form .label::after,.mapcard .label::after,.lcard .label::after,.bio .label::after,.hero__kicker::after{display:none}
.label--left::before,.split .label::before,.panel .label::before,.mega .label::before,.drawer .label::before,.foot .label::before,.calc .label::before,.pricebox .label::before,.form .label::before,.mapcard .label::before,.lcard .label::before,.bio .label::before,.hero__kicker::before{display:none}

.link{display:inline-flex;align-items:center;gap:8px;font-weight:500;font-size:14px;text-decoration:none;color:var(--accent);border-bottom:1px solid rgba(15,94,75,.35)}
.link:hover{border-color:var(--accent)}

.head{margin-bottom:clamp(32px,4.5vw,56px);max-width:none;text-align:center}
.head__h{margin-top:20px}
.head__p{margin-top:18px;margin-inline:0;max-width:60ch}
.head--split{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:20px 40px;text-align:left}
.head--split .head{margin-bottom:0;text-align:left}
.head--split .head .label{justify-content:flex-start;text-align:left}
.head--split .head .label::before{display:none}
.head--split .head .label::after{flex:none;width:60px}

/* ── buttons ───────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;border-radius:100px;border:1px solid transparent;cursor:pointer;font-family:inherit;font-size:15px;font-weight:600;letter-spacing:-.01em;padding:16px 30px;text-decoration:none;line-height:1.1;transition:background .2s,color .2s,border-color .2s,transform .2s;white-space:nowrap}
.btn:active{transform:translateY(1px)}
.btn svg{flex:none}
.btn--ink,.btn--alert,.btn--accent{background:var(--accent);color:#fff}.btn--ink:hover,.btn--blue:hover,.btn--alert:hover,.btn--brass:hover,.btn--accent:hover{background:var(--accent-2)}
.btn--black:hover{background:#2c2c2c}
.btn--bone{background:var(--bone);color:var(--ink)}.btn--bone:hover{background:#fff}
.btn--ghost{border-color:var(--line-strong);color:var(--ink);background:transparent}.btn--ghost:hover{border-color:var(--ink);background:rgba(14,14,14,.04)}
.btn--ghost-ink{border-color:rgba(255,255,255,.4);color:var(--on-ink);background:transparent}.btn--ghost-ink:hover{border-color:#fff;background:rgba(255,255,255,.06)}
.btn--sm{padding:11px 20px;font-size:13.5px}

.btn--wide{width:100%}
.btns{display:flex;flex-wrap:wrap;gap:10px;margin:22px 0}
.chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line-strong);border-radius:100px;padding:8px 16px;font-size:12.5px;color:var(--t2)}
.chip b{font-weight:600;color:var(--ink)}
.hero--ink .chip{border-color:rgba(255,255,255,.3);color:var(--on-ink-2)}
.hero--ink .chip b{color:#fff}
.stars{display:inline-flex;gap:2.5px;color:var(--accent)}

.rating{display:inline-flex;align-items:center;gap:10px;font-size:12.5px;color:var(--t3)}
.rating b{color:var(--t2);font-weight:600}
.rating--ink{color:var(--on-ink-3)}.rating--ink b{color:var(--on-ink-2)}

/* ── offer bar + header ────────────────────────────────── */
.announce{background:var(--ink);color:var(--bone);height:var(--bar)}
.announce__in{display:flex;align-items:center;gap:12px;height:100%}
.announce__offer{display:inline-flex;align-items:center;gap:10px;text-decoration:none;font-size:12.5px;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.announce__offer b{font-weight:600}
.announce__dot{width:6px;height:6px;border-radius:50%;background:var(--accent-light);flex:none;animation:pulse 2.4s ease-in-out infinite}
.announce__sub{color:var(--on-ink-3)}
.announce__hours{margin-left:auto;flex:none;font-size:11px;color:var(--on-ink-3);display:inline-flex;align-items:center;gap:7px}
.announce__hours a{background:var(--bone);color:var(--ink);text-decoration:none;font-size:11.5px;font-weight:600;padding:7px 15px;border-radius:100px;transition:background .2s}
.announce__hours a:hover{background:#fff}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.28}}
@media(max-width:760px){.announce__sub{display:none}}
.header{position:sticky;top:0;z-index:80;background:rgba(251,248,244,.9);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid transparent;transition:border-color .25s}
.header.is-stuck{border-bottom-color:var(--line)}
.header__in{display:flex;align-items:center;justify-content:space-between;gap:20px;height:84px;position:relative}

.nav{display:none}
.header__actions{display:flex;align-items:center;gap:18px}
.header__tel{display:inline-flex;align-items:center;gap:8px;text-decoration:none;letter-spacing:-.01em;white-space:nowrap;padding:9px 16px;border:1.5px solid var(--accent);border-radius:100px;font-size:15px;font-weight:600;transition:background .2s, color .2s, border-color .2s}
.header__tel:hover{color:var(--t2)}
.header__book{display:none}
.burger{background:none;border:0;cursor:pointer;width:42px;height:42px;display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--ink)}
.burger:hover{background:rgba(14,14,14,.06)}
@media(min-width:1140px){
  .nav{display:block}
  .nav__list{display:flex;list-style:none;gap:2px}
  .nav__item{position:static}
  .nav__link{display:inline-flex;align-items:center;gap:6px;padding:10px 13px;text-decoration:none;font-weight:500;font-size:14px;letter-spacing:-.01em;border-radius:100px;color:var(--t1)}
  .nav__link:hover,.nav__item.is-active>.nav__link{background:rgba(14,14,14,.06)}
  .nav__item--accent>.nav__link::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent);margin-right:2px}
  .header__book{display:inline-flex}
  .burger{display:none}
  .mega{position:absolute;left:0;right:0;top:calc(100% - 10px);transform:translateY(8px);width:auto;background:var(--bone);border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 60px rgba(14,14,14,.16);opacity:0;pointer-events:none;transition:opacity .2s,transform .25s var(--ease);padding:30px 32px 32px;z-index:90}
  .nav__item--mega:hover .mega,.nav__item--mega:focus-within .mega,.nav__item--mega.is-open .mega{opacity:1;pointer-events:auto;transform:none}
  .mega__in{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:30px}
  .mega__in>.mega__col:first-child{padding-left:0}
  .mega__col ul{list-style:none;margin-top:14px;display:flex;flex-direction:column}
  .mega__col a{display:block;padding:8px 0;text-decoration:none;font-size:14px;color:var(--t2);border-top:1px solid var(--line)}
  .mega__col a:hover{color:var(--ink)}
  .mega__feature{background:var(--ink);color:var(--on-ink);border-radius:10px;padding:24px;display:flex;flex-direction:column;gap:10px;min-width:240px}
  .mega__feature .label{color:var(--on-ink-3)}
  .mega__title{font-weight:300;font-size:22px;line-height:1.15;letter-spacing:-.035em}
  .mega__text{font-size:13px;color:var(--on-ink-2);flex:1}
  .mega__feature .btn{background:var(--accent);color:#fff}
}
.drawer{position:fixed;inset:0;z-index:100;background:var(--bone);overflow-y:auto;padding:0 var(--pad) 40px;transform:translateX(100%);transition:transform .35s var(--ease)}
.drawer.is-open{transform:none}
.drawer[hidden]{display:block;visibility:hidden}
.drawer.is-open[hidden]{visibility:visible}
.drawer__head{display:flex;align-items:center;justify-content:space-between;height:84px}
.drawer__close{background:none;border:0;cursor:pointer;width:42px;height:42px;display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--ink)}
.drawer__cta{display:grid;gap:10px;margin:8px 0 22px}
.drawer__group{border-top:1px solid var(--line)}
.drawer__group summary{list-style:none;display:flex;align-items:center;justify-content:space-between;padding:18px 0;font-weight:300;font-size:26px;letter-spacing:-.04em;cursor:pointer}
.drawer__group summary::-webkit-details-marker{display:none}
.drawer__group[open] summary svg{transform:rotate(180deg)}
.drawer__group .label{margin:12px 0 6px}
.drawer__group ul{list-style:none;margin-bottom:18px}
.drawer__group li a{display:block;padding:9px 0;text-decoration:none;font-size:15.5px;color:var(--t2)}
.drawer__link{display:block;border-top:1px solid var(--line);padding:18px 0;font-weight:300;font-size:26px;letter-spacing:-.04em;text-decoration:none}
.drawer__foot{border-top:1px solid var(--line);padding-top:20px;margin-top:8px;font-size:13.5px;color:var(--t2)}
.drawer__foot a{display:inline-flex;align-items:center;gap:8px;text-decoration:none;font-weight:600;color:var(--ink);margin-bottom:10px}
body.is-locked{overflow:hidden}

/* ── trust strip ───────────────────────────────────────── */
.trust{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--blush)}

.trust__in{display:flex;flex-wrap:wrap;gap:10px 30px;justify-content:space-between;align-items:center;padding-top:14px;padding-bottom:14px;font-size:12.5px;color:var(--t2)}
.trust__i{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}
.trust__i b{color:var(--ink);font-weight:600}
.trust__i svg{color:var(--accent)}
@media(max-width:760px){.trust__in{justify-content:flex-start;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}.trust__in::-webkit-scrollbar{display:none}}

/* ── hero (page) ───────────────────────────────────────── */
.hero{position:relative;overflow:hidden}
.hero--bone,.hero--bone2{background:var(--bone)}
.hero--ink{background:var(--ink);color:var(--on-ink)}
.hero__grid{display:grid;grid-template-columns:1fr;gap:clamp(28px,4vw,56px);align-items:center;padding-top:clamp(56px,7vw,104px);padding-bottom:clamp(40px,5vw,72px)}
.hero--img .hero__grid{padding-bottom:0}
@media(min-width:1000px){.hero--img .hero__grid{grid-template-columns:1.06fr .94fr;padding-bottom:clamp(40px,5vw,72px)}}
.hero__copy{max-width:640px}
.hero--centre .hero__copy{text-align:center;margin-inline:auto;max-width:860px}
.hero--centre .hero__cta{justify-content:center}
.hero__kicker{margin-bottom:24px;display:inline-flex;align-items:center;gap:9px;width:auto;border:1px solid var(--line-strong);border-radius:100px;padding:8px 16px;font-size:11px;letter-spacing:.16em;font-weight:500;color:var(--ink);text-transform:uppercase}
.hero__kicker::before{content:"";display:block;width:5px;height:5px;max-width:5px;border-radius:50%;background:var(--accent);flex:none}
.hero--ink .hero__kicker{border-color:rgba(255,255,255,.3);color:var(--on-ink)}
.hero--ink .hero__kicker::before{background:var(--accent-light)}
.hero--centre .hero__kicker{margin-inline:auto}
.hero__lede{margin-top:22px;max-width:54ch}
.hero--centre .hero__lede{margin-inline:auto}
.hero__chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}
.hero__cta{display:flex;flex-wrap:wrap;gap:10px;margin-top:26px}
.hero__meta{list-style:none;display:flex;flex-wrap:wrap;gap:8px 20px;margin-top:22px;font-size:12.5px;color:var(--t3)}
.hero__meta li{display:inline-flex;align-items:center;gap:7px}
.hero__meta svg{color:var(--accent)}
.hero--ink .hero__meta{color:var(--on-ink-3)}
.hero--ink .hero__meta svg{color:var(--accent-light)}

.hero__media{position:relative;border-radius:var(--r);overflow:hidden;aspect-ratio:4/5;background:var(--stone);max-height:640px}
.hero__media img{width:100%;height:100%;object-fit:cover}
@media(max-width:999px){.hero--img .hero__media{margin-top:8px;aspect-ratio:4/3;border-radius:var(--r) var(--r) 0 0}}

/* ── home hero (LP-bonding style: centred, symmetrical) ── */
.hhero{background:var(--bone)}
.hhero__in{max-width:1080px;margin:0 auto;padding:clamp(64px,8vw,120px) var(--pad) clamp(30px,3.5vw,44px);text-align:center}
.hhero__title{font-size:var(--fs-display)}
.hhero__pre{display:flex;width:fit-content;align-items:center;gap:9px;margin:0 auto 26px;border:1px solid var(--line-strong);border-radius:100px;padding:8px 16px;font-size:11px;line-height:1.2;letter-spacing:.16em;font-weight:500;color:var(--ink);text-transform:uppercase;font-family:var(--text)}
.hhero__pre::before{content:"";display:block;width:5px;height:5px;border-radius:50%;background:var(--accent);flex:none}
.hhero__sub{margin:22px auto 0;max-width:56ch}
.hhero__chips{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:22px}
.hhero__cta{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:28px}
.hhero__rate{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:22px;font-size:12.5px;color:var(--t3)}
.hhero__rate b{color:var(--t2);font-weight:600}

.hhero__tel:hover{color:var(--ink)}

/* smile wall marquee */
.wall{padding:0 0 clamp(40px,5vw,64px);overflow:hidden;background:var(--bone)}
.wall__row{display:flex;gap:10px;width:max-content;will-change:transform}
.wall__row--a{animation:slide 60s linear infinite}
.wall__row--b{animation:slide 74s linear infinite reverse;margin-top:10px}
.wall:hover .wall__row{animation-play-state:paused}
.wall__i{width:clamp(150px,19vw,260px);aspect-ratio:4/3;flex:none;border-radius:var(--r);overflow:hidden;background:var(--stone)}

.wall__i img{width:100%;height:100%;object-fit:cover}
@keyframes slide{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* price tiers (LP) */
.price__n{font-weight:200;letter-spacing:-.06em;line-height:.86;margin-top:14px;font-size:clamp(88px, 14vw, 184px)}
.price__n sup{font-size:.3em;font-weight:300;vertical-align:super;letter-spacing:-.02em;top:-.1em}

.price__u{font-weight:400;letter-spacing:-.02em;color:var(--t2);margin-top:6px;font-size:var(--fs-lead);max-width:44ch;margin-inline:auto}
.tiers{border-top:1px solid var(--line-strong);margin-top:clamp(38px,5vw,58px);text-align:left}
.tier{display:grid;grid-template-columns:1fr;gap:6px 26px;padding:24px 0;border-bottom:1px solid var(--line);align-items:baseline;text-decoration:none;transition:background .2s}
a.tier:hover{background:rgba(14,14,14,.025)}
@media(min-width:760px){.tier{grid-template-columns:150px 1fr 170px}}
.tier__w{font-size:10px;font-weight:600;letter-spacing:.28em;text-transform:uppercase;color:var(--t3);padding-top:7px}
.tier__t{font-size:21px;font-weight:500;letter-spacing:-.035em}
.tier__b{margin-top:8px;font-size:13.5px;line-height:1.65;color:var(--t2);max-width:56ch}
.tier__p{font-size:26px;font-weight:300;letter-spacing:-.04em;line-height:1.1}
@media(min-width:760px){.tier__p,.tier__pn{text-align:right}}
.tier__pn{display:block;font-size:10.5px;color:var(--t3);letter-spacing:.04em;margin-top:5px;font-weight:500}
.price__grid{display:grid;grid-template-columns:1fr;margin-top:clamp(38px,5vw,58px);border-top:1px solid var(--line-strong)}
@media(min-width:820px){.price__grid{grid-template-columns:repeat(3,1fr)}}
.price__c{padding:24px 22px;border-bottom:1px solid var(--line);text-align:center}
@media(min-width:820px){.price__c{border-bottom:0;border-right:1px solid var(--line)}.price__c:last-child{border-right:0}}
.price__ct{font-size:19px;font-weight:500;letter-spacing:-.03em}
.price__cb{margin-top:8px;font-size:13.5px;line-height:1.6;color:var(--t2)}

/* tech pillars (ink band) */

/* editorial "honest bit" */
.waiting__body{max-width:56ch;margin:clamp(28px,3.5vw,42px) auto 0;text-align:center}
.waiting__body p{font-size:clamp(15.5px,1.7vw,19px);line-height:1.75;font-weight:400;color:var(--on-ink-2)}
.waiting__body p+p{margin-top:20px}
.waiting__body strong{color:var(--on-ink);font-weight:500}
.waiting__q{display:block;margin:clamp(26px,3vw,36px) auto;font-weight:300;letter-spacing:-.035em;line-height:1.3;color:var(--on-ink);max-width:22ch;font-size:clamp(22px, 2.4vw, 32px)}
.waiting__close{max-width:32ch;margin:clamp(34px,4vw,50px) auto 0;padding-top:clamp(30px,3.5vw,44px);border-top:1px solid var(--on-ink-line);font-size:clamp(19px,2.6vw,30px);font-weight:300;letter-spacing:-.04em;line-height:1.28;color:var(--on-ink);text-align:center}

/* ── crumbs ────────────────────────────────────────────── */
.crumbs{padding:14px 0 0;font-size:12px;color:var(--t3)}
.crumbs ol{list-style:none;display:flex;flex-wrap:wrap;gap:4px 10px}
.crumbs li+li::before{content:"/";margin-right:10px;color:var(--t3)}
.crumbs a{text-decoration:none;color:var(--t2)}
.crumbs a:hover{color:var(--ink)}

/* ── treatment cards / index ────────────────────────────── */
.tcards{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
@media(min-width:900px){.tcards--3{grid-template-columns:repeat(3,1fr)}.tcards--4{grid-template-columns:repeat(4,1fr)}}
@media(max-width:560px){.tcards{grid-template-columns:1fr}}
.tcard{display:flex;flex-direction:column;text-decoration:none}

.tcard:hover .tcard__f img{transform:scale(1.04)}
.tcard__b{padding:14px 0 0;display:flex;flex-direction:column;flex:1}
.tcard__t{font-size:19px;font-weight:500;letter-spacing:-.035em;line-height:1.15}
.tcard__p{font-size:13.5px;color:var(--t2);margin-top:8px;flex:1;line-height:1.6}
.tcard__m{display:flex;justify-content:space-between;align-items:center;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:12px;font-weight:600;color:var(--t2)}
.tcard__m svg{color:var(--accent)}
.tindex{border-top:1px solid var(--line-strong);position:relative;text-align:left}
.tindex__row{display:grid;grid-template-columns:1fr;gap:6px 24px;padding:22px 0;border-bottom:1px solid var(--line);text-decoration:none;align-items:center;transition:padding .25s var(--ease)}
@media(min-width:800px){.tindex__row{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr) 160px 30px}}
.tindex__row:hover{padding-left:10px}
.tindex__n{font-weight:300;letter-spacing:-.045em;line-height:1;font-size:var(--fs-h3-lg)}
.tindex__row:hover .tindex__n{font-weight:500;letter-spacing:-.05em;color:var(--accent)}
.tindex__p{font-size:13.5px;color:var(--t2);max-width:56ch;line-height:1.6}
.tindex__price{font-weight:600;color:var(--t2);font-size:15px;white-space:normal;line-height:1.35}
@media(min-width:800px){.tindex__price{text-align:right}}
.tindex__a{display:flex;justify-content:flex-end;color:var(--ink)}
.tindex__a svg{transition:transform .25s var(--ease)}
.tindex__row:hover .tindex__a svg{transform:translateX(5px)}
.tindex__preview{position:fixed;width:260px;aspect-ratio:4/5;pointer-events:none;z-index:50;opacity:0;transform:scale(.96);transition:opacity .25s,transform .35s var(--ease-out);overflow:hidden;background:var(--stone);border-radius:var(--r);box-shadow:0 20px 50px rgba(14,14,14,.2)}
.tindex__preview.is-on{opacity:1;transform:scale(1)}
.tindex__preview img{width:100%;height:100%;object-fit:cover}
@media(max-width:1100px){.tindex__preview{display:none}}

/* link cards */
.lcards{display:grid;grid-template-columns:1fr;gap:12px}
@media(min-width:700px){.lcards--3,.lcards--4{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1000px){.lcards--3{grid-template-columns:repeat(3,1fr)}.lcards--4{grid-template-columns:repeat(4,1fr)}}
.lcard{display:flex;flex-direction:column;gap:8px;text-decoration:none;padding:26px 24px 22px;background:var(--bone);border:1px solid var(--line);border-radius:var(--r);transition:border-color .2s,background .2s}
.lcard:hover{border-color:var(--accent)}

.band--ink .lcard:hover{border-color:rgba(255,255,255,.6)}
.lcard__t{font-size:20px;font-weight:500;letter-spacing:-.035em;line-height:1.15}
.lcard__p{font-size:13.5px;color:var(--t2);flex:1;line-height:1.6}

.lcard__m{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:var(--t2);margin-top:8px}

/* ── steps / stats / checks ─────────────────────────────── */
.steps{list-style:none;display:grid;grid-template-columns:1fr;gap:0;margin-top:clamp(30px,4vw,46px)}
@media(min-width:840px){.steps:not(.steps--mini):not(.steps--prose){grid-template-columns:repeat(3,1fr)}}
.step{padding:28px 22px;border-top:1px solid var(--line);text-align:center}
@media(min-width:840px){.steps:not(.steps--mini):not(.steps--prose) .step{border-right:1px solid var(--line)}.steps:not(.steps--mini):not(.steps--prose) .step:last-child{border-right:0}}

.step__n{font-size:10px;font-weight:600;letter-spacing:.3em;color:var(--accent);text-transform:uppercase}

.step__t{margin-top:14px;font-size:21px;font-weight:500;letter-spacing:-.035em;line-height:1.15}
.step__b{margin-top:10px;font-size:13.5px;line-height:1.65;color:var(--t2);max-width:38ch;margin-inline:auto}

.steps--prose{margin-top:0}
.steps--prose .step{display:grid;grid-template-columns:44px 1fr;gap:4px 16px;padding:18px 0;align-items:baseline;text-align:left;border-right:0}
.steps--prose .step__n{grid-row:1/3;font-size:24px;font-weight:200;letter-spacing:-.04em;text-transform:none}
.steps--prose .step__t{margin-top:0;font-size:var(--fs-h3)}
.steps--prose .step__b{margin-inline:0;max-width:none}

.nums{display:grid;grid-template-columns:repeat(2,1fr);gap:0;margin-top:clamp(40px,5vw,60px)}
@media(min-width:820px){.nums{grid-template-columns:repeat(4,1fr)}}
.num{padding:22px 12px;border-top:1px solid var(--line);text-align:center}
@media(min-width:820px){.num{border-right:1px solid var(--line)}.num:last-child{border-right:0}}
.band--ink .num{border-color:var(--on-ink-line)}
.num__n{font-size:clamp(32px,4.4vw,50px);font-weight:200;letter-spacing:-.05em;line-height:1}
.num__n small{font-size:.42em;letter-spacing:0;font-weight:300}
.num__l{margin-top:8px;font-size:11.5px;line-height:1.5;color:var(--t3)}
.band--ink .num__l{color:var(--on-ink-3)}
.checks{list-style:none;margin-top:26px;display:flex;flex-direction:column;text-align:left}
.checks li{display:flex;gap:13px;padding:14px 0;border-top:1px solid var(--line);font-size:14px;line-height:1.6;color:var(--t2)}
.checks li:last-child{border-bottom:1px solid var(--line)}
.checks svg{flex:none;margin-top:4px;color:var(--accent)}
.checks__n{font-size:11px;font-weight:600;letter-spacing:.28em;color:var(--on-ink-3);padding-top:4px;flex:none;width:26px}
.checks__p{font-size:var(--fs-small);line-height:1.6}

.band--ink .checks li{border-color:var(--on-ink-line);color:var(--on-ink-2)}
.band--ink .checks svg{color:var(--accent-light)}

/* ── reviews ───────────────────────────────────────────── */
.revs{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:12px;text-align:left}
.rev{background:var(--bone);border-radius:var(--r);padding:26px 24px;display:flex;flex-direction:column;border:1px solid var(--line)}

.rev__top{display:flex;justify-content:space-between;align-items:center}
.rev__src{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--t3)}
.rev__q{font-size:14.5px;line-height:1.65;font-weight:400;flex:1;letter-spacing:-.01em;margin-top:14px;text-wrap:pretty}
.rev__f{margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}

.rev__n{font-size:13.5px;font-weight:600;letter-spacing:-.02em}
.rev__m{display:block;font-size:11px;color:var(--t3);margin-top:2px}

/* ── team ──────────────────────────────────────────────── */
.team{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;text-align:left}
@media(min-width:820px){.team{grid-template-columns:repeat(3,1fr);gap:14px}.team--compact{grid-template-columns:repeat(6,1fr)}.team--compact:has(>.doc:nth-child(5):last-child){grid-template-columns:repeat(5,1fr)}}
.doc__f{display:block;aspect-ratio:4/5;background:var(--stone);border-radius:var(--r);overflow:hidden}
.doc__f img{width:100%;height:100%;object-fit:cover;object-position:center 18%;transition:transform .9s var(--ease-out)}
.doc:hover .doc__f img{transform:scale(1.03)}
.doc__n{margin-top:12px;font-weight:600;letter-spacing:-.025em;font-size:17px}
.doc__r{font-size:12.5px;color:var(--t2);margin-top:2px}
.doc__g{font-size:11px;color:var(--t3);margin-top:3px}
.bio{display:grid;grid-template-columns:1fr;gap:clamp(22px,3vw,44px);padding:clamp(28px,4vw,48px) 0;border-top:1px solid var(--line);align-items:start;text-align:left}
@media(min-width:800px){.bio{grid-template-columns:300px 1fr}}
.bio__f{border-radius:var(--r);overflow:hidden;aspect-ratio:4/5;background:var(--stone);position:sticky;top:110px}
.bio__f img{width:100%;height:100%;object-fit:cover;object-position:center 12%}
.bio__q{font-size:12px;color:var(--t3);margin:10px 0 20px}
.bio__b p{margin-top:14px;color:var(--t2);max-width:66ch;font-size:15px}
.bio__b h3{margin-top:26px}
.tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}
.tags span{border:1px solid var(--line-strong);border-radius:100px;padding:6px 12px;font-size:11.5px;color:var(--t2)}

/* ── films ─────────────────────────────────────────────── */
.films{display:grid;grid-template-columns:1fr;gap:20px;text-align:left}
@media(min-width:800px){.films{grid-template-columns:1fr 1fr}}
.yt{position:relative;aspect-ratio:16/9;border-radius:var(--r);overflow:hidden;background:#000}
.yt img{width:100%;height:100%;object-fit:cover;opacity:.92}

.yt__play{position:absolute;inset:0;width:100%;height:100%;border:0;cursor:pointer;background:linear-gradient(180deg,rgba(14,14,14,0) 46%,rgba(14,14,14,.6));display:flex;align-items:flex-end;gap:12px;padding:18px;color:#fff;font-weight:500;font-size:13.5px}
.yt__play span{width:44px;height:44px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;flex:none;transition:transform .22s}
.yt__play:hover span{transform:scale(1.08)}
.film__cap{margin-top:14px}
.film__cap blockquote{font-size:clamp(17px,1.8vw,22px);font-weight:300;line-height:1.35;letter-spacing:-.03em;color:var(--on-ink)}
.film__cap b{display:block;margin-top:10px;font-size:13.5px;font-weight:600}
.film__cap span{font-size:12px;color:var(--on-ink-3)}

/* ── before/after ──────────────────────────────────────── */
.bas{display:grid;grid-template-columns:1fr;gap:22px;text-align:left}
@media(min-width:800px){.bas{grid-template-columns:1fr 1fr}}
.ba{position:relative;aspect-ratio:1920/901;border-radius:var(--r);overflow:hidden;background:var(--stone);--pos:50%;user-select:none}
.ba img{width:100%;height:100%;object-fit:cover;display:block}
.ba__after{position:absolute;inset:0}
.ba__before{position:absolute;inset:0;clip-path:inset(0 calc(100% - var(--pos)) 0 0)}
.ba__tag{position:absolute;top:12px;left:12px;background:rgba(14,14,14,.8);color:#fff;font-size:10px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;padding:6px 11px;border-radius:100px}
.ba__tag--after{left:auto;right:12px;background:var(--accent);color:#fff}
.ba__range{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:ew-resize;margin:0;z-index:3}
.ba__handle{position:absolute;top:0;bottom:0;left:var(--pos);width:2px;background:#fff;transform:translateX(-1px);pointer-events:none;z-index:2}
.ba__handle::after{content:"";position:absolute;top:50%;left:50%;width:44px;height:44px;border-radius:50%;background:#fff;transform:translate(-50%,-50%);box-shadow:0 6px 20px rgba(0,0,0,.3);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%230E0E0E' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9 6 3 12l6 6M15 6l6 6-6 6'/></svg>");background-repeat:no-repeat;background-position:center}
.ba-card figcaption{margin-top:12px;display:flex;flex-direction:column}
.ba-card b{font-size:14.5px;font-weight:600;letter-spacing:-.02em}
.ba-card figcaption span{font-size:12px;color:var(--t3)}

.ba-card .ba__tag{color:#fff;font-size:10px}
.ba-card .ba__tag--after{background:var(--accent);color:#fff}

/* ── faq ───────────────────────────────────────────────── */
.faqwrap{max-width:820px}
.faqs{border-top:1px solid var(--line-strong);text-align:left}
.faq{border-bottom:1px solid var(--line)}
.faq__q{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px 0;font-weight:500;letter-spacing:-.025em;line-height:1.3;font-size:18px}
.faq__q::-webkit-details-marker{display:none}
.faq__q:hover{color:var(--accent)}
.faq__i{flex:none;position:relative;width:11px;height:11px}
.faq__i::before,.faq__i::after{content:"";position:absolute;background:currentColor;transition:transform .25s,opacity .25s}
.faq__i::before{top:5px;left:0;width:11px;height:1.5px}
.faq__i::after{left:5px;top:0;width:1.5px;height:11px}
.faq[open] .faq__i::after{transform:scaleY(0);opacity:0}
.faq__a{padding:0 44px 22px 0;font-size:14.5px;line-height:1.7;color:var(--t2);max-width:66ch}
.faq__a p+p,.faq__a ul{margin-top:10px}
.faq__a ul{padding-left:18px}
.faqs--inline{margin:18px 0}

/* ── cta band (enquiry style) ───────────────────────────── */
.ctaband{background:var(--ink);color:var(--on-ink)}
.ctaband__in{display:grid;grid-template-columns:1fr;gap:30px;align-items:center;text-align:left}
@media(min-width:900px){.ctaband__in{grid-template-columns:1.15fr .85fr}}
.ctaband .label{justify-content:flex-start}
.ctaband .label::before{display:none}.ctaband .label::after{flex:none;width:60px}
.ctaband .h2{margin-top:16px}
.ctaband .lede{margin-top:16px;max-width:50ch}
.ctaband__actions{display:flex;flex-direction:column;gap:10px;align-items:flex-start}
@media(min-width:900px){.ctaband__actions{align-items:flex-end;text-align:right}}
.ctaband__actions .btn{min-width:270px}
.ctaband__actions .fine{display:inline-flex;align-items:center;gap:6px;margin-top:6px}

/* ── map card ──────────────────────────────────────────── */
.mapcard{display:grid;grid-template-columns:1fr;gap:clamp(24px,4vw,56px);align-items:start;text-align:left}
@media(min-width:960px){.mapcard{grid-template-columns:.9fr 1.1fr}}
.mapcard .head{text-align:left;margin-bottom:24px}
.mapcard__addr{font-style:normal;font-size:16px;line-height:1.6;color:var(--t2)}
.mapcard__addr b{color:var(--ink);font-weight:600}
.mapcard__list{list-style:none;margin-top:18px;display:flex;flex-direction:column}
.mapcard__list li{display:flex;gap:12px;align-items:flex-start;padding:12px 0;border-top:1px solid var(--line);font-size:14px;color:var(--t2)}
.mapcard__list li:last-child{border-bottom:1px solid var(--line)}
.mapcard__list svg{flex:none;margin-top:4px;color:var(--accent)}
.mapcard__list b{color:var(--ink);font-weight:600}
.dirs{list-style:none;margin-top:18px;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.dirs li{background:var(--bone);border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;display:flex;flex-direction:column;font-size:13px}
.dirs b{font-size:13px;font-weight:600}.dirs span{font-size:24px;font-weight:200;letter-spacing:-.04em;margin:2px 0}.dirs small{color:var(--t3);font-size:11px;line-height:1.4}
.mapcard__cta{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}
.mapcard__map{border-radius:var(--r);overflow:hidden;background:var(--stone);aspect-ratio:4/3;min-height:320px}
.mapcard__map iframe{width:100%;height:100%;border:0;filter:grayscale(1) contrast(1.02)}
.mapembed{margin:22px 0;border-radius:var(--r);overflow:hidden;border:1px solid var(--line);background:var(--bone)}
.mapembed iframe{width:100%;height:340px;border:0;filter:grayscale(1)}
.mapembed__addr{padding:12px 16px;font-size:13px;color:var(--t2);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.mapembed__addr a{font-weight:600;color:var(--ink)}

/* ── split ─────────────────────────────────────────────── */
.split{display:grid;grid-template-columns:1fr;gap:clamp(28px,4vw,56px);align-items:center;text-align:left}
@media(min-width:900px){.split{grid-template-columns:1fr 1fr}}
.split__f{border-radius:var(--r);overflow:hidden;background:var(--stone);aspect-ratio:4/5}
.split__f img{width:100%;height:100%;object-fit:cover}
.split__c .h2{margin-top:18px;letter-spacing:-.045em}
.split__p{margin-top:16px;color:var(--t2);max-width:48ch;font-size:var(--fs-body)}
.split__p p+p{margin-top:12px}

.split__cta{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}

/* ── prose / guide layout ───────────────────────────────── */
.guide{display:grid;grid-template-columns:1fr;gap:clamp(30px,4vw,64px);align-items:start;padding-top:clamp(36px,5vw,64px);padding-bottom:clamp(36px,5vw,64px);text-align:left}
@media(min-width:1040px){.guide{grid-template-columns:250px minmax(0,1fr)}}

.toc a:hover,.toc a.is-active{color:var(--accent);border-left-color:var(--accent)}

.prose{max-width:760px;min-width:0}
.prose>section{padding:8px 0 30px}
.prose>section+section{border-top:1px solid var(--line);padding-top:34px}
.prose .h2{font-size:clamp(26px,3vw,38px);margin-bottom:16px;letter-spacing:-.045em}
.prose .h3{margin:26px 0 10px}
.prose .h4{margin:22px 0 8px}
.prose p{margin:0 0 14px;color:var(--t2);font-size:15.5px;line-height:1.7;text-wrap:pretty}
.prose p a,.faq__a a,.callout a,.panel a{color:var(--accent);text-decoration:underline;text-decoration-color:rgba(15,94,75,.4);text-underline-offset:3px;text-decoration-thickness:1.5px}
.prose strong{color:var(--ink);font-weight:600}
.list{margin:0 0 16px;padding-left:0;list-style:none}
.list li{position:relative;padding:9px 0 9px 24px;color:var(--t2);font-size:15px;line-height:1.6;border-top:1px solid var(--line)}
.list li:last-child{border-bottom:1px solid var(--line)}
.list li::before{content:"";position:absolute;left:3px;top:19px;width:6px;height:6px;border-radius:50%;background:var(--accent)}
ol.list{counter-reset:li}
ol.list li{counter-increment:li;padding-left:34px}
ol.list li::before{content:counter(li,decimal-leading-zero);background:none;top:9px;left:0;font-size:12px;font-weight:600;letter-spacing:.06em;color:var(--accent)}
.list ul{margin:6px 0 0;padding-left:0;list-style:none}
.list ul li{border:0;padding:4px 0 4px 20px;font-size:14px}
.list ul li::before{width:4px;height:4px;background:var(--t3);top:13px}
.callout{background:var(--accent-soft);border-radius:var(--r);padding:22px 24px;margin:22px 0;border-left:2px solid var(--accent)}
.callout__t{font-weight:300;line-height:1.35;letter-spacing:-.035em;color:var(--ink)!important;margin:0!important;font-size:clamp(19px, 1.5vw, 21px)}
.callout .btns{margin:16px 0 0}

.fig{margin:24px 0;border-radius:var(--r);overflow:hidden;background:#fff;border:1px solid var(--line)}
.fig img{width:100%}
.fig figcaption{padding:10px 14px;font-size:12px;color:var(--t3)}
.tablewrap{overflow-x:auto;margin:18px 0 22px;border:1px solid var(--line);border-radius:var(--r);background:var(--bone)}
.table{width:100%;border-collapse:collapse;min-width:420px;font-size:var(--fs-small)}
.table th,.table td{padding:13px 16px;text-align:left;vertical-align:top;border-top:1px solid var(--line)}
.table thead th{border-top:0;background:var(--blush);font-size:10px;letter-spacing:.28em;text-transform:uppercase;color:var(--t3);font-weight:600}
.table tbody th{font-weight:500;color:var(--ink);width:55%}
.table td{color:var(--t2)}
.table td:last-child{white-space:nowrap;font-weight:600;color:var(--ink)}
.reviewed{display:flex;align-items:center;gap:12px;color:var(--t3);margin:10px 0 0;padding:12px 0;border-top:1px solid var(--line-strong);border-bottom:1px solid var(--line);line-height:1.5;font-size:15px}
.reviewed__img{width:44px;height:44px;border-radius:50%;object-fit:cover;flex:none}
.reviewed b{color:var(--ink);font-weight:600}
.reviewed a{text-decoration:none}

.redflag{background:var(--blush);border-radius:var(--r);padding:18px 20px;margin:22px 0;font-size:14px;color:var(--t2);border-left:2px solid var(--accent)}
.redflag b{display:block;color:var(--accent);font-size:10px;letter-spacing:.28em;text-transform:uppercase;margin-bottom:6px;font-weight:600}
.disclaimer{font-size:12px;color:var(--t3);border-top:1px solid var(--line);padding-top:16px;margin-top:20px;line-height:1.6}

/* ── ticker ────────────────────────────────────────────── */

.ticker:hover .ticker__row{animation-play-state:paused}

/* ── fees ──────────────────────────────────────────────── */
.fees{border-top:1px solid var(--line-strong);text-align:left}
.fee{border-bottom:1px solid var(--line)}
.fee summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:22px 0}
.fee summary::-webkit-details-marker{display:none}
.fee summary:hover .fee__t{color:var(--taupe-deep)}
.fee__t{font-size:clamp(20px,2.2vw,26px);font-weight:400;letter-spacing:-.04em;line-height:1.1}
.fee__from{font-size:12px;font-weight:600;color:var(--t3);margin-left:auto;white-space:nowrap}
.fee__body{padding:0 0 24px}
.fee__body .btns{margin:16px 0 0}
.fee__note{font-size:13px;color:var(--t3);margin-top:10px}
.pricebox{background:var(--ink);color:var(--on-ink);border-radius:var(--r);padding:clamp(24px,3vw,36px);display:flex;flex-direction:column;gap:12px;text-align:left}
.pricebox__n{font-weight:200;font-size:clamp(64px,8vw,120px);line-height:.88;letter-spacing:-.06em;color:#fff}
.pricebox__n sup{font-size:.34em;font-weight:300;vertical-align:super;top:-.1em;position:relative}
.pricebox__n s{color:var(--on-ink-3);font-size:.3em;text-decoration:line-through;margin-left:12px;letter-spacing:-.02em;font-weight:300}
.pricebox .lede{color:var(--on-ink-2)}.pricebox .fine{color:var(--on-ink-3)}
.pricebox .label{color:var(--on-ink-3)}
.pricebox .btn{background:var(--accent);color:#fff}

/* ── finance calculator ───────────────────────────────── */
.calc{background:var(--bone);border:1px solid var(--line);border-radius:var(--r);padding:0;display:grid;grid-template-columns:1fr;text-align:left;overflow:hidden}
@media(min-width:900px){.calc{grid-template-columns:1.1fr .9fr}}
.calc>div:first-child{padding:clamp(22px,3vw,36px)}
.calc label{display:block;font-size:10px;font-weight:600;letter-spacing:.28em;text-transform:uppercase;color:var(--t3);margin-bottom:8px}
.calc__row+.calc__row{margin-top:22px;padding-top:22px;border-top:1px solid var(--line)}
.calc__val{font-size:32px;font-weight:200;letter-spacing:-.05em;margin-bottom:8px}
.calc input[type=range]{width:100%;accent-color:var(--accent)}
.calc__terms{display:flex;flex-wrap:wrap;gap:8px}
.calc__terms button{border:1px solid var(--line-strong);background:transparent;border-radius:100px;padding:9px 14px;font-size:12.5px;cursor:pointer;font-weight:500}
.calc__terms button.is-on{background:var(--accent);color:#fff;border-color:var(--accent)}
.calc__out{background:var(--ink);color:var(--on-ink);padding:clamp(22px,3vw,36px);display:flex;flex-direction:column;gap:8px}
.calc__out .label{color:var(--on-ink-3)}
.calc__m{font-size:clamp(52px,6vw,84px);font-weight:200;line-height:.9;letter-spacing:-.06em;color:#fff}
.calc__m small{font-size:.24em;letter-spacing:0;color:var(--on-ink-2);margin-left:8px;font-weight:400}
.calc__rows{display:flex;flex-direction:column;border-top:1px solid var(--on-ink-line);margin-top:14px}
.calc__rows div{display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--on-ink-line);font-size:13px;color:var(--on-ink-2)}
.calc__rows b{color:#fff;font-weight:600}
.calc__out .btn{margin-top:16px;background:var(--accent);color:#fff}

/* ── forms (LP enquiry) ────────────────────────────────── */
.form{background:var(--bone);color:var(--ink);border-radius:var(--r);padding:clamp(24px,3.4vw,36px);text-align:left;border:1px solid var(--line)}
.band--ink .form{border-color:transparent}
.form__t{font-size:24px;font-weight:300;letter-spacing:-.04em;line-height:1.15}
.form__s{font-size:13px;color:var(--t2);margin-top:8px}
.form__rows{display:grid;grid-template-columns:1fr;gap:14px;margin-top:24px}
@media(min-width:560px){.form__rows--2{grid-template-columns:1fr 1fr}}
.field{display:flex;flex-direction:column;gap:7px}
.field>span{font-size:10px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:var(--t3)}
.field input,.field select,.field textarea{font-family:inherit;font-size:15px;color:var(--ink);background:transparent;border:0;border-bottom:1px solid var(--line-strong);border-radius:0;padding:9px 0 11px;width:100%;transition:border-color .2s;appearance:none;resize:vertical}
.field select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' stroke='%230E0E0E' stroke-width='1.2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 2px center;padding-right:22px;cursor:pointer}
.field input:focus,.field select:focus,.field textarea:focus{outline:0;border-bottom-color:var(--accent)}
.field input::placeholder,.field textarea::placeholder{color:var(--t3)}
.field--check{flex-direction:row;align-items:flex-start;gap:10px;font-size:12.5px;color:var(--t2);text-transform:none;letter-spacing:0}
.field--check input{width:18px;height:18px;flex:none;appearance:auto;margin-top:2px;accent-color:var(--accent)}
.form__submit{margin-top:26px}
.form__hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.enq{display:grid;grid-template-columns:1fr;gap:clamp(30px,4.5vw,60px);align-items:start;text-align:left}
@media(min-width:940px){.enq{grid-template-columns:.92fr 1.08fr}}

/* ── sticky mobile bar ─────────────────────────────────── */

.stickybar.is-in{transform:none}

body:has(.stickybar.is-in){padding-bottom:70px}
@media(min-width:900px){body:has(.stickybar.is-in){padding-bottom:0}}

/* ── footer ────────────────────────────────────────────── */
.foot{background:var(--ink);color:var(--on-ink);padding:clamp(44px,5vw,72px) 0 36px;font-size:14px}
.foot__top{display:grid;grid-template-columns:1fr;gap:40px;padding-bottom:36px;border-bottom:1px solid var(--on-ink-line)}
@media(min-width:1000px){.foot__top{grid-template-columns:1.1fr 2fr}}

.foot__tag{margin-top:18px;color:var(--on-ink-2);max-width:40ch;font-size:14px}
.foot__contact{display:flex;flex-direction:column;gap:10px;margin-top:22px;font-size:13px}
.foot__contact a,.foot__contact span{display:inline-flex;align-items:center;gap:10px;text-decoration:none;color:var(--on-ink-2)}
.foot__contact a:hover{color:#fff}
.foot__contact svg{color:var(--accent-light);flex:none}
.foot__cols{display:grid;grid-template-columns:repeat(2,1fr);gap:26px}
@media(min-width:700px){.foot__cols{grid-template-columns:repeat(4,1fr)}}
.foot__col .label{color:var(--on-ink-3)}
.foot__col ul{list-style:none;margin-top:14px;display:flex;flex-direction:column;gap:7px}
.foot__col a{text-decoration:none;color:var(--on-ink-2);font-size:13px}
.foot__col a:hover{color:#fff}
.foot__mid{padding:22px 0;border-bottom:1px solid var(--on-ink-line);display:flex;flex-direction:column;gap:10px}
.foot__areas{font-size:12px;color:var(--on-ink-3);line-height:1.9}
.foot__areas b{color:var(--on-ink-2);font-weight:600}
.foot__areas a{color:var(--on-ink-3);text-decoration:none}
.foot__areas a:hover{color:#fff}
.foot__legal{padding-top:22px;display:grid;gap:14px;font-size:10.5px;color:var(--on-ink-3);line-height:1.75}
.foot__legal ul{list-style:none;display:flex;flex-wrap:wrap;gap:8px 20px}
.foot__legal a{color:var(--on-ink-2);text-decoration:none}
.foot__legal a:hover{color:#fff}
.foot__social{display:flex;gap:18px}

/* ── LP (ad landing pages) ─────────────────────────────── */
.lp-top{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:22px var(--pad);max-width:var(--max);margin:0 auto}

.lp-top__right{display:flex;align-items:center;gap:16px}

.lp-foot{background:var(--ink);color:var(--on-ink-3);font-size:10.5px;padding:32px var(--pad) 110px;text-align:center;line-height:1.75}
.lp-foot a{color:var(--on-ink-2)}

/* ── misc ──────────────────────────────────────────────── */
.rise{opacity:0;transform:translateY(16px);transition:opacity .7s ease,transform .7s var(--ease)}
.rise.is-vis{opacity:1;transform:none}
.grid2{display:grid;grid-template-columns:1fr;gap:clamp(24px,4vw,56px);text-align:left}
@media(min-width:900px){.grid2{grid-template-columns:1fr 1fr}}
.grid3{display:grid;grid-template-columns:1fr;gap:12px;text-align:left}
@media(min-width:800px){.grid3{grid-template-columns:repeat(3,1fr)}}
.panel{background:var(--bone);border:1px solid var(--line);border-radius:var(--r);padding:clamp(22px,3vw,30px);text-align:left}
.panel--ink{background:var(--ink);color:var(--on-ink);border-color:transparent}
.panel h3{font-size:22px;font-weight:400;letter-spacing:-.04em;line-height:1.15}
.panel p{margin-top:10px;color:var(--t2);font-size:14px}
.panel--ink p{color:var(--on-ink-2)}
.panel .label{margin-bottom:12px}
.panel--ink .label{color:var(--on-ink-3)}
.panel--ink .btn--sm{background:var(--accent);color:#fff}
.pills{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.grid2 .pills{justify-content:flex-start}
.pills a{border:1px solid var(--line-strong);border-radius:100px;padding:9px 16px;font-size:13px;text-decoration:none;color:var(--t2);background:transparent;transition:.2s}
.pills a:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}

.band--ink .pills a:hover{border-color:#fff;color:#fff}
.gallery{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
@media(min-width:800px){.gallery{grid-template-columns:repeat(4,1fr)}}
.gallery figure{border-radius:var(--r);overflow:hidden;aspect-ratio:4/3;background:var(--stone)}
.gallery figure:first-child{grid-column:span 2;grid-row:span 2;aspect-ratio:auto}
.gallery img{width:100%;height:100%;object-fit:cover}
.legal .prose{max-width:800px}
.legal .prose h2{margin-top:28px}
.centred{text-align:center}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}.rise{opacity:1;transform:none}.wall__row{animation:none}}
@media print{.announce,.header,.foot,.drawer,.ctaband{display:none!important}body{background:#fff}}

/* ── statement (positioning) + union + facts + pillars — from the implants page ── */
.state__grid{display:grid;grid-template-columns:1fr;gap:clamp(30px,4.5vw,56px);align-items:start;text-align:left}
@media(min-width:960px){.state__grid{grid-template-columns:1.12fr .88fr;align-items:center}}
.state__h{font-weight:200;letter-spacing:-.045em;line-height:.98;font-size:clamp(32px,4.8vw,58px);margin-top:20px}
.state__h em{font-style:normal;font-weight:500;color:var(--accent-light)}
.state__p{margin-top:20px;max-width:50ch}
.state__p+.state__p{margin-top:14px}
.union{border:1px solid var(--on-ink-line);border-radius:var(--r);padding:28px 26px}
.union__row{display:flex;flex-direction:column;align-items:flex-start;gap:14px}
.union__n{font-size:clamp(14px,1.5vw,17px);font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--on-ink);line-height:1.2}
.union__j{display:flex;align-items:center;gap:12px;font-size:10px;font-weight:600;letter-spacing:.28em;text-transform:uppercase;color:var(--accent-light)}
.union__j::before{content:"";width:28px;height:1px;background:var(--on-ink-line);flex:none}
.union__p{margin-top:16px;padding-top:16px;border-top:1px solid var(--on-ink-line);font-size:13.5px;line-height:1.65;color:var(--on-ink-2)}
.facts{display:grid;grid-template-columns:1fr;gap:0;margin-top:clamp(34px,4.5vw,52px);text-align:left}
@media(min-width:800px){.facts{grid-template-columns:repeat(3,1fr)}}
.fact{padding:22px 0 0;border-top:1px solid var(--on-ink-line)}
@media(min-width:800px){.fact{padding:22px 26px 0 0}.fact+.fact{padding-left:26px;border-left:1px solid var(--on-ink-line)}.fact:last-child{padding-right:0}}
.fact__t{font-weight:500;letter-spacing:-.025em;color:var(--on-ink);font-size:18px}
.fact__b{margin-top:8px;font-size:13.5px;line-height:1.65;color:var(--on-ink-2)}
.pillars{display:grid;grid-template-columns:1fr;gap:0;text-align:left}
@media(min-width:640px){.pillars{grid-template-columns:1fr 1fr}}
@media(min-width:1040px){.pillars{grid-template-columns:repeat(4,1fr)}}
.pillar{padding:24px 0;border-top:1px solid var(--line-strong)}
@media(min-width:640px){.pillar{padding:24px 26px 26px 0}.pillar+.pillar{padding-left:26px;border-left:1px solid var(--line)}}
@media(min-width:640px) and (max-width:1039px){.pillar:nth-child(odd){padding-left:0;border-left:0}}
@media(min-width:1040px){.pillar:first-child{padding-left:0;border-left:0}.pillar:last-child{padding-right:0}}
.pillar__k{font-size:10px;font-weight:600;letter-spacing:.28em;text-transform:uppercase;color:var(--accent)}
.pillar__t{margin-top:14px;font-size:19px;font-weight:500;letter-spacing:-.035em;line-height:1.15}
.pillar__b{margin-top:10px;font-size:13.5px;line-height:1.65;color:var(--t2)}
.cut{display:flex;align-items:center;gap:16px}
.cut::after{content:"";flex:1;height:1px;background:var(--line);max-width:120px}
.cut--ink::after{background:var(--on-ink-line)}
.cut .label{width:auto;justify-content:flex-start}
.cut .label::before,.cut .label::after{display:none}

/* ══════════════════════════════════════════════════════════════
   MOTION + CONVERSION LAYER
   ══════════════════════════════════════════════════════════════ */
/* cross-document page transitions (Chrome/Edge/Safari 18+), JS fade fallback elsewhere */
@view-transition{navigation:auto}

@keyframes vt-out{to{opacity:0;transform:translateY(-8px)}}
@keyframes vt-in{from{opacity:0;transform:translateY(12px)}}
html.is-leaving body{opacity:0;transform:translateY(-6px);transition:opacity .22s ease,transform .22s ease}
html.is-entering body{animation:page-in .5s var(--ease-out) both}
/* Opacity only: a transform on <body> makes it a containing block, which stopped the
   browser scrolling to #anchors on load across the whole site. */
@keyframes page-in{from{opacity:0}}

/* hero entrance */
.hhero__in>*,.hero__copy>*{animation:rise-in .8s var(--ease-out) both}
.hhero__in>*:nth-child(1),.hero__copy>*:nth-child(1){animation-delay:.05s}
.hhero__in>*:nth-child(2),.hero__copy>*:nth-child(2){animation-delay:.14s}
.hhero__in>*:nth-child(3),.hero__copy>*:nth-child(3){animation-delay:.24s}
.hhero__in>*:nth-child(4),.hero__copy>*:nth-child(4){animation-delay:.32s}
.hhero__in>*:nth-child(5),.hero__copy>*:nth-child(5){animation-delay:.4s}
.hero__copy>*:nth-child(6){animation-delay:.48s}

.hero__media{animation:img-in 1.1s var(--ease-out) .2s both}
@keyframes rise-in{from{opacity:0;transform:translateY(22px)}}
@keyframes img-in{from{opacity:0;clip-path:inset(6% 0 6% 0);transform:scale(1.03)}to{opacity:1;clip-path:inset(0 0 0 0);transform:none}}
.wall{animation:fade-in 1s ease .5s both}
@keyframes fade-in{from{opacity:0}}

/* scroll reveals (JS adds data-reveal + --i) */
[data-reveal]{opacity:0;transform:translateY(20px);transition:opacity .7s ease,transform .8s var(--ease-out);transition-delay:calc(var(--i,0)*70ms)}
[data-reveal].is-vis{opacity:1;transform:none}
[data-reveal="img"]{transform:none;clip-path:inset(0 0 100% 0);transition:clip-path 1s var(--ease-out),opacity .6s ease}
[data-reveal="img"].is-vis{clip-path:inset(0 0 0 0)}
[data-reveal="line"]{transform:scaleX(0);transform-origin:left;opacity:1;transition:transform 1s var(--ease-out)}
[data-reveal="line"].is-vis{transform:none}

/* micro-interactions */
.btn{transition:background .2s,color .2s,border-color .2s,transform .25s var(--ease-out),box-shadow .25s}
.btn:hover{transform:translateY(-2px);box-shadow:0 10px 26px rgba(14,14,14,.16)}
.btn:active{transform:translateY(0);box-shadow:none}
.btn--ghost:hover,.btn--ghost-ink:hover{box-shadow:none}
.btn svg:last-child{transition:transform .25s var(--ease)}
.btn:hover svg:last-child{transform:translateX(4px)}
.tcard,.lcard,.rev,.doc{transition:transform .45s var(--ease-out),box-shadow .45s,border-color .2s}
.tcard:hover,.lcard:hover{transform:translateY(-4px);box-shadow:0 18px 40px rgba(14,14,14,.1)}
.nav__link{position:relative;white-space:nowrap}
.nav__link::after{content:"";position:absolute;left:13px;right:13px;bottom:6px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .3s var(--ease-out)}
.nav__link:hover::after{transform:scaleX(1)}
.faq__a{animation:fade-in .35s ease}
.header{transition:transform .35s var(--ease),border-color .25s}
.header.is-hidden{transform:none}

/* floating dock: Book now + Enquire now (all viewports) */
.dock{position:fixed;right:clamp(14px,2vw,28px);bottom:clamp(14px,2vw,28px);z-index:75;display:flex;gap:8px;padding:6px;background:rgba(14,14,14,.92);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--on-ink-line);border-radius:100px;box-shadow:0 18px 50px rgba(14,14,14,.28);transform:translateY(140%);opacity:0;transition:transform .45s var(--ease-out),opacity .35s}
.dock.is-in{transform:none;opacity:1}
.dock a,.dock button{display:inline-flex;align-items:center;gap:8px;border-radius:100px;padding:13px 20px;font-size:14px;font-weight:600;text-decoration:none;border:0;cursor:pointer;font-family:inherit;white-space:nowrap;transition:background .2s,transform .2s}
.dock__book{background:var(--accent);color:#fff}
.dock__book:hover{background:var(--accent-2)}
.dock__enq{background:var(--bone);color:var(--ink)}
.dock__enq:hover{background:#fff}
.dock__call{background:transparent;color:#fff;border:1px solid var(--on-ink-line)!important;display:none!important}
.dock__pulse{position:absolute;inset:-1px;border-radius:100px;border:1px solid rgba(142,209,188,.6);animation:dock-pulse 2.6s ease-out infinite;pointer-events:none}
@keyframes dock-pulse{0%{transform:scale(1);opacity:.8}100%{transform:scale(1.08);opacity:0}}
@media(max-width:720px){
  .dock{left:10px;right:10px;bottom:10px;border-radius:100px;padding:6px;justify-content:stretch}
  .dock a,.dock button{flex:1;justify-content:center;padding:13px 10px;font-size:13.5px}
  .dock__call{display:inline-flex!important;flex:0 0 46px;padding:0!important;width:46px;height:46px;border-radius:50%}
  .dock__call span{display:none}
  body:has(.dock.is-in){padding-bottom:78px}
}

/* enquiry slide-over */
.sheet{position:fixed;inset:0;z-index:120;display:none}
.sheet.is-open{display:block}
.sheet__bg{position:absolute;inset:0;background:rgba(14,14,14,.55);backdrop-filter:blur(4px);opacity:0;transition:opacity .3s}
.sheet.is-open .sheet__bg{opacity:1}
.sheet__panel{position:absolute;top:0;right:0;bottom:0;width:min(520px,100%);background:var(--bone);overflow-y:auto;padding:22px var(--pad) 40px;transform:translateX(100%);transition:transform .45s var(--ease-out);box-shadow:-20px 0 60px rgba(14,14,14,.25)}
.sheet.is-open .sheet__panel{transform:none}
.sheet__head{display:flex;align-items:center;justify-content:space-between;padding-bottom:18px;border-bottom:1px solid var(--line);margin-bottom:22px}
.sheet__close{background:none;border:1px solid var(--line-strong);border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ink)}
.sheet__close:hover{background:var(--ink);color:var(--bone);border-color:var(--ink)}
.sheet .form{border:0;padding:0;background:transparent}
.sheet__alt{margin-top:22px;padding-top:18px;border-top:1px solid var(--line);display:grid;gap:8px}
.sheet__alt a{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r);text-decoration:none;font-size:14px;font-weight:500;transition:border-color .2s,background .2s}
.sheet__alt a:hover{border-color:var(--accent);background:var(--accent-soft)}
.sheet__alt svg{color:var(--accent)}
body.is-sheet{overflow:hidden}
@media(prefers-reduced-motion:reduce){.hhero__in>*,.hero__copy>*,.hero__media,.wall{animation:none}[data-reveal]{opacity:1;transform:none;clip-path:none}.dock{transition:none}}
.callout .btn,.faq__a .btn{text-decoration:none}
.callout .btn--accent,.callout .btn--ink,.callout .btn--alert{color:#fff}
.callout .btn--ghost{color:var(--ink)}
.hhero__in>*,.hero__copy>*{animation-duration:.6s}
/* buttons always win over contextual link colours (panels, prose, callouts, FAQ answers) */
a.btn,button.btn,.btn.btn{text-decoration:none}
.btn.btn--ink,.btn.btn--accent,.btn.btn--alert{color:#fff}

.btn.btn--bone{color:var(--ink)}
.btn.btn--ghost{color:var(--ink)}
.btn.btn--ghost:hover{color:var(--ink)}
.btn.btn--ghost-ink{color:var(--on-ink)}
.ctaband .btn.btn--bone,.mega__feature .btn.btn--ink,.pricebox .btn.btn--bone,.calc__out .btn.btn--bone,.panel--ink .btn.btn--sm{color:#fff}

.ctaband .btn.btn--bone{background:var(--bone);color:var(--ink)}
/* ── overflow guards (iOS horizontal scroll) ── */
html,body{max-width:100%;overflow-x:hidden}
html{overflow-x:clip}
.announce{overflow:hidden}
@media(max-width:760px){.announce__hours em{display:none}.announce__offer{font-size:12px}}
.dock{max-width:calc(100vw - 20px)}
.hero__grid,.hhero__in{max-width:100%}
/* faster reveals so fast scrolling never shows blank sections */
[data-reveal]{transition-duration:.5s,.6s;transition-delay:calc(var(--i,0)*45ms)}
/* ── logo (inline SVG wordmark) ── */
.logo{display:inline-flex;align-items:center;text-decoration:none;color:var(--ink)}
.logo svg{height:34px;width:auto;display:block}
.logo--bone{color:var(--bone)}
.foot .logo svg{height:38px}
.lp-top .logo svg{height:30px}
@media(max-width:480px){.logo svg{height:28px}}
/* brand sheet */

.logo svg{height:44px}
.foot .logo svg{height:52px}
.lp-top .logo svg{height:40px}
@media(max-width:480px){.logo svg{height:36px}}

/* ══════════════════════════════════════════════════════════════
   ELEVATION PASS — arches, ring motif, sage band, softer cards
   (the warmth and craft of the best UK private practices, in our
   own language: Manrope, ink & bone, Deepcar green)
   ══════════════════════════════════════════════════════════════ */
:root{--r-card:18px;--r-img:10px;--sage:#E6EDE8;--sage-2:#D7E2DA;--sage-line:rgba(15,94,75,.16)}
.band--sage{background:var(--sage)}

.band--sage .label::before,.band--sage .label::after,.band--sage .step,.band--sage .checks li{border-color:var(--sage-line)}
.band--sage .label::before,.band--sage .label::after{background:var(--sage-line)}
/* cards and panels: soft radius */
.rev,.lcard,.panel,.form,.calc,.dirs li,.pricebox,.union,.callout,.redflag,.mapembed,.tablewrap,.fig,.sheet__alt a{border-radius:var(--r-card)}
.calc{overflow:hidden}
.pricebox,.calc__out{border-radius:var(--r-card)}
/* imagery: gentle radius, arches for people and heroes */
.split__f,.gallery figure,.wall__i,.yt,.ba,.mapcard__map,.hero__media{border-radius:var(--r-img)}
.hero__media{border-radius:999px 999px var(--r-img) var(--r-img)}
@media(max-width:999px){.hero--img .hero__media{border-radius:999px 999px 0 0;aspect-ratio:4/4.4;max-width:520px;margin-inline:auto}}
.doc__f,.bio__f{border-radius:999px 999px var(--r-img) var(--r-img)}
.gallery figure:first-child{border-radius:999px 999px var(--r-img) var(--r-img)}
/* ring motif: the emblem language, drawn faintly behind heroes */
.hero--img .hero__grid{position:relative}
.hero--img .hero__grid::before{content:"";position:absolute;right:-6%;top:-8%;width:min(52vw,560px);aspect-ratio:1;border-radius:50%;border:1px solid var(--line);opacity:.9;pointer-events:none}
.hero--img .hero__grid::after{content:"";position:absolute;right:2%;top:2%;width:min(38vw,420px);aspect-ratio:1;border-radius:50%;border:1px solid var(--line);opacity:.55;pointer-events:none}
.hero--ink .hero__grid::before,.hero--ink .hero__grid::after{border-color:var(--on-ink-line)}
@media(max-width:999px){.hero--img .hero__grid::before,.hero--img .hero__grid::after{display:none}}
.hero__media{position:relative;z-index:1}
/* ring mark (inline svg) above section labels */
.mark{display:block;width:56px;height:34px;margin:0 auto 18px;color:var(--accent)}
.band--ink .mark,.ctaband .mark{color:var(--accent-light)}
.mark--left{margin-inline:0}
.state__grid .mark,.ctaband .mark{margin-inline:0}
/* hero eyebrow pill sits with the mark on home */

/* home statement band: sage instead of blush for the prices */
.is-home #prices.band--blush{background:var(--sage)}
.is-home #prices .tiers,.is-home #prices .tier,.is-home #prices .price__grid,.is-home #prices .price__c{border-color:var(--sage-line)}
.is-home #prices .label::before,.is-home #prices .label::after{background:var(--sage-line)}

/* reviews: quieter cards, larger quote marks */
.rev{padding:28px 26px}
.rev__q{font-size:15px}
/* faster, earlier reveals */
[data-reveal]{transition-duration:.45s,.55s;transition-delay:calc(var(--i,0)*40ms)}
/* trust strip on sage */
.trust{background:var(--sage);border-color:var(--sage-line)}
/* announce bar green dot + header book outline (pill, as the reference) */
.header__book{background:transparent;color:var(--ink);border-color:var(--line-strong)}
.header__book:hover{background:var(--ink);color:var(--bone);border-color:var(--ink)}
.btn.btn--ink.header__book{color:var(--ink);background:var(--accent);border-color:var(--accent);font-size:15px}
.btn.btn--ink.header__book:hover{color:var(--bone)}
/* keep faces inside the arch: bias hero and portrait crops upward */
.hero__media img{object-position:center 22%}
.doc__f img{object-position:center 14%}

/* cookie consent (bottom-left, out of the dock's way) */
.consent{position:fixed;left:clamp(10px,2vw,24px);bottom:clamp(10px,2vw,24px);z-index:78;max-width:440px;background:rgba(14,14,14,.96);color:var(--on-ink-2);border:1px solid var(--on-ink-line);border-radius:var(--r-card);padding:18px 20px;box-shadow:0 18px 50px rgba(14,14,14,.3);transform:translateY(20px);opacity:0;transition:transform .4s var(--ease-out),opacity .3s;font-size:13px;line-height:1.55}
.consent.is-in{transform:none;opacity:1}
.consent a{color:#fff}
.consent__btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;align-items:center}
.consent__reject{background:none;border:0;color:var(--on-ink-3);font:inherit;font-size:12.5px;cursor:pointer;padding:8px 6px;text-decoration:underline}
.consent__reject:hover{color:#fff}
@media(max-width:720px){.consent{left:10px;right:10px;max-width:none;bottom:86px}}

/* ── treatment page redesign: facts strip, journey cards, clinician band, price rows ── */
.facts-strip{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
@media(min-width:820px){.facts-strip{grid-template-columns:repeat(4,1fr)}}
.fs{background:var(--bone);border:1px solid var(--line);border-radius:var(--r-card);padding:22px 20px;text-align:center}
.fs__n{font-size:clamp(24px,2.6vw,34px);font-weight:200;letter-spacing:-.05em;line-height:1}
.fs__l{margin-top:8px;font-size:11.5px;color:var(--t3);letter-spacing:.02em}

.split__p--wide{max-width:56ch}
.split__p p+p{margin-top:12px}
.jcards{list-style:none;display:grid;grid-template-columns:1fr;gap:12px}
@media(min-width:820px){.jcards{grid-template-columns:repeat(3,1fr)}}
.jcard{background:var(--blush);border-radius:var(--r-card);padding:28px 26px 30px;position:relative}
.jcard__n{position:absolute;top:22px;right:22px;width:40px;height:40px;border-radius:50%;border:1px solid var(--line-strong);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;letter-spacing:.06em;color:var(--t2)}
.jcard__t{font-size:21px;font-weight:500;letter-spacing:-.035em;line-height:1.15;max-width:80%}
.jcard__b{margin-top:12px;font-size:14px;line-height:1.65;color:var(--t2)}
.tiers--tight{margin-top:22px}
.tier--2{grid-template-columns:1fr auto;padding:16px 0}
.tier--2 .tier__t{font-size:16px;font-weight:500}
.tier__p--sm{font-size:16px;font-weight:600;letter-spacing:-.02em;white-space:nowrap}
.clin{display:grid;grid-template-columns:1fr;gap:clamp(24px,4vw,56px);align-items:center}
@media(min-width:900px){.clin{grid-template-columns:.8fr 1.2fr}}
.clin__f{border-radius:999px 999px var(--r-img) var(--r-img);overflow:hidden;aspect-ratio:4/5;background:var(--ink-2);max-width:420px}
.clin__f img{width:100%;height:100%;object-fit:cover;object-position:center 14%}
.clin__c .label{justify-content:flex-start}
.clin__c .label::before,.clin__c .label::after{display:none}
.clin__c .h2{margin-top:14px}
.clin__r{margin-top:10px;font-size:14px;color:var(--on-ink-2)}
.clin__q{margin-top:6px;font-size:12.5px;color:var(--on-ink-3)}
.clin__c .btns{margin-top:24px}

/* landing pages: conversion layout */
.lpnotice{display:flex;gap:16px;align-items:flex-start;background:var(--blush);border-radius:var(--r-card);padding:22px 24px;border-left:2px solid var(--accent)}
.lpnotice>svg{flex:none;margin-top:6px;color:var(--accent)}
.lpnotice .h3{margin-bottom:8px}
.lpnotice p{color:var(--t2);font-size:14.5px;line-height:1.65;margin:0 0 8px}
.lp-prose{max-width:820px;margin-inline:auto}
.lp-prose .h2{margin-bottom:16px}
.lp-lede p{margin-top:10px}
.lp-lede .list{margin-top:14px}
.band--ink .lp-lede .list li{border-color:var(--on-ink-line);color:var(--on-ink-2)}
.band--ink .lp-lede .list li::before{background:var(--accent-light)}
.is-lp .hero__grid{padding-top:clamp(36px,5vw,64px)}

/* home hero treatment cards */
.hcards{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:clamp(30px,4vw,48px)}
@media(min-width:900px){.hcards{grid-template-columns:repeat(5,1fr)}}
.hcard{display:flex;flex-direction:column;gap:6px;background:var(--bone);border:1px solid var(--line);border-radius:var(--r-card);padding:20px 20px 18px;text-decoration:none;text-align:left;min-height:150px;transition:border-color .2s,transform .35s var(--ease-out),box-shadow .35s}
.hcard:hover{border-color:var(--accent);transform:translateY(-3px);box-shadow:0 16px 36px rgba(14,14,14,.08)}
.hcard__dot{width:9px;height:9px;border-radius:50%;background:var(--accent);margin-bottom:10px}
.hcard--alert .hcard__dot{background:#C2412B}
.hcard--all .hcard__dot{background:var(--taupe)}
.hcard__t{font-size:17px;font-weight:600;letter-spacing:-.025em;line-height:1.15;color:var(--ink)}
.hcard__s{font-size:12.5px;color:var(--t2);line-height:1.5;flex:1}
.hcard__m{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--t2);margin-top:8px}
.hcard__m svg{color:var(--accent);transition:transform .25s}
.hcard:hover .hcard__m svg{transform:translateX(4px)}
@media(max-width:560px){.hcards{grid-template-columns:1fr 1fr}.hcard--all{grid-column:span 2}.hcard{min-height:0;padding:16px}}

/* dock: WhatsApp */
.dock__wa{background:transparent;color:#fff;border:1px solid var(--on-ink-line)!important}
.dock__wa:hover{background:rgba(255,255,255,.08)}
.dock__wa svg{color:var(--accent-light)}
@media(max-width:720px){.dock__wa{flex:0 0 46px;padding:0!important;width:46px;height:46px;border-radius:50%;justify-content:center}.dock__wa span{display:none}}

/* map card: let the map fill its column instead of leaving dead space */
@media(min-width:960px){
  .mapcard{align-items:stretch}
  .mapcard__map{aspect-ratio:auto;height:100%;min-height:420px;position:sticky;top:110px}
}
/* directions grid inside the map card: tighter, no orphan row */
.dirs{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}

/* ══════════════════════════════════════════════════════════════
   DESIGNED CONTENT SECTIONS
   Guides, hubs and local pages: each content section is a full-width
   band with its own composition, instead of one long article column.
   ══════════════════════════════════════════════════════════════ */

/* sticky chapter nav */
.secnav{position:sticky;top:0;z-index:60;background:rgba(250,248,243,.92);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.secnav__in{display:flex;align-items:center;gap:20px;padding-top:0;padding-bottom:0;min-height:56px}
.secnav__l{font-size:10px;font-weight:600;letter-spacing:.28em;text-transform:uppercase;color:var(--t3);flex:none;display:none}
@media(min-width:1000px){.secnav__l{display:block}}
.secnav ol{list-style:none;display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;padding:10px 0;margin:0;min-width:0}
.secnav ol::-webkit-scrollbar{display:none}
.secnav li{flex:none}
.secnav a{display:block;padding:8px 14px;border-radius:100px;font-size:13px;color:var(--t2);text-decoration:none;white-space:nowrap;transition:background .2s,color .2s}
.secnav a:hover{background:rgba(14,14,14,.05);color:var(--ink)}
.secnav a.is-active{background:var(--ink);color:var(--bone)}
@media(max-width:760px){.secnav{position:static}}

/* intro strip under the hero */
.intro__in{max-width:820px;margin-inline:auto}
.intro__lede{margin-top:20px}
.intro__lede p{font-size:clamp(16px,1.7vw,19px);line-height:1.65;color:var(--t2);margin:0 0 14px;text-wrap:pretty}
.intro__lede p:first-child{font-size:clamp(17px,2vw,21px);color:var(--t1);font-weight:300;letter-spacing:-.02em;line-height:1.5}
.intro .reviewed{margin-top:0}

/* shared section furniture */
.sec__h{max-width:20ch}
.sec__top{margin-bottom:clamp(28px,3.5vw,44px);max-width:760px}
.sec__top .sec__h{max-width:24ch}
.sec__lede{margin-top:18px}
.sec__lede p{font-size:clamp(15.5px,1.6vw,18px);line-height:1.65;color:var(--t2);margin:0 0 12px}
.sec__body p,.sec__after p{color:var(--t2);font-size:15.5px;line-height:1.7;margin:0 0 14px}
.sec__after{margin-top:26px;max-width:70ch}
.sec__editorial{max-width:820px;margin-inline:auto}
.sec__editorial .sec__h{max-width:22ch;margin-bottom:22px}
.sec__editorial .sec__body p:first-child{font-size:clamp(16.5px,1.8vw,20px);font-weight:300;letter-spacing:-.02em;line-height:1.55;color:var(--t1)}
.sec__split{display:grid;grid-template-columns:1fr;gap:clamp(26px,4vw,56px);align-items:start}
@media(min-width:900px){.sec__split{grid-template-columns:.85fr 1.15fr}.sec__split--wide{grid-template-columns:1fr 1fr}}
.sec__copy .sec__h{max-width:16ch}
@media(min-width:900px){.sec__copy{position:sticky;top:120px}}
.sec .h3{margin:26px 0 10px}

/* labelled list -> card grid */
.rowcards{display:grid;grid-template-columns:1fr;gap:12px}
@media(min-width:760px){.rowcards--2{grid-template-columns:repeat(2,1fr)}.rowcards--3{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1080px){.rowcards--3{grid-template-columns:repeat(3,1fr)}}
.rowcard{background:var(--bone);border:1px solid var(--line);border-radius:var(--r-card);padding:24px 24px 22px;transition:border-color .2s,transform .35s var(--ease-out)}
.rowcard:hover{border-color:var(--accent);transform:translateY(-2px)}
.band--blush .rowcard,.band--sage .rowcard{background:var(--bone)}
.rowcard__t{font-size:17px;font-weight:600;letter-spacing:-.025em;line-height:1.2;color:var(--ink)}
.rowcard__b{margin-top:9px;font-size:14px;line-height:1.65;color:var(--t2)}

/* triage tiers */
.tris{display:grid;grid-template-columns:1fr;gap:12px}
@media(min-width:820px){.tris{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}}
.tri{border-radius:var(--r-card);padding:26px 24px;border:1px solid var(--line);background:var(--bone);border-top:3px solid var(--line-strong)}
.tri--now{border-top-color:#C2412B}
.tri--today{border-top-color:var(--accent)}

.tri__t{font-size:15px;font-weight:600;letter-spacing:-.02em;color:var(--ink);line-height:1.35}

/* numbered action list */
.acts{list-style:none;display:grid;grid-template-columns:1fr;gap:10px;margin:0;padding:0}
@media(min-width:760px){.acts{grid-template-columns:repeat(2,1fr)}}
.act{display:grid;grid-template-columns:44px 1fr;gap:4px 14px;align-items:start;background:var(--bone);border:1px solid var(--line);border-radius:var(--r-card);padding:20px 22px}
.band--blush .act,.band--sage .act{background:var(--bone)}
.act__n{font-size:22px;font-weight:200;letter-spacing:-.04em;color:var(--accent);line-height:1.1}
.act__b{font-size:14.5px;line-height:1.65;color:var(--t2)}

/* price/table section */
.sec--price .sec__panel .tablewrap{margin:0}
.sec--price .sec__panel .table{min-width:0}
.sec__list .list{margin-bottom:0}

/* keep prose defaults working inside designed sections */
.sec .list li{font-size:15px}
.sec .callout{max-width:820px}
.sec .tablewrap{max-width:100%}

/* mega menu: invisible bridge across the gap so diagonal pointer travel keeps it open */
@media(min-width:1140px){
  .nav__item--mega .mega::before{content:"";position:absolute;left:0;right:0;top:-18px;height:18px}
  .nav__item--mega.is-open>.nav__link{background:rgba(14,14,14,.06)}
}
/* chapter nav sits under the sticky header, and rises when the header hides on scroll */
@media(min-width:761px){
  .secnav{top:84px}
  body:has(.header.is-hidden) .secnav{top:0}
}

/* card grids fill the row rather than leaving orphans */
.rowcards,.rowcards--2,.rowcards--3{grid-template-columns:repeat(auto-fit,minmax(min(100%,290px),1fr))}
.tris{grid-template-columns:repeat(auto-fit,minmax(min(100%,290px),1fr))}
.tri__b{margin-top:9px;font-size:14px;line-height:1.65;color:var(--t2)}

/* urgency accent on the label itself */
.tri--now .tri__t{color:#A8341F}
.tri--today .tri__t{color:var(--accent)}

/* prose sections: alternate centred editorial with a heading-left composition */
.sec__split--prose{grid-template-columns:1fr}
@media(min-width:1000px){.sec__split--prose{grid-template-columns:.8fr 1.2fr;gap:clamp(30px,5vw,72px)}}
.sec__split--prose .sec__copy .sec__h{max-width:14ch}
.sec__split--prose .sec__body{max-width:66ch}
/* the opening line of a section reads as a lede, but never becomes a wall of large type */
.sec__editorial .sec__body>p:first-child{font-size:clamp(16px,1.7vw,18.5px);line-height:1.6}
.sec__editorial .sec__body>p:first-child:not(:only-child){max-width:62ch}
.sec__split--prose .sec__body>p:first-child{font-size:16px;line-height:1.65;color:var(--t1)}
.sec__body>p{max-width:70ch}

/* ── third-party chat widget ─────────────────────────────────
   The loader pins #leadflow-chat-widget to the bottom-right corner with an
   inline style, which is where our dock lives. These rules are the no-JS
   fallback; site.js refines the position and drops it back to the corner
   when the chat panel is open. */
/* The host is 0x0 and the launcher inside the shadow root is itself fixed, so the
   lift is done by a stylesheet injected into the shadow root by site.js. These
   rules only handle whole-widget visibility, which does inherit into the shadow. */

@media(max-width:720px){
  /* a cookie choice comes before a chat prompt */
  body:has(.consent.is-in) #leadflow-chat-widget{opacity:0;pointer-events:none}
}
/* the chat panel sits above everything; get the dock out of its way */
body.chat-open .dock{opacity:0;pointer-events:none;transform:translateY(24px)}

/* ── Team bios: collapsed by default, opened on click or by inbound anchor ── */
/* Collapsed, the card is a compact row: a small portrait beside the name, role and
   focus line. Opening a bio grows the portrait back to the full editorial size.
   The site already relies on :has() elsewhere; without it every card simply stays
   at the larger size, which still reads correctly. */
@media(min-width:800px){
  .bio{grid-template-columns:132px 1fr;gap:28px;transition:grid-template-columns .35s var(--ease-out)}
  .bio:has(.bio__more[open]){grid-template-columns:300px 1fr;gap:clamp(22px,3vw,44px)}
}
.bio__f{aspect-ratio:1/1;transition:aspect-ratio .35s var(--ease-out)}
.bio:has(.bio__more[open]) .bio__f{aspect-ratio:4/5}
@media(max-width:799px){.bio__f{max-width:132px;aspect-ratio:1/1}.bio:has(.bio__more[open]) .bio__f{max-width:none;aspect-ratio:4/5}}
.bio__focus{margin-top:12px;color:var(--t2);max-width:60ch;font-size:15px}
.bio__more{margin-top:22px;border-top:1px solid var(--line);padding-top:4px}

.bio__toggle::-webkit-details-marker{display:none}
.bio__toggle:hover{color:var(--ink)}

.bio__more[open] .bio__toggle svg{transform:rotate(180deg)}
.bio__more:not([open]) .bio__toggle-l.is-open,.bio__more[open] .bio__toggle-l.is-closed{display:none}
.bio__full{padding-bottom:8px;animation:bio-in .4s var(--ease-out)}
.bio__full p{margin-top:14px;color:var(--t2);max-width:66ch;font-size:15px}
.bio__full h3{margin-top:26px}
.bio__full .list{margin-top:14px;max-width:66ch}
@keyframes bio-in{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.bio{scroll-margin-top:110px}
@media(prefers-reduced-motion:reduce){.bio__full{animation:none}}
/* Collapsed, a bio is a list row, so the name is set at list scale and grows to
   editorial scale only when the profile is open. */
.bio .bio__b>.h2{font-size:clamp(23px,2.3vw,29px);line-height:1.16;margin-top:6px!important;transition:font-size .3s var(--ease-out)}
.bio:has(.bio__more[open]) .bio__b>.h2{font-size:clamp(30px,3.4vw,42px)}
.bio{padding:clamp(20px,2.4vw,30px) 0}
.bio__q{margin:9px 0 0}
.bio .tags{margin-top:13px}
.bio__more{margin-top:15px}

@media(prefers-reduced-motion:reduce){.bio,.bio__f,.bio .bio__b>.h2{transition:none}}

/* ══════════════════════════════════════════════════════════════
   RING ACCENTS — the hero's concentric circles, carried through
   the page as section accents, on every viewport.

   Colour is reversed against the band: ink-toned rings on light
   grounds, bone-toned on dark, green on sage. --line alone was a
   13% hairline once the opacity stacked, which read as nothing.

   Deliberately no overflow:hidden or clip-path on .band: either
   would create a clipping context and kill the sticky bio
   portrait inside it. The rings bleed off the edge instead and
   body's existing overflow-x:hidden does the clipping.
   ══════════════════════════════════════════════════════════════ */
.band{position:relative;--ring:rgba(14,14,14,.22)}
.band--ink{--ring:rgba(255,255,255,.26)}
.band--sage{--ring:rgba(15,94,75,.26)}
.band--blush,.band--bone2{--ring:rgba(14,14,14,.19)}
.band>.wrap{position:relative;z-index:1}
.band::before,.band::after{
  content:"";position:absolute;aspect-ratio:1;border-radius:50%;
  border:1px solid var(--ring);pointer-events:none;z-index:0;
}

/* six placements on rotation, so the motif moves around the page
   rather than pulsing between the same two corners */
.band:nth-of-type(6n+1)::before{width:min(60vw,470px);right:-15vw;top:-9%}
.band:nth-of-type(6n+1)::after {width:min(38vw,300px);right:-3vw;top:9%;opacity:.55}

.band:nth-of-type(6n+2)::before{width:min(64vw,510px);left:-19vw;bottom:-13%}
.band:nth-of-type(6n+2)::after {width:min(40vw,320px);left:-6vw;bottom:5%;opacity:.5}

.band:nth-of-type(6n+3)::before{width:min(56vw,440px);left:-25vw;top:50%;transform:translateY(-50%)}
.band:nth-of-type(6n+3)::after {width:min(34vw,270px);right:-11vw;bottom:-7%;opacity:.55}

.band:nth-of-type(6n+4)::before{width:min(66vw,520px);right:-21vw;bottom:-15%}
.band:nth-of-type(6n+4)::after {width:min(32vw,250px);left:-8vw;top:-5%;opacity:.5}

.band:nth-of-type(6n+5)::before{width:min(52vw,410px);left:-11vw;top:-15%}
.band:nth-of-type(6n+5)::after {width:min(44vw,350px);right:-17vw;top:32%;opacity:.5}

.band:nth-of-type(6n+6)::before{width:min(58vw,460px);right:-9vw;top:56%}
.band:nth-of-type(6n+6)::after {width:min(36vw,290px);left:-15vw;bottom:-9%;opacity:.55}

/* mobile: one ring per band, still moving around, sized to read as
   a quiet arc rather than clutter on a narrow screen */
@media(max-width:720px){
  .band::after{display:none}
  .band::before{opacity:.85}
  .band:nth-of-type(6n+1)::before{width:74vw;right:-30vw;top:-3%}
  .band:nth-of-type(6n+2)::before{width:78vw;left:-34vw;bottom:-4%}
  .band:nth-of-type(6n+3)::before{width:68vw;left:-32vw;top:46%;transform:translateY(-50%)}
  .band:nth-of-type(6n+4)::before{width:80vw;right:-36vw;bottom:-5%}
  .band:nth-of-type(6n+5)::before{width:66vw;left:-26vw;top:-4%}
  .band:nth-of-type(6n+6)::before{width:72vw;right:-28vw;top:52%}
}

/* the hero rings were desktop-only; show them on mobile too, scaled down */
@media(max-width:999px){
  .hero--img .hero__grid::before,.hero--img .hero__grid::after{display:block}
  .hero--img .hero__grid::before{width:76vw;right:-26vw;top:-2%;opacity:.6}
  .hero--img .hero__grid::after{width:52vw;right:-12vw;top:6%;opacity:.35}
}

@media(prefers-reduced-motion:no-preference){
  .band::before,.band::after{transition:opacity .4s var(--ease-out)}
}
/* stable deep-link anchors on landing pages: zero-size, offset for the sticky header */
.lp-anchor{display:block;height:0;scroll-margin-top:110px}

/* Offer landing page: the enquiry form takes the hero's media column */
.hero--form .hero__grid{padding-bottom:clamp(40px,5vw,72px)}
.hero__formcol{position:relative;z-index:1}
.hero--form .form{box-shadow:0 30px 80px -40px rgba(0,0,0,.6)}
/* LP top bar: on phones the hours chip squeezed the phone button off the edge */
.lp-top__right .btn{white-space:nowrap;flex:none}
@media(max-width:640px){.lp-top__right .chip{display:none}}


/* ═══ Refinements, folded from refine.css (plan Step 6; Step 7 fold) ═══
   Template layers (landers, guides, towns, hubs, money, practice, legal pages) and the few
   site-wide rules that must follow the component rules above to keep the cascade. */


/* ── 1. Type scale ─────────────────────────────────────────── */

body { font-size: var(--fs-body); line-height: 1.65; }

.h2, .state__h { font-size: var(--fs-h2); line-height: 1.04; letter-spacing: -.04em; }
.prose .h2 { font-size: clamp(26px, 2.6vw, 36px); }

.tindex__n{letter-spacing:-.035em}
.step__t, .tier__t, .pillar__t, .price__ct { font-size: var(--fs-h3); }

.lede, .hhero__sub, .head__p { font-size: var(--fs-lead); line-height: 1.55; }
.waiting__body p { font-size: var(--fs-lead); }

/* The small card copy was 13.5px: bring every explanatory line up to one small size. */
.tier__b, .pillar__b, .fact__b, .step__b, .tindex__p, .price__cb,
.union__p, .faq__a, .rev__q { font-size: var(--fs-small); line-height: 1.62; }
.prose p, .sec p { font-size: var(--fs-body); }
.sec .list li { font-size: var(--fs-body); }

/* Section labels: slightly larger and less tracked so they read, not decorate. */

/* Size floor. The live CSS set 60+ rules between 10px and 13.5px. Three bands replace them: */

/* a) Uppercase micro-labels (Before/After, Step 1, tier names): 11px, steadier tracking. */
.ba__tag,
.ba-card .ba__tag,
.pillar__k,
.redflag b,
.secnav__l,
.step__n,
.table thead th,
.tier__w,
.union__j,
.hero__kicker,
.hhero__pre{ font-size: 11px; letter-spacing: .2em; }
.field > span, .calc label { font-size: 12px; letter-spacing: .12em; }  /* form labels must read */

/* b) Meta and fine print: never under 13px. */
.foot__legal,
.lp-foot,
.announce__hours,
.announce__hours a,
.announce__offer,
.dirs small,
.doc__g,
.rev__m,
.rev__src,
.fs__l,
.tags span,
.ba-card figcaption span,
.crumbs,
.disclaimer,
.fig figcaption,
.film__cap span,
.foot__areas,
.jcard__n,
.lcard__m,
.tcard__m,
ol.list li::before,
.calc__terms button,
.consent,
.consent__reject,
.field--check,
.reviewed,
.trust__in,
.hero__meta,
.fee__from{ font-size: 13px; }

.fine.fine--ink { margin-inline: auto; }

/* c) Information patients act on (prices, hours, roles, chips, stats, links): 14-15px. */

.tier__pn, .num__l, .hcard__s, .hcard__m, .chip, .rating, .hhero__rate, .doc__r, .clin__q, .bio__q,
.foot__col a, .foot__contact, .dirs li, .dirs b, .mapembed__addr, .fee__note, .calc__rows div,
.form__s, .pills a, .secnav a, .btn--sm, .drawer__foot, .yt__play
{ font-size: 14px; }
.film__cap b,.lcard__p,.tcard__p,.rev__n,.ba-card b,.lpnotice p,.act__b{ font-size: var(--fs-small); }

/* Inline styles the agency hard-coded into the HTML. Only !important can reach them from a
   stylesheet; the rebuild should delete the inline styles instead. */

/* The first-appointment price keeps its drama, one notch down to sit with the hero. */

/* ── 2. Alignment: one left edge ──────────────────────────── */

/* Section heads sit on the content grid. */
.head { text-align: left; }

.head .label { justify-content: flex-start; }
.head .label::before { display: none; }
.head .label::after { max-width: 64px; }

/* "Centred" bands follow the same grid... */
.wrap.centred { text-align: left; }
.wrap.centred .lede, .wrap.centred .head__p { margin-inline: 0; }
.step { text-align: left; }
.step__b { margin-inline: 0; }

/* The small arch mark above a heading follows the heading. */
.mark { margin-inline: 0; }

/* Treatment prices: bigger, so the widest ("New patient exam £39, usually £85") may wrap
   rather than run into the arrow. */

@media (min-width: 800px) { .tindex__row { grid-template-columns: minmax(0,1fr) minmax(0,1.5fr) 190px 30px; } }

/* ...except the two deliberate moments: the price feature and the honest bit. */
#waiting .mark{ margin-inline: auto; }
#prices .wrap.centred,#prices .head,#waiting .wrap.centred{ text-align: center; }
#prices .head__p{ margin-inline: auto; }
#prices .head .label{ justify-content: center; }
#prices .head .label::before{ display: block; }
#prices .head .label::after{ max-width: 190px; }
#prices .band__foot{ justify-content: center; }

/* Narrow sections keep a narrow measure but share the page's left edge. */
.wrap.faqwrap, .wrap.prose { max-width: var(--max); }
.faqwrap > *, .wrap.prose > * { max-width: 820px; }

/* ── 4. Hero system (plan step 5, 2026-09-27) ─────────────── */
/*
  Fayez's decision: typographic heroes now, photoshoot later. A stock/AI `st-*` photo is dropped
  and the hero is rebuilt from content every page already carries: kicker, headline, lede,
  fact chips, buttons, meta. No new copy, no invented facts.

    ┌ kicker ───────────────────────────────────────────────┐
    │ Headline across the page, sized to its length (≤22ch) │
    ├───────────────────────────────┬───────────────────────┤  ← hairline rule
    │ lede                          │ £300   per tooth      │  ← the page's own chips,
    │ [Book]  [Call]                │ 1 visit  no lab wait  │     as a fact column
    │                               │ · 500+ reviews · 0%…  │  ← meta
    └───────────────────────────────┴───────────────────────┘
  Emergency pages have no chips, so their call buttons take the right column as a call panel.
  Real photos (Dr Ijaz, the practice) keep the live arch layout; only the headline size changes.
*/

/* Inner-page headlines were fixed at up to 96px, so long H1s ran to 6-7 lines. */
.hero .display { font-size: clamp(36px, 4.4vw, 64px); line-height: 1.02; letter-spacing: -.042em; }

/* Stock/AI photos out. */
.hero__media:has(img[src*="/st-"]) { display: none; }

:is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__grid {
  grid-template-columns: 1fr;
  padding-bottom: clamp(44px, 5vw, 76px);
}
:is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__copy {
  max-width: none;
}
:is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .display {
  max-width: 22ch;
  text-wrap: balance;
}

@media (min-width: 1000px) {
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__copy {
    display: grid;
    grid-template-columns: minmax(0, 1.3fr) minmax(0, .7fr);
    column-gap: clamp(40px, 6vw, 96px);
    align-items: start;
  }
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__kicker { grid-column: 1 / -1; justify-self: start; }
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .display { grid-column: 1 / -1; }

  /* Row 3: the rule, then lede on the left and the facts (or the call panel) on the right. */
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) :is(.hero__lede, .hero__chips) {
    grid-row: 3; margin-top: clamp(28px, 3vw, 40px); padding-top: clamp(22px, 2.4vw, 30px);
    border-top: 1px solid var(--line);
  }
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__lede { grid-column: 1; max-width: 56ch; }
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__chips { grid-column: 2; }
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__cta { grid-column: 1; grid-row: 4; }
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__meta { grid-column: 2; grid-row: 4; align-self: start; }

  /* No chips (emergency pages): the buttons become the right-hand call panel. */
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__copy:not(:has(.hero__chips)) .hero__cta {
    grid-column: 2; grid-row: 3; flex-direction: column; align-items: stretch; gap: 12px;
    margin-top: clamp(28px, 3vw, 40px); padding-top: clamp(22px, 2.4vw, 30px); border-top: 1px solid var(--line);
  }
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__copy:not(:has(.hero__chips)) .hero__cta .btn {
    justify-content: center; min-height: 56px; font-size: 16px;
  }
  :is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__copy:not(:has(.hero__chips)) .hero__meta { grid-row: 4; }
}

/* The page's own fact chips, restyled as a fact column: the number reads first. */
:is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__chips {
  display: flex; flex-direction: column; gap: 0;
}
:is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__chips .chip {
  display: flex; align-items: baseline; gap: 14px; padding: 12px 0; border: 0; border-bottom: 1px solid var(--line);
  border-radius: 0; background: none; font-size: 15px; color: var(--t2);
}
:is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__chips .chip b {
  font-size: clamp(22px, 2vw, 28px); font-weight: 300; letter-spacing: -.035em; color: var(--accent); min-width: 5.2ch;
}
:is(.hero--img:has(img[src*="/st-"]), .hero--img:not(:has(.hero__media img)), .hero--bone:not(.hero--img):not(.hero--centre), .hero--ink:not(.hero--img)) .hero__meta {
  flex-direction: column; gap: 8px; font-size: 14px;
}

/* Ink (emergency) versions use the on-ink line and mint accent. */
.hero--ink :is(.hero__lede, .hero__chips, .hero__cta) { border-color: var(--on-ink-line) !important; }
.hero--ink .hero__chips .chip { border-color: var(--on-ink-line) !important; color: var(--on-ink-2) !important; }
.hero--ink .hero__chips .chip b { color: var(--accent-light) !important; }

/* Phones: on emergency (ink) heroes the call buttons come before the facts, so "Call" is on
   the first screen even when the page has fact chips. */
@media (max-width: 999px) {
  .hero--ink .hero__copy { display: flex; flex-direction: column; }
  .hero--ink .hero__copy > .hero__kicker { align-self: flex-start; }
  .hero--ink .hero__cta { order: 3; }
  .hero--ink .hero__chips { order: 4; margin-top: 24px; }
  .hero--ink .hero__meta { order: 5; }
}

/* Content is never hidden waiting for a scroll. The live CSS starts `.rise` elements (15 on the
   homepage) at opacity 0, so they stay invisible to anything that doesn't run the script, and
   site.js hides every section head until it scrolls into view -- the generic fade-up on every
   section. Content now renders immediately; the hero keeps its own entrance. */
.rise, [data-reveal] { opacity: 1 !important; transform: none !important; }
[data-reveal="img"] { clip-path: none !important; }

/* Treatment list: the floating stock photo on hover is removed (Fayez, 2026-09-27). */
.tindex__preview { display: none !important; }

/* ── 5. Navigation and page rhythm (Fayez, 2026-09-27) ────── */

/* Sticky menu, site-wide. The header was already `position: sticky`, but the live CSS sets
   `overflow-x: hidden` on body while html has an overflow value, which makes body its own scroll
   container, so the header stuck to body and scrolled away with the page. `clip` hides sideways
   overflow without creating a scroll container. (Browsers without `clip` keep today's behaviour.) */
body { overflow-x: clip; }
/* site.js also slides the header away on desktop when scrolling down (`is-hidden`). The menu
   stays put instead, and the guide pages' sticky section nav stays docked under it. */

body:has(.header.is-hidden) .secnav { top: 84px; }
/* In-page jumps (#faq, #team...) land below the sticky menu, not under it. */
[id] { scroll-margin-top: 104px; }

/* Back to top (refine.js): bottom right, stacked above the Book/WhatsApp/Enquire dock. */
.totop {
  position: fixed; z-index: 76;
  right: clamp(14px, 2vw, 28px);
  bottom: calc(clamp(14px, 2vw, 28px) + 65px + 12px);
  width: 48px; height: 48px; border-radius: 50%;
  display: grid; place-items: center;
  background: rgba(14, 14, 14, .92); color: #fff;
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  box-shadow: 0 6px 20px rgba(14, 14, 14, .18);
  opacity: 0; transform: translateY(8px); pointer-events: none;
  transition: opacity .2s ease, transform .2s ease, background .2s ease;
}
.totop.is-on { opacity: 1; transform: none; pointer-events: auto; }
.totop:hover { background: var(--accent); }
.totop:focus-visible { outline: 3px solid var(--accent-light); outline-offset: 3px; }
@media (max-width: 700px) {
  .totop { right: 10px; bottom: calc(10px + 62px + 10px); width: 44px; height: 44px; }  /* above the full-width dock */
}

/* Less empty space between sections: the band padding was up to 104px top and bottom
   (208px between two blocks' content). Now up to 80px. */

.head { margin-bottom: clamp(28px, 3.4vw, 44px); }

/* ── 3. Measure ───────────────────────────────────────────── */

.prose p, .sec p, .union__p, .faq__a { max-width: var(--measure); }
.tier__b, .tindex__p { max-width: 60ch; }
.lede { max-width: 60ch; }

/* ── 6. T07 Paid lander (plan step 6, Fayez 2026-09-27) ───── */
/*
  A lander is one decision, not a read. Fayez's two reviews of the emergency landers: one
  centred hero block with nothing beside it repeating the lede, the practice's own rooms lower
  down (just before "Find us"), less space between blocks, notices that look like notices, and
  button rows that line up. The markup side is tools/lp-refine.py in the site repo, which
  also opts a lander in with body class lp-v2 (21 of the 23; two implant/new-patient landers
  keep their captured design, 2026-09-27).
  The centred hero, the alert-red red flag and the aligned booking band are shared with the
  T04 guides (body class guide-v2, section 7), so each pattern has one definition.
*/

/* Rhythm: tighter than the site's 80px bands. */
.lp-v2 { --gap: clamp(32px, 4vw, 56px); }
.lp-v2 .head { margin-bottom: clamp(18px, 2.2vw, 28px); }

/* Hero: one centred block (kicker, headline, lede, buttons). The step 5 hero system lays pages
   without a photo out in two columns; the landers opt out of that. The meta list repeated the
   trust strip directly under the hero, so it goes. */
body:is(.lp-v2, .guide-v2) .hero.hero--ink.hero--img .hero__grid {
  max-width: var(--max);  /* the live hero ran full width for the photo to bleed; back on the grid */
  padding-top: clamp(44px, 5.5vw, 80px); padding-bottom: clamp(44px, 5.5vw, 80px);
}
body:is(.lp-v2, .guide-v2) .hero .hero__copy {
  display: flex !important; flex-direction: column; align-items: center; text-align: center;
  max-width: 900px; margin-inline: auto;
}
body:is(.lp-v2, .guide-v2) .hero .hero__copy > * { margin-inline: auto; align-self: center !important; }
body:is(.lp-v2, .guide-v2) .hero .hero__copy > :is(.hero__lede, .hero__cta) { border-top: 0 !important; padding-top: 0 !important; }
body:is(.lp-v2, .guide-v2) .hero .display { font-size: clamp(38px, 5vw, 72px); max-width: 19ch !important; text-wrap: balance; }
body:is(.lp-v2, .guide-v2) .hero .hero__lede { max-width: 58ch !important; margin-top: clamp(18px, 2vw, 24px) !important; }
body:is(.lp-v2, .guide-v2) .hero .hero__cta {
  flex-direction: row !important; flex-wrap: wrap; justify-content: center; align-items: center;
  margin-top: clamp(24px, 2.6vw, 32px) !important; gap: 12px;
}
body:is(.lp-v2, .guide-v2) .hero .hero__cta .btn { min-height: 54px; }
.lp-v2 .hero__meta { display: none !important; }

/* The practice's own rooms, just before "Find us". */
.lp-rooms { padding-top: var(--gap); }
.lp-rooms__in { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.lp-rooms__f { margin: 0; position: relative; overflow: hidden; border-radius: var(--r-card); background: var(--stone); }
.lp-rooms__f img { display: block; width: 100%; aspect-ratio: 3 / 2; object-fit: cover; }
.lp-rooms__f figcaption {
  position: absolute; left: 12px; bottom: 12px; padding: 5px 11px; border-radius: 100px;
  background: rgba(14, 14, 14, .74); color: #fff; font-size: 13px; line-height: 1.3;
}
@media (max-width: 899px) {
  /* Phones: one swipeable row, the next photo peeking, instead of three stacked screens. */
  .lp-rooms__in {
    grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: 80%;
    overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none;
  }
  .lp-rooms__in::-webkit-scrollbar { display: none; }
  .lp-rooms__f { scroll-snap-align: start; }
}

/* Trust strip: wraps on phones instead of running off the edge mid-word. */
@media (max-width: 760px) {
  .lp-v2 .trust__in { flex-wrap: wrap; overflow-x: visible; gap: 8px 20px; }
}

/* The short notice bands under the trust strip sat 60-70px apart. They now stack closely. */
.lp-v2 .band--tight { padding-block: clamp(16px, 2vw, 22px); }
.lp-v2 .trust + .band--tight { padding-top: clamp(24px, 3vw, 36px); }
.lp-v2 .band--tight:has(+ :not(.band--tight)) { padding-bottom: clamp(24px, 3vw, 36px); }
.lp-v2 .band--tight .lp-prose > p:only-child { margin: 0; }

/* Medical red flag: a warning, so it reads as one. Alert red, not the brand green. */
:is(.lp-v2, .guide-v2) .redflag {
  background: #FCEDEA; border: 1px solid #F1C9C0; border-left: 4px solid #B8321F;
  border-radius: var(--r-card); padding: 16px 22px;
  margin: 0;  /* the live 22px top and bottom doubled the band's own padding */
}
:is(.lp-v2, .guide-v2) .redflag b { color: #9E2A18; }
:is(.lp-v2, .guide-v2) .redflag p { color: #3A2622; margin-top: 4px; }

/* Information panels ("We are a private practice", "Not sure who to call?"): information, not a
   warning, so a calm brand-tinted panel. Everything stacks: the panel heading at card size, step
   headings smaller, text as ordinary paragraphs. Only the "Looking for...?" pairs, marked
   lp-asks by tools/lp-refine.py, sit as a row of small cards. (Third review, 2026-09-27: the
   earlier rule caught every paragraph starting in bold and broke sentences into cards.) */
.lp-v2 .lpnotice {
  background: var(--accent-soft); border-left: 0; border-radius: var(--r-card);
  padding: clamp(18px, 2.4vw, 26px) clamp(18px, 2.6vw, 30px);
}
.lp-v2 .lpnotice > svg { color: var(--accent); }
.lp-v2 .lpnotice > div > * { margin: 0; max-width: 72ch; }
.lp-v2 .lpnotice > div > * + * { margin-top: 8px; }
.lp-v2 .lpnotice > div > h2.h3 { font-size: var(--fs-h3); }
.lp-v2 .lpnotice > div > h3.h3 { font-size: 18px; font-weight: 500; letter-spacing: -.015em; margin-top: 18px; }
.lp-v2 .lpnotice > div > h3.h3 + p { margin-top: 4px; }
.lp-v2 .lpnotice .lp-asks { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; max-width: none; }
.lp-v2 .lpnotice .lp-ask { margin: 0; background: var(--bone); border-radius: 12px; padding: 12px 14px; font-size: var(--fs-small); }
.lp-v2 .lpnotice .lp-ask strong { display: block; color: var(--ink); }
@media (max-width: 699px) { .lp-v2 .lpnotice .lp-asks { grid-template-columns: 1fr; } }

/* Long lists of short items (the towns, "what counts as an emergency": 9-12 lines) ran down one
   narrow column with empty space beside it. From 8 items they take two columns on desktop. */
@media (min-width: 700px) {
  .lp-v2 .lp-prose .list:has(> li:nth-child(8)) { columns: 2; column-gap: 32px; }
  .lp-v2 .lp-prose .list:has(> li:nth-child(8)) > li { break-inside: avoid; }
}

/* On a lander a prose block's h2 is a section heading (the reopened "We see emergency patients...").
   Its size and tracking now come from §10's site-wide `.prose .h2` rule; only the gap below it, matching
   the section heads' .head margin, lives here. */
.lp-v2 .lp-prose > .h2 { margin-bottom: clamp(18px, 2.2vw, 28px); }

/* Reviews: "Read all patient reviews" sits centred under the cards. */
.lp-v2 .band:has(.revs) .band__foot { justify-content: center; }

/* "What you get": the price card and its heading start on the same line. On phones the
   heading and what's included read first, then the card with the call button. */
.lp-v2 .grid2[style*="align-items:center"] { align-items: start !important; }
@media (max-width: 899px) { .lp-v2 .grid2 > .pricebox { order: 2; } }

/* Booking bands: the buttons and the review line form one column of equal widths, the
   review line centred under the buttons rather than hanging off the right edge. */
:is(.lp-v2, .guide-v2) .ctaband__in .label { justify-content: flex-start; }
:is(.lp-v2, .guide-v2) .ctaband__in .label::before { display: none; }
:is(.lp-v2, .guide-v2) .ctaband__actions { align-items: stretch; text-align: center; width: 100%; max-width: 340px; }
@media (min-width: 900px) { :is(.lp-v2, .guide-v2) .ctaband__actions { justify-self: end; } }
:is(.lp-v2, .guide-v2) .ctaband__actions .btn { min-width: 0; width: 100%; justify-content: center; }
:is(.lp-v2, .guide-v2) .ctaband__actions > p:not(.fine) { justify-content: center; text-align: center; margin-inline: auto; }
/* Not the address line (.fine): §9 centres it with align-self at max-content width, and auto margins (this
   rule, or §1's .fine.fine--ink) would override that and pin it left, overhanging the button column. */
:is(.lp-v2, .guide-v2) .ctaband__actions > .fine { margin-inline: 0; }

/* Find us: the map panel's 320px minimum height forced a 4:3 box to 427px on phones, past
   the right edge. */
@media (max-width: 899px) { .lp-v2 .mapcard__map { min-height: 0; } }
/* Find us, phones: the hours / drive-time table inside the info column carried the site-wide
   .table{min-width:420px}, and the grid column would not shrink below it, so the whole column ran
   ~50px past the right edge (4 landers at 390px, reported by the T04 session 2026-09-28). These are
   two-column tables that fit; the site already lifts the minimum inside price panels. A rendering
   fix, not design, so it applies to every lander (.is-lp), tracking-only ones included. */
.is-lp .mapcard > * { min-width: 0; }
.is-lp .mapcard .table { min-width: 0; }
.is-lp .mapcard .table :is(td, th) { white-space: normal; }  /* weekend: "24-hour line, answered by Dr Ijaz" forced 384px */

/* Sub-headings inside lander prose (the "why" lists) had no space above them, so each point's
   text ran straight into the next heading. */
.lp-v2 :is(.lp-lede, .lp-prose) > .h3:not(:first-child) { margin-top: 22px; }
.lp-v2 :is(.lp-lede, .lp-prose) > .h3 + p { margin-top: 6px; }

/* How it works: card copy up from 14px, cards less padded. */
.lp-v2 .jcard { padding: 22px 22px 24px; }
.lp-v2 .jcard__b { font-size: var(--fs-small); margin-top: 8px; }

/* Dr Ijaz: his own compact block after the booking band (tools/lp-refine.py moved it out). */
.lp-doc__in {
  display: grid; grid-template-columns: minmax(0, 220px) minmax(0, 1fr);
  column-gap: clamp(28px, 4vw, 56px); align-items: start;
}
.lp-doc__in > * { grid-column: 2; max-width: 68ch; }
.lp-doc__in > .fig { grid-column: 1; grid-row: 1 / span 30; margin: 0; }
.lp-doc__in > .h3 { margin: 0 0 4px; }
.lp-doc__in > p { margin-top: 10px; font-size: var(--fs-body); color: var(--t2); }
.lp-doc__in > .list { margin-top: 14px; }

@media (max-width: 699px) {
  .lp-doc__in { grid-template-columns: 84px minmax(0, 1fr); column-gap: 16px; }
  .lp-doc__in > .fig { grid-row: 1; border-radius: 14px; }
  
  .lp-doc__in > .h3 { grid-column: 2; grid-row: 1; align-self: center; }
  .lp-doc__in > :not(.fig):not(.h3) { grid-column: 1 / -1; }
}

/* The full Dr Ijaz profile, open (third review, 2026-09-27: "details info on Ibraheem is
   missing"). The practice-approach paragraph, then clinical focus beside qualifications. */
.lp-doc__more { margin-top: 16px; }
.lp-doc__more > p { color: var(--t2); }
.lp-doc__cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 32px; margin-top: 20px; }
.lp-doc__k { font-size: 11px; letter-spacing: .2em; text-transform: uppercase; color: var(--t3); margin: 0 0 8px; }
.lp-doc__col .list li { font-size: var(--fs-small); padding-top: 7px; padding-bottom: 7px; }
@media (max-width: 699px) { .lp-doc__cols { grid-template-columns: 1fr; gap: 18px; } }

/* ── 7. T04 Guide, urgent variant (plan step 6, Fayez 2026-09-27) ─── */
/*
  The emergency symptom and condition guides: long SEO reads (10-15 screens on a phone), so the
  content stays and the layout does the work. They share section 6's centred hero, red flag and
  booking band. tools/guide-refine.py (site repo) adds body class guide-v2 to the 21 pages, and
  the markup hooks used here: a real <thead> with data-label cells on wide tables, and
  rowcard--now / --today / --soon on the "how soon" cards.

  Fayez's review of the first pass: the whole page centred; the reviewed-by line in a box; card
  grids with no empty slots (4 tiles as 2x2); less space between sections; and no side-by-side
  halves that leave a blank patch under the shorter one. So a guide is one centred reading
  column, and every section stacks: heading, text, then its table, list or cards.
*/

/* One centred column: 760px of content, about 72 characters of body text. Breadcrumb, chapter
   nav, intro, sections, callout, FAQ and related guides all sit in it. The hero keeps its own
   centred block, and the closing booking band stays full width. */
.guide-v2 { --col: 760px; --gap: clamp(32px, 4vw, 56px); }
.guide-v2 main > .wrap,
.guide-v2 main > :not(.hero):not(.ctaband) .wrap { max-width: calc(var(--col) + 2 * var(--pad)); }

/* Every section stacks. The live split layouts put a short table or list beside long text
   (or the reverse), leaving a blank patch under the shorter half. */
.guide-v2 .sec__split { grid-template-columns: minmax(0, 1fr); gap: clamp(20px, 2.4vw, 28px); }
.guide-v2 .sec__split > * { min-width: 0; }
.guide-v2 .sec__copy { position: static; }
/* Headings take one line where they fit (Fayez): no character cap, the column is the limit, and
   the site heading size (--fs-h2, 40px) so 146 of the 174 section headings fit (80 did). Longer
   ones wrap into balanced lines. */
.guide-v2 :is(.sec .sec__h, .head__h) { max-width: none; font-size: var(--fs-h2); text-wrap: balance; }
.guide-v2 .sec__top { margin-bottom: clamp(20px, 2.4vw, 28px); }
.guide-v2 .sec__editorial .sec__h { margin-bottom: 16px; }
.guide-v2 .head { margin-bottom: clamp(18px, 2.2vw, 28px); }

/* The column is the measure, so text fills it rather than stopping short of its right edge. */
.guide-v2 :is(.sec p, .sec .list, .sec__body, .sec__after, .faqwrap > *, .faq__a, .intro__in > *) { max-width: none !important; }

/* Card grids: two across in the column, and an odd last card takes the whole row, so 4 cards
   read 2x2 and no row ends in empty slots. Phones stay one column. */
.guide-v2 :is(.rowcards, .acts, .tris) { grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); }
.guide-v2 :is(.rowcards, .acts, .tris) > :last-child:nth-child(odd) { grid-column: 1 / -1; }

/* The reviewed-by line is a box, and the red flag stacks under it. */
.guide-v2 .intro .reviewed {
  margin: 0; padding: 12px 16px; font-size: 14px;
  border: 1px solid var(--line-strong); border-radius: var(--r-card);
}
.guide-v2 .intro .redflag { margin-top: 12px; }

/* The closing booking band is centred too, a bookend to the centred hero: mark, label, heading
   and line, then the one column of buttons (section 6) with the review line under it. */
.guide-v2 .ctaband__in {
  grid-template-columns: minmax(0, 1fr); justify-items: center; text-align: center;
  max-width: calc(var(--col) + 2 * var(--pad));
}
.guide-v2 .ctaband .mark { margin-inline: auto; }
.guide-v2 .ctaband__in .label { justify-content: center; }
.guide-v2 .ctaband .label::after { display: none; }
.guide-v2 .ctaband .lede { margin-inline: auto; }
.guide-v2 .ctaband__actions { justify-self: center !important; }

/* Text links: section 10 (site-wide since 2026-09-28). */

/* The information disclaimer (section 8) sits inside the reviewed-by box as its second line,
   aligned with the text beside the photo. */
.guide-v2 .intro .reviewed:has(+ .reviewed__note) {
  border-bottom: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0; padding-bottom: 4px;
}
.guide-v2 .intro .reviewed + .reviewed__note {
  margin: 0; padding: 0 16px 12px 72px;
  border: 1px solid var(--line-strong); border-top: 0; border-radius: 0 0 var(--r-card) var(--r-card);
}
@media (max-width: 599px) { .guide-v2 .intro .reviewed + .reviewed__note { padding-left: 16px; } }

/* Type: the guides' larger sizes (Fayez's fourth review) are now the site's own scale, so they
   live in the :root tokens and section 10, not here. */
/* The emergency advice pages' own parts: the numbered steps read at card size, and a figure in
   the figures row ("8am–8pm") stays on one line in the column. */
.guide-v2 .num__n { white-space: nowrap; font-size: clamp(30px, 2.8vw, 40px); }

/* Short notices stack tightly: the live 22px margin on the callout doubled its band's padding. */
.guide-v2 .callout { margin: 0; }

/* Phones: button groups are one column of equal widths (Fayez's rule), in the hero and in the
   "In pain now?" callout. */
@media (max-width: 599px) {
  .guide-v2 .hero .hero__cta { flex-direction: column !important; align-items: stretch !important; width: 100%; max-width: 340px; }
  .guide-v2 .hero .hero__cta .btn { width: 100%; justify-content: center; }
}
@media (max-width: 699px) {
  .guide-v2 .callout .btns { flex-direction: column; align-items: stretch; }
  .guide-v2 .callout .btns .btn { width: 100%; justify-content: center; }
}

/* The chapter nav fades at its right edge instead of cutting a title mid-word. */
.guide-v2 .secnav ol {
  -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 48px), transparent);
  mask-image: linear-gradient(90deg, #000 calc(100% - 48px), transparent);
}

/* "How soon" cards, graded like the site's own triage (.tri--now/--today/--soon): call today
   taupe, same day green, A&E an alert-red panel like the red flag, because it is a warning. */
.guide-v2 :is(.rowcard--now, .rowcard--today, .rowcard--soon) { border-top: 3px solid var(--line-strong); }
.guide-v2 .rowcard--soon { border-top-color: var(--taupe); }
.guide-v2 .rowcard--today { border-top-color: var(--accent); }
.guide-v2 .rowcard--today .rowcard__t { color: var(--accent); }
.guide-v2 .rowcard--now, .guide-v2 .rowcard--now:hover {
  background: #FCEDEA; border-color: #F1C9C0; border-top-color: #B8321F;
}
.guide-v2 .rowcard--now .rowcard__t { color: #9E2A18; }
.guide-v2 .rowcard--now .rowcard__b { color: #3A2622; }

/* Wide tables (three or more columns: comparisons, "what we find" grids). The live CSS sizes
   every table for a fee list: the row heading takes 55% and the last column never wraps, so
   these ran past the page edge (cut off on phones) or crushed the heading beside them. Every
   column now wraps and the columns read with equal weight. Two-column fee tables are unchanged. */
.guide-v2 .table--wide tbody th { width: 24%; }
.guide-v2 .table--wide td:last-child { white-space: normal; font-weight: 400; color: var(--t2); }
.guide-v2 .table--wide thead td { border-top: 0; background: var(--blush); }

/* Phones: each row of a wide table becomes a card, its row heading first and each value under
   its column's name. The header row stays in the markup for screen readers. */
@media (max-width: 699px) {
  .guide-v2 .table--wide thead {
    position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap;
  }
  .guide-v2 .table--wide :is(tbody, tr, th, td) { display: block; width: auto; }
  .guide-v2 .table--wide tbody tr { padding: 16px 18px 18px; border-top: 1px solid var(--line); }
  .guide-v2 .table--wide tbody tr:first-child { border-top: 0; }
  .guide-v2 .table--wide tbody :is(th, td) { padding: 0; border: 0; }
  .guide-v2 .table--wide tbody th { width: auto; font-size: 16px; font-weight: 600; letter-spacing: -.02em; color: var(--ink); }
  .guide-v2 .table--wide tbody td { margin-top: 10px; font-size: 15px; color: var(--t2); }
  .guide-v2 .table--wide tbody td::before {
    content: attr(data-label); display: block; margin-bottom: 2px;
    font-size: 11px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--t3);
  }
}

/* ── 8. Information disclaimer, site-wide (Fayez 2026-09-27) ──── */
/*
  "This page is for general information only. It does not replace an examination or treatment
  by a dentist." On every health-information page: guides, treatment pages, the emergency hubs
  and indexes (tools/disclaimer.py in the site repo owns the wording and the scope). It follows
  the reviewed-by line as .reviewed__note, or sits in the intro band under the hero as .note
  (the implant builder's own markup, which had no style).
*/
.reviewed__note, .intro .note {
  margin: 8px 0 0; font-size: 14px; font-weight: 500; line-height: 1.55; color: var(--t2); max-width: 72ch;
}
/* "Medical disclaimer:" leads in bold ink (Fayez: "use Medical Disclaimer ... and make it bolder"). */
:is(.reviewed__note, .intro .note) strong { font-weight: 700; color: var(--ink); }

.reviewed__note { max-width: none; }  /* under the reviewed-by line it takes that line's width */

/* ── 9. Buttons and header actions, site-wide (Fayez 2026-09-27) ─ */

/* A hover you can see. Live, the green deepened by one shade and the outline buttons tinted 4%
   grey, which read as nothing. Solid green goes black; outline goes solid green; on dark bands
   green goes light mint and outline goes white. Keyboard focus gets the same change. */
.btn:is(.btn--ink, .btn--accent, .btn--alert, .btn--blue, .btn--brass):is(:hover, :focus-visible) {
  background: var(--ink); border-color: var(--ink); color: #fff;
}
:is(.band--ink, .band--ink2, .band--alert, .hero--ink, .ctaband) .btn:is(.btn--ink, .btn--accent, .btn--alert, .btn--blue, .btn--brass):is(:hover, :focus-visible) {
  background: var(--accent-light); border-color: var(--accent-light); color: var(--ink);
}
.btn.btn--ghost:is(:hover, :focus-visible) { background: var(--accent); border-color: var(--accent); color: #fff; }
.btn.btn--ghost-ink:is(:hover, :focus-visible) { background: #fff; border-color: #fff; color: var(--ink); }

/* Header: the phone number is a boxed button and "Book online" a solid green one, so both read
   as actions at a glance (Fayez). They were plain text and a thin grey outline. */
.header__tel{color:var(--accent)}
.header__tel:is(:hover, :focus-visible) { background: var(--accent); border-color: var(--accent); color: #fff; }
.btn.btn--ink.header__book{color:#fff}
.btn.btn--ink.header__book:is(:hover, :focus-visible) { background: var(--ink); border-color: var(--ink); color: #fff; }
@media (max-width: 599px) { .header__tel { padding: 7px 12px; font-size: 14px; } }
/* Between 1100px and 1340px the menu and the two boxed actions share a tight row, and "Dental
   implants" wrapped onto two lines. Menu labels stay on one line, and the actions slim down. */

@media (min-width: 1100px) and (max-width: 1340px) {
  .header__actions { gap: 10px; }
  .header__tel { padding: 8px 12px; font-size: 14px; gap: 6px; }
  .btn.btn--ink.header__book { padding: 11px 16px; font-size: 14px; }
}

/* The address line under the booking buttons: its pin icon sat apart from text that wrapped onto
   two centred lines (Fayez: "alignment broken"). The icon now travels with the first word, and
   in the centred bands the line may run wider than the buttons, so it stays on one line. */
.ctaband__actions > .fine { display: block; }
.ctaband__actions > .fine svg { display: inline-block; vertical-align: -2px; margin-right: 6px; }
:is(.lp-v2, .guide-v2) .ctaband__actions > .fine { width: max-content; max-width: calc(100vw - 2 * var(--pad)); align-self: center; }

/* ── 10. One type scale on every page (Fayez 2026-09-28) ─────── */
/*
  Fayez: "the font size increase but there are font discrepancies among pages. stay consistent".
  His fourth review enlarged the guides' type; every page now uses the same sizes. The :root
  tokens carry most of it (--fs-body 19px, --fs-small 16px, --fs-h2 40px; one step smaller on
  phones); the components below set their own sizes in site.css (14-15.5px), so they join here.
*/
:is(.rowcard__b, .act__b, .tri__b, .lcard__p, .jcard__b, .tcard__p, .panel p:not(.label), .step__b, .redflag) {
  font-size: var(--fs-small); line-height: 1.6;
}
/* A panel's own label (<p class="label">) is a label, not card text: .panel p here and site.css's
   .panel p (14px) had set it at 16px beside the 11px labels everywhere else (the fees and offer
   cards, contact, reviews, the team page). Section 1's label size, 2026-09-28. */
.panel p.label { font-size: 11px; letter-spacing: .24em; }

:is(.rowcard__t, .tri__t) { font-size: 18px; }

.faq__a, .faq__a p { font-size: 17px; line-height: 1.65; }

/* Smoother reading (Fayez: "font discrepancy ... make the font smoother and easier to read").
   It is one typeface (Manrope) throughout, but the live CSS set it four ways in the same reading
   flow: some paragraphs in full black and the next in 72% grey; a section's first paragraph in
   the light weight (300) with tight tracking, or shrunk to 16px; headings in the light weight
   squeezed by -4.5%. Running text now has one weight (400), normal letter-spacing and one soft
   near-black (82% ink), at the body size; headings are regular weight with gentler tracking. */

main :is(.sec, .prose, .lp-prose, .intro, .faq__a, .callout, .lp-doc__in) :is(p, li):not([class]):not(.redflag > p) {
  font-weight: 400; letter-spacing: normal; color: var(--t-body);
}
.sec__editorial .sec__body > p:first-child,
.sec__split--prose .sec__body > p:first-child {
  font-size: var(--fs-body); font-weight: 400; letter-spacing: normal; line-height: 1.65; color: var(--t-body);
}
.h2, .head__h { font-weight: 400; letter-spacing: -.025em; line-height: 1.1; }
/* Every section heading looks the same: those inside a prose block (36px), a split layout (-4.5%
   tracking) and the homepage statement (weight 200) were each a step off. The fees page's are
   hard-coded inline at 24px by the agency, which only !important reaches. (Bio names on the team
   page stay card-sized: they are card titles.) The landers have the same rule in section 6. */
:is(.prose, .split__c) .h2, .state__h { font-size: var(--fs-h2); font-weight: 400; letter-spacing: -.025em; line-height: 1.1; }

:is(.callout, .sec__body .callout) p.callout__t { font-weight: 400; letter-spacing: -.01em; font-size: clamp(19px, 1.5vw, 21px); }
/* one size and weight on every template; the :is() outranks site.css's first-paragraph rule, which caught the
   callout inside implant pages' section bodies */
:is(.rowcard__t, .tri__t, .faq__q) { letter-spacing: -.01em; }
/* Links in text read as links on every page, as on the guides (Fayez's third review): the live
   style left most of them in the body-text grey with a grey underline. Brand green, a green
   underline, slightly heavier; the light mint on dark bands. Class-less links only, so buttons,
   cards and chips keep their own look. */
main :is(p, li, td, dd) a:not([class]):not(nav a), .reviewed a {
  color: var(--accent); font-weight: 500;
  text-decoration: underline; text-decoration-color: rgba(15, 94, 75, .45);
  text-decoration-thickness: 1.5px; text-underline-offset: 3px;
}
main :is(p, li, td, dd) a:not([class]):not(nav a):hover, .reviewed a:hover { color: var(--accent-2); text-decoration-color: currentColor; }
.reviewed a b { color: inherit; }
main :is(.band--ink, .band--ink2, .band--alert, .ctaband, .hero--ink, .panel--ink) :is(p, li, td, dd) a:not([class]) {
  color: var(--accent-light); text-decoration-color: rgba(142, 209, 188, .5);
}

/* ── 11. Phone overflow guards, site-wide (2026-09-28) ────────── */
/*
  Found checking the type scale on every page type: content ran past the right edge of a phone,
  and the page clips it. It predates the larger type (same result with the old sizes). A grid
  column grew to fit a wide table or a 270px button; the guards let it shrink, so a wide table
  scrolls inside its own box instead of being cut off, and buttons fit their card. The map panel's
  320px minimum made a 4:3 box too wide (the landers had the same fix in section 6).
*/
.sec__split > *, .grid2 > * { min-width: 0; }
@media (max-width: 599px) { .pricebox .btn { min-width: 0; } }
@media (max-width: 899px) { .mapcard__map { min-height: 0; } }

/* ── 12. T02 urgent hubs and T03 emergency indexes (plan step 6, Fayez 2026-09-28) ─── */
/*
  The emergency pillar, the two roots (/emergency-dentist-deepcar/, /emergency/), the service hub
  and the four emergency indexes share the guides' structure, so tools/guide-refine.py (site repo)
  gives them body class guide-v2 and section 7 lays them out: the centred hero, one reading column,
  stacked sections. This section covers what the guides don't have: a trust strip under the hero,
  link-card grids, review cards, a row of town links and, on Deepcar, a map card and the practice
  photo, which moved from the hero into "Finding us on Manchester Road" (Fayez).
*/

/* Trust strip: a strip under the hero, so it keeps the page grid and one line at desktop; in the
   reading column it broke into two ragged lines. Phones: it wraps, as on the landers (section 6),
   instead of running off the edge mid-word. */
.guide-v2 main > .trust > .wrap.trust__in { max-width: var(--max); }
@media (max-width: 760px) {
  .guide-v2 .trust__in { flex-wrap: wrap; overflow-x: visible; gap: 8px 20px; }
}

/* Link cards and review cards: section 7's rule for the guides' grids. Two across in the column,
   and an odd last card takes the whole row, so no row ends in empty slots (23 area cards were
   4-4-4-4-4-3, 14 symptom cards 4-4-4-2, 5 cards 3-2, 3 reviews 2-1). A link grid of three is
   already one full row, so it keeps it: the guides' "Related" rows (approved) and the pillar's
   three doors. Phones stay one column. */
.guide-v2 :is(.lcards:has(> :nth-child(4)), .revs) { grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); }
.guide-v2 :is(.lcards:has(> :nth-child(4)), .revs) > :last-child:nth-child(odd) { grid-column: 1 / -1; }

/* "Read all patient reviews" is centred under the cards, as on the landers. */
.guide-v2 .band:has(.revs) .band__foot { justify-content: center; }

/* Town links start on the column's left edge, under their left-aligned heading (they were centred). */
.guide-v2 .pills { justify-content: flex-start; }

/* Map card: the details and the map sat side by side in the column, leaving a blank patch beside
   the shorter half. They stack: heading, address and facts, drive times three across (six tiles,
   no empty slot), the buttons, then the map across the column at 16:9. */
.guide-v2 .mapcard { grid-template-columns: minmax(0, 1fr); }
.guide-v2 .mapcard .dirs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (min-width: 600px) { .guide-v2 .mapcard .dirs { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.guide-v2 .mapcard__map { aspect-ratio: 16 / 9; min-height: 0; }

/* The practice-front photo, under the "Finding us" text it shows (guide-refine.py PHOTO). */
.guide-v2 .sec__photo { margin: clamp(20px, 2.4vw, 28px) 0 0; border-radius: var(--r-img); overflow: hidden; background: var(--stone); }
.guide-v2 .sec__photo img { display: block; width: 100%; height: auto; }

/* Headings take one line where they fit, measured against the page grid rather than the text column
   (Fayez: "this should be in one single line"). The column stays 760px so running text keeps its
   measure; a heading keeps the column's left edge but may run on to the grid's right edge (196px more
   at 1440px, none on phones). 50 of the 65 headings that wrapped in the column now take one line; the
   longest still wrap into two balanced lines. Size is unchanged (the site's 40px). */
.guide-v2 :is(.sec .sec__h, .head__h) {
  margin-right: calc(-1 * max(0px, (min(100vw, var(--max)) - var(--col)) / 2 - var(--pad)));
}

/* The chapter nav: one row that walks with the reader (Fayez's review, 2026-09-28: "keep it in a
   single line, when user browse it the section should walk with that. add an arrow"). It held 6-9
   long titles in a row that never scrolled, so everything past the third stayed hidden. refine.js
   now scrolls the row to the chapter being read, and adds arrow buttons at its ends that step
   through the rest; each shows only when there is more that way, and the row fades under it rather
   than cutting a title. Every page with a chapter nav gets this; on the guide pages the row also
   spans the page grid, like the trust strip, so more chapters show at once. */
.guide-v2 main > .secnav > .wrap.secnav__in { max-width: var(--max); }
.secnav__arrow {
  flex: none; display: none; place-items: center; width: 36px; height: 36px; padding: 0;
  border: 1px solid var(--line-strong); border-radius: 50%; background: var(--bone); color: var(--ink);
  cursor: pointer; transition: background .2s, border-color .2s, color .2s;
}
.secnav.has-prev .secnav__arrow--prev, .secnav.has-next .secnav__arrow--next { display: grid; }
.secnav__arrow:is(:hover, :focus-visible) { background: var(--accent); border-color: var(--accent); color: #fff; }
.secnav__arrow--prev { margin-right: -8px; }
.secnav__arrow--next { margin-left: -8px; }
.secnav.is-js ol { -webkit-mask-image: none; mask-image: none; }
.secnav.is-js.has-next ol {
  -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 40px), transparent);
  mask-image: linear-gradient(90deg, #000 calc(100% - 40px), transparent);
}
.secnav.is-js.has-prev ol {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 40px);
  mask-image: linear-gradient(90deg, transparent, #000 40px);
}
.secnav.is-js.has-prev.has-next ol {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent);
  mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent);
}

/* The implant builder's reviewed-by line and disclaimer (.intro .note, on the /dental-implants/
   location pages) sit in one box, like the guides' reviewed-by line (Fayez: the reviewed-by line
   is boxed). */
.guide-v2 .intro > .wrap > .note {
  margin: 0; padding: 0 16px; max-width: none;
  border: 1px solid var(--line-strong); border-block: 0;
}
.guide-v2 .intro > .wrap > .note:first-child { padding-top: 12px; border-top: 1px solid var(--line-strong); border-radius: var(--r-card) var(--r-card) 0 0; }
.guide-v2 .intro > .wrap > .note:last-child { padding-bottom: 12px; border-bottom: 1px solid var(--line-strong); border-radius: 0 0 var(--r-card) var(--r-card); }
.guide-v2 .intro > .wrap > .note:only-child { border-radius: var(--r-card); }

/* ── 13. The implant cluster on the guide design (Fayez 2026-09-28) ─── */
/*
  Every /dental-implants/ page is on guide-v2 since 2026-09-28 (tools/guide-refine.py: the hub, the
  guide, the T04 implant guides and the T05 treatments joined the town pages). Fayez's review of the
  implant town pages: "CTA box should not blend with the content box", "reduce the gap in between
  blocks", and the plain "Finding us" section, which now carries the practice photo (section 12's
  .sec__photo). Scoped to the implant pages: the builder sets body data-service="implants".
*/

/* Rhythm: 51px of band padding each side (about 116px from one block's last line to the next
   heading at 1280px wide) comes down to 38px, and the last paragraph's 14px margin goes. */
.guide-v2[data-service="implants"] { --gap: clamp(26px, 3vw, 40px); }
.guide-v2[data-service="implants"] .sec__body > :last-child { margin-bottom: 0; }

/* The mid-content CTA box was a pale green panel (#E4EFEA) on pale green bands (#E6EDE8), so it read
   as part of the section, and its 2px left border bent round the corner radius. It is a white card
   now, lifted off whichever band it sits on, with the brand green as a straight bar down its edge
   (inset from the corners, so it does not follow their curve). */
.guide-v2[data-service="implants"] .sec__body .callout {
  position: relative;
  margin-top: clamp(22px, 2.6vw, 30px);
  background: var(--paper);
  border: 1px solid var(--sage-line);
  border-radius: var(--r-card);
  box-shadow: 0 1px 2px rgba(14, 14, 14, .04), 0 14px 32px -20px rgba(15, 94, 75, .45);
  padding: clamp(20px, 2.4vw, 28px) clamp(22px, 2.8vw, 32px) clamp(20px, 2.4vw, 28px) clamp(26px, 3vw, 36px);
}
.guide-v2[data-service="implants"] .sec__body .callout::before {
  content: ""; position: absolute; left: -1px; top: 18px; bottom: 18px; width: 4px;
  border-radius: 0 4px 4px 0; background: var(--accent);
}

/* ── 14. T08 Money & access (plan step 6, Fayez 2026-09-28) ─── */
/*
  /fees/, /finance/, /new-patient-offer/ and /referral/. Fayez: "Guide rules, keep the tools". The
  pages take body class guide-v2, so sections 7 and 12 give them the centred hero, the one 760px
  column and the card grids, and money-v2 for the parts only they have: the price cards, the fee
  list, the calculator, the offer card, the referral pathways and form. The markup side is
  tools/money-refine.py in the site repo (and compliance-fix.py's HOURS rules for the fee list).
*/

/* Halves stack. The live two-column bands (a checklist beside the offer card, two panels side by
   side, a photo beside its text, three referral pathways across) left a blank patch under the
   shorter side, or crushed both into the column. Each part now takes the column's full width. */
/* The standard treatment page (body class treat-v2, section 16) stacks its halves the same way. */
:is(.money-v2, .treat-v2) :is(.grid2, .grid3, .split) {
  grid-template-columns: minmax(0, 1fr); align-items: start !important; gap: clamp(18px, 2.2vw, 24px);
}
/* Photos lower: Dr Ijaz under his introduction, in the photo's own 4:3 (the split cropped it to 4:5).
   His text fills the column like the rest of the page, not the half-width measure it had. */
.money-v2 .split > .split__f { order: 2; aspect-ratio: 4 / 3; }
.money-v2 .split__c :is(.split__p, p) { max-width: none; }

/* /fees/: the new-patient and emergency cards side by side above the price list, equal heights.
   The emergency card's inline 14px top margin was for stacking under the other. */
.money-v2 .pricecards {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
  gap: 14px; margin-bottom: clamp(32px, 4vw, 48px);
}
.money-v2 .pricecards > * { margin: 0 !important; }
/* The £85 card's pointer to the £39 offer: one line under the card's copy, set apart by a rule. */
.money-v2 .pricebox__offer {
  padding-top: 12px; border-top: 1px solid var(--on-ink-line);
  font-size: var(--fs-small); color: var(--on-ink-2);
}
.money-v2 .pricebox__offer b { color: #fff; font-weight: 600; }
.money-v2 .pricebox__offer a { color: var(--accent-light); text-decoration: underline; text-underline-offset: 3px; }

/* Tables fit the column on phones: section 15, for every page on the guide design. */
/* The Book button under an open price category sits centred under its table (Fayez, 2026-09-28). */
.money-v2 .fee__body .btns { justify-content: center; }

/* /finance/: the calculator stacks, the sliders and term buttons over the result, so both keep the
   column's full width instead of two 360px halves. */
.money-v2 .calc { grid-template-columns: minmax(0, 1fr); }

/* Numbered steps (tools/money-refine.py gives them the site's steps--prose variant): the list sits
   under its heading like any section content. */
.money-v2 .steps--prose { margin-top: 4px; }
.money-v2 .steps--prose .step:first-child { border-top: 0; }
/* ── 15. Tables fit phones on the guide design (2026-09-28) ─── */
/*
  31 of the 67 guide-v2 pages with a table ran it past its box at 390px, so it scrolled sideways
  inside the box: the live .table has a 420px minimum width, which also held section 7's phone card
  layout for wide tables (the implant comparisons) at 420px, and its no-wrap last column held a
  long note ("Prescribed privately; you pay the pharmacy") on one line, up to 671px. Every table on
  the guide design now fits its column. A price still fits its line; only longer notes wrap.
*/
.guide-v2 .table { min-width: 0; }
.guide-v2 .table td:last-child { white-space: normal; }

/* ── 16. T05 Treatment, standard variant (plan step 6, 2026-09-28) ─── */
/*
  /treatments/extractions-and-wisdom-teeth/ is the only built page of the standard treatment template
  (the ~40 planned treatment pages will use it). tools/guide-refine.py gives it guide-v2 (sections 7
  and 12: centred hero, one 760px column) and treat-v2 for its own parts. Its halves stack by section
  14's rule. Stock photos are out of the markup (the "About" photo, the related-treatment cards).
*/

/* Step cards: two across in the column and an odd last card takes the row, as the guides' cards do
   (three across, each card was 245px and wrapped every other word). */
.treat-v2 .jcards { grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); }
.treat-v2 .jcards > :last-child:nth-child(odd) { grid-column: 1 / -1; }

/* The figures row: a price range reads on one line ("£350–£450" had broken at the dash). */
.treat-v2 .fs__n { white-space: nowrap; font-size: clamp(24px, 2.4vw, 32px); }

/* ── 17. T06 Location, service-town pages (plan step 6, 2026-09-28) ─── */
/*
  The 70 /treatments/<service>/<town>/ pages (composite bonding, general dentistry, teeth
  straightening, teeth whitening, veneers and crowns, in 14 towns) share the emergency town pages'
  structure, so tools/guide-refine.py gives them guide-v2 and sections 7 and 12 lay them out. Their
  map card lists four drive times where the emergency pages list six: section 12's three across left
  a row of 3 and a row of 1, so four tiles run 2 x 2 (no empty slots). Only these pages have four.
  The Sheffield pages have three (guide-refine.py DIRS dropped "Sheffield centre", which repeated
  "Sheffield"): one row at desktop, and on phones, two across, the third takes the row.
*/
.guide-v2 .mapcard .dirs:has(> :nth-child(4):last-child) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 599px) { .guide-v2 .mapcard .dirs > :last-child:nth-child(odd) { grid-column: 1 / -1; } }

/* ── 18. Town pages: the figures band (plan step 6, Fayez 2026-09-28) ─── */
/*
  Every town page (T06, 118: the service, emergency and implant town pages) has no breadcrumb, no
  chapter nav and no reviewed-by box since Fayez's review of the service-town pages, and its trust
  strip is this band (tools/guide-refine.py TOWN). He picked it from three mockups: the homepage's
  figures on ink, six of them, three by two ("make the block 3*2"). Two by three on phones. Under the
  emergency pages' ink hero the band is one shade lighter (--ink-2), so the two read as two blocks.
  Classes are .tfig*: site.css already owns .fig (white figure cards).
*/
.tfigs { background: var(--ink); color: #fff; padding: clamp(30px, 4vw, 48px) 0; }
.hero--ink + .tfigs { background: var(--ink-2); }
.tfigs .tfigs__in {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  max-width: 1040px; margin: 0 auto; padding: 0; list-style: none;
}
.tfigs .tfig { margin: 0; padding: 22px 12px; text-align: center; }
.tfigs .tfig > svg { display: block; width: 22px; height: 22px; margin: 0 auto 10px; color: var(--accent-light); }
.tfigs .tfig__n {
  margin: 0; font-size: clamp(30px, 2.8vw, 40px); font-weight: 300; letter-spacing: -.03em; line-height: 1.05;
  color: #fff; white-space: nowrap;
}
.tfigs .tfig__l { margin: 8px 0 0; font-size: 14px; line-height: 1.4; color: var(--on-ink-2); }
@media (min-width: 761px) {
  .tfigs .tfig:nth-child(-n+3) { border-bottom: 1px solid var(--on-ink-line); }
  .tfigs .tfig:not(:nth-child(3n)) { border-right: 1px solid var(--on-ink-line); }
}
@media (max-width: 760px) {
  .tfigs .tfigs__in { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tfigs .tfig { padding: 18px 8px; }
  .tfigs .tfig:nth-child(-n+4) { border-bottom: 1px solid var(--on-ink-line); }
  .tfigs .tfig:nth-child(odd) { border-right: 1px solid var(--on-ink-line); }
}

/* ── 19. T09 Practice & trust, T10 Contact (plan step 6, Fayez 2026-09-28) ─── */
/*
  /about/, /meet-the-team/ and /contact/ take guide-v2 and practice-v2 (tools/practice-refine.py): the
  centred hero, one reading column, stacked sections. /reviews/ takes practice-v2 only, so its review
  grids keep the page width, three across. Fayez, from before/after mockups: "Yes, build it".
  /booking-confirmed/ is untouched (it holds the ad click after a booking).
*/
/* Two-column bands (text beside a panel or the contact form) stack in the column. */
.guide-v2.practice-v2 .grid2 { grid-template-columns: minmax(0, 1fr); gap: clamp(20px, 2.4vw, 28px); }
/* A row of panels with one taken out (/contact/: the opening-hours card) leaves no empty slot. */
@media (min-width: 761px) { .practice-v2 .grid3:has(> :nth-child(2):last-child) { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* /about/ and /meet-the-team/: the trust strip as the town pages' 3x2 figures band (section 18), in the
   strip's own light sage instead of ink (Fayez: "use the trust strip with matching lightweight color in
   2*3 block style"). Border colours follow the light ground. */
.tfigs--light { background: var(--sage); color: var(--ink); border-block: 1px solid var(--sage-line); }
.tfigs--light .tfig__n { color: var(--ink); }
.tfigs--light .tfig__l { color: var(--t2); }
.tfigs--light .tfig > svg { color: var(--accent); }
@media (min-width: 761px) {
  .tfigs--light .tfig:nth-child(-n+3) { border-bottom-color: var(--sage-line); }
  .tfigs--light .tfig:not(:nth-child(3n)) { border-right-color: var(--sage-line); }
}
@media (max-width: 760px) {
  .tfigs--light .tfig:nth-child(-n+4) { border-bottom-color: var(--sage-line); }
  .tfigs--light .tfig:nth-child(odd) { border-right-color: var(--sage-line); }
}
/* /reviews/: no review grid ends in an empty slot. Three across, a last row of two shares the row,
   and a last card on its own takes it; two across on tablets, an odd last card full width. */
@media (min-width: 960px) {
  .practice-v2:not(.guide-v2) .revs { grid-template-columns: repeat(6, minmax(0, 1fr)); }
  .practice-v2:not(.guide-v2) .revs > * { grid-column: span 2; }
  .practice-v2:not(.guide-v2) .revs > :nth-last-child(2):nth-child(3n+1),
  .practice-v2:not(.guide-v2) .revs > :last-child:nth-child(3n+2) { grid-column: span 3; }
  
}
@media (min-width: 600px) and (max-width: 959px) {
  .practice-v2:not(.guide-v2) .revs > :last-child:nth-child(odd) { grid-column: 1 / -1; }
}

/* ── 20. T02 service hubs (plan step 6, Fayez 2026-09-28) ─── */
/*
  The seven /treatments/ hubs (composite bonding, general dentistry, hygiene and gum health, sedation,
  teeth straightening, teeth whitening, veneers and crowns) have the standard treatment page's
  structure, so tools/hub-refine.py (site repo) gives them guide-v2 and treat-v2: sections 7, 12, 14
  and 16 lay them out (the centred hero, one 760px column, stacked halves, step cards two across). As
  on the town and practice pages there is no breadcrumb, and the trust strip is section 19's light
  figures band. Fayez, from before/after mockups: "Yes, build it". hub-v2 covers what only they have.
*/
/* The price section's heading sits on the column's left edge like every other heading. Section 2
   centres #prices for the homepage's price feature; in the reading column it sat off-centre (centred
   across section 12's wider heading box) over left-aligned price rows. The extractions page, the same
   template, had it too (Fayez: fix it there too). */
.treat-v2 #prices .head { text-align: left; }
.treat-v2 #prices .head .label { justify-content: flex-start; }
.treat-v2 #prices .head .label::before { display: none; }
.treat-v2 #prices .head .label::after { max-width: 64px; }
/* A price note ("Included in your new patient examination") wraps on phones instead of running past
   the edge: site.css keeps .tier__p--sm on one line. A price still fits its line. */
@media (max-width: 599px) {
  .treat-v2 .tier__p--sm { white-space: normal; max-width: 11em; text-align: right; }
}
/* Before-and-after cases: a single case takes the column's width (it sat at half width beside an
   empty slot); two share the row. */
.hub-v2 .bas > :last-child:nth-child(odd) { grid-column: 1 / -1; }
/* The facts row (the hubs and the extractions page) in warm stone with the figures in brand green: on
   the bone ground its boxes were bone on bone. Fayez picked it from three mockups (brand green, soft
   mint, warm stone), 2026-09-28. */
.treat-v2 .fs { background: var(--blush); border-color: var(--stone); }
.treat-v2 .fs__n { color: var(--accent); }
.treat-v2 .fs__l { color: var(--t2); }

/* ── 21. The last pages: T04 decision guides, T03 indexes, T11 legal (plan step 6, Fayez 2026-09-28) ─── */
/*
  The two decision guides (/treatments/dentures/, /treatments/root-canal-treatment/) are the hubs' template,
  so tools/hub-refine.py gives them hub-v2 and section 20 covers them. /treatments/ and /blog/ take guide-v2
  and index-v2 (tools/index-refine.py), and the four legal pages guide-v2 and legal-v2
  (tools/legal-refine.py): the centred hero and one reading column. Fayez: "go", then "Yes, build it" from before/after mockups.
*/
/* Treatment cards two across in the column, and an odd last card takes the row: four across, the
   Emergency group's one card sat at a quarter width beside three empty slots and Restore's three left one. */
.index-v2 .tcards { grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); }
.index-v2 .tcards > :last-child:nth-child(odd) { grid-column: 1 / -1; }
/* Legal pages: the text takes the whole column the "On this page" rail left (it stayed in the rail's
   250px track, so headings broke into three and four lines), and long web addresses given as link text
   break at the column's edge on phones. */
.legal-v2 .guide.legal { grid-template-columns: minmax(0, 1fr); }
.legal-v2 .legal .prose { max-width: none; }
.legal-v2 .prose a { overflow-wrap: anywhere; }
/* Their bullet lists read at the body size, as the guides' lists do (section 1): 15px beside 19px
   paragraphs read as two different fonts. */
.legal-v2 .prose .list li { font-size: var(--fs-body); }
/* btn--emergency: homepage hero Emergency booking (Setmore emergency service), 2026-10-10 */
.btn.btn--emergency{background:#C2412B;color:#fff;border-color:#C2412B}
.btn.btn--emergency:is(:hover,:focus-visible){background:#A3341F;border-color:#A3341F;color:#fff}
