#fm{
  --bg:#F6F2EC; --card:#FFFFFF; --ink:#16202A; --muted:#5B6570; --line:#E6DFD5;
  --teal:#0E7C7B; --teal-2:#12A39F; --teal-soft:#DDF1EF;
  --coral:#F0643F; --coral-soft:#FDE7DF; --sand:#EFE6DA;
  --star:#F5A524;
  --display:'DM Serif Display',Georgia,'Times New Roman',serif;
  --sans:'Manrope',system-ui,-apple-system,'Segoe UI',sans-serif;
  position:relative; background:var(--bg); color:var(--ink);
  font-family:var(--sans); font-size:16px; line-height:1.6;
  -webkit-font-smoothing:antialiased;
  /* `overflow-x:hidden` clips the decorative blobs, but it also turns #fm into
     a scroll container — so anything that calls scrollIntoView (the booking
     summary, a focused field, VoiceOver) can slide the whole page 8px to the
     left and leave the day of the week clipped at the edge of a phone. That is
     the bug that was visible in the first mobile screenshot. `clip` does the
     same clipping WITHOUT creating a scrollport, so there is nothing to drift.
     `hidden` stays first as the fallback for Safari before 16. */
  overflow-x:hidden; overflow-x:clip;
  /* Stops iOS inflating body text when the phone is turned sideways, which
     otherwise reflows the whole page mid-scroll. */
  -webkit-text-size-adjust:100%; text-size-adjust:100%;
}
#fm *,#fm *::before,#fm *::after{box-sizing:border-box}
/* No grey flash on tap, and no 300ms wait for a double-tap that is not coming. */
#fm a,#fm button,#fm .radio,#fm .filt,#fm .day,#fm .slot,#fm .svcopt,#fm label{
  -webkit-tap-highlight-color:transparent;touch-action:manipulation}
#fm h1,#fm h2,#fm h3,#fm h4{font-family:var(--display);font-weight:400;line-height:1.1;margin:0}
#fm p{margin:0}
#fm a{color:inherit;text-decoration:none}
#fm img{max-width:100%;display:block}
#fm button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
#fm input,#fm select,#fm textarea{font:inherit;color:inherit}
#fm ul,#fm ol{margin:0;padding:0;list-style:none}

/* Ambient colour behind everything. Decorative only. */
#fm .amb{position:absolute;border-radius:50%;filter:blur(70px);opacity:.55;z-index:0;pointer-events:none}
#fm .amb-1{width:400px;height:400px;background:#BFE6E2;top:-120px;left:-120px}
#fm .amb-2{width:420px;height:420px;background:#FBD3C2;top:420px;right:-160px}
#fm .amb-3{width:380px;height:380px;background:#CDEBE7;top:1900px;left:-140px}
#fm .wrap{max-width:1140px;margin:0 auto;padding:0 20px;position:relative;z-index:1}
#fm section{position:relative;z-index:1}
#fm .sec{padding:88px 0}
#fm .sec + .sec{padding-top:0}

/* ── Type ─────────────────────────────────────────────────────────────── */
#fm .eyebrow{font-size:12px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--teal)}
#fm .h-hero{font-size:clamp(44px,7vw,78px)}
#fm .h-sec{font-size:clamp(34px,5vw,48px)}
#fm .h-page{font-size:clamp(40px,6vw,64px)}
#fm .lead{font-size:19px;color:var(--muted);max-width:52ch}
#fm .sub{font-size:17px;color:var(--muted);max-width:62ch}
#fm .muted{color:var(--muted)}
#fm .small{font-size:14px}
#fm .fine{font-size:13px;color:var(--muted)}
#fm em.disp{font-style:italic}

/* ── Buttons ──────────────────────────────────────────────────────────── */
#fm .btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;
  min-height:52px;padding:0 24px;border-radius:999px;font-size:15px;font-weight:700;
  border:1.5px solid transparent;transition:transform .18s ease,background .18s ease,border-color .18s ease,color .18s ease}
#fm .btn:active{transform:translateY(1px)}
#fm .btn-teal{background:var(--teal);color:#fff}
#fm .btn-teal:hover{background:var(--teal-2);transform:translateY(-2px)}
#fm .btn-ink{background:var(--ink);color:#fff}
#fm .btn-ink:hover{transform:translateY(-2px)}
#fm .btn-white{background:#fff;color:var(--ink)}
#fm .btn-white:hover{transform:translateY(-2px)}
#fm .btn-out{border-color:var(--line);background:transparent;color:var(--ink)}
#fm .btn-out:hover{border-color:var(--teal);color:var(--teal);transform:translateY(-2px)}
#fm .btn-sm{min-height:44px;padding:0 18px;font-size:14px}
#fm .btn[disabled]{opacity:.42;pointer-events:none}
#fm .btn svg{flex:none}

