/* ==========================================================================
   Semi-permanent brows & lip blush — Burnley
   --------------------------------------------------------------------------
   The design is not invented. It is Alison's own Facebook poster turned into
   a site, and every device below comes off one of her two SPMU posters:

     · gold and cream, and nothing else
     · a photograph bleeding down one side with a soft painted edge
     · small tracked caps over a large serif word, a script line beneath
     · a heart sitting on a hairline as the divider
     · a circular price roundel with a gold ring
     · thin outline icons in soft filled circles
     · a brush band closing the page: script sign-off, then
       NATURAL · ENHANCED · EFFORTLESS / BOOK YOUR APPOINTMENT TODAY

   Two standing rules, both from Andy: NO arched image frames, and no colour
   outside the gold/cream family.
   ========================================================================== */

:root {
  /* ======================================================================
     PALETTE — cream and gold, with one berry for action.
     Every colour below has exactly one job. Nothing else is allowed on the
     page. Four golds, five creams and three inks is what "a random assortment
     of colours" looked like; this is the whole set.
     ====================================================================== */

  /* grounds — a light cream and a dark cream, and the dark footer.
     Both are CREAM: hue ~43 degrees with the blue channel kept high. The moment
     the blue drops away it stops being cream and becomes sand or tan, which is
     what --sand #F1E7D3 and --taupe #E4D5B4 were. The two creams sit 10% apart
     in lightness so the change reads as a decision, not as a seam — the old
     pair were 2% apart, which is why the page looked either flat or random. */
  --cream:   #FDFAF2;   /* light cream — the page */
  --cream-d: #F4EEDE;   /* dark cream — alternating bands */
  --cream2:  #FFFDF8;   /* lightest — cards, so they lift off either band */
  --foot:    #241E15;   /* the footer, and only the footer */

  /* gold — two, one decorative and one that has to pass contrast */
  --gold:   #C9A64F;   /* hairlines, the ampersand, the script */
  --gold-d: #7D641B;   /* gold that carries text: links, tracked labels */

  /* berry — the action colour, from the sister salon. Buttons, and the heart */
  --rose:   #B32B50;
  --rose-d: #831F3B;   /* its hover only */

  /* ink — three, by weight of voice */
  --ink:    #1C1512;   /* headings */
  --body:   #55493B;   /* running text */
  --mut:    #6E644A;   /* small tracked labels and fineprint */

  /* Every rule on the site. This was #DCCBA8 — a tan, and the beige that kept
     showing up everywhere. A rule on this brand is a faint GOLD hairline, not
     a beige one, so it is the gold at low opacity and nothing else. */
  --line:   rgba(201, 166, 79, .38);

  --d: "Cormorant Garamond", Georgia, serif;
  --s: Lato, system-ui, -apple-system, sans-serif;
/* Brittany Signature is a paid font and needs a webfont licence plus the
   .woff2 before it can go on a live site. Allura is the stand-in —
   swap this one line when the real file arrives. */
/* Placeholder only — Andy is having a custom script cut to match the brand
   lockup. Drop the .woff2 into assets-src/fonts/ and this is overridden
   automatically by the @font-face build.py emits. */
/* Pinyon Script — the face from the gold-and-cream direction board this
   site was signed off from. Overridden automatically if a custom .woff2
   is dropped into assets-src/fonts/. */
  --scr: Parisienne, "Apple Chancery", cursive;
  --sc: "Cormorant SC", "Cormorant Garamond", Georgia, serif;

  /* type scale — nothing on the site sets a size outside these */
  --t-display: clamp(50px, 7.4vw, 90px);   /* the poster word */
  --t-1:       clamp(30px, 3.6vw, 44px);   /* section headings */
  --t-2:       clamp(21px, 2.2vw, 26px);   /* sub-heads, quotes, prices */
  --t-3:       20px;                       /* small headings, facts */
  --t-lede:    19px;
  --t-body:    17px;
  --t-sm:      16px;
  --t-label:   12px;                       /* tracked caps */
  --t-fine:    14px;
  --t-scr:     clamp(28px, 3.5vw, 44px);   /* script, in copy */
  --t-scr-lg:  clamp(42px, 5.6vw, 74px);   /* script, her name */
  --t-wm:      clamp(34px, 6.2vw, 76px);   /* the wordmark */

  --wrap: 1180px;
  --gut: clamp(20px, 4.5vw, 48px);
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--cream);
  color: var(--body);
  font-family: var(--s);
  font-weight: 400;
  font-size: var(--t-body);
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
}

img, picture { max-width: 100%; }
picture { display: block; }
picture img { display: block; width: 100%; height: 100%; object-fit: cover; }
a { color: inherit; }

.wrap { width: 100%; max-width: var(--wrap); margin: 0 auto; padding: 0 var(--gut); }

.skip { position: absolute; left: -9999px; top: 0; background: var(--ink); color: #fff;
  padding: 12px 18px; z-index: 200; }
.skip:focus { left: 0; }
:focus-visible { outline: 2px solid var(--gold-d); outline-offset: 3px; }

/* --------------------------------------------------------------------------
   Type
   -------------------------------------------------------------------------- */

.d { font-family: var(--d); font-weight: 600; color: var(--ink); }
.scr { font-family: var(--scr); font-weight: 400; line-height: .95;
  color: var(--gold-d); }

h1, h2, h3, h4 { font-family: var(--d); font-weight: 600; color: var(--ink); margin: 0 0 .5em; }
h1 { font-size: var(--t-1); line-height: 1.08; letter-spacing: .04em;
  text-transform: uppercase; }
h2 { font-size: var(--t-1); line-height: 1.14; letter-spacing: .04em; }
h3 { font-size: var(--t-2); line-height: 1.2; }
h4 { font-size: var(--t-3); line-height: 1.24; }

p { margin: 0 0 1.05em; }
p:last-child { margin-bottom: 0; }

.caps { font: 400 var(--t-label)/1.6 var(--s); letter-spacing: .34em; text-transform: uppercase;
  color: var(--mut); margin: 0 0 1em; }
.lede { font-size: var(--t-lede); line-height: 1.8; color: var(--body); max-width: 44ch; }
.fineprint { font-size: var(--t-fine); line-height: 1.6; color: var(--mut); }

.lnk { color: var(--gold-d); font-weight: 400; text-decoration: none;
  border-bottom: 1px solid rgba(150,121,47,.4); padding-bottom: 2px; }
.lnk:hover { border-bottom-color: var(--gold-d); }

/* the heart divider */
.hr { display: flex; align-items: center; justify-content: center; gap: 16px;
  margin: 22px 0; max-width: 240px; }
.hr.c { margin-left: auto; margin-right: auto; }
.hr::before, .hr::after { content: ""; flex: 1; height: 1px; background: var(--line); }
.hr svg { width: 12px; height: 12px; flex: none; fill: var(--rose); }
/* Repeated on every section the heart read as twee. Section rules are a
   plain gold hairline; the heart is kept for the masthead and sign-off. */
.head .hr svg { display: none; }
.head .hr { max-width: 90px; gap: 0; }
.head .hr::before, .head .hr::after { background: var(--gold); }

/* --------------------------------------------------------------------------
   Buttons
   -------------------------------------------------------------------------- */

