/* Jet Flow -- the redesign (round 45, 2026-10-15). Loaded AFTER app.css and scoped to body.public.v2, so nothing
   here reaches a page served without SITE_DESIGN=v2 or the tester-preview cookie. app.css still supplies the
   colour tokens, the slab face, the pill buttons, the phone menu and the form controls.
   One content width (70rem) shared by the utility line, the header, every section, the booking flow and the
   footer. Photos are self-hosted under /static/img (CSP img-src 'self'); see docs/round45/IMAGE-CREDITS.md.
   No animation beyond the call bar's slide, no inline styles (CSP), 44px targets. AA contrast, measured:
   white on navy #1a3a5c 11:1 and on #122a44 14:1; #cbd5e1 on #122a44 11:1; #5c6470 on white 5.9:1 and on
   #f0ece4 5.2:1; #8a4b00 on white 6.3:1; white on accent #0b7285 5.6:1; hero text sits on a >= .82 navy scrim. */

.public.v2{--w:70rem; --r2:12px; --r3:16px; --lift:0 1px 2px rgba(18,42,68,.06),0 8px 24px rgba(18,42,68,.08); padding-bottom:0; min-height:100vh; display:flex; flex-direction:column}
.public.v2 > main{flex:1 0 auto; width:100%}
/* the header is sticky (68px): a control reached with Shift+Tab, a field the browser flags, a #fragment stops below it */
html:has(> body.public.v2){scroll-padding-top:5.5rem}
/* Round 50: a field the browser scrolls to (a missed required field) keeps its LABEL clear of the sticky header too. */
.public.v2 :is(input,select,textarea){scroll-margin-top:2.5rem}
.public.v2 .wrap{max-width:var(--w); padding:0 1rem; margin:0 auto}
.public.v2 .v2-ico{width:1.1em; height:1.1em; flex:0 0 auto}
.public.v2 .v2-sr{position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap}
.public.v2 h1,.public.v2 h2,.public.v2 h3,.public.v2 .v2-hero-lead,.public.v2 .v2-offer-amount{text-wrap:balance}
.public.v2 h2{font-size:clamp(1.55rem,3vw,2.15rem); line-height:1.18; margin:0 0 .6rem}
.public.v2 h3{font-size:1.1rem; margin:0 0 .25rem}
.public.v2 .eyebrow{margin:0 0 .5rem}
.public.v2 .intro{margin:0; max-width:42rem; font-size:1.06rem}
.public.v2 .v2-head{margin-bottom:1.75rem; max-width:46rem}
.public.v2 .btn-lg{min-height:54px; padding:0 1.6rem; font-size:1.05rem}
.public.v2 .btn-ghost{border:2px solid rgba(255,255,255,.7); color:#fff}
.public.v2 .btn-ghost:hover{background:rgba(255,255,255,.12); border-color:#fff}
.public.v2 .btn-danger{color:var(--bad); border-color:var(--bad); background:#fff}
.public.v2 .btn{gap:.5rem}
/* focus: dark accent ring on light ground, white ring on the dark bands */
.public.v2 :focus-visible{outline:3px solid var(--accent); outline-offset:3px}
.public.v2 .v2-util :focus-visible,.public.v2 .v2-hero :focus-visible,.public.v2 .v2-areas-strip :focus-visible,
.public.v2 .v2-cta :focus-visible,.public.v2 .v2-foot :focus-visible,.public.v2 .v2-phead :focus-visible{outline-color:#fff}

/* ---- utility line + header ---- */
.public.v2 .v2-util{background:var(--navy-deep); color:#cbd5e1; font-size:.84rem}
.public.v2 .v2-util-in{max-width:var(--w); margin:0 auto; padding:0 1rem; display:flex; align-items:center; justify-content:center; gap:1rem; min-height:40px}
.public.v2 .v2-util-facts{display:none; margin:0; gap:1.5rem}
.public.v2 .v2-util-facts span{display:inline-flex; align-items:center; gap:.4rem}
.public.v2 .v2-util-facts .v2-ico{color:var(--teal)}
.public.v2 .v2-util-tel{color:#cbd5e1; text-decoration:none; display:inline-flex; align-items:center; gap:.45rem; min-height:var(--tap)}
.public.v2 .v2-util-tel b{color:#fff; font-variant-numeric:tabular-nums}
.public.v2 .v2-util-tel:hover b{text-decoration:underline}
.public.v2 .top{display:block; height:auto; padding:0; background:rgba(255,255,255,.97); border-bottom:1px solid var(--border); box-shadow:0 2px 12px rgba(18,42,68,.06)}
.public.v2 .v2-top-in{max-width:var(--w); margin:0 auto; padding:0 1rem; height:68px; display:flex; align-items:center; justify-content:space-between; gap:1rem}
.public.v2 .navlinks{gap:1.25rem; flex-wrap:nowrap; white-space:nowrap}
.public.v2 .brand-text small{white-space:nowrap}
.public.v2 .navlinks .btn + .btn{margin-left:-.5rem}
.public.v2 .navlinks a:not(.btn){color:var(--fg); font-weight:600}
.public.v2 .navlinks a:not(.btn):hover{color:var(--accent)}
.public.v2 .navlinks .btn-sm,.public.v2 .v2-topnav .btn-sm{min-height:var(--tap)}
.public.v2 .menu-panel a.btn-navy,.public.v2 .menu-panel a.btn-navy:hover{color:#fff}
.public.v2 .v2-topnav{display:flex; align-items:center; gap:1rem}
.public.v2 .v2-home-link{display:none; font-weight:600; color:var(--fg); text-decoration:none; min-height:var(--tap); align-items:center}
.public.v2 .v2-num{display:none}

/* ---- hero: photo-backed; the copy on a navy scrim (phone/tablet) or beside the photo (desktop) ---- */
.public.v2 .v2-hero{position:relative; background:var(--navy-deep); color:#fff; overflow:hidden; isolation:isolate}
.public.v2 .v2-hero-media{position:absolute; inset:0; z-index:-1; margin:0}
.public.v2 .v2-hero-media img{display:block; width:100%; height:100%; object-fit:cover; object-position:60% 40%}
.public.v2 .v2-hero-media::after{content:""; position:absolute; inset:0; background:linear-gradient(180deg,rgba(18,42,68,.84) 0%,rgba(18,42,68,.93) 100%)}
.public.v2 .v2-hero-in{padding-top:3rem; padding-bottom:4.75rem}
.public.v2 .v2-hero h1{font-size:clamp(2.15rem,4.8vw,3.35rem); line-height:1.08; letter-spacing:-.015em; font-weight:800; margin:0 0 1rem; color:#fff; max-width:16ch}
.public.v2 .v2-hero h1::before{content:""; display:block; width:3rem; height:4px; border-radius:2px; background:var(--teal); margin-bottom:1.1rem}
.public.v2 .v2-hero-lead{font-family:var(--slab); font-size:clamp(1.2rem,2.2vw,1.5rem); line-height:1.3; font-weight:700; color:#e6f7fa; margin:0 0 .6rem}
.public.v2 .v2-hero-sub{font-size:1.06rem; line-height:1.55; color:#dbe4ee; margin:0 0 1.75rem; max-width:34rem}
.public.v2 .v2-hero-cta{display:flex; gap:.75rem; flex-wrap:wrap}

/* ---- trust strip: four confirmed facts, a card lifted over the hero's edge ---- */
.public.v2 .v2-why{position:relative; z-index:1; padding:0 0 .5rem}
.public.v2 .v2-benefits{list-style:none; margin:-2.75rem 0 0; padding:.4rem; display:grid; grid-template-columns:1fr 1fr; background:#fff; border:1px solid var(--border); border-radius:var(--r3); box-shadow:var(--lift)}
.public.v2 .v2-benefits li{display:grid; grid-template-columns:auto 1fr; column-gap:.7rem; align-items:start; padding:.85rem .7rem}
.public.v2 .v2-benefits .v2-icon{grid-row:span 2}
.public.v2 .v2-benefits b{font-family:var(--slab); font-size:1rem; line-height:1.25; color:var(--navy)}
.public.v2 .v2-benefits span{font-size:.88rem; line-height:1.4; color:var(--muted-fg)}

/* ---- sections ---- */
.public.v2 .v2-section{padding:3rem 0}
.public.v2 .v2-section-muted{background:var(--muted); border-top:1px solid var(--border); border-bottom:1px solid var(--border)}
.public.v2 .v2-icon{flex:0 0 auto; width:44px; height:44px; border-radius:12px; background:var(--accent-soft); color:var(--accent); display:grid; place-items:center}
.public.v2 .v2-icon-svg{width:22px; height:22px}
.public.v2 .v2-photo{margin:0; position:relative; border-radius:var(--r3); overflow:hidden; background:var(--navy)}
.public.v2 .v2-photo img{display:block; width:100%; height:100%; object-fit:cover}

/* ---- services: a photo beside six tiles ---- */
.public.v2 .v2-services-wrap{display:grid; gap:1.25rem}
.public.v2 .v2-services-photo{aspect-ratio:16/9}
.public.v2 .v2-services-photo figcaption{position:absolute; left:0; right:0; bottom:0; padding:2.5rem 1.1rem 1rem; background:linear-gradient(180deg,transparent,rgba(18,42,68,.9)); color:#fff; font-family:var(--slab); font-weight:700; font-size:1.1rem}
.public.v2 .v2-services{display:grid; gap:.85rem}
.public.v2 .v2-service{display:flex; gap:.9rem; align-items:flex-start; background:#fff; border:1px solid var(--border); border-radius:var(--r2); padding:1.1rem 1.1rem 1.15rem; box-shadow:0 1px 2px rgba(18,42,68,.04)}
.public.v2 .v2-service h3{font-size:1.08rem; color:var(--navy)}
.public.v2 .v2-service p{margin:0; color:var(--muted-fg); font-size:.95rem; line-height:1.5}

/* ---- what to expect: numbered steps + the charges panel ---- */
.public.v2 .v2-how{display:grid; gap:2rem}
.public.v2 .v2-steps-list{list-style:none; margin:0; padding:0; counter-reset:st; display:grid; gap:0}
.public.v2 .v2-steps-list li{counter-increment:st; position:relative; padding:0 0 1.35rem 3.4rem}
.public.v2 .v2-steps-list li::before{content:counter(st); position:absolute; left:0; top:0; width:2.4rem; height:2.4rem; border-radius:50%; background:var(--navy); color:#fff; font-family:var(--slab); font-weight:800; display:grid; place-items:center}
.public.v2 .v2-steps-list li:not(:last-child)::after{content:""; position:absolute; left:1.2rem; top:2.6rem; bottom:.2rem; width:2px; background:var(--border)}
.public.v2 .v2-steps-list b{display:block; font-family:var(--slab); font-size:1.12rem; color:var(--navy); padding-top:.3rem; margin-bottom:.15rem}
.public.v2 .v2-steps-list span{display:block; color:var(--muted-fg); line-height:1.5}
.public.v2 .v2-fees{background:#fff; border:1px solid var(--border); border-radius:var(--r3); padding:1.4rem 1.25rem 1.25rem; box-shadow:var(--lift); align-self:start}
.public.v2 .v2-fees h3{font-size:1.2rem; color:var(--navy); margin:0 0 .5rem}
.public.v2 .v2-fees dl{margin:0 0 1.1rem}
.public.v2 .v2-fees dl > div{display:flex; justify-content:space-between; gap:1rem; padding:.8rem 0; border-bottom:1px solid var(--border)}
.public.v2 .v2-fees dt{font-weight:600; color:var(--fg)}
.public.v2 .v2-fees dd{margin:0; text-align:right}
.public.v2 .v2-fees dd b{display:block; font-family:var(--slab); color:var(--navy); font-size:1.05rem; white-space:nowrap; font-variant-numeric:tabular-nums}
.public.v2 .v2-fees dd span{display:block; font-size:.82rem; line-height:1.35; color:var(--muted-fg); max-width:13rem; margin-left:auto}

/* ---- offers: amount-first panels ---- */
.public.v2 .v2-offers{display:grid; gap:.9rem}
.public.v2 .v2-offer{display:flex; flex-direction:column; background:var(--card); border:1px solid var(--border); border-top:4px solid var(--accent); border-radius:var(--r2); padding:1.15rem 1.15rem .35rem; box-shadow:0 1px 2px rgba(18,42,68,.04)}
.public.v2 .v2-offer-label{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; font-size:.74rem; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--accent); margin:0 0 .5rem}
.public.v2 .v2-offer-amount{font-family:var(--slab); font-size:1.65rem; line-height:1.15; font-weight:800; color:var(--navy); margin:0 0 .3rem}
.public.v2 .v2-offer-detail{color:var(--muted-fg); font-size:.95rem; line-height:1.45; margin:0 0 .75rem; flex:1}
.public.v2 .v2-conditions{border-top:1px solid var(--border)}
.public.v2 .v2-conditions summary{list-style:none; cursor:pointer; font-weight:700; color:var(--accent); min-height:var(--tap); display:flex; align-items:center; gap:.5rem; font-size:.92rem}
.public.v2 .v2-conditions summary::-webkit-details-marker{display:none}
.public.v2 .v2-conditions summary::before{content:"+"; width:22px; height:22px; border-radius:50%; background:var(--accent-soft); display:grid; place-items:center; font-weight:800; line-height:1; flex:0 0 auto}
.public.v2 .v2-conditions[open] summary::before{content:"\2013"}
.public.v2 .v2-conditions ul{margin:0 0 .75rem; padding-left:1.1rem; color:var(--muted-fg); font-size:.9rem; line-height:1.5}
.public.v2 .v2-conditions li{margin:.2rem 0}
.public.v2 .v2-offer-link{display:inline-flex; align-items:center; min-height:var(--tap); font-weight:700; color:var(--navy); text-decoration:none; border-top:1px solid var(--border); font-size:.95rem}
.public.v2 .v2-offer-link:hover{color:var(--accent); text-decoration:underline}

/* ---- areas: a navy band, the boroughs beside a photo ---- */
.public.v2 .v2-areas-strip{background:var(--navy); color:#fff; padding:3rem 0}
.public.v2 .v2-areas-split{display:grid; gap:2rem; align-items:center}
.public.v2 .v2-areas-strip h2{color:#fff}
.public.v2 .v2-boroughs{list-style:none; margin:1.1rem 0 1rem; padding:0; display:grid; gap:.6rem}
.public.v2 .v2-boroughs li{display:flex; align-items:center; gap:.75rem; font-family:var(--slab); font-weight:700; font-size:1.25rem; padding:.75rem 1rem; background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.16); border-radius:var(--r2)}
.public.v2 .v2-boroughs li::before{content:""; width:10px; height:10px; border-radius:50%; background:var(--teal); box-shadow:0 0 0 4px rgba(42,184,202,.25); flex:0 0 auto}
.public.v2 .v2-areas-text{margin:0 0 1.25rem; color:#cbd5e1; font-size:1.02rem}
.public.v2 .v2-areas-photo{aspect-ratio:3/2}

/* ---- FAQ: the questions beside a short call card ---- */
.public.v2 .v2-faq-grid{display:grid; gap:1.5rem}
.public.v2 .v2-faq-side .v2-head{margin-bottom:1.25rem}
.public.v2 .v2-faq-call{display:flex; align-items:center; gap:1rem; background:#fff; border:1px solid var(--border); border-radius:var(--r3); padding:.9rem; box-shadow:var(--lift); max-width:26rem}
.public.v2 .v2-faq-call img{width:72px; height:72px; border-radius:12px; object-fit:cover; flex:0 0 auto}
.public.v2 .v2-faq-call p{margin:0; font-size:.9rem; color:var(--muted-fg)}
.public.v2 .v2-faq-call a{display:inline-flex; align-items:center; gap:.45rem; min-height:var(--tap); font-family:var(--slab); font-weight:800; font-size:1.3rem; color:var(--navy); text-decoration:none; font-variant-numeric:tabular-nums}
.public.v2 .faq{gap:0; border-top:1px solid var(--border)}
.public.v2 .faq details{background:none; border:0; border-bottom:1px solid var(--border); border-radius:0; padding:0}
.public.v2 .faq summary{padding:1rem 2.6rem 1rem 0; font-size:1.04rem; color:var(--navy)}
.public.v2 .faq details p{margin:0 0 1.1rem; line-height:1.6; max-width:44rem}

/* ---- final call to action: navy over a faint photo ---- */
.public.v2 .v2-cta{position:relative; isolation:isolate; overflow:hidden; background:var(--navy-deep); color:#fff; padding:3.5rem 0; text-align:center}
.public.v2 .v2-cta-bg{position:absolute; inset:0; z-index:-1; width:100%; height:100%; object-fit:cover; opacity:.12}
.public.v2 .v2-cta h2{color:#fff; margin-bottom:.5rem}
.public.v2 .v2-cta-note{color:#dbe4ee; font-size:1.04rem; max-width:34rem; margin:0 auto 1.5rem}
.public.v2 .v2-cta-actions{display:flex; gap:.75rem; flex-wrap:wrap; justify-content:center}

/* ---- footer ---- */
.public.v2 .v2-foot{background:#0d1f33; color:#b6c2d1; padding:2.75rem 0 1.25rem; text-align:left}
.public.v2 .v2-foot .wrap{display:block; text-align:left}
.public.v2 .v2-foot-grid{display:grid; gap:1.75rem; padding-bottom:1.75rem; border-bottom:1px solid rgba(255,255,255,.12)}
.public.v2 .v2-foot .brand{justify-content:flex-start}
.public.v2 .v2-foot .brand-text em{color:var(--teal)}
.public.v2 .v2-foot-about p{margin:.9rem 0 0; font-size:.92rem; line-height:1.55; max-width:24rem}
.public.v2 .v2-foot-h{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; font-size:.76rem; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:#fff; margin:0 0 .6rem}
.public.v2 .v2-foot-col ul{list-style:none; margin:0; padding:0; font-size:.92rem; line-height:1.4}
.public.v2 .v2-foot-col li{min-height:32px; display:flex; align-items:center}
.public.v2 .v2-foot-col li a{color:#dbe4ee; text-decoration:none; display:inline-flex; align-items:center; min-height:32px}
.public.v2 .v2-foot-col li a:hover{color:#fff; text-decoration:underline}
.public.v2 .v2-foot a.foot-tel{justify-content:flex-start; font-family:var(--slab); font-size:1.35rem; font-variant-numeric:tabular-nums}
.public.v2 .v2-foot-col p{margin:0; font-size:.9rem}
.public.v2 .v2-foot-base{display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:.25rem 1.5rem; padding-top:1rem}
.public.v2 .v2-foot-base p{margin:0; font-size:.84rem}
.public.v2 .foot-legal a{display:inline-flex; align-items:center; min-height:var(--tap); padding:0 .15rem; color:#dbe4ee}
/* inline links inside a sentence (hints, the after-hours line, banners): a 44px hit area without moving the text */
.public.v2 .v2-aside a,.public.v2 .hint a,.public.v2 .banner a,.public.v2 .v2-fine a,.public.v2 .v2-empty p a,.public.v2 .v2-card p a,.public.v2 .v2-intro p a{display:inline-block; padding:.75rem 0; margin:-.75rem 0}

/* ---- the fixed Call/Book bar: HOMEPAGE ONLY, phones only (never over a form) ---- */
.public.v2 .callbar{display:none; grid-template-columns:1fr 1fr; gap:.6rem; transition:transform .2s ease; background:rgba(255,255,255,.97); border-top:1px solid var(--border); box-shadow:0 -6px 20px rgba(18,42,68,.1)}
.public.v2 .callbar .btn{min-height:50px; font-size:.98rem; padding:0 .6rem}
/* Round 50: the booking day's available times, grouped (daytime / evening / overnight and early morning). */
.public.v2 .v2-timegroup{font-size:.95rem; margin:1.1rem 0 .5rem; color:var(--navy)}
/* Round 48: a 44 px tap target for the details step's "Choose a different time" link (it stands alone). */
.public.v2 .v2-change-time{display:inline-flex; align-items:center; min-height:44px}
.public.v2 .callbar.is-parked{transform:translateY(120%)}
@media (prefers-reduced-motion:reduce){ .public.v2 .callbar{transition:none} }

/* ======================================================================
   THE BOOKING FLOW -- the same header, footer, type, buttons and colours:
   a navy page head (steps + title), then the page beside a help panel.
   ====================================================================== */
.public.v2 .v2-phead{background:var(--navy); color:#fff; position:relative; overflow:hidden}
.public.v2 .v2-phead::after{content:""; position:absolute; inset:0; pointer-events:none; background:radial-gradient(36rem 14rem at 100% 0%,rgba(42,184,202,.2),transparent 70%)}
.public.v2 .v2-phead-in{position:relative; z-index:1; max-width:var(--w); margin:0 auto; padding:1.5rem 1rem 1.75rem}
.public.v2 .v2-phead h1{color:#fff; font-size:clamp(1.7rem,3.6vw,2.4rem); line-height:1.15; letter-spacing:-.01em; margin:0 0 .4rem}
.public.v2 .v2-phead .v2-sub{color:#dbe4ee; margin:0; max-width:44rem}
.public.v2 .v2-phead.is-slim .v2-phead-in{padding:0; height:4.5rem}
.public.v2 .v2-steps{list-style:none; margin:0 0 1rem; padding:0; display:flex; flex-wrap:wrap; gap:.4rem .5rem; counter-reset:fs; font-size:.82rem}
.public.v2 .v2-steps li{counter-increment:fs; display:inline-flex; align-items:center; gap:.4rem; color:#b6c2d1; font-weight:600}
.public.v2 .v2-steps li::before{content:counter(fs); width:1.5rem; height:1.5rem; border-radius:50%; border:1.5px solid rgba(255,255,255,.4); display:grid; place-items:center; font-size:.75rem}
.public.v2 .v2-steps li:not(:last-child)::after{content:""; width:1.25rem; height:1.5px; background:rgba(255,255,255,.3); margin-left:.1rem}
.public.v2 .v2-steps li.is-done{color:#dbe4ee}
.public.v2 .v2-steps li.is-done::before{content:"\2713"; background:rgba(42,184,202,.3); border-color:var(--teal)}
.public.v2 .v2-steps li[aria-current]{color:#fff}
.public.v2 .v2-steps li[aria-current]::before{background:var(--teal); border-color:var(--teal); color:var(--navy-deep); font-weight:800}
.public.v2 .v2-flow{max-width:var(--w); margin:0 auto; padding:1.5rem 1rem 3.5rem; display:grid; gap:1.5rem; align-items:start}
.public.v2 .v2-phead.is-slim + .v2-flow{margin-top:-3rem; position:relative; z-index:1}
.public.v2 .v2-page{min-width:0}
.public.v2 .v2-page h1{color:var(--fg); font-size:clamp(1.55rem,3.2vw,2rem); line-height:1.2; letter-spacing:-.01em; margin:0 0 .35rem}
.public.v2 .v2-sub{color:var(--muted-fg); font-size:1.02rem; margin:0 0 1.25rem; max-width:40rem}
.public.v2 .v2-label{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; font-size:.78rem; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--muted-fg); margin:0 0 .5rem}
/* Round 50: overnight & early-morning times, collapsed by default (a native <details>). A full-width, 48px-tall target;
   the label says what a tap will do ("Show ..." / "Hide ..."), swapped by the open state, so no script is needed. */
.public.v2 .v2-night{margin:.9rem 0 .25rem; border:1px solid var(--border); border-radius:var(--r2); background:#fff}
.public.v2 .v2-night-toggle{display:flex; align-items:center; justify-content:space-between; gap:.75rem; min-height:48px; padding:.7rem 1rem; cursor:pointer; list-style:none; font-weight:700; color:var(--navy); border-radius:var(--r2)}
.public.v2 .v2-night-toggle::-webkit-details-marker{display:none}
.public.v2 .v2-night-toggle::after{content:""; flex:none; width:.6rem; height:.6rem; border-right:2px solid currentColor; border-bottom:2px solid currentColor; transform:rotate(45deg) translate(-2px,-2px); transition:transform .15s}
.public.v2 .v2-night[open] > .v2-night-toggle::after{transform:rotate(-135deg) translate(-2px,-2px)}
.public.v2 .v2-night-toggle:hover{background:var(--accent-soft)}
.public.v2 .v2-night[open] .v2-night-show,.public.v2 .v2-night:not([open]) .v2-night-hide{display:none}
.public.v2 .v2-night[open]{padding:0 .75rem .75rem}
.public.v2 .v2-night[open] > .v2-night-toggle{margin:0 -.75rem; border-bottom:1px solid var(--border); border-radius:var(--r2) var(--r2) 0 0}
.public.v2 .v2-night .v2-timegroup{margin-top:.85rem}
.public.v2 .v2-night-date{margin:-.25rem 0 .6rem; color:var(--muted-fg); font-size:.9rem; line-height:1.45}
.public.v2 .v2-night-only{margin:.9rem 0 0; padding:.6rem .85rem; border-left:3px solid var(--accent); background:var(--accent-soft); border-radius:0 var(--r2) var(--r2) 0; font-weight:600}
@media (prefers-reduced-motion: reduce){.public.v2 .v2-night-toggle::after{transition:none}}
.public.v2 .v2-fine{color:var(--muted-fg); font-size:.88rem; line-height:1.5; margin:.9rem 0 0}
.public.v2 .v2-card{background:var(--card); border:1px solid var(--border); border-radius:var(--r3); padding:1.25rem; margin-bottom:1rem; box-shadow:var(--lift)}
.public.v2 .v2-card h2{font-size:1.15rem; margin:0 0 .75rem}
.public.v2 .v2-outcome .badge{margin-bottom:.6rem}
.public.v2 .v2-outcome h1{margin-bottom:.9rem}
.public.v2 .banner{border-radius:var(--r2); padding:.85rem 1rem; font-size:.95rem; line-height:1.5}
.public.v2 .banner a{font-weight:700}
.public.v2 .badge{text-transform:none; letter-spacing:0; font-size:.8rem; padding:.3rem .65rem}

/* the help panel beside every booking-flow page */
.public.v2 .v2-help{display:grid; gap:1rem}
.public.v2 .v2-help-call{background:var(--navy); color:#fff; border-radius:var(--r3); padding:1.25rem; box-shadow:var(--lift)}
.public.v2 .v2-help-call p{margin:0; color:#dbe4ee; font-size:.92rem}
.public.v2 .v2-help-call .v2-help-k{font-family:var(--slab); font-weight:700; color:#fff; font-size:1.05rem}
.public.v2 .v2-help-call a{display:inline-flex; align-items:center; gap:.5rem; min-height:var(--tap); color:#fff; font-family:var(--slab); font-weight:800; font-size:1.45rem; text-decoration:none; font-variant-numeric:tabular-nums}
.public.v2 .v2-help-call a:hover{text-decoration:underline}
.public.v2 .v2-help-call :focus-visible{outline-color:#fff}
.public.v2 .v2-help-facts{background:#fff; border:1px solid var(--border); border-radius:var(--r3); padding:1.15rem 1.25rem}
.public.v2 .v2-help-facts h2{font-size:1rem; margin:0 0 .5rem; color:var(--navy)}
.public.v2 .v2-help-facts ul{list-style:none; margin:0; padding:0; font-size:.9rem; line-height:1.45; color:var(--muted-fg)}
.public.v2 .v2-help-facts li{position:relative; padding:.45rem 0 .45rem 1.6rem; border-top:1px solid var(--border)}
.public.v2 .v2-help-facts li:first-child{border-top:0}
.public.v2 .v2-help-facts li::before{content:"\2713"; position:absolute; left:0; top:.45rem; width:1.1rem; height:1.1rem; border-radius:50%; background:var(--accent-soft); color:var(--accent); font-size:.66rem; font-weight:800; display:grid; place-items:center}
.public.v2 .v2-help-facts b{color:var(--fg)}

/* kind of visit: a segmented control */
.public.v2 .v2-kinds{display:flex; background:var(--muted); border:1px solid var(--border); border-radius:999px; padding:3px; margin:0 0 1.5rem; max-width:28rem}
.public.v2 .v2-kinds a{flex:1; min-height:var(--tap); display:inline-flex; align-items:center; justify-content:center; padding:0 .6rem; border-radius:999px; font-weight:700; font-size:.92rem; line-height:1.2; text-decoration:none; color:var(--muted-fg); text-align:center}
.public.v2 .v2-kinds a:hover{color:var(--fg)}
.public.v2 .v2-kinds a[aria-current]{background:#fff; color:var(--navy); box-shadow:0 1px 2px rgba(26,31,46,.12)}

/* the day strip (round 46): previous / next and a row that always shows a WHOLE number of days. The strip is its
   own size container; each tile is (strip width - gaps) / k, with k chosen by the strip's width (never under 48px
   wide, at most a week), and the row snaps to tile starts -- so at rest no tile is ever cut off beside an arrow.
   The 3px inner padding (= the focus ring) sits inside the 6px gap, so not even a sliver of a neighbour shows.
   site.js turns the arrows into page-by-page buttons; without it they link to the previous / next day. */
.public.v2 .v2-dates{display:flex; align-items:stretch; gap:.375rem; margin:0 0 1.25rem}
.public.v2 .v2-daynav{flex:0 0 var(--tap); min-height:60px; margin:3px 0; display:grid; place-items:center; padding:0; border:1px solid var(--border); border-radius:10px; background:#fff; color:var(--navy); font:inherit; font-size:1.6rem; line-height:1; text-decoration:none; cursor:pointer}
.public.v2 a.v2-daynav:hover,.public.v2 button.v2-daynav:not(:disabled):hover{border-color:var(--accent); background:var(--accent-soft)}
.public.v2 .v2-daynav[aria-disabled],.public.v2 .v2-daynav:disabled{opacity:.35; cursor:default}
.public.v2 .v2-daystrip{--k:3; --g:6px; flex:1; min-width:0; container-type:inline-size; display:flex; gap:var(--g); overflow-x:auto; overscroll-behavior-x:contain; scroll-snap-type:x mandatory; scroll-padding-inline:3px; -webkit-overflow-scrolling:touch; padding:3px; scrollbar-width:none}
.public.v2 .v2-daystrip::-webkit-scrollbar{display:none}
.public.v2 .v2-day{flex:0 0 calc((100cqi - (var(--k) - 1) * var(--g)) / var(--k)); min-width:44px; scroll-snap-align:start; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:.1rem; min-height:60px; border:1px solid var(--border); border-radius:10px; background:#fff; text-decoration:none; color:var(--fg); line-height:1.1}
@container (min-width:210px){ .public.v2 .v2-day{--k:4} }
@container (min-width:264px){ .public.v2 .v2-day{--k:5} }
@container (min-width:318px){ .public.v2 .v2-day{--k:6} }
@container (min-width:372px){ .public.v2 .v2-day{--k:7} }
.public.v2 .v2-dayspacer{flex:0 0 auto; scroll-snap-align:none}
.public.v2 .v2-day span{font-size:.7rem; font-weight:600; text-transform:uppercase; letter-spacing:.06em; color:var(--muted-fg)}
.public.v2 .v2-day b{font-family:var(--slab); font-size:1.2rem}
.public.v2 .v2-day:hover{border-color:var(--accent); background:var(--accent-soft)}
.public.v2 .v2-day.is-closed{opacity:.5}
.public.v2 .v2-day[aria-current]{background:var(--navy); border-color:var(--navy); color:#fff; box-shadow:inset 0 -4px 0 var(--teal)}
.public.v2 .v2-day[aria-current] span{color:#cbd5e1}
.public.v2 .v2-day:focus-visible{outline:3px solid var(--accent); outline-offset:0}
.public.v2 .v2-day[aria-current]:focus-visible{outline-color:var(--accent); box-shadow:inset 0 -4px 0 var(--teal),inset 0 0 0 2px #fff}
.public.v2 .v2-daynav:focus-visible{outline-offset:2px}
.public.v2 .v2-moved{margin:0 0 .75rem; padding:.6rem .85rem; border-left:3px solid var(--accent); background:var(--accent-soft); border-radius:0 var(--r2) var(--r2) 0; font-size:.95rem; color:var(--fg)}

/* the selected day and its whole timeline */
.public.v2 .v2-dayhead{display:flex; flex-wrap:wrap; align-items:baseline; justify-content:space-between; gap:.25rem 1rem; margin:0 0 .75rem}
.public.v2 .v2-datefull{font-size:clamp(1.3rem,2.6vw,1.6rem); margin:0}
.public.v2 .v2-daycount{margin:0; color:var(--muted-fg); font-size:.92rem}
.public.v2 .v2-times{list-style:none; margin:0 0 .25rem; padding:0; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:.5rem}
.public.v2 .v2-time{display:flex; flex-direction:column; align-items:flex-start; justify-content:center; gap:.1rem; width:100%; min-height:58px; padding:.5rem .8rem; border:1px solid var(--border); border-radius:10px; background:#fff; color:var(--fg); font:inherit; text-align:left; text-decoration:none; cursor:pointer}
.public.v2 .v2-time b{font-size:1.02rem; font-variant-numeric:tabular-nums; line-height:1.2}
.public.v2 .v2-time small{font-size:.78rem; line-height:1.25; color:var(--muted-fg)}
.public.v2 .v2-time .v2-fee{color:#8a4b00; font-weight:700}
.public.v2 a.v2-time:hover,.public.v2 button.v2-time:hover{border-color:var(--accent); background:var(--accent-soft)}
.public.v2 a.v2-time:focus-visible,.public.v2 button.v2-time:focus-visible{outline-offset:2px}
.public.v2 .v2-time.is-off{background:var(--muted); border-style:dashed; cursor:default; color:var(--muted-fg)}
.public.v2 .v2-time.is-off b{color:var(--muted-fg); font-weight:600}
.public.v2 .v2-time.is-current{background:var(--accent-soft); border-color:var(--accent); cursor:default}
.public.v2 .v2-time.is-current small{color:var(--accent); font-weight:700}
.public.v2 .v2-empty{background:#fff; border:1px solid var(--border); border-radius:var(--r2); padding:1rem 1.1rem; margin:0 0 1rem}
.public.v2 .v2-empty p{margin:0 0 .5rem}
.public.v2 .v2-empty-label{color:var(--muted-fg); font-size:.9rem}
.public.v2 .v2-nextdays{display:flex; flex-wrap:wrap; gap:.5rem}
.public.v2 .v2-nextdays .btn{min-height:var(--tap); background:#fff; border:1.5px solid var(--accent); color:var(--navy)}
.public.v2 .v2-nextdays .btn:hover{background:var(--accent-soft)}
.public.v2 .v2-aside{background:var(--muted); border:1px solid var(--border); border-radius:var(--r2); padding:.9rem 1.1rem; margin-top:1.25rem; font-size:.95rem; line-height:1.5}

/* forms: one clean column; two short fields side by side when there is room */
.public.v2 .v2-form{background:var(--card); border:1px solid var(--border); border-radius:var(--r3); padding:1.25rem; box-shadow:var(--lift)}
.public.v2 .field{margin-bottom:1.1rem}
.public.v2 label{font-size:.92rem}
.public.v2 .hint{font-size:.84rem; line-height:1.45}
.public.v2 input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=submit]):not([type=button]),
.public.v2 select,.public.v2 textarea{border-color:#cfc6b9; border-radius:10px; min-height:48px; font-size:1rem}
.public.v2 input:focus-visible,.public.v2 select:focus-visible,.public.v2 textarea:focus-visible{outline:3px solid var(--accent); outline-offset:2px; border-color:var(--accent)}
.public.v2 .v2-row2{display:grid; gap:0 1rem}
.public.v2 .v2-field-tight{margin-top:-.5rem}
.public.v2 .v2-fieldset{border:1px solid var(--border); border-radius:var(--r2); padding:.6rem 1rem .4rem; margin:0 0 1.1rem}
.public.v2 .v2-fieldset legend{padding:0 .4rem}
.public.v2 .check-row span{font-size:.92rem; line-height:1.5}
.public.v2 .v2-agree{background:var(--muted); border:1px solid var(--border); border-radius:var(--r2); padding:.4rem .9rem}
.public.v2 .v2-offer-conds{margin:.5rem 0 0; padding:.7rem .9rem; background:var(--muted); border-radius:10px; font-size:.88rem; line-height:1.5; color:var(--muted-fg)}
.public.v2 .v2-offer-conds b{color:var(--fg)}
.public.v2 .v2-visit{background:var(--accent-soft); border:1px solid #b5dfe6; border-radius:var(--r2); padding:1rem 1.1rem; margin:0 0 1.25rem}
.public.v2 .v2-visit h2{font-size:1.05rem; margin:0 0 .6rem; color:#0a4d59}
.public.v2 .v2-visit-note{margin:.4rem 0 0; font-size:.88rem; line-height:1.5; color:var(--muted-fg)}
.public.v2 .v2-visit .v2-visit-note{color:#0a4d59}
.public.v2 .v2-dl{display:grid; grid-template-columns:auto 1fr; gap:.35rem 1rem; margin:0; font-size:.97rem}
.public.v2 .v2-dl dt{color:var(--muted-fg)}
.public.v2 .v2-dl dd{margin:0; overflow-wrap:anywhere}
.public.v2 .v2-card .v2-h-charges,.public.v2 .v2-h-charges{margin-top:1.25rem}
.public.v2 .v2-charge{margin:0 0 .35rem; font-size:1.02rem}
.public.v2 .v2-actions{margin-top:1rem}
.public.v2 .textline{margin-top:1rem}

/* the state pages (link not valid, booking no longer active, cannot book, error): a pair of actions */
.public.v2 .v2-btns{display:grid; gap:.6rem; margin-top:1.25rem}
.public.v2 .v2-btns .btn{margin:0}
.public.v2 .v2-intro{margin:0 0 1.25rem; max-width:42rem}
.public.v2 .v2-intro p{margin:0 0 .6rem}
.public.v2 .v2-intro p:last-child{margin-bottom:0}
.public.v2 .v2-form-title{font-size:1.15rem; margin:0 0 1rem}
.public.v2 .v2-page > .banner{margin-bottom:1rem}

/* ---- wider screens ---- */
@media (min-width:480px){
  .public.v2 .v2-row2{grid-template-columns:1fr 1fr}
  .public.v2 .v2-btns{grid-template-columns:1fr 1fr}
}
@media (min-width:560px){
  .public.v2 .v2-services{grid-template-columns:1fr 1fr}
}
@media (min-width:640px){
  .public.v2 .wrap,.public.v2 .v2-top-in,.public.v2 .v2-util-in,.public.v2 .v2-flow,.public.v2 .v2-phead-in{padding-left:1.5rem; padding-right:1.5rem}
  .public.v2 .v2-phead.is-slim .v2-phead-in{padding:0}
  .public.v2 .v2-num{display:inline}
  .public.v2 .v2-home-link{display:inline-flex}
  .public.v2 .v2-util-in{justify-content:space-between}
  .public.v2 .v2-util-facts{display:flex}
  .public.v2 .v2-offers{grid-template-columns:1fr 1fr}
  .public.v2 .v2-times{grid-template-columns:repeat(3,minmax(0,1fr))}
  .public.v2 .v2-form,.public.v2 .v2-card{padding:1.6rem}
  .public.v2 .v2-phead-in{padding-top:2rem; padding-bottom:2.25rem}
}
@media (min-width:768px){
  .public.v2 .v2-section{padding:4.5rem 0}
  .public.v2 .v2-areas-strip{padding:4.5rem 0}
  .public.v2 .v2-hero-in{padding-top:4.5rem; padding-bottom:6rem}
  .public.v2 .v2-cta{padding:4.5rem 0}
  .public.v2 .v2-benefits{grid-template-columns:repeat(4,1fr); padding:.6rem}
  .public.v2 .v2-benefits li{padding:1rem .9rem}
  .public.v2 .v2-benefits li + li{border-left:1px solid var(--border)}
  .public.v2 .v2-foot-grid{grid-template-columns:1.6fr 1fr 1fr 1fr}
  .public.v2 .v2-flow{padding-top:2rem; padding-bottom:4.5rem}
  .public.v2 .v2-how{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr); gap:2.5rem; align-items:start}
  .public.v2 .v2-areas-split{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr); gap:2.5rem}
  .public.v2 .v2-services-photo{aspect-ratio:21/9}
}
@media (min-width:900px){
  .public.v2 .v2-times{grid-template-columns:repeat(4,minmax(0,1fr))}
  .public.v2 .v2-how,.public.v2 .v2-areas-split{gap:3.5rem}
  .public.v2 .v2-faq-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.7fr); gap:3.5rem; align-items:start}
  .public.v2 .v2-faq-side{position:sticky; top:6.5rem}
  .public.v2 .v2-flow{grid-template-columns:minmax(0,1fr) 19rem; gap:2rem}
  .public.v2 .v2-flow.is-narrow{grid-template-columns:minmax(0,44rem) 19rem; justify-content:start}
  .public.v2 .v2-help{position:sticky; top:6.5rem}
}
@media (min-width:960px){
  .public.v2 .v2-hero-media{left:46%}
  .public.v2 .v2-hero-media img{object-position:50% 50%}
  .public.v2 .v2-hero-media::after{background:linear-gradient(90deg,var(--navy-deep) 0%,rgba(18,42,68,.55) 18%,rgba(18,42,68,.05) 55%)}
  .public.v2 .v2-hero-in{min-height:32rem; display:flex; align-items:center; padding-top:4rem; padding-bottom:6.5rem}
  .public.v2 .v2-hero-copy{max-width:min(32rem,42vw)}
}
@media (min-width:1024px){
  .public.v2 .navlinks{display:flex}
  .public.v2 .menu{display:none}
  .public.v2 .v2-services-wrap{grid-template-columns:minmax(0,.85fr) minmax(0,1.6fr); gap:1.5rem}
  .public.v2 .v2-services-photo{aspect-ratio:auto; min-height:100%}
  .public.v2 .v2-offers{grid-template-columns:repeat(4,1fr)}
  .public.v2 .v2-offer-label{min-height:2.4em}   /* one label wraps at 4 columns: keep every amount on the same line */
}
@media (max-width:1023px){
  .public.v2 .navlinks{display:none}
  .public.v2 .menu{display:block}
}
@media (max-width:899px){
  .public.v2 .v2-help.is-plain{display:none}
}
@media (max-width:1023px){
  .public.v2 .v2-benefits li{grid-template-columns:1fr; row-gap:.15rem}
  .public.v2 .v2-benefits .v2-icon{grid-row:auto; width:38px; height:38px; margin-bottom:.35rem}
}
@media (max-width:639px){
  .public.v2.v2-home .v2-foot{padding-bottom:calc(6.5rem + env(safe-area-inset-bottom))}
  .public.v2 .v2-benefits li{padding:.85rem .75rem}
  .public.v2.v2-home .callbar{display:grid}
  .public.v2 .v2-hero-cta .btn{flex:1 1 100%}
  .public.v2 .v2-foot-grid{grid-template-columns:1fr 1fr}
  .public.v2 .v2-foot-about,.public.v2 .v2-foot-col:last-child{grid-column:1 / -1}
}
@media (pointer:coarse){
  .public.v2 .v2-topnav .btn-sm,.public.v2 .navlinks .btn-sm{min-height:var(--tap)}
}
.public.v2 .v2-intro .small{font-size:.98rem; font-weight:600; color:var(--navy)}
.public.v2 .v2-outcome .badge-ok,.public.v2 .v2-outcome .badge-bad{text-transform:capitalize}
.public.v2 .v2-offer-detail:has(+ .v2-offer-note){flex:0 0 auto; margin-bottom:.5rem}
.public.v2 .v2-offer-note{flex:1; margin:0 0 .75rem; font-size:.88rem; line-height:1.45; color:var(--muted-fg)}
/* round 46: the unavailable starts stay distinct at a glance, not only by their words -- times already behind us
   (or inside the notice window) are drawn as empty outlines with the time struck through; "Not available" and
   "Visit wouldn't finish by closing" keep the muted fill. Text stays at AA contrast in every state. */
.public.v2 .v2-time.is-off[data-status="passed"],.public.v2 .v2-time.is-off[data-status="past"]{background:transparent}
.public.v2 .v2-time.is-off[data-status="passed"] b{text-decoration:line-through; text-decoration-thickness:1px}
/* round 46: touch targets -- the footer's link lists are 44px tall below desktop width, and the inline number in a
   form hint gets the full 44px hit area like every other inline link (the text does not move). */
@media (max-width:1023px){
  .public.v2 .v2-foot-col li,.public.v2 .v2-foot-col li a{min-height:var(--tap)}
}
.public.v2 .hint a{padding:.8rem 0; margin:-.8rem 0}
/* Round 51: the proposed new time on "Confirm the new time" -- large, with its full date and a part-of-day word. */
.public.v2 .v2-newtime{display:flex; flex-direction:column; gap:.15rem; margin:.75rem 0 1rem; padding:.85rem 1rem; border:2px solid var(--accent); border-radius:var(--r2); background:var(--accent-soft)}
.public.v2 .v2-newtime-label{font-size:.8rem; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--navy)}
.public.v2 .v2-newtime-time{font-size:1.9rem; line-height:1.1; font-variant-numeric:tabular-nums; color:var(--navy)}
.public.v2 .v2-newtime-day{font-weight:600}
.public.v2 .v2-facts{margin:0 0 1rem}
.public.v2 .v2-facts > div{padding:.5rem 0; border-top:1px solid var(--border)}
.public.v2 .v2-facts dt{font-size:.85rem; color:var(--muted-fg)}
.public.v2 .v2-facts dd{margin:.1rem 0 0}