#fm .chip{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:999px;
  font-size:13px;font-weight:700;background:var(--sand);color:var(--ink)}
#fm .chip-teal{background:var(--teal-soft);color:var(--teal)}
#fm .chip-coral{background:var(--coral-soft);color:#B8431F}

#fm .card{background:var(--card);border:1px solid var(--line);border-radius:22px;padding:24px}
#fm .lift{transition:transform .2s ease,box-shadow .2s ease}
#fm .lift:hover{transform:translateY(-4px);box-shadow:0 24px 48px -28px rgba(22,32,42,.35)}

/* ── Reveal on scroll ─────────────────────────────────────────────────── */
#fm .rv{opacity:0;transform:translateY(22px);transition:opacity .6s ease,transform .6s ease}
#fm .rv.in{opacity:1;transform:none}

/* ── Header ───────────────────────────────────────────────────────────── */
#fm .hdr{position:sticky;top:0;z-index:40;height:72px;display:flex;align-items:center;
  background:rgba(246,242,236,.85);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  border-bottom:1px solid transparent;transition:border-color .2s ease}
#fm .hdr.scrolled{border-bottom-color:var(--line)}
#fm .hdr .wrap{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%}
#fm .brand{display:flex;align-items:center;gap:12px;min-width:0;min-height:44px}
#fm .brand img{height:46px;width:auto;flex:none}
#fm .wordmark{font-family:var(--display);font-size:21px;letter-spacing:-.01em;white-space:nowrap}
#fm .hdr-actions{display:flex;align-items:center;gap:10px;flex:none}
#fm .wordmark i{font-style:italic;color:var(--teal)}
#fm .nav{display:flex;align-items:center;gap:26px}
#fm .nav a{font-size:15px;font-weight:600;color:var(--muted);position:relative;padding:6px 0}
#fm .nav a:hover{color:var(--ink)}
#fm .nav a[aria-current="page"]{color:var(--ink)}
#fm .nav a[aria-current="page"]::after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:2px;background:var(--teal);border-radius:2px}
/* flex:none matters: the header is a flex row, and without it the browser is
   free to shrink a 44px button to 31px to make the row fit on a phone — which
   is exactly where a 44px tap target is least optional. */
#fm .burger{display:none;width:44px;height:44px;flex:none;border-radius:12px;align-items:center;justify-content:center;border:1px solid var(--line)}
#fm .mnav{display:none;border-bottom:1px solid var(--line);background:var(--bg)}
#fm .mnav.open{display:block}
#fm .mnav a{display:block;padding:14px 0;font-weight:600;border-bottom:1px solid var(--line)}
#fm .mnav a:last-child{border-bottom:0}

/* ── Hero ─────────────────────────────────────────────────────────────── */
#fm .hero{display:grid;grid-template-columns:1.1fr .9fr;gap:56px;align-items:center;padding:64px 0 88px}
#fm .hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px}
#fm .trust{display:flex;flex-wrap:wrap;gap:28px;margin-top:36px}
#fm .trust b{display:block;font-size:14px;font-weight:800}
#fm .trust span{font-size:13px;color:var(--muted)}
#fm .stars{color:var(--star);letter-spacing:2px;font-size:14px}
#fm .heroshot{position:relative}
#fm .heroshot .frame{aspect-ratio:4/5;border-radius:28px;overflow:hidden;transform:rotate(1.5deg);
  box-shadow:0 30px 60px -30px rgba(22,32,42,.45);background:var(--sand)}
#fm .heroshot .frame img{width:100%;height:100%;object-fit:cover}
#fm .float{position:absolute;border-radius:18px;padding:14px 18px;background:#fff;
  box-shadow:0 18px 40px -22px rgba(22,32,42,.45);animation:fmbob 5s ease-in-out infinite}
#fm .float b{display:block;font-family:var(--display);font-size:22px}
#fm .float span{font-size:12.5px;color:var(--muted)}
#fm .float-price{left:-14px;bottom:36px}
#fm .float-age{right:-10px;top:44px;background:var(--coral);color:#fff;animation-delay:-2.5s}
#fm .float-age b{font-family:var(--sans);font-size:15px;font-weight:800}
#fm .float-age span{color:rgba(255,255,255,.9)}
@keyframes fmbob{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}

/* ── Price card (stands in for the hero photo while PHOTOS is off) ─────── */
#fm .pricecard{background:#fff;border:1px solid var(--line);border-radius:28px;padding:28px;
  box-shadow:0 30px 60px -40px rgba(22,32,42,.45)}