.btn { display: inline-block; font: 400 var(--t-label)/1 var(--s); letter-spacing: .26em;
  text-transform: uppercase; padding: 19px 34px; text-decoration: none;
  margin: 0 10px 10px 0; border-radius: 0; border: 1px solid transparent;
  cursor: pointer; transition: background .2s, color .2s, border-color .2s; }
.b1 { background: var(--rose); color: #fff; border-color: var(--rose);
  border-radius: 999px; }
.b1:hover { background: var(--rose-d); border-color: var(--rose-d); color: #fff; }
.b2 { background: transparent; color: var(--ink); border-color: var(--gold);
  border-radius: 999px; }
.b2:hover { background: var(--ink); color: var(--cream2); border-color: var(--ink); }
.b3 { background: transparent; color: var(--ink); border-color: var(--ink);
  border-radius: 999px; }
.b3:hover { background: var(--ink); color: var(--cream2); }

/* --------------------------------------------------------------------------
   Header
   -------------------------------------------------------------------------- */

.top { background: var(--ink); color: var(--gold); text-align: center; padding: 10px;
  font: 400 var(--t-label)/1.5 var(--s); letter-spacing: .3em; text-transform: uppercase; }
.top a { color: inherit; }

.mast { text-align: center; padding: 38px 0 0; position: relative; }
.wm { display: inline-block; font-family: var(--sc); font-weight: 700;
  font-size: var(--t-wm); line-height: 1; letter-spacing: .015em;
  margin: 0; color: var(--ink); text-decoration: none; white-space: nowrap; }
.wm .amp { font-family: var(--d); font-weight: 600; color: var(--gold);
  font-size: 1.04em; letter-spacing: 0; padding: 0 .1em; }
/* Her name is the trust signal, so it gets the script face and real size —
   not a caption. The keyword wordmark wins the search; her name wins the room. */
.wm2 { display: block; font-family: var(--scr); font-weight: 400;
  font-size: var(--t-scr-lg); line-height: 1.12; color: var(--gold-d);
  margin-top: 2px; }
/* "by" is a separate word, so it needs a real word-space — at .2em it was
   touching the A of Alison. */
.wm2 i { font-family: var(--s); font-style: normal; font-size: .26em;
  letter-spacing: .08em; text-transform: none; color: var(--mut);
  display: inline-block; transform: translateY(-.75em); margin-right: .55em; }
.wm3 { display: block; font: 400 var(--t-label)/1 var(--s); letter-spacing: .36em;
  text-transform: uppercase; color: var(--mut); margin-top: 16px; text-indent: .36em; }

/* When the real logo artwork is present it replaces the type lockup. */
.wm-img { display: inline-block; max-width: min(520px, 80vw); }
.wm-img img { width: 100%; height: auto; }
.foot .wm-img { max-width: 250px; }

.burger { display: none; position: absolute; left: 0; top: 26px; width: 40px; height: 32px;
  background: none; border: 0; cursor: pointer; padding: 6px 4px;
  flex-direction: column; justify-content: space-between; }
.burger span { display: block; height: 1px; background: var(--ink); }

.nav { }
.nav-in { display: flex; justify-content: center; align-items: center;
  flex-wrap: wrap; gap: 28px; padding: 4px 0 26px; }
/* The dropdown items are <button>s and the rest are <a>s. Left to the UA
   defaults the buttons' text baseline sits ~5px lower than the links', so the
   row reads as not level. Give both the identical box. */
.navgrp { display: flex; align-items: center; }
.nav a, .navgrp > button { display: block; padding: 6px 0; margin: 0;
  font: 400 var(--t-label)/1.6 var(--s); letter-spacing: .2em; text-transform: uppercase;
  color: var(--ink); text-decoration: none; background: none; border: 0;
  cursor: pointer; text-align: inherit; }

.navgrp { position: relative; }
.navgrp .sub { position: absolute; top: 100%; left: 50%; transform: translateX(-50%);
  background: var(--cream2); border: 1px solid var(--line); min-width: 250px;
  padding: 8px 0; display: none; z-index: 60; box-shadow: 0 18px 40px rgba(74,59,44,.1); }
.navgrp:hover .sub, .navgrp.open .sub { display: block; }
.navgrp .sub a { display: block; padding: 9px 20px; letter-spacing: .1em;
  text-transform: none; font-size: var(--t-sm); }
.navgrp .sub a:hover { background: var(--cream2); }

/* --------------------------------------------------------------------------
   The poster block — photo one side, type stack the other
   -------------------------------------------------------------------------- */

.poster { position: relative; display: grid; grid-template-columns: 1fr 46%;
  align-items: stretch; min-height: 640px; background: var(--cream); }
.poster.flip { grid-template-columns: 46% 1fr; }
.poster .pic { position: relative; overflow: hidden; }
/* The <picture> has no intrinsic height, so left in flow it sizes to the
   image's own aspect ratio and drags the whole grid row with it — a tall
   portrait photo made the brows block nearly twice the height of the lips
   one. Taking it out of flow pins every poster to min-height instead. */
.poster .pic picture { position: absolute; inset: 0; }
.poster .pic img { object-position: center 40%; }
/* the painted edge where photo meets cream */
.poster .pic::before { content: ""; position: absolute; top: 0; bottom: 0; left: -2px;
  width: 130px; z-index: 2; background: linear-gradient(90deg, var(--cream) 0%,
    rgba(251,247,238,.88) 26%, rgba(251,247,238,.45) 58%, transparent 100%); }
.poster.flip .pic::before { left: auto; right: -2px;
  background: linear-gradient(270deg, var(--cream) 0%, rgba(251,247,238,.88) 26%,
    rgba(251,247,238,.45) 58%, transparent 100%); }
.poster .txt { position: relative; z-index: 3; display: flex; flex-direction: column;
  justify-content: center; padding: 60px 52px 60px 0; }
.poster.flip .txt { padding: 60px 0 60px 52px; order: 2; }
.poster.flip .pic { order: 1; }
.poster .inner-w { max-width: var(--wrap); margin: 0 auto; width: 100%;
  padding: 0 var(--gut); }
.poster .txt .inner-w { padding-right: 0; }
.poster.flip .txt .inner-w { padding-left: 0; padding-right: var(--gut); }

.big { font-family: var(--d); font-weight: 700; font-size: var(--t-display);
  line-height: .92; letter-spacing: .04em; text-transform: uppercase;
  color: var(--ink); margin: 6px 0 0; }
.lead-scr { font-family: var(--scr); font-size: var(--t-scr); line-height: 1;
  color: var(--gold-d); margin: 10px 0 0; }
.blurb { font-size: var(--t-lede); line-height: 1.8; max-width: 40ch; margin: 18px 0 0; }
.blurb b { font-weight: 700; color: var(--gold-d); }

/* price roundel */
/* A filled dark disc reads as a sale badge. An outline in one gold hairline
   keeps her poster's device and loses the sticker. */
.roundel { position: relative; width: 156px; height: 156px; border-radius: 50%;
  background: transparent; color: var(--ink); display: grid; place-content: center;
  text-align: center; margin: 26px 0 0; border: 1px solid var(--gold); }
.roundel.light { background: transparent; color: var(--ink); }
.roundel .lbl, .roundel.light .lbl { font: 400 var(--t-label)/1 var(--s); letter-spacing: .36em;
  text-transform: uppercase; color: var(--mut); }
.roundel .amt { font-family: var(--d); font-weight: 600; font-size: var(--t-1); line-height: 1;
  margin: 9px 0 0; }
.rd-row { display: flex; align-items: center; gap: 28px; flex-wrap: wrap; }

/* --------------------------------------------------------------------------
   Interior page hero
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   Interior page hero
   --------------------------------------------------------------------------
   Was a narrow text column with a small framed thumbnail and a large void to
   the right, on every page except the home page — which is what "all the pages
   are weak" looked like. Same structure as the home hero now: text in the
   content column, photograph bleeding to the viewport edge.
   -------------------------------------------------------------------------- */

.ph { border-bottom: 1px solid var(--line); overflow: hidden;
  padding: 0; }
.ph-in { display: grid; align-items: center; gap: 0;
  max-width: none; padding: 0; }
.ph.has-img .ph-in { grid-template-columns: minmax(0, 1fr) minmax(0, 40vw); }
.ph .ph-x { padding: clamp(30px, 4vw, 54px) clamp(28px, 4vw, 56px)
  clamp(30px, 4vw, 54px)
  max(var(--gut), calc((100vw - var(--wrap)) / 2 + var(--gut))); }
/* NOT ch — in this display face 1ch is the width of a digit, so 18ch came out
   at 378px, narrower than the single word "Semi-permanent" (401px). Every
   location title stacked four and five lines deep. em tracks the clamped
   heading size properly, and balance evens the rag. */
.ph h1 { max-width: 16em; text-wrap: balance; }
.ph .lede { max-width: 46ch; }
.ph-img { position: relative; align-self: stretch;
  min-height: clamp(300px, 30vw, 430px); }
.ph-img picture { position: absolute; inset: 0; }
.ph-img img { width: 100%; height: 100%; object-fit: cover;
  object-position: center 32%; }

@media (max-width: 860px) {
  .ph.has-img .ph-in { grid-template-columns: 1fr; }
  .ph .ph-x { padding: clamp(24px,5vw,36px) var(--gut); }
  .ph h1, .ph .lede { max-width: none; }
  .ph-img { min-height: 240px; }
}

.crumb { font: 400 var(--t-label)/1.6 var(--s); letter-spacing: .22em; text-transform: uppercase;
  color: var(--mut); margin-bottom: 1.6em; }
.crumb a { color: var(--mut); text-decoration: none; }
.crumb a:hover { color: var(--gold-d); }
.crumb span { padding: 0 8px; color: var(--line); }

/* facts strip */
.facts { border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  background: var(--cream2); }
.facts-in { display: grid; grid-template-columns: repeat(3, 1fr); }
.facts-in > div { padding: 24px 28px 24px 0; border-right: 1px solid var(--line); }
.facts-in > div:last-child { border-right: 0; padding-right: 0; }
.fk { display: block; font: 400 var(--t-label)/1 var(--s); letter-spacing: .3em;
  text-transform: uppercase; color: var(--gold-d); margin-bottom: 9px; }
.fv { display: block; font-family: var(--d); font-weight: 600;
  font-size: var(--t-2); line-height: 1.2; color: var(--ink); }
.fn { display: block; margin-top: 7px; font-size: var(--t-fine); color: var(--mut); }

/* Her real before-and-after — the most persuasive thing on the site */
.ba { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(20px, 3vw, 40px);
  max-width: 940px; margin: 0 auto; }
.ba figure { margin: 0; position: relative; border: 1px solid var(--gold);
  padding: 10px; background: var(--cream2); }
.ba img { aspect-ratio: 4 / 3; }
.ba-tag { position: absolute; top: 22px; left: 22px; z-index: 2; background: var(--cream2);
  color: var(--mut); font: 400 var(--t-label)/1 var(--s); letter-spacing: .3em; text-transform: uppercase;
  padding: 8px 12px; }
.ba-tag.after { color: var(--gold-d); }
.ba-note { text-align: center; max-width: 58ch; margin: 30px auto 0; font-size: var(--t-sm);
  color: var(--mut); line-height: 1.7; }
@media (max-width: 780px) { .ba { grid-template-columns: 1fr; } }

/* meet Alison — the one photograph of a person on the site */
.meet { display: grid; grid-template-columns: .48fr 1fr; gap: clamp(28px, 4.4vw, 60px);
  align-items: center; }
.meet-im { border: 1px solid var(--gold); padding: 10px; background: var(--cream);
  max-width: 330px; }
.meet-im img { aspect-ratio: 4 / 5; }
.meet h2 { margin-bottom: 0; }
/* Her name in the flourished script, same face as the masthead lockup. */
.meet h2.name-scr { font-family: var(--scr); font-weight: 400;
  font-size: var(--t-scr-lg); line-height: 1.1; color: var(--gold-d);
  letter-spacing: 0; text-transform: none; }

.meet .hr { margin: 18px 0 20px; }
@media (max-width: 900px) {
  .meet { grid-template-columns: 1fr; }
  .meet-im { max-width: 340px; }
}

/* --------------------------------------------------------------------------
   Sections
   -------------------------------------------------------------------------- */

section { padding: clamp(58px, 7vw, 96px) 0; position: relative; }



.head { text-align: center; margin-bottom: 48px; }
.head .caps { margin-bottom: 10px; }
.head h2 { margin: 0; }
/* Serif italic, not the script — the script is reserved for her name and the
   two lines taken straight off her poster. */
.head h2 .sub-line { display: block; font-family: var(--d); font-weight: 400;
  font-style: italic; font-size: .62em; color: var(--gold-d); text-transform: none;
  letter-spacing: .01em; margin-top: 10px; }
.head p { color: var(--body); font-size: var(--t-lede); margin: 14px auto 0; max-width: 58ch; }
.head.left { text-align: left; }
.head.left p { margin-left: 0; }

.prose { max-width: 68ch; }
.prose h2 { font-size: var(--t-2); text-transform: none; letter-spacing: .02em;
  margin: 1.9em 0 .5em; }
.prose ul { padding-left: 0; }

.strip { background: var(--cream); color: var(--mut); text-align: center;
  padding: 22px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  font: 400 var(--t-label)/1.8 var(--s); letter-spacing: .38em; text-transform: uppercase; }
.strip i { color: var(--rose); font-style: normal; padding: 0 18px; font-size: var(--t-label);
  vertical-align: .3em; }

/* --------------------------------------------------------------------------
   Treatment index
   -------------------------------------------------------------------------- */

.tx-list { border-top: 1px solid var(--line); }
.tx { display: grid; grid-template-columns: 128px 1fr auto 26px; align-items: center;
  gap: 30px; padding: 22px 0; border-bottom: 1px solid var(--line);
  text-decoration: none; color: inherit; transition: padding-left .25s; }
.tx-im { overflow: hidden; }
.tx-im img { aspect-ratio: 4 / 3; transition: transform .5s ease; }
.tx:hover .tx-im img { transform: scale(1.05); }
.tx:hover { padding-left: 10px; }


.tx-b h3 { margin-bottom: .18em; }
.tx-b p { font-size: var(--t-sm); color: var(--body); margin: 0; max-width: 58ch; }
.tx-p { font-family: var(--d); font-weight: 600; font-size: var(--t-2); white-space: nowrap;
  color: var(--ink); }
.tx-a { color: var(--gold-d); font-size: var(--t-3); text-align: right; }

/* six reasons */
.grid6 { display: grid; grid-template-columns: 1fr 1fr; gap: 26px 54px;
  max-width: 940px; margin: 0 auto; }
.rsn { display: grid; grid-template-columns: 62px 1fr; gap: 20px; align-items: start; }
.rsn .ic { width: 62px; height: 62px; border-radius: 50%; background: var(--line);
  display: grid; place-items: center; }
.rsn .ic svg { width: 26px; height: 26px; }
.rsn h4 { font-family: var(--s); font-weight: 700; font-size: var(--t-fine); line-height: 1.3;
  letter-spacing: .14em; text-transform: uppercase; color: var(--ink); margin: 8px 0 5px; }
.rsn p { font-size: var(--t-sm); line-height: 1.62; margin: 0; }

/* lip shades */
.swatches { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px;
  max-width: 840px; margin: 0 auto; }
.sh img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; }
.sh strong { display: block; text-align: center; font: 400 var(--t-label)/1.3 var(--s);
  letter-spacing: .2em; text-transform: uppercase; color: var(--ink); margin-top: 11px; }
