/* =====================================================================
   PULSE CLUB shared design layer (build 28)
   Loaded after each page's own <style>, so it wins on equal specificity.
   Basetica is licensed for web use.
   ===================================================================== */
@font-face{font-family:'Basetica';src:url('../fonts/basetica-light.woff2') format('woff2');font-weight:100 300;font-style:normal;font-display:swap}
@font-face{font-family:'Basetica';src:url('../fonts/basetica-medium.woff2') format('woff2');font-weight:400 500;font-style:normal;font-display:swap}
@font-face{font-family:'Basetica';src:url('../fonts/basetica-bold.woff2') format('woff2');font-weight:600 900;font-style:normal;font-display:swap}

:root{--r:6px;--rule:#ddd5c6;--red-ink:#c4512b;--font:'Basetica','Hanken Grotesk',system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
body{font-family:var(--font);font-size:clamp(16.5px,1.1vw,18.5px);line-height:1.6}
h1,h2,h3{font-weight:700;letter-spacing:-0.01em;text-wrap:pretty}
.section{padding:clamp(64px,9vw,128px) 0}
.section h2{font-size:clamp(2rem,4.2vw,3.3rem);line-height:1.02;max-width:21ch}
.prose h2{font-size:clamp(1.6rem,2.8vw,2.2rem);max-width:28ch}
p+p{margin-top:1em}

/* buttons and links */
.btn{border-radius:4px;font-weight:700;letter-spacing:0}
.btn--primary{background:var(--red-ink)}
.btn--primary:hover{background:#a9431f}
.btn--dark{background:var(--slate);color:var(--putty)}
.btn--dark:hover{background:#000}
.btn--light{background:var(--putty);color:var(--slate)}
.btn--lg{padding:17px 28px}
.store{border-radius:4px}
.bookbar .btn--light{background:var(--putty);color:var(--slate)}
.dirlink,.loc a.tel,.visit__card .tel{color:var(--slate)}
.dirlink{text-decoration:underline;text-underline-offset:3px}
a:focus-visible,button:focus-visible,.btn:focus-visible{outline:3px solid var(--blue-ink);outline-offset:3px}

/* no shouty labels */
.eyebrow.kicker{display:none}
.pm__k,.plan__tiername,.ftr h4{text-transform:none;letter-spacing:0}
.ftr h4{font-size:.88rem}
.glance{display:none}
.note,.form .note,.bcards__note{font-size:max(14px,.85rem)}

/* nav */
.nav a.nav__signup,.nav.open a.nav__signup{color:var(--slate);font-weight:700}

/* lists and cards, squarer and quieter */
.flist li::before{border-radius:1px;width:8px;height:8px;top:.65em;background:var(--slate)}
.visit__card,.pm,.clubcta,.loc,.plan{border-radius:var(--r)}
.pm__v{font-weight:700}
.shot{border-radius:var(--r)}

/* club page hero: words first, then the room */
.hero--club{background:var(--putty)}
.hero--club::before{display:none}
.hero--club .hero__in{grid-template-columns:1fr;padding-top:clamp(28px,4vw,56px);padding-bottom:clamp(36px,5vw,64px)}
.hero--club .hero__in>div{max-width:720px}
.hero--club h1{font-size:clamp(2.8rem,6.5vw,5.2rem);line-height:.98;letter-spacing:-0.02em;margin:.1em 0 .35em}
.hero--club .lead{font-weight:300;font-size:clamp(1.15rem,1.7vw,1.4rem);max-width:40ch;line-height:1.45}
.hero--club .offer{color:var(--slate);font-weight:700}
.hero__intro{font-weight:500;color:var(--muted);margin:0}
.clubphoto{margin:0;line-height:0}
.clubphoto img{width:100%;height:clamp(300px,44vw,640px);object-fit:cover;object-position:50% 25%;display:block}
@media (max-width:760px){.clubphoto img{height:auto;aspect-ratio:5/4}}

/* hot / cold band: the brand mark's split, used where it carries information */
.hotcold{display:grid;grid-template-columns:1fr 1fr}
.hotcold__half{padding:clamp(48px,7vw,96px) var(--pad);display:flex;flex-direction:column;justify-content:flex-end;min-height:clamp(240px,30vw,400px);color:var(--slate)}
.hotcold__hot{background:var(--red);align-items:flex-end;text-align:right}
.hotcold__cold{background:var(--blue)}
.hotcold__what{font-weight:700;font-size:1.05rem;margin:0}
.hotcold__num{font-weight:300;font-size:clamp(3.6rem,9vw,8.5rem);line-height:.95;letter-spacing:-0.03em;margin:.08em 0 0}
@media (max-width:760px){.hotcold{grid-template-columns:1fr}.hotcold__half{min-height:0;padding:40px var(--pad)}.hotcold__hot{align-items:flex-start;text-align:left}}

/* visit section photo */
.visit__photo{margin:30px 0 0;line-height:0}
.visit__photo img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;border-radius:var(--r)}
@media (min-width:761px){.visit{grid-template-columns:1fr 1fr 1fr}.visit__photo{margin:0;position:relative;min-height:260px}.visit__photo img{position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto}}

/* footer additions: app + instagram */
.ftr__app{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}
.ftr__app a{display:inline-flex;flex-direction:column;background:var(--putty);color:var(--slate)!important;opacity:1!important;border-radius:4px;padding:.55em 1em;font-weight:700;font-size:.92rem;line-height:1.2}
.ftr__app small{font-weight:500;font-size:.68rem;color:var(--muted)}
.insta{background:var(--putty-deep);border-top:1px solid var(--rule)}
.insta__in{display:flex;flex-wrap:wrap;gap:12px 32px;align-items:center;justify-content:space-between;padding-top:clamp(36px,5vw,56px);padding-bottom:clamp(36px,5vw,56px)}
.insta__line{font-weight:300;font-size:clamp(1.4rem,2.6vw,2.1rem);line-height:1.2;margin:0;max-width:30ch}
.insta__handle{font-weight:700;font-size:1.1rem;color:var(--slate);text-decoration:underline;text-underline-offset:4px}

/* one deliberate motion moment: headline settles in on load */
@media (prefers-reduced-motion:no-preference){
  .hero h1:not(.lead__h1),.hero .hero__title{animation:pc-rise .9s cubic-bezier(.2,.7,.2,1) both}
  .hero .lead{animation:pc-rise .9s .12s cubic-bezier(.2,.7,.2,1) both}
}
@keyframes pc-rise{from{transform:translateY(14px)}to{transform:none}}

/* image shapes: portraits 4:5, landscapes 3:2 */
.shot--tall{aspect-ratio:4/5!important;object-fit:cover}
.loc__img{aspect-ratio:3/2}

/* closing bands on inner pages: calm, not orange */
.offerband{background:var(--slate);color:var(--putty)}
.offerband a{color:var(--putty)}
.offerband .btn{background:var(--putty);color:var(--slate)}
.offerband .btn:hover{background:var(--blue)}

.crumb{padding-left:var(--pad);padding-right:var(--pad)}

/* inner page heroes: no decorative colour blobs */
.hero--inner::before{display:none}
.hero--inner .offer{color:var(--slate);font-weight:700}
.prose h2{margin-bottom:.45em;line-height:1.08}
.prose h3{margin-top:1.4em}

/* ---------- pass 4: quieter lower sections ---------- */
/* club pages: ruled lists, not boxes */
.visit__card{border:0;border-top:2px solid var(--slate);border-radius:0;background:transparent;padding:18px 0 0}
.pricemini{grid-template-columns:1fr!important;gap:0;border-top:1px solid var(--rule)}
.pm{border:0;border-bottom:1px solid var(--rule);border-radius:0;background:transparent;padding:18px 0;display:grid;grid-template-columns:minmax(120px,1fr) minmax(110px,1fr) 2fr;align-items:baseline;gap:6px 24px}
.pm__k{font-size:1.05rem;font-weight:700;color:var(--slate)}
.pm__v{font-size:1.7rem;font-weight:700}
.pm__d{font-size:.95rem}
@media (max-width:560px){.pm{grid-template-columns:1fr 1fr}.pm__d{grid-column:1/-1}}
.clubcta{border:0;background:transparent;border-radius:0;gap:28px}
.clubcta img{border-radius:var(--r)}
/* FAQ: ruled rows */
.faq{border:0;border-bottom:1px solid var(--rule);border-radius:0;background:transparent}
.faqcat+.faq,.faqcat+*>.faq:first-child{border-top:1px solid var(--rule)}
.faq summary{padding:20px 0}
.faq summary::after{color:var(--slate)}
.faq__a{padding:0 0 22px}
.faq__a a{color:var(--slate);text-decoration:underline}
/* science: numbers in the house style, not a dark stat band */
.stats{background:var(--putty-deep);color:var(--slate);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.stats__in{text-align:left}
.stat__n{font-weight:300;color:var(--slate);font-size:clamp(2.6rem,5vw,3.8rem)}
.stat__l{margin:8px 0 0;opacity:1;color:var(--slate-90)}
.stat__l sup a{color:var(--slate)}

/* private hire band */
.hire{background:var(--slate);color:var(--putty)}
.hire__in{display:grid;grid-template-columns:1.15fr .85fr;gap:clamp(28px,6vw,80px);align-items:end}
.hire h2{color:var(--putty)}
.hire p{color:#cfc9bc;max-width:52ch;margin-top:16px}
.hire__act p{font-size:.95rem}
.hire a:not(.btn){color:var(--putty);text-decoration:underline;text-underline-offset:3px}
.hire .btn{white-space:normal;text-align:center}
@media (max-width:860px){.hire__in{grid-template-columns:1fr}}

/* gift cards button (hidden until switched on in js/site-config.js) */
[data-gift][hidden]{display:none!important}
.hdr__gift{margin-left:10px}
.hdr .btn + .btn{margin-left:10px}

/* club pages: rating line and a single review */
.hero--club .hero__rating{margin-top:22px;font-size:.92rem;color:var(--muted)}
.stars{color:#e8a92c;letter-spacing:2px;margin-right:6px}
.clubreview{padding-top:clamp(56px,7vw,96px);padding-bottom:clamp(56px,7vw,96px)}
.clubreview blockquote{margin:0;font-weight:300;font-size:clamp(1.6rem,3.2vw,2.5rem);line-height:1.22;letter-spacing:-0.01em;max-width:30ch}
.clubreview figure{margin:0}
.clubreview figcaption{margin-top:14px;font-weight:700;font-size:.95rem}
.whats{margin-top:28px}
.whats h3{font-size:1.1rem;margin-bottom:4px}
.section .split h2{margin-bottom:.45em}

/* ---- build 29: conversion + layout polish ---- */
/* mobile hero: shorter photo cropped on faces so the offer and button sit above the fold */
@media (max-width:760px){
  .hero__bg{display:block;aspect-ratio:16/10;overflow:hidden}
  .hero__bg img{object-position:60% 30%}
  .hero__in{padding-top:22px}
  .hero .hero__title{font-size:clamp(2.4rem,11vw,3.2rem);margin-bottom:.32em}
  .hero .lead{font-size:1.08rem}
  .hero__ctas{margin-top:20px}
}
/* reviews: heading and score on the left, quotes on the right */
.voices__rating{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 12px;margin:18px 0 0}
.voices__score{font-size:clamp(3rem,6vw,4.6rem);font-weight:700;line-height:1;letter-spacing:-0.03em}
.voices__rating .stars{color:#e8a92c;letter-spacing:2px;font-size:1.2rem}
.voices__count{flex-basis:100%;color:var(--muted);font-size:.95rem}
@media (min-width:900px){
  .voices .wrap{display:grid;grid-template-columns:minmax(260px,4fr) 8fr;gap:0 clamp(40px,6vw,96px);align-items:start}
  .voices__top{grid-row:1/3;position:sticky;top:110px}
  .voices .quote--big{margin-top:0}
  .voices .quotes{grid-column:2}
}
/* club page review: centred so it doesn't leave half the page empty */
.clubreview figure{max-width:34ch;margin:0 auto;text-align:center}
.clubreview blockquote{margin:0 auto}
@media (min-width:900px){.voices .wrap{grid-template-columns:minmax(300px,5fr) 7fr}.voices__top h2{font-size:clamp(2.2rem,3.4vw,3rem)}}
/* build 29 QA: keep side gutters on bands whose inner padding shorthand zeroed them */
.offerband__in,.stats__in{padding-left:var(--pad,20px);padding-right:var(--pad,20px)}
/* anchor jumps land below the sticky header */
[id]{scroll-margin-top:92px}

/* =====================================================================
   BUILD 30: editorial pass
   ===================================================================== */
/* square edges and no drop shadows on photos and content blocks */
.shot,.hero__img,.loc,.loc__img,.clubcta img,.visit__photo img,.clubphoto img,.photo,.vcard,.bcard,.step,.card,.plan,.joinband__card,.pricerow--intro,.pricerow--dropin,.clubswitch,.clubswitch button{border-radius:0!important;box-shadow:none!important}
/* location cards become an open two-up: big photo, text underneath, no box */
.loc{border:0!important;background:transparent!important;overflow:visible!important}
.loc__imglink{display:block;overflow:hidden}
.loc__img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;transition:transform .6s ease}
.loc__imglink:hover .loc__img{transform:scale(1.025)}
.loc__body{padding:24px 0 0!important}
.loc__body h3{font-size:clamp(1.4rem,2vw,1.75rem)}
.locs{gap:clamp(28px,4vw,56px)!important}
/* price boxes become ruled rows */
.pricerow--intro,.pricerow--dropin{background:transparent!important;padding:24px 0!important;margin-top:0!important;border-top:1px solid var(--rule)!important}
.pricerow--dropin{border-bottom:1px solid var(--rule)!important}
/* full-bleed photo moments */
.bleed{margin:0;line-height:0;background:#1d1c17}
.bleed img{display:block;width:100%;height:clamp(340px,52vw,780px);object-fit:cover;object-position:50% 30%}
@media (max-width:760px){.bleed img{height:auto;aspect-ratio:5/4}}
/* drawn stars */
.stars{display:inline-flex;gap:2px;vertical-align:-0.12em;letter-spacing:0!important}
.stars svg{display:block}
/* science: editorial article */
.sci__sec{padding:clamp(56px,8vw,112px) 0;border-top:1px solid var(--rule)}
.sci__sec--first{border-top:0}
.sci__grid{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:clamp(24px,5vw,88px);align-items:start}
.sci__rail{position:sticky;top:112px}
.sci__num{display:block;font-weight:300;font-size:clamp(2.6rem,4.6vw,3.8rem);line-height:1;color:var(--red-ink,#b9452a);margin-bottom:16px;letter-spacing:-0.02em}
.sci__rail h2{font-size:clamp(1.6rem,2.6vw,2.3rem)!important;line-height:1.06;margin:0!important;max-width:14ch!important}
.sci__body{max-width:62ch}
.sci__body>p:first-child{font-size:1.14em;line-height:1.55}
.sci__sec--first .sci__body>p:first-child::first-letter{float:left;font-size:4.4em;line-height:.82;font-weight:700;margin:.06em .12em 0 0;color:var(--slate)}
.sci__pq{background:var(--putty-deep);padding:clamp(56px,8vw,112px) 0}
.sci__pq .pq{font-size:clamp(1.7rem,3.4vw,2.6rem)!important;line-height:1.2!important}
.sci__voice{padding:clamp(64px,10vw,140px) 0;text-align:center;border-top:1px solid var(--rule)}
.sci__voice blockquote{margin:0 auto;font-weight:300;font-size:clamp(2rem,5vw,3.6rem);line-height:1.1;letter-spacing:-0.02em;max-width:18ch}
.sci__voice p{margin-top:18px;font-weight:700;font-size:.95rem}
@media (max-width:860px){.sci__grid{grid-template-columns:1fr}.sci__rail{position:static}.sci__num{font-size:2.4rem;margin-bottom:10px}}