#fm .pricerow{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:18px 0;border-bottom:1px solid var(--line);transition:padding-left .18s ease}
#fm .pricerow:hover{padding-left:6px}
#fm .pricerow b{display:block;font-size:17px;font-weight:800}
#fm .pricerow span{font-size:13px;color:var(--muted)}
#fm .pricerow .amt{font-family:var(--display);font-size:38px;line-height:1;color:var(--teal);flex:none}
#fm .pricecard .incl{padding-top:20px}
#fm .pricecard .incl b{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);font-family:var(--sans)}
#fm .pricecard .incl ul{display:grid;grid-template-columns:1fr 1fr;gap:9px 16px;margin-top:12px}
#fm .pricecard .incl li{display:flex;align-items:center;gap:8px;font-size:14px}
#fm .pricecard .incl li svg{flex:none;color:var(--teal)}
#fm .pricecard .fine{margin-top:18px}

/* ── Age band ─────────────────────────────────────────────────────────── */
#fm .ageband{display:flex;align-items:center;gap:18px;background:var(--ink);color:#fff;
  border-radius:22px;padding:22px 26px;flex-wrap:wrap}
#fm .ageband .dot7{width:52px;height:52px;border-radius:50%;background:var(--coral);color:#fff;
  display:grid;place-items:center;font-weight:800;font-size:17px;flex:none}
#fm .ageband p{flex:1;min-width:240px;color:rgba(255,255,255,.86);font-size:15px}
#fm .ageband b{color:#fff}

/* ── Services ─────────────────────────────────────────────────────────── */
#fm .svc-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:36px}
#fm .svc{background:#fff;border:1px solid var(--line);border-radius:26px;padding:28px;display:flex;flex-direction:column;gap:16px}
#fm .svc.feat{border:2px solid var(--teal)}
#fm .svc-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
#fm .svc-top h3{font-size:26px}
#fm .svc-price{font-family:var(--display);font-size:40px;line-height:1;color:var(--teal)}
#fm .svc-chips{display:flex;flex-wrap:wrap;gap:8px}
#fm .svc ul{display:grid;gap:9px}
#fm .svc li{display:flex;align-items:center;gap:9px;font-size:14.5px}
#fm .svc li svg{flex:none;color:var(--teal)}
#fm .note{background:var(--teal-soft);color:var(--teal);border-radius:14px;padding:11px 14px;font-size:13.5px;font-weight:700}

/* ── Steps ────────────────────────────────────────────────────────────── */
#fm .steps{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:36px}
#fm .step{border:1.5px dashed var(--line);border-radius:20px;padding:22px}
#fm .step .n{width:34px;height:34px;border-radius:50%;background:var(--teal-soft);color:var(--teal);
  display:grid;place-items:center;font-weight:800;font-size:14px;margin-bottom:14px}
#fm .step h4{font-size:19px;margin-bottom:7px}
#fm .step p{font-size:14px;color:var(--muted)}

/* ── Mosaic ───────────────────────────────────────────────────────────── */
#fm .row-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;flex-wrap:wrap}
#fm .mosaic{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:190px;gap:14px;margin-top:32px}
#fm .mo{position:relative;border-radius:18px;overflow:hidden;background:var(--sand)}
#fm .mo:nth-child(1),#fm .mo:nth-child(4){grid-row:span 2}
#fm .mo img{width:100%;height:100%;object-fit:cover;transition:transform .4s ease}
#fm .mo:hover img{transform:scale(1.05)}
#fm .mo .cap{position:absolute;left:12px;bottom:12px;background:rgba(255,255,255,.94);
  border-radius:999px;padding:7px 13px;font-size:12.5px;font-weight:700;opacity:0;transition:opacity .25s ease}
#fm .mo:hover .cap{opacity:1}

/* ── About ────────────────────────────────────────────────────────────── */
#fm .about{display:grid;grid-template-columns:.8fr 1.2fr;gap:40px;align-items:center;
  background:linear-gradient(135deg,#E3F2F0,#F6EEE4);border-radius:34px;padding:40px}
#fm .about.noshot{grid-template-columns:1fr;max-width:74ch}
#fm .about .shot{aspect-ratio:1;border-radius:26px;overflow:hidden;background:var(--sand)}
#fm .about .shot img{width:100%;height:100%;object-fit:cover}
#fm .pull{font-family:var(--display);font-size:clamp(26px,3.4vw,36px);line-height:1.25;margin:14px 0 16px}

/* ── Reviews ──────────────────────────────────────────────────────────── */
#fm .rev-head{display:flex;align-items:center;gap:22px;flex-wrap:wrap}
#fm .bigscore{font-family:var(--display);font-size:64px;line-height:1}
#fm .rev-track{display:flex;gap:18px;overflow-x:auto;scroll-snap-type:x mandatory;
  scrollbar-width:none;padding:6px 2px 10px;margin-top:26px}