.sh span { display: block; text-align: center; font-size: var(--t-fine); line-height: 1.5;
  color: var(--mut); margin-top: 6px; }

/* the promise block */
.pullquote { margin: 0 auto; max-width: min(760px, 90%); text-align: center; position: relative; }
.pullquote blockquote { margin: 0; font-family: var(--d); font-weight: 600;
  font-size: var(--t-1); line-height: 1.32; color: var(--ink); letter-spacing: .01em;
  /* it was breaking "Semi-permanent" across lines */
  hyphens: none; overflow-wrap: normal; text-wrap: balance; }
.pullquote blockquote em { font-family: var(--scr); font-style: normal; font-weight: 400;
  color: var(--gold-d); font-size: 1.3em; line-height: 1.1; }
.pullquote .mark { font-family: var(--d); font-size: 2.2em; line-height: 0; color: var(--gold);
  vertical-align: -.28em; margin-right: .06em; }
.pullquote figcaption { margin-top: 28px; font: 400 var(--t-label)/1.8 var(--s);
  letter-spacing: .3em; text-transform: uppercase; color: var(--mut); }
.pullquote figcaption .rule { display: block; width: 40px; height: 1px;
  background: var(--gold); margin: 0 auto 18px; }
.pullquote figcaption .scr { display: block; margin-top: 6px; font-size: var(--t-scr);
  letter-spacing: 0; text-transform: none; line-height: 1.2; }