#fm .rev-track::-webkit-scrollbar{display:none}
#fm .rev{flex:0 0 calc((100% - 36px)/3);scroll-snap-align:start;background:#fff;
  border:1px solid var(--line);border-radius:22px;padding:24px;display:flex;flex-direction:column;gap:12px}
#fm .rev p{font-size:14.5px;color:var(--muted)}
#fm .rev .who{font-weight:800;font-size:14.5px}
#fm .arrows{display:flex;gap:10px;margin-top:6px}
#fm .arrow{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);
  display:grid;place-items:center;background:#fff;transition:border-color .2s ease}
#fm .arrow:hover{border-color:var(--teal);color:var(--teal)}

/* ── Visit ────────────────────────────────────────────────────────────── */
#fm .visit{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:36px}
#fm .mapbox{border-radius:18px;overflow:hidden;border:1px solid var(--line);background:var(--sand);margin:18px 0}
#fm .mapbox iframe{display:block;width:100%;height:230px;border:0}
#fm .maplink{display:flex;align-items:center;gap:12px;padding:18px;background:var(--sand);border-radius:18px;margin:18px 0}
#fm .clinks{display:grid;gap:10px}
#fm .clink{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:999px;
  background:var(--bg);border:1px solid var(--line);font-weight:700;font-size:14.5px;transition:border-color .2s ease,transform .2s ease}
#fm .clink:hover{border-color:var(--teal);transform:translateY(-2px)}
#fm .clink svg{color:var(--teal);flex:none}
#fm .clink span{color:var(--muted);font-weight:500;margin-left:auto;font-size:13px}

#fm .hours{width:100%;border-collapse:collapse;margin:8px 0 16px}
#fm .hours td{padding:11px 12px;font-size:14.5px;border-bottom:1px solid var(--line)}
#fm .hours tr:last-child td{border-bottom:0}
#fm .hours td:last-child{text-align:right;color:var(--muted)}
#fm .hours tr.today td{background:var(--teal-soft);color:var(--teal);font-weight:800}
#fm .hours tr.today td:last-child{color:var(--teal)}
#fm .hours td.closed{color:var(--coral);font-weight:700}
#fm .photo{border-radius:18px;overflow:hidden;background:var(--sand);aspect-ratio:4/3}
#fm .photo img{width:100%;height:100%;object-fit:cover}

/* ── Footer ───────────────────────────────────────────────────────────── */
#fm .cta{position:relative;overflow:hidden;background:var(--teal);color:#fff;border-radius:36px;
  padding:48px;display:flex;align-items:center;justify-content:space-between;gap:26px;flex-wrap:wrap}
#fm .cta::before,#fm .cta::after{content:"";position:absolute;border-radius:50%;background:rgba(255,255,255,.1)}
#fm .cta::before{width:260px;height:260px;top:-110px;right:-60px}
#fm .cta::after{width:200px;height:200px;bottom:-110px;left:-50px}
#fm .cta > *{position:relative;z-index:1}
#fm .cta h2{font-size:clamp(28px,4vw,40px)}
#fm .cta p{color:rgba(255,255,255,.88);margin-top:8px;max-width:44ch}
#fm .ftr{padding:56px 0 40px}
#fm .ftr-in{border-top:1px solid var(--line);margin-top:56px;padding-top:36px;
  display:flex;justify-content:space-between;gap:26px;flex-wrap:wrap}
/* A row of 23px-tall links is fine with a mouse and miserable with a thumb.
   The padding gives each one a 44px target without changing how it looks. */
#fm .ftr-links{display:flex;gap:6px 20px;flex-wrap:wrap;font-size:14.5px;font-weight:600;margin:-10px 0}
#fm .ftr-links a{display:inline-flex;align-items:center;min-height:44px}
#fm .ftr-links a:hover{color:var(--teal)}
#fm .socials{display:flex;gap:10px}
#fm .soc{width:42px;height:42px;border-radius:50%;border:1px solid var(--line);background:#fff;
  display:grid;place-items:center;transition:background .2s ease,color .2s ease,border-color .2s ease}
#fm .soc:hover{background:var(--ink);color:#fff;border-color:var(--ink)}
#fm .copyright{margin-top:28px;font-size:13px;color:var(--muted)}

/* ── Mobile book bar + chat ───────────────────────────────────────────── */
#fm .mbar{display:none;position:fixed;left:0;right:0;bottom:0;z-index:45;
  background:rgba(246,242,236,.96);backdrop-filter:blur(12px);border-top:1px solid var(--line);
  padding:10px 16px calc(10px + env(safe-area-inset-bottom));align-items:center;justify-content:space-between;gap:12px}
#fm .mbar b{display:block;font-size:14px;font-weight:800}
#fm .mbar span{font-size:12px;color:var(--muted)}

#fm .chatbtn{position:fixed;right:20px;bottom:20px;z-index:46;display:inline-flex;align-items:center;gap:10px;
  background:var(--ink);color:#fff;border-radius:999px;padding:13px 20px;font-weight:700;font-size:14.5px;
  box-shadow:0 18px 40px -20px rgba(22,32,42,.6)}
#fm .chatbtn .bub{width:26px;height:26px;border-radius:50%;background:var(--teal);display:grid;place-items:center;flex:none}
/* dvh, not vh: on iOS `100vh` is the viewport with the browser chrome hidden,
   so a panel sized against it hangs below the address bar until you scroll. */
#fm .chatpanel{position:fixed;right:20px;bottom:20px;z-index:47;width:380px;max-width:calc(100vw - 32px);
  height:560px;max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px);background:#fff;border-radius:22px;overflow:hidden;
  display:none;flex-direction:column;box-shadow:0 30px 70px -30px rgba(22,32,42,.6)}
#fm .chatpanel.open{display:flex}
#fm .chathead{background:var(--ink);color:#fff;padding:16px 18px;display:flex;align-items:center;gap:12px}
#fm .chathead img{width:40px;height:40px;border-radius:50%;object-fit:cover;background:var(--sand);flex:none}
#fm .chathead b{font-size:15px}
#fm .chathead span{font-size:12.5px;color:rgba(255,255,255,.72)}
#fm .chathead .x{margin-left:auto;width:40px;height:40px;flex:none;border-radius:50%;background:rgba(255,255,255,.12);display:grid;place-items:center}
#fm .chatlog{flex:1;overflow-y:auto;padding:18px;display:flex;flex-direction:column;gap:12px;background:var(--bg)}
#fm .bub-bot,#fm .bub-me{max-width:84%;padding:12px 15px;font-size:14.5px;line-height:1.55;border-radius:18px;white-space:pre-wrap}
#fm .bub-bot{background:#fff;border:1px solid var(--line);border-bottom-left-radius:5px;align-self:flex-start}
#fm .bub-me{background:var(--teal);color:#fff;border-bottom-right-radius:5px;align-self:flex-end}
#fm .bub-bot a{color:var(--teal);font-weight:700;text-decoration:underline}
#fm .quicks{display:flex;flex-wrap:wrap;gap:8px;align-self:flex-start}
#fm .quick{border:1px solid var(--line);background:#fff;border-radius:999px;padding:0 15px;min-height:40px;
  display:inline-flex;align-items:center;font-size:13px;font-weight:700}
#fm .quick:hover{border-color:var(--teal);color:var(--teal)}
#fm .chatform{display:flex;gap:9px;padding:14px;border-top:1px solid var(--line);background:#fff}
#fm .chatform input{flex:1;min-width:0;border:1px solid var(--line);border-radius:999px;padding:12px 16px;
  font-size:16px;background:var(--bg)}
#fm .chatform input:focus{outline:2px solid var(--teal);outline-offset:1px}
#fm .send{width:46px;height:46px;border-radius:50%;background:var(--teal);color:#fff;display:grid;place-items:center;flex:none}

/* ── Booking ──────────────────────────────────────────────────────────── */
#fm .crumb{font-size:13.5px;color:var(--muted);padding-top:26px}
#fm .crumb a:hover{color:var(--teal)}
#fm .bookgrid{display:grid;grid-template-columns:1.35fr .9fr;gap:24px;margin-top:32px}
#fm .calcard{background:#fff;border:1px solid var(--line);border-radius:26px;padding:26px}
#fm .stephead{display:flex;align-items:center;gap:11px;margin:26px 0 14px}
#fm .stephead:first-child{margin-top:0}
#fm .stephead .n{width:28px;height:28px;border-radius:50%;background:var(--teal-soft);color:var(--teal);
  display:grid;place-items:center;font-weight:800;font-size:13px;flex:none}