.promise { text-align: center; }
.promise .q { font-family: var(--d); font-weight: 600; font-size: var(--t-1);
  line-height: 1.24; color: var(--ink); text-transform: uppercase;
  letter-spacing: .05em; max-width: 24ch; margin: 0 auto; }
.promise .q em { font-family: var(--scr); font-style: normal; font-weight: 400;
  color: var(--gold-d); font-size: 1.5em; line-height: 1.14; display: block;
  text-transform: none; letter-spacing: 0; margin-top: 8px; }
.promise .scr { font-size: var(--t-scr); line-height: 1.15; margin: 0; }

/* review */
.rev { text-align: center; }
.stars { display: flex; justify-content: center; gap: 7px; margin-bottom: 20px; }
.stars svg { width: 16px; height: 16px; fill: var(--gold); }
.rev blockquote { margin: 0 auto; max-width: 58ch; font-family: var(--d);
  font-weight: 400; font-size: var(--t-2); line-height: 1.6; color: var(--ink); }
.rev cite { display: block; margin-top: 22px; font: 400 var(--t-label)/1.6 var(--s);
  letter-spacing: .26em; text-transform: uppercase; color: var(--mut); font-style: normal; }

/* steps */
.steps { counter-reset: s; list-style: none; margin: 0 auto; padding: 0; max-width: 800px; }
.steps li { counter-increment: s; position: relative; padding: 0 0 22px 78px;
  margin-bottom: 22px; border-bottom: 1px solid var(--line); }
.steps li:last-child { border-bottom: 0; margin: 0; padding-bottom: 0; }
.steps li::before { content: counter(s, decimal-leading-zero); position: absolute;
  left: 0; top: -2px; width: 52px; height: 52px; border-radius: 50%;
  background: var(--line); display: grid; place-items: center;
  font-family: var(--d); font-weight: 600; font-size: var(--t-3); color: var(--ink); }
.steps h4 { margin: 6px 0 6px; letter-spacing: .02em; }
.steps p { font-size: var(--t-sm); margin: 0; }

/* tick lists */
.tick-list { list-style: none; margin: 0 0 1.3em; padding: 0; }
.tick-list li { position: relative; padding: 14px 0 14px 38px;
  border-bottom: 1px solid var(--line); font-size: var(--t-body); color: var(--body); }
.tick-list li::before { content: ""; position: absolute; left: 0; top: 25px;
  width: 20px; height: 1px; background: var(--gold); }
.tick-list.warn li::before { background: var(--line); }
.tick-list.tight li { font-size: var(--t-fine); padding: 7px 0 7px 30px; }

.hours { list-style: none; margin: 0; padding: 0; }
.hours li { display: flex; justify-content: space-between; gap: 14px;
  padding: 6px 0; font-size: var(--t-sm); border-bottom: 1px solid var(--line); color: var(--body); }
.hours.big li { font-size: var(--t-lede); padding: 11px 0; }

.chips { display: flex; flex-wrap: wrap; gap: 9px; }
.chip { display: inline-block; padding: 8px 16px;
  border: 1px solid var(--line); font-size: var(--t-fine); letter-spacing: .06em; text-decoration: none; color: var(--body); }
.chip:hover { border-color: var(--gold); color: var(--gold-d); }

/* guide cards */
.gcards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 30px; }
.gcard { text-decoration: none; color: inherit; display: flex;
  flex-direction: column; overflow: hidden; transition: border-color .2s; }
.gcard:hover { border-color: var(--gold); }
.gcard .gc-img { display: block; }
.gcard .gc-img img { aspect-ratio: 16 / 10; width: 100%; height: auto;
  object-fit: cover; transition: transform .5s ease; }
.gcard:hover .gc-img img { transform: scale(1.04); }
.gcard .gc-x { padding: 24px 26px 26px; display: flex; flex-direction: column;
  flex: 1; }
.gcard h3 { margin-bottom: .35em; }
.gcard p { font-size: var(--t-sm); margin-bottom: 1.2em; }
.gcard .lnk { margin-top: auto; align-self: flex-start; }
.g-im { display: block; overflow: hidden; margin-bottom: 16px;
  border: 1px solid var(--gold); padding: 8px; background: var(--cream2); }
.g-im img { aspect-ratio: 4 / 3; transition: transform .5s ease; }
.gcard:hover .g-im img { transform: scale(1.04); }
.gcard h3 { margin-bottom: .3em; }
.gcard p { font-size: var(--t-sm); color: var(--body); margin-bottom: .8em; }

/* tables */
.tbl-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch;
  max-width: 100%; }
.tbl { width: 100%; border-collapse: collapse; font-size: var(--t-sm); min-width: 540px; }
.tbl th, .tbl td { text-align: left; padding: 14px 18px 14px 0;
  border-bottom: 1px solid var(--line); vertical-align: top; }
.tbl thead th { font-family: var(--d); font-weight: 600; font-size: var(--t-3);
  border-bottom: 1px solid var(--ink); padding-bottom: 10px; }
.tbl thead th:first-child { width: 22%; }
.tbl tbody th { font-weight: 700; font-size: var(--t-label); letter-spacing: .14em;
  text-transform: uppercase; color: var(--mut); width: 22%; }
.tbl td { color: var(--body); }
.tbl.price tbody th { font-family: var(--d); font-weight: 600; font-size: var(--t-2);
  letter-spacing: 0; text-transform: none; color: var(--ink); width: 27%; }
.tbl.price tbody th a { text-decoration: none; }
.tbl.price tbody th a:hover { color: var(--gold-d); }
.tbl .pr { font-family: var(--d); font-weight: 600; font-size: var(--t-2); text-align: right;
  color: var(--ink); white-space: nowrap; padding-right: 0; }

.verdict { border-left: 2px solid var(--gold); padding: 4px 0 4px 26px;
  font-family: var(--d); font-weight: 600; font-size: var(--t-2);
  line-height: 1.55; color: var(--ink); }

/* FAQs */
.faqs details { border-bottom: 1px solid var(--line); padding: 4px 0; }
.faqs summary { cursor: pointer; list-style: none; padding: 16px 34px 16px 0;
  position: relative; font-family: var(--d); font-weight: 600;
  font-size: var(--t-2); line-height: 1.35; color: var(--ink); }
.faqs summary::-webkit-details-marker { display: none; }
.faqs summary::after { content: "+"; position: absolute; right: 4px; top: 15px;
  color: var(--gold-d); font-family: var(--s); font-size: var(--t-3); font-weight: 400; }
.faqs details[open] summary::after { content: "\2013"; }
.faqs details > div { padding: 0 40px 18px 0; }
.faqs details p { font-size: var(--t-body); color: var(--body); max-width: 66ch; }

/* --------------------------------------------------------------------------
   Capture
   -------------------------------------------------------------------------- */

.quiz-band { color: var(--body); text-align: center;
  border-top: 1px solid var(--gold); border-bottom: 1px solid var(--gold); }
.quiz-band h2 { color: var(--ink); }
.quiz-band h2 .sub-line { color: var(--gold-d); }
.quiz-band p { color: var(--body); max-width: 56ch; margin: 0 auto 26px; font-size: var(--t-lede); }
.quiz-band .caps { color: var(--gold-d); }

.cap { border-top: 1px solid var(--line); }
.cap-in { width: 100%; max-width: var(--wrap); margin: 0 auto;
  padding: clamp(44px, 5.4vw, 64px) var(--gut); }
.cap-note { color: var(--mut); font-size: var(--t-sm); max-width: 54ch; margin-bottom: 2em; }

.frm { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px 20px; }
.frm .f { display: block; }
.frm .f.wide { grid-column: 1 / -1; }
.frm .f > span { display: block; font: 400 var(--t-label)/1 var(--s); letter-spacing: .2em;
  text-transform: uppercase; color: var(--mut); margin-bottom: 7px; }
.frm .f > span i { text-transform: none; letter-spacing: 0; font-style: normal; }
.frm input, .frm select, .frm textarea { width: 100%; font: 400 var(--t-body)/1.5 var(--s);
  color: var(--ink); background: var(--cream); border: 1px solid var(--line);
  border-radius: 2px; padding: 13px 15px; -webkit-appearance: none; appearance: none; }
.frm input:focus, .frm select:focus, .frm textarea:focus { outline: none;
  border-color: var(--gold); }
.frm textarea { resize: vertical; }
.sub-row { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 6px; }
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.form-msg { grid-column: 1 / -1; margin: 0; font-size: var(--t-sm); display: none; }
.form-msg.show { display: block; }

/* The aside (address, hours, what to bring) runs ~290px taller than the form,
   so top-aligning left the form stranded against the top of the row. */
.book-in { display: grid; grid-template-columns: 1fr .78fr; gap: 48px;
  align-items: center; }
.aside { background: var(--cream2); padding: 28px 30px; }
.aside h4 { margin: 0 0 10px; }
.aside h4 + p { font-size: var(--t-sm); }
.aside h4 ~ h4 { margin-top: 22px; }

/* inline guide capture */
.mag { border: 1px solid var(--gold); background: var(--cream2); margin: 2.4em 0 0; }
.mag-in { padding: clamp(24px, 3.2vw, 32px); }
.mag-blurb { font-size: var(--t-lede); color: var(--body); max-width: 52ch; margin-bottom: 1.3em; }
.frm.inline { display: flex; flex-wrap: wrap; gap: 10px; grid-template-columns: none; }
.frm.inline input { flex: 1 1 220px; }
.frm.inline .form-msg { flex-basis: 100%; }

/* sign-off band */
.signoff { position: relative; text-align: center; padding: 54px 0 56px; overflow: hidden;
  background: var(--cream); color: var(--ink);
  border-top: 1px solid var(--line); }
.signoff .scr { position: relative; font-size: var(--t-scr);
  color: var(--gold-d); margin: 0; }
.signoff .caps { color: var(--mut); position: relative; margin: 0; }
.signoff .caps b { display: block; font: 400 var(--t-label)/1.8 var(--s); letter-spacing: .34em;
  color: var(--ink); margin-top: 10px; }

/* sticky mobile bar */
.sticky { position: fixed; left: 0; right: 0; bottom: 0; z-index: 90; display: none;
  border-top: 1px solid var(--line); background: var(--cream2); }
.sb { flex: 1; text-align: center; padding: 15px 8px; text-decoration: none;
  font: 700 var(--t-label)/1 var(--s); letter-spacing: .16em; text-transform: uppercase; }