#fm .stephead h3{font-size:19px}
#fm .svcpick{display:grid;grid-template-columns:1fr 1fr;gap:12px}
#fm .svcopt{border:1.5px solid var(--line);border-radius:16px;padding:15px;text-align:left;transition:border-color .2s ease,background .2s ease}
#fm .svcopt b{display:block;font-size:15px;font-weight:800}
#fm .svcopt span{font-size:13px;color:var(--muted)}
#fm .svcopt[aria-pressed="true"]{border-color:var(--teal);background:var(--teal-soft)}
#fm .monthbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
#fm .monthbar b{font-size:16px;font-weight:800}
#fm .mbtn{width:40px;height:40px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center}
#fm .mbtn[disabled]{opacity:.35;pointer-events:none}
#fm .dow{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
#fm .dow span{text-align:center;font-size:11.5px;font-weight:800;color:var(--muted);letter-spacing:.04em}
#fm .grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
#fm .day{height:54px;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  font-size:14.5px;font-weight:700;background:var(--bg);border:1px solid transparent;transition:background .15s ease}
#fm .day .pip{width:5px;height:5px;border-radius:50%;background:var(--teal)}
#fm .day.blank{background:transparent;pointer-events:none}
#fm .day.closed,#fm .day.past{background:transparent;color:#B3BAC2;text-decoration:line-through;pointer-events:none}
#fm .day.full .pip{background:var(--coral)}
#fm .day.today{border:1.5px dashed var(--teal)}
#fm .day.sel{background:var(--ink);color:#fff}
#fm .day.sel .pip{background:#fff}
#fm .day:not(.closed):not(.past):not(.sel):hover{background:var(--teal-soft)}
#fm .legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:12px;font-size:12.5px;color:var(--muted)}
#fm .legend i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;vertical-align:middle}
#fm .slotgroup{margin-top:16px}
#fm .slotgroup h4{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:9px;font-family:var(--sans)}
#fm .slots{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:9px}
#fm .slot{height:46px;border-radius:12px;border:1.5px solid var(--teal);color:var(--teal);font-weight:700;font-size:14px}
#fm .slot:hover{background:var(--teal-soft)}
#fm .slot[aria-pressed="true"]{background:var(--teal);color:#fff}
#fm .slot.booked{border-color:var(--line);color:#A9B1B9;text-decoration:line-through;pointer-events:none;
  background:repeating-linear-gradient(45deg,transparent,transparent 5px,rgba(22,32,42,.06) 5px,rgba(22,32,42,.06) 10px)}
#fm .slot.gone{border-color:var(--line);color:#C2C8CE;pointer-events:none}
#fm .statusnote{display:flex;gap:10px;align-items:flex-start;margin-top:18px;padding:13px 15px;
  background:var(--bg);border-radius:14px;font-size:13.5px;color:var(--muted)}
#fm .statusnote i{width:9px;height:9px;border-radius:50%;flex:none;margin-top:6px;background:#E0A21B}
#fm .statusnote.live i{background:#1DB954}
#fm .previewtoggle{display:flex;align-items:center;gap:10px;margin-top:12px;font-size:13.5px;color:var(--muted);
  min-height:44px;cursor:pointer}
#fm .previewtoggle input{width:22px;height:22px;flex:none;accent-color:var(--teal)}
#fm .summary{background:var(--ink);color:#fff;border-radius:26px;padding:26px;position:sticky;top:92px}
#fm .summary h3{font-size:21px;color:#fff;margin-bottom:16px}
#fm .srow{display:flex;justify-content:space-between;gap:14px;padding:11px 0;border-bottom:1px solid rgba(255,255,255,.12);font-size:14.5px}
#fm .srow span{color:rgba(255,255,255,.6)}
#fm .srow b{font-weight:700;text-align:right}
#fm .summary .acts{display:grid;gap:10px;margin-top:20px}
#fm .summary .btn-out{border-color:rgba(255,255,255,.28);color:#fff}
#fm .summary .btn-out:hover{border-color:#fff;color:#fff}
#fm .hint{font-size:13.5px;color:rgba(255,255,255,.62);margin-top:14px}
#fm .howto{counter-reset:s;display:grid;gap:9px;margin-top:22px;font-size:13.5px;color:var(--muted)}
/* Not flex. A flex row turns every child into a column of its own, so the
   moment a step contained two <b> elements the sentence came apart into four
   narrow columns. Absolute-positioning the number lets the text just be text. */
#fm .howto li{display:block;position:relative;padding-left:21px}
#fm .howto li::before{counter-increment:s;content:counter(s) ".";position:absolute;left:0;top:0;
  font-weight:800;color:var(--teal)}
#fm details.how{margin-top:26px;background:#fff;border:1px solid var(--line);border-radius:18px;padding:18px 22px}
#fm details.how summary{font-weight:800;cursor:pointer}
#fm details.how p{margin-top:12px;font-size:14px;color:var(--muted)}
#fm .toast{position:fixed;left:50%;transform:translateX(-50%);bottom:96px;z-index:60;background:var(--ink);color:#fff;
  padding:13px 20px;border-radius:999px;font-size:14px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .25s ease}