.sb.wa { color: var(--ink); border-right: 1px solid var(--line); }
.sb.bk { background: var(--rose); color: #fff; }

/* exit offer */
.xo { position: fixed; inset: 0; z-index: 120; display: flex; align-items: center;
  justify-content: center; padding: 20px; background: rgba(55,43,32,.55); }
.xo[hidden] { display: none; }
.xo-box { background: var(--cream); max-width: 520px; width: 100%;
  padding: clamp(26px, 3.6vw, 40px); position: relative; border: 1px solid var(--gold); }
.xo-close { position: absolute; top: 10px; right: 12px; background: none; border: 0;
  font-size: var(--t-2); line-height: 1; cursor: pointer; color: var(--mut); }
.xo-close:hover { color: var(--ink); }

/* --------------------------------------------------------------------------
   Footer
   -------------------------------------------------------------------------- */

.foot { background: var(--foot); color: var(--line); padding: 50px 0 24px; font-size: var(--t-sm); }
.foot .wm { color: var(--cream2); font-size: var(--t-2); letter-spacing: .015em; margin: 0; }
.foot .wm2 { color: var(--gold); margin-top: 0; font-size: var(--t-scr);
  line-height: 1.12; }
.foot .wm2 i { color: var(--mut); }
.fgrid { display: grid; grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: 34px;
  padding-bottom: 28px; border-bottom: 1px solid rgba(255,255,255,.12); }
.fgrid > div > p { max-width: 32ch; font-size: var(--t-fine); line-height: 1.65; }
.foot .foot-h { font-family: var(--s); font-weight: 700; font-size: var(--t-label); letter-spacing: .22em;
  text-transform: uppercase; color: var(--cream2); margin: 0 0 13px; }
.foot ul { list-style: none; margin: 0; padding: 0; }
.foot li { margin-bottom: 7px; font-size: var(--t-fine); line-height: 1.45; }
.foot a { color: var(--gold); text-decoration: none; }
.foot a:hover { color: #fff; text-decoration: underline; }
.foot .hours li { display: flex; justify-content: space-between; gap: 10px;
  border-bottom: 0; padding: 3px 0; font-size: var(--t-fine); color: var(--mut); }
.legal { padding-top: 20px; font-size: var(--t-fine); color: var(--mut); display: flex;
  justify-content: space-between; gap: 18px; flex-wrap: wrap; }
.legal p { max-width: 62ch; margin: 0; }

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */

@media (max-width: 1040px) {
  .fgrid { grid-template-columns: 1fr 1fr 1fr; }
  .book-in { grid-template-columns: 1fr; align-items: start; }
}

@media (max-width: 900px) {
  .poster, .poster.flip { grid-template-columns: 1fr; min-height: 0; }
  .poster .pic { order: 1; height: 400px; }
  .poster .txt, .poster.flip .txt { order: 2; padding: 34px 0 46px; }
  .poster .pic::before, .poster.flip .pic::before { top: auto; bottom: -2px; left: 0;
    right: 0; width: auto; height: 100px;
    background: linear-gradient(0deg, var(--cream), transparent); }
  .poster .txt .inner-w, .poster.flip .txt .inner-w { padding: 0 var(--gut); }
  .ph.has-img .ph-in { grid-template-columns: 1fr; }
  .ph-img { max-width: 460px; }
  .grid6 { grid-template-columns: 1fr; }
  .gcards { grid-template-columns: 1fr 1fr; }
  .facts-in { grid-template-columns: 1fr; }
  .facts-in > div { border-right: 0; border-bottom: 1px solid var(--line); padding: 18px 0; }
  .facts-in > div:last-child { border-bottom: 0; }
  .four { grid-template-columns: 1fr 1fr; gap: 26px 0; }
  .four div:nth-child(3) { border-left: 0; }
}

@media (max-width: 780px) {
  body { font-size: var(--t-body); padding-bottom: 54px; }
  .burger { display: flex; }
  /* "LIP BLUSH & BROWS" is a long wordmark — at 375px it has to come down a
     long way, and the burger needs its own room beside it. */
  .mast { padding: 20px 44px 0; }
  .wm { font-size: clamp(23px, 6.8vw, 34px); letter-spacing: .01em; }
  .wm2 { font-size: var(--t-scr); margin-top: 0; }
  .wm3 { margin-top: 11px; letter-spacing: .26em; text-indent: .26em; }
  .burger { top: 20px; left: 2px; }
  .nav { display: none; }
  .nav.open { display: block; }
  .nav-in { flex-direction: column; gap: 0; padding-bottom: 14px; }
  .nav a, .navgrp > button { padding: 11px 0; width: 100%; text-align: left; }
  .navgrp .sub { position: static; transform: none; display: none; border: 0;
    box-shadow: none; padding: 0 0 8px 16px; background: none; min-width: 0; }
  .navgrp.open .sub { display: block; }
  .navgrp:hover .sub { display: none; }
  .navgrp.open:hover .sub { display: block; }
  .swatches { grid-template-columns: 1fr 1fr; }
  .frm { grid-template-columns: 1fr; }
  .gcards { grid-template-columns: 1fr; gap: 26px; }
  .fgrid { grid-template-columns: 1fr 1fr; }
  /* Two layouts here, not one. A location row has three children (text, drive
     time, arrow); a treatment row also has a thumbnail. The old single rule
     assumed three, so on treatment rows the text was squeezed into the 22px
     arrow column and pushed the whole page sideways. */
  .tx { grid-template-columns: 1fr auto; gap: 12px 14px; row-gap: 8px;
    align-items: start; }
  .tx-b { grid-column: 1; min-width: 0; }
  .tx-p { grid-column: 1; font-size: var(--t-3); }
  .tx-a { grid-column: 2; grid-row: 1; align-self: center; }
  .tx-im { grid-column: 1 / -1; grid-row: 1; width: 100%; margin-bottom: 4px; }
  .tx-im + .tx-b { grid-row: 2; }
  .tx:has(.tx-im) .tx-a { grid-row: 2; }
  .tx-im img { aspect-ratio: 16 / 9; }
  .sticky { display: flex; }
  .foot { padding-bottom: 18px; }
  .roundel { width: 124px; height: 124px; }
  .roundel .amt { font-size: var(--t-scr); }
}

@media (max-width: 480px) {
  .fgrid { grid-template-columns: 1fr; }
  .four { grid-template-columns: 1fr; }
  .four div { border-left: 0; padding: 0; }
}

@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}

@media print {
  .top, .nav, .sticky, .cap, .mag, .quiz-band, .xo, .signoff { display: none !important; }
}


/* --------------------------------------------------------------------------
   Suitability check
   -------------------------------------------------------------------------- */

.quiz-shell { background: var(--cream2); border: 1px solid var(--line);
  padding: clamp(24px, 3.6vw, 44px); max-width: 760px; margin: 0 auto; }
.q-prog { display: flex; gap: 6px; margin-bottom: 28px; }
.q-prog span { flex: 1; height: 2px; background: var(--line); }
.q-prog span.on { background: var(--gold); }
.q-step { font: 400 var(--t-label)/1 var(--s); letter-spacing: .28em; text-transform: uppercase;
  color: var(--mut); margin-bottom: 14px; }
.q-q { font-family: var(--d); font-weight: 600; font-size: clamp(24px, 3vw, 34px);
  line-height: 1.16; color: var(--ink); margin: 0 0 1em; }
.q-opts { display: grid; gap: 10px; margin-bottom: 24px; }
.q-opt { display: block; width: 100%; text-align: left; background: var(--cream);
  border: 1px solid var(--line); padding: 15px 20px; cursor: pointer;
  font: 400 var(--t-body)/1.45 var(--s); color: var(--ink);
  transition: border-color .15s, background .15s; }
.q-opt:hover { border-color: var(--gold); }
.q-opt.sel { border-color: var(--gold); background: var(--cream2); }
.q-opt small { display: block; color: var(--mut); font-size: var(--t-fine); margin-top: 3px; }
.q-nav { display: flex; justify-content: space-between; align-items: center; gap: 14px; }
.q-back { background: none; border: 0; cursor: pointer; font: 400 var(--t-label)/1 var(--s);
  letter-spacing: .18em; text-transform: uppercase; color: var(--mut); }
.q-back:hover { color: var(--ink); }
.q-hint { font-size: var(--t-fine); color: var(--mut); }
.q-res h3 { font-size: clamp(24px, 3vw, 34px); margin-bottom: .5em; }
.q-flags { margin: 1.6em 0; }
.q-flags h4 { margin: 0 0 .6em; }
.q-note { background: var(--cream2); border-left: 2px solid var(--gold); padding: 16px 20px;
  font-size: var(--t-body); color: var(--body); margin: 1.4em 0; }
.q-res .frm { margin-top: 1.4em; }

/* --------------------------------------------------------------------------
   Locations — the studio card, and towns grouped by borough
   --------------------------------------------------------------------------
   Twenty identical rows in one 4,000px stack was a directory, not a page.
   Towns are grouped by the borough people actually say they are from, and
   the practical half (address, hours, parking) is lifted into a card that
   every location page carries.
   -------------------------------------------------------------------------- */

.studio-wrap { max-width: 980px; }
.studio { display: grid; grid-template-columns: 1.35fr 1fr; gap: clamp(28px, 5vw, 64px);
  background: var(--cream2); border: 1px solid var(--line); padding: clamp(26px, 4vw, 46px); }
.studio h3 { font-size: var(--t-2); margin-bottom: .55em; }
.studio h4 { font-size: var(--t-3); margin-bottom: .7em; }
.studio p { font-size: var(--t-sm); }
.studio-ad { font-family: var(--d); font-weight: 600; font-size: var(--t-3);
  line-height: 1.5; color: var(--ink); margin-bottom: 1em; }
.studio-h { border-left: 1px solid var(--line); padding-left: clamp(22px, 3.4vw, 40px); }
.studio-h .hours { margin-bottom: 1.2em; }
.studio .btn { margin-bottom: 8px; }

.tx-group + .tx-group { margin-top: clamp(38px, 5vw, 60px); }
.tx-gh { font-family: var(--s); font-weight: 700; font-size: var(--t-label);
  letter-spacing: .3em; text-transform: uppercase; color: var(--gold-d);
  margin: 0 0 4px; }
.chips.quiet .chip { color: var(--mut); border-color: var(--line); }
.chips.quiet .chip:hover { color: var(--gold-d); border-color: var(--gold); }

@media (max-width: 800px) {
  .studio { grid-template-columns: 1fr; gap: 26px; }
  .studio-h { border-left: 0; border-top: 1px solid var(--line);
    padding-left: 0; padding-top: 24px; }
}

/* --------------------------------------------------------------------------
   Home opener — the line before the first poster
   --------------------------------------------------------------------------
   The page used to begin with a treatment, which told a stranger what is for
   sale before it told them who sells it. Kept typographic and small: the
   masthead is still the big thing on the page.
   -------------------------------------------------------------------------- */



/* --------------------------------------------------------------------------
   Band rhythm
   --------------------------------------------------------------------------
   Two grounds, alternating, assigned in build.py rather than per-section. The
   old .tint / .white / .cap grounds are folded into these so a page cannot end
   up with three near-identical creams in an arbitrary order.
   -------------------------------------------------------------------------- */

/* NB: never name these b0/b1 — .b1/.b2/.b3 are the button classes and
   a section picked up the dark button background. */
/* ONE page ground. Sections never change colour; they are separated by a gold
   hairline. Alternating near-identical creams is exactly what read as a random
   assortment, in beige and then again in white. */
main > .bandA { background: var(--cream); }
main > .bandB { background: var(--cream-d); }
/* .white / .tint / .cap / .quiz-band must NOT set a ground — the A/B rhythm
   owns it. They previously did, at equal specificity, and silently won. */

/* Only actual CARDS lift off the page — a card is an object with an edge, not
   a band and never a paragraph. */
.studio, .gcard { background: var(--cream2); border: 1px solid var(--line); }


/* Left over from the first band attempt: it forced these sections transparent,
   which beat the A/B rhythm (same specificity, later in the file) and let the
   body cream show through — producing long runs of one colour. */


/* --------------------------------------------------------------------------
   Header accent — Escape's berry ADDED to the cream and gold, not replacing
   it. The wordmark ampersand and every hairline stay gold; the berry appears
   only on the heart, the live nav item and on hover.
   -------------------------------------------------------------------------- */
/* the masthead heart sits on the berry band, so it stays gold — a berry
   heart on berry would not be visible at all */
.crumb a:hover { color: var(--rose); }

/* A sub-heading one level under an h2. Semantically h3 so the document outline
   is correct for screen readers; sized like the old h4 so nothing moves. */
h3.h-sm { font-size: var(--t-3); line-height: 1.24; }

/* --------------------------------------------------------------------------
   Hero
   --------------------------------------------------------------------------
   Photograph bleeding off the right edge, statement and buttons on the left,
   a berry pill for the primary action. Modelled on the sister salon's hero so
   the two brands read as family, but on a light ground.
   -------------------------------------------------------------------------- */

.hero { border-bottom: 1px solid var(--line); overflow: hidden;
  padding: 0; }
/* the text column lines up with the site's content width; the photograph runs
   past it to the viewport edge, the way the sister salon's hero does */
.hero-in { max-width: none; padding: 0; display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 44vw);
  align-items: center; }
.hero-x { padding: clamp(30px, 4vw, 54px) clamp(28px, 4vw, 56px)
  clamp(32px, 4vw, 54px)
  max(var(--gut), calc((100vw - var(--wrap)) / 2 + var(--gut))); }
.hero .caps { margin-bottom: 1.25em; }
.hero-l { font-family: var(--d); font-weight: 600; font-size: var(--t-1);
  line-height: 1.16; color: var(--ink); margin: 0; max-width: 24ch;
  text-wrap: balance; }
.hero-s { margin: .24em 0 0; font-size: var(--t-scr); line-height: 1.15; }
.hero-cta { margin: 1.7em 0 0; }
.hero-img { position: relative; align-self: stretch; min-height: clamp(420px, 46vw, 560px); }
.hero-img picture { position: absolute; inset: 0; }
.hero-img img { width: 100%; height: 100%; object-fit: cover; }

.hero-trust { display: flex; flex-wrap: wrap; gap: 14px clamp(22px, 3.2vw, 42px);
  margin-top: 2em; padding-top: 1.5em; border-top: 1px solid var(--line);
  max-width: 30rem; }
.hero-trust .ht-n { display: block; font-family: var(--d); font-weight: 600;
  font-size: var(--t-2); line-height: 1.1; color: var(--ink); }
.hero-trust .ht-l { display: block; font: 400 var(--t-label)/1.5 var(--s);
  letter-spacing: .16em; text-transform: uppercase; color: var(--mut);
  margin-top: 5px; }

.btn.rose { background: var(--rose); color: #fff; border-color: var(--rose);
  border-radius: 999px; padding: 18px 34px; }