#fm .toast.show{opacity:1}

/* ── Gallery ──────────────────────────────────────────────────────────── */
#fm .filters{display:flex;flex-wrap:wrap;gap:9px;margin:26px 0 30px}
#fm .filt{border:1px solid var(--line);background:#fff;border-radius:999px;padding:10px 18px;font-size:14px;font-weight:700}
#fm .filt[aria-pressed="true"]{background:var(--ink);color:#fff;border-color:var(--ink)}
#fm .masonry{columns:4 240px;column-gap:14px}
#fm .masonry figure{break-inside:avoid;margin:0 0 14px;position:relative;border-radius:18px;overflow:hidden;background:var(--sand);cursor:zoom-in}
#fm .masonry img{width:100%;display:block;transition:transform .4s ease}
#fm .masonry figure:hover img{transform:scale(1.04)}
#fm .masonry figcaption{position:absolute;left:0;right:0;bottom:0;padding:26px 14px 12px;color:#fff;font-size:13px;font-weight:600;
  background:linear-gradient(to top,rgba(14,20,26,.78),transparent)}
#fm .baBadge{position:absolute;top:12px;left:12px;background:var(--coral);color:#fff;border-radius:999px;
  padding:5px 11px;font-size:11px;font-weight:800;letter-spacing:.06em}
#fm .lb{position:fixed;inset:0;z-index:70;background:rgba(14,20,26,.92);display:none;
  align-items:center;justify-content:center;flex-direction:column;gap:16px;padding:24px}
#fm .lb.open{display:flex}
#fm .lb img{max-height:82vh;max-height:82dvh;max-width:100%;border-radius:14px}
#fm .lb .cap{color:#fff;font-size:14.5px;text-align:center}
#fm .lb .x,#fm .lb .pv,#fm .lb .nx{position:absolute;width:48px;height:48px;border-radius:50%;
  background:rgba(255,255,255,.14);color:#fff;display:grid;place-items:center}
#fm .lb .x{top:20px;right:20px}
#fm .lb .pv{left:20px;top:50%;transform:translateY(-50%)}
#fm .lb .nx{right:20px;top:50%;transform:translateY(-50%)}

/* ── Forms ────────────────────────────────────────────────────────────── */
#fm .formgrid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
#fm .field{display:flex;flex-direction:column;gap:7px}
#fm .field.full{grid-column:1/-1}
#fm .field label{font-size:13.5px;font-weight:800}
/* 16px is not a taste call. Mobile Safari zooms the page in whenever a text
   field smaller than 16px takes focus, and it does not zoom back out — so a
   15px input means every person filling this form on an iPhone ends up on a
   page scrolled sideways, with the submit button off-screen. */
#fm .field input,#fm .field select,#fm .field textarea{border:1px solid var(--line);border-radius:14px;
  padding:13px 15px;font-size:16px;background:var(--bg);min-height:50px;width:100%;max-width:100%}
#fm .field textarea{min-height:130px;resize:vertical}
/* A date input on iOS ignores width unless it is told to be a block. */
#fm .field input[type="date"]{-webkit-appearance:none;appearance:none;display:block}
#fm .field input:focus,#fm .field select:focus,#fm .field textarea:focus{outline:2px solid var(--teal);outline-offset:1px}
#fm .err{color:var(--coral);font-size:13px;font-weight:700;min-height:0}
#fm .radios{display:flex;gap:9px;flex-wrap:wrap}
#fm .radio{border:1.5px solid var(--line);border-radius:999px;padding:10px 18px;font-size:14px;font-weight:700}
#fm .radio[aria-pressed="true"]{border-color:var(--teal);background:var(--teal-soft);color:var(--teal)}
#fm .okpanel{display:none;background:var(--teal-soft);border:1px solid var(--teal);border-radius:20px;padding:24px}
#fm .okpanel.show{display:block}
#fm .sidecards{display:grid;gap:16px;align-content:start;min-width:0}
/* The inquiries page used to set this ratio with an inline style, which beat
   the phone media query below and pushed the whole right-hand column — Jay's
   phone number, his hours, the parking photo — off the side of the screen,
   where `overflow-x:hidden` quietly swallowed it. A class can be overridden;
   an inline style cannot. */
#fm .askgrid{grid-template-columns:1.3fr .9fr}
#fm .formcard{border-radius:26px;padding:28px}

/* ── Placeholder art (used until Jay's real photos are dropped in) ────── */
#fm .ph{width:100%;height:100%;min-height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:6px;background:repeating-linear-gradient(45deg,#EFE6DA,#EFE6DA 12px,#E8DED0 12px,#E8DED0 24px);
  color:#8A7F71;text-align:center;padding:16px}
#fm .ph b{font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}
#fm .ph span{font-size:12px;line-height:1.4;max-width:26ch}
#fm .masonry .ph{aspect-ratio:4/5}

/* ── Responsive ───────────────────────────────────────────────────────── */
@media (max-width:980px){
  #fm .hero{grid-template-columns:1fr;gap:40px;padding-top:40px}
  #fm .bookgrid,#fm .askgrid{grid-template-columns:1fr}
  #fm .summary{position:static}
  #fm .about{grid-template-columns:1fr;padding:28px}
  #fm .visit{grid-template-columns:1fr}
  #fm .rev{flex-basis:calc((100% - 18px)/2)}
  #fm .steps{grid-template-columns:1fr 1fr}
  #fm .mosaic{grid-template-columns:1fr 1fr;grid-auto-rows:170px}
}
@media (max-width:860px){
  #fm .nav{display:none}
  #fm .burger{display:flex}
}
@media (max-width:760px){
  /* The header had a "Book now" button that, on a 390px screen, sat straight
     on top of the wordmark — the brand read "The Fade [Book now] lon". It is
     also the third Book-now on screen: the sticky bar at the bottom of every
     phone page already carries one, and that one is closer to the thumb. */
  #fm .hdr-cta{display:none}
  #fm .brand img{height:38px}
  #fm .wordmark{font-size:18px}
}
@media (max-width:400px){
  #fm .brand img{height:32px}
  #fm .brand{gap:9px}
  #fm .wordmark{font-size:16.5px}
}
@media (max-width:340px){
  /* Original iPhone SE width. Below this the logo and the wordmark cannot
     share the row with the menu button without one running under the other,
     and a brand that overlaps a button looks broken in a way a missing
     wordmark does not. The logo is the salon's own mark, so the logo stays. */
  #fm .wordmark{display:none}
  #fm .brand img{height:38px}
}
@media (max-width:760px){
  #fm .sec{padding:64px 0}
  #fm .svc-grid{grid-template-columns:1fr}
  #fm .svcpick{grid-template-columns:1fr}
  #fm .formgrid{grid-template-columns:1fr}
  #fm .formcard{padding:22px}
  #fm .rev{flex-basis:86%}
  #fm .masonry{columns:2 150px}
  #fm .mbar{display:flex}
  #fm .chatbtn{bottom:88px;padding:13px;right:16px}
  #fm .chatbtn .lbl{display:none}
  #fm .cta{padding:32px;border-radius:28px}
  #fm .ftr{padding-bottom:110px}
  #fm .toast{bottom:150px}
  /* A 380px floating card inside a 390px screen is a worse chat window than a
     sheet. On a phone it takes the screen, sitting above the booking bar. */
  #fm .chatpanel{left:0;right:0;bottom:0;width:auto;max-width:none;
    height:auto;top:0;max-height:none;border-radius:0}
  #fm .chatlog{padding:16px}
  #fm .chatform{padding:12px 14px calc(12px + env(safe-area-inset-bottom))}
  #fm .bub-bot,#fm .bub-me{max-width:88%}
  /* Every action button goes full width once they are stacked — a row of
     half-width buttons on a phone is how you mis-tap "Confirm on Square". */
  #fm .summary .acts .btn{width:100%}
  #fm .hero-actions .btn,#fm .okpanel .btn{flex:1 1 100%}
}
@media (max-width:420px){
  #fm .wrap{padding:0 16px}
  #fm .trust{gap:18px}
  #fm .pricecard{padding:20px;border-radius:22px}
  #fm .pricecard .incl ul{grid-template-columns:1fr}
  #fm .pricerow .amt{font-size:32px}
  /* The calendar is seven columns inside a card inside a padded page, and each
     layer of padding comes straight off the width of a day. Trimming the card
     to 16px is what takes a day cell from 38px to a thumb-sized 43px. */
  #fm .calcard,#fm .summary{padding:16px}
  #fm .grid,#fm .dow{gap:5px}
  #fm .day{height:56px;border-radius:12px}
  #fm .slots{grid-template-columns:repeat(auto-fill,minmax(88px,1fr))}
  #fm .slot{height:48px}
  #fm .formcard{padding:18px}
  #fm .cta{padding:26px}
  #fm .h-page{font-size:clamp(34px,9vw,44px)}
}
@media (prefers-reduced-motion:reduce){
  #fm *,#fm *::before,#fm *::after{animation:none!important;transition:none!important}
  #fm .rv{opacity:1;transform:none}
}