.btn.rose:hover { background: var(--rose-d); border-color: var(--rose-d); color: #fff; }
.btn.rose:hover { background: var(--rose-d); border-color: var(--rose-d); color: #fff; }
.hero .btn.b2 { border-radius: 999px; }

@media (max-width: 860px) {
  .hero-in { grid-template-columns: 1fr; }
  .hero-x { padding: clamp(26px,5vw,38px) var(--gut); }
  .hero-l { max-width: 20ch; }
  .hero-img { min-height: 320px; }
}

/* --------------------------------------------------------------------------
   Berry masthead
   --------------------------------------------------------------------------
   The header band carries Escape's berry, cream type on it, so the top of the
   page has colour and the two brands read as family. Everything below stays
   cream and gold.
   -------------------------------------------------------------------------- */

header { background: var(--rose); }
header .wm { color: var(--cream); }
header .wm .amp { color: var(--gold); }
header .wm2 { color: var(--cream); }
/* the small "by" was --mut, which is 1.06:1 on the berry — invisible */
header .wm2 i, header .mast .caps { color: rgba(253, 250, 242, .82); }
/* the ampersand is a logotype, but lift it so it still reads on the berry */
header .wm .amp { color: #E3C882; }
header .mast .hr::before, header .mast .hr::after { background: rgba(255,255,255,.45); }
header .mast .hr svg { fill: var(--cream); }
.nav { border-top: 1px solid rgba(255,255,255,.28); }
.nav a, .navgrp button { color: var(--cream); }
/* Gold on the berry is 2.68:1 — nowhere near the 4.5:1 a 12px nav link needs.
   The live and hovered items stay cream and are marked with a rule instead. */
.nav a.on, .nav a:hover, .navgrp > button:hover,
.navgrp.on > button { color: #fff; }
.nav a.on, .navgrp.on > button { box-shadow: inset 0 -2px 0 var(--gold); }
.nav a:hover, .navgrp > button:hover { box-shadow: inset 0 -1px 0 rgba(255,255,255,.6); }
.navgrp .sub { background: var(--cream); border-color: var(--line); }
.navgrp .sub a { color: var(--ink); }
.navgrp .sub a:hover { color: var(--rose-d); background: var(--cream2); }
.burger span { background: var(--cream); }

/* --------------------------------------------------------------------------
   Her own work, the reviews, and the artist at work
   -------------------------------------------------------------------------- */

/* Six screenshots, six different heights (403px to 821px). Cards are a fixed
   3:2 so the grid is properly symmetrical, and each shot is scaled to fit
   inside its card rather than cropped — the text has to stay readable. */
.revs { display: grid; grid-template-columns: repeat(3, 1fr);
  gap: clamp(18px, 2.2vw, 28px); }
.rev { margin: 0; background: var(--cream2); border: 1px solid var(--line);
  padding: 14px; aspect-ratio: 3 / 2; display: flex;
  align-items: center; justify-content: center; overflow: hidden; }
.rev a { display: flex; align-items: center; justify-content: center;
  width: 100%; height: 100%; }
.rev picture { width: 100%; height: 100%; display: flex; align-items: center; }
.rev img { width: 100%; height: 100%; object-fit: contain; display: block; }

.wkgrid { display: grid; grid-template-columns: repeat(3, 1fr);
  gap: clamp(16px, 2.2vw, 26px); }
.wk { margin: 0; }
.wk img { width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover;
  display: block; border: 1px solid var(--line); }
.wk figcaption { font: 400 var(--t-label)/1.6 var(--s); letter-spacing: .16em;
  text-transform: uppercase; color: var(--mut); margin-top: 10px; }

.working { display: grid; grid-template-columns: .8fr 1fr;
  gap: clamp(28px, 4vw, 60px); align-items: center; }
.working-img img { width: 100%; height: auto; display: block;
  border: 1px solid var(--line); }
.working-x h2 { margin-bottom: .5em; }
.working-x .btn { margin-top: .6em; }

@media (max-width: 980px) {
  .revs { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 620px) {
  .revs { grid-template-columns: 1fr; }
}
@media (max-width: 860px) {
  .wkgrid { grid-template-columns: 1fr 1fr; }
  .working { grid-template-columns: 1fr; }
}

/* The pull-quote. It used to be class .rev, which now belongs to the review
   screenshot cards (fixed 3:2, overflow hidden) — so the quote was squashed
   into a box and clipped. */
.quotecard { max-width: 720px; margin: 0 auto; text-align: center; }
.quotecard blockquote { margin: .6em 0 0; font-family: var(--d); font-weight: 600;
  font-size: var(--t-2); line-height: 1.45; color: var(--ink);
  hyphens: none; text-wrap: pretty; }
.quotecard cite { display: block; margin-top: 1.1em; font-style: normal;
  font: 400 var(--t-label)/1.7 var(--s); letter-spacing: .22em;
  text-transform: uppercase; color: var(--mut); }
.quotecard .stars { display: flex; justify-content: center; gap: 5px; }
.quotecard .hr { margin: 20px auto; }

/* --------------------------------------------------------------------------
   Price table on a phone
   --------------------------------------------------------------------------
   The table was 540px inside a 335px scroller, so on a 375px screen every price
   sat off the right edge with no cue that it moved — a pricing page showing no
   prices. Below 600px each row becomes its own block with the price on top.
   -------------------------------------------------------------------------- */

@media (max-width: 600px) {
  .tbl-wrap { overflow-x: visible; }
  /* rows are <th scope="row">name</th><td>description</td><td>price</td> */
  .tbl.price, .tbl.price tbody, .tbl.price tr,
  .tbl.price td, .tbl.price th { display: block; width: 100%;
    min-width: 0; }   /* .tbl sets min-width:540px for the scroll pattern */
  .tbl.price thead { display: none; }
  .tbl.price tr { border: 1px solid var(--line); background: var(--cream2);
    padding: 18px 20px; margin-bottom: 14px; }
  .tbl.price th, .tbl.price td { border: 0; padding: 0; text-align: left; }
  .tbl.price th[scope="row"] { font-family: var(--d); font-weight: 600;
    font-size: var(--t-3); color: var(--ink); line-height: 1.25; }
  .tbl.price th[scope="row"] a { text-decoration: none; display: inline-block;
    max-width: 100%; overflow-wrap: break-word; }
  .tbl.price td:last-child { font-family: var(--d); font-weight: 600;
    font-size: var(--t-2); color: var(--ink); margin-top: .35em; }
  .tbl.price td:first-of-type { font-size: var(--t-sm); color: var(--body);
    margin-top: .45em; }
}

@media (max-width: 480px) {
  /* .34em tracking on a 375px screen pushes short eyebrows onto two lines */
  .caps { letter-spacing: .2em; }
  .hero .caps, .ph .caps { letter-spacing: .16em; }
  .btn { display: block; text-align: center; margin-right: 0; }
  .hero-cta .btn, .ph .btn { width: 100%; }
}

@media (max-width: 600px) {
  /* Comparison tables stack, with each cell keeping its column label. Scrolling
     a 540px table sideways on a 375px screen means the second column — the whole
     point of a comparison — is never seen. */
  .tbl.compare, .tbl.compare tbody, .tbl.compare tr,
  .tbl.compare td, .tbl.compare th { display: block; width: 100%; min-width: 0; }
  .tbl.compare thead { display: none; }
  .tbl.compare tr { border: 1px solid var(--line); background: var(--cream2);
    padding: 16px 18px; margin-bottom: 14px; }
  .tbl.compare th, .tbl.compare td { border: 0; padding: 0; }
  .tbl.compare th[scope="row"] { font: 700 var(--t-label)/1.6 var(--s);
    letter-spacing: .16em; text-transform: uppercase; color: var(--mut);
    margin-bottom: .6em; }
  .tbl.compare td { font-size: var(--t-sm); padding-left: 0; }
  .tbl.compare td + td { margin-top: .7em; padding-top: .7em;
    border-top: 1px solid var(--line); }
  .tbl.compare td[data-col]::before { content: attr(data-col);
    display: block; font: 600 var(--t-label)/1.5 var(--s); letter-spacing: .1em;
    text-transform: uppercase; color: var(--gold-d); margin-bottom: .25em; }
}

@media (max-width: 480px) {
  /* --t-display bottoms out at 50px, and "Combination" at 50px is wider than a
     375px screen. The poster word has to be able to shrink below the floor. */
  .big { font-size: clamp(34px, 11vw, 50px); }
}

/* --------------------------------------------------------------------------
   Contrast corrections found by auditing all 48 pages
   -------------------------------------------------------------------------- */

/* --mut is tuned for cream. In the dark footer it lands at 2.82:1, and the
   licence and insurance line is the last thing that should be hard to read. */
.foot .fineprint, .foot p, .foot small { color: #A2957A; }

/* the breadcrumb separator was the gold hairline colour at 2.22:1 */
.crumb span { color: var(--mut); }
