/* Inter, self-hosted.
   No third-party font request: visitor IPs never reach a US ad network (a live
   GDPR exposure for hosted Google Fonts), and the CSP can drop
   fonts.googleapis.com and fonts.gstatic.com entirely.

   Inter v20 ships as a variable font, so one file per subset covers the whole
   weight range. English pages load only the 47KB latin slice; latin-ext is
   fetched lazily and only if a character in its range appears. */

@font-face {
  font-family: Inter;
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("../fonts/inter-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: Inter;
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("../fonts/inter-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* RevRepute — design system
   Ref: Refero "Warm storybook on cream paper" (brief §6a)
   Rules: no shadows, no gradients. Elevation = cream -> white surface shift.
   Inter only, weights 400/500. Hierarchy comes from size, not weight.
   All box/flow properties are logical so the whole system mirrors under dir="rtl". */

:root{
  --canvas:#f6f3ec;      /* Ivory paper */
  --elevated:#ffffff;
  --recessed:#e7e2d7;    /* Linen */
  --ink:#1f2833;         /* Navy ink — never pure black on paper */
  --muted:#5a6069;       /* darkened from the reference's #80827f to clear WCAG AA on cream and sandstone */
  --hairline:#d5d5d4;

  --grass:#7fd6c8;       /* Teal: the dominant brand fill (variable name kept for stability) */
  --coral:#ff9057;       /* Tangerine: service-level CTAs and the third fill */
  --coral-text:#b8481a;  /* the same hue at a contrast that passes AA for text and borders */
  --sky:#8ec5ff;
  --sun:#ffbe5c;         /* Amber: the signal colour, primary buttons */

  --r-pill:50px;
  --r-illus:63.75px;
  --r-chip:10px;
  --r-btn:10px;
  --r-md:25.5px;

  --wrap:1200px;
  --gutter:24px;
  --gap-s:80px;
  --gap-l:120px;

  --nav-h:76px;
}

*,*::before,*::after{box-sizing:border-box}

/* The UA rule for [hidden] is display:none at the lowest specificity, so any
   class that sets display (the consent panel sets flex) silently defeats it.
   This makes the attribute mean what everyone assumes it means. */
[hidden]{display:none!important}

html{-webkit-text-size-adjust:100%}

body{
  margin:0;
  background:var(--canvas);
  color:var(--ink);
  font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
  font-size:17px;
  font-weight:500;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  font-feature-settings:"cv05" 1,"ss01" 1;
}

img,svg{max-width:100%;height:auto}

/* ---------- type scale ---------- */

h1,h2,h3,h4{font-weight:500;margin:0;text-wrap:balance}

.t-display{
  font-size:clamp(50px,9.6vw,132px);
  letter-spacing:-.06em;
  line-height:.95;
  font-weight:500;
}
.t-h1{font-size:clamp(40px,6.2vw,81px);letter-spacing:-.045em;line-height:1.02}
.t-h2{font-size:clamp(32px,4.4vw,53px);letter-spacing:-.035em;line-height:1.06}
.t-h3{font-size:clamp(22px,2.2vw,28px);letter-spacing:-.02em;line-height:1.18}
.t-lead{font-size:clamp(18px,1.7vw,22px);line-height:1.45;letter-spacing:-.01em}
.t-body{font-size:18px;line-height:1.5}
.t-small{font-size:15px;line-height:1.45}

p{margin:0 0 1em}
p:last-child{margin-bottom:0}
.measure{max-width:62ch}
.measure-tight{max-width:48ch}

a{color:inherit}

/* ---------- layout ---------- */

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

section{padding-block:var(--gap-s)}
section.roomy{padding-block:var(--gap-l)}

.stack>*+*{margin-block-start:var(--s,24px)}

.grid{display:grid;gap:24px}
@media(min-width:760px){
  .g-2{grid-template-columns:repeat(2,1fr)}
  .g-3{grid-template-columns:repeat(3,1fr)}
  .g-4{grid-template-columns:repeat(2,1fr)}
}
@media(min-width:1040px){
  .g-4{grid-template-columns:repeat(4,1fr)}
}

.split{display:grid;gap:40px;align-items:start}
@media(min-width:900px){
  .split{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:64px}
  .split-wide{grid-template-columns:minmax(0,7fr) minmax(0,5fr)}
  .split-narrow{grid-template-columns:minmax(0,4fr) minmax(0,8fr);gap:56px}
}

/* ---------- surfaces ---------- */

.card{
  background:var(--elevated);
  border-radius:var(--r-pill);
  padding:40px 36px;
  border:1px solid transparent;
}
.card-outline{background:var(--elevated)}
.card-recessed{background:var(--recessed)}
.card-ink{background:var(--ink);color:var(--canvas)}
.card-ink .t-muted{color:#b4b6b1}

.illus-frame{
  background:var(--elevated);
  border-radius:var(--r-illus);
  padding:36px;
  display:flex;
  align-items:center;
  justify-content:center;
}
.illus-frame.on-sand{background:var(--recessed)}

.chip{
  display:inline-flex;align-items:center;gap:8px;
  border-radius:var(--r-chip);
  padding:6px 12px;
  font-size:13px;
  color:var(--ink);
  background:var(--recessed);
}
.chip-grass{background:var(--grass)}

.t-muted{color:var(--muted)}
.rule{height:12px;border:0;margin:0}

/* ---------- buttons ----------
   Ghost/light CTAs with a small chromatic dot as the affordance. */

.btn{
  display:inline-flex;align-items:center;gap:12px;
  border-radius:var(--r-pill);
  padding:15px 26px;
  font-size:16px;font-weight:500;
  text-decoration:none;
  border:1px solid transparent;
  background:var(--elevated);
  color:var(--ink);
  cursor:pointer;
  transition:border-color .18s ease,background-color .18s ease;
}
.btn::before{
  content:"";width:9px;height:9px;border-radius:50%;
  background:var(--grass);flex:none;
}
.btn:hover{border-color:var(--ink)}
.btn-primary{background:var(--ink);color:var(--canvas);border-color:var(--ink)}
.btn-primary:hover{background:#2c3745}
.btn-service::before{background:var(--coral)}
.btn-plain::before{display:none}
.btn-quiet{background:transparent}

.btn-row{display:flex;flex-wrap:wrap;gap:14px}

/* text link with an underline that is part of the type, not a hover trick */
.link{text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}
.link:hover{text-decoration-thickness:2px}

/* ---------- navigation: floating white pill ---------- */

/* The pill floats, but the strip around it carries the canvas colour so scrolling
   content never bleeds past it. No shadow — the system does not use them. */
.nav-shell{
  position:sticky;top:0;z-index:60;
  padding:16px var(--gutter) 12px;
  background:var(--canvas);
}
.nav{
  max-width:var(--wrap);margin-inline:auto;
  background:var(--elevated);
  border:1px solid var(--grass);
  border-radius:var(--r-pill);
  min-height:var(--nav-h);
  display:flex;align-items:center;gap:20px;flex-wrap:nowrap;
  padding-inline:28px;
}
.brand{font-size:20px;min-width:0;letter-spacing:-.04em;font-weight:500;text-decoration:none;flex:none}

.nav-links{display:none;gap:4px;margin-inline-start:auto;align-items:center}
@media(min-width:1000px){.nav-links{display:flex}}
.nav-links a{
  text-decoration:none;font-size:15px;color:var(--ink);
  padding:9px 14px;border-radius:var(--r-pill);
  transition:background-color .18s ease;
}
.nav-links a:hover{background:var(--canvas)}
.nav-links a[aria-current="page"]{background:var(--canvas)}
.nav-cta{margin-inline-start:12px}
@media(max-width:999px){.nav-cta{margin-inline-start:auto}}
/* Below this the pill cannot hold brand + CTA + menu; the CTA lives in the panel. */
@media(max-width:719px){
  .nav{padding-inline:18px;gap:10px}
  .nav-cta{display:none}
  .nav-toggle{margin-inline-start:auto;padding:11px 14px}
}

.nav-toggle{
  display:inline-flex;align-items:center;gap:9px;
  margin-inline-start:12px;
  border:0;background:var(--recessed);
  border-radius:var(--r-pill);padding:11px 16px;font:inherit;font-size:15px;cursor:pointer;
}
@media(min-width:1000px){.nav-toggle{display:none}}
.nav-toggle span{display:block;width:16px;height:1px;background:var(--ink);position:relative}
.nav-toggle span::before,.nav-toggle span::after{content:"";position:absolute;inset-inline:0;height:1px;background:var(--ink)}
.nav-toggle span::before{top:-5px}
.nav-toggle span::after{top:5px}

.nav-panel{
  display:none;
  max-width:var(--wrap);margin:10px auto 0;
  background:var(--elevated);
  border-radius:36px;padding:16px;
}
.nav-panel[data-open]{display:block}
@media(min-width:1000px){.nav-panel{display:none!important}}
.nav-panel a{display:block;text-decoration:none;padding:12px 16px;border-radius:var(--r-pill);font-size:17px}
.nav-panel a:hover{background:var(--canvas)}
.nav-panel .rule{margin-block:10px}

/* ---------- hero ---------- */

.hero{padding-block:clamp(56px,8vw,104px) var(--gap-s)}
.hero-head{max-width:11ch}
.hero-sub{max-width:50ch;margin-block-start:32px}

/* ---------- lists ---------- */

.list-plain{list-style:none;margin:0;padding:0}
.list-plain li{padding-block:10px}

.list-tick{list-style:none;margin:0;padding:0}
.list-tick li{position:relative;padding-inline-start:26px;padding-block:7px}
.list-tick li::before{
  content:"";position:absolute;inset-inline-start:0;top:.85em;
  width:10px;height:10px;border-radius:50%;
  background:var(--grass);
}

/* numbered — only where content is genuinely a sequence */
.steps{list-style:none;margin:0;padding:0;display:grid;gap:0}
.steps li{
  display:grid;gap:8px 28px;
  padding-block:28px;
}
.steps li:first-child{padding-block-start:0}
@media(min-width:760px){
  .steps li{grid-template-columns:minmax(0,56px) minmax(0,3.5fr) minmax(0,6.5fr);align-items:baseline}
}

/* ---------- table ---------- */

.table-scroll{overflow-x:auto;border-radius:36px;background:var(--elevated);padding:8px}
table{border-collapse:collapse;width:100%;min-width:560px;font-size:16px}
th,td{text-align:start;padding:18px 22px;vertical-align:top}
thead th{font-weight:500;color:var(--muted);font-size:14px}
tbody tr:nth-child(odd) th,tbody tr:nth-child(odd) td{background:var(--canvas)}
tbody tr:first-child th:first-child{border-start-start-radius:20px}tbody tr:first-child td:last-child{border-start-end-radius:20px}

/* ---------- FAQ ---------- */
.faq{display:grid;gap:12px}
.faq details{background:var(--elevated);border-radius:var(--r-md);padding-inline:28px}
.faq summary{
  list-style:none;cursor:pointer;padding-block:22px;
  display:flex;gap:20px;align-items:center;justify-content:space-between;
  font-size:clamp(19px,2vw,23px);letter-spacing:-.02em;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{
  content:"+";flex:none;display:inline-flex;align-items:center;justify-content:center;
  inline-size:36px;block-size:36px;border-radius:50%;background:var(--recessed);
  color:var(--ink);font-size:22px;line-height:1;
}
.faq details[open] summary::after{content:"–"}
.faq .faq-body{padding-block:0 26px;max-width:64ch;color:var(--muted)}

/* ---------- forms ---------- */

.field{display:grid;gap:8px;margin-block-end:20px}
.field label{font-size:15px}
.field input,.field select,.field textarea{
  font:inherit;font-size:17px;color:var(--ink);
  background:var(--elevated);
  border:2px solid transparent;
  border-radius:var(--r-pill);
  padding:14px 22px;
  width:100%;
}
.field textarea{border-radius:28px;min-height:130px;resize:vertical}
.field input:focus-visible,.field select:focus-visible,.field textarea:focus-visible{
  outline:2px solid var(--ink);outline-offset:2px;border-color:transparent
}
.field .hint{font-size:14px;color:var(--muted)}
.field[data-invalid] input,.field[data-invalid] textarea,.field[data-invalid] select{border-color:var(--coral-text)}
.err{font-size:14px;color:var(--coral-text);display:none}
.field[data-invalid] .err{display:block}

/* ---------- unconfirmed facts ----------
   Every [CONFIRM] item from the brief has now been resolved: filled with
   confirmed content, or the field removed. The marker styling is deliberately
   gone, so a `class="confirm"` reintroduced by accident renders as plain
   unstyled text and the build's audit still counts it. Do not restore this
   without also restoring the audit's meaning. */

/* ---------- footer ----------
   Quiet and practical. The teal closing sections already carry the sign-off,
   so the footer sits on the linen ground the sheet rests on: wordmark, link
   columns, the practical details a buyer looks for, and the legal line. */
.foot{background:var(--recessed);color:var(--ink);padding-block:72px 40px}
.foot a{color:var(--ink);text-decoration:none}
.foot a:hover{text-decoration:underline;text-underline-offset:4px}
.foot h2{font-size:15px;color:var(--muted);font-weight:500;margin-block-end:14px}
.foot .list-plain li{padding-block:6px}
.foot-top{display:grid;gap:40px}
@media(min-width:760px){.foot-top{grid-template-columns:1.4fr 1fr 1fr 1.1fr}}
.foot-sec{color:var(--muted)}
.foot-legal{margin-block-start:64px;display:flex;flex-wrap:wrap;gap:16px 28px;font-size:14px;color:var(--muted)}
.foot-legal a{color:var(--muted)}
.foot-btn{font:inherit;font-size:14px;color:var(--muted);background:none;border:0;padding:0;cursor:pointer;text-decoration:underline;text-underline-offset:4px}

/* ---------- a11y ---------- */

.skip{position:absolute;inset-inline-start:-9999px;top:0}
.skip:focus{inset-inline-start:var(--gutter);top:8px;z-index:99;background:var(--elevated);border:1px solid var(--ink);border-radius:var(--r-pill);padding:12px 20px;text-decoration:none}

:where(a,button,summary,input,select,textarea,[tabindex]):focus-visible{
  outline:2px solid var(--ink);outline-offset:3px;border-radius:4px;
}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
}

/* ---------- RTL ---------- */
[dir="rtl"] .step-n{font-feature-settings:normal}
[dir="rtl"] .illus-flip{transform:scaleX(-1)}

/* ============================================================
   Utilities
   These exist so no element carries a style="" attribute. That is what lets the
   Content-Security-Policy drop 'unsafe-inline' from style-src, which is the
   single most valuable thing a CSP does on a content site.
   ============================================================ */

/* Spacing scale. Only these steps — no arbitrary values. */
:root{--sp-1:8px;--sp-2:16px;--sp-3:24px;--sp-4:32px;--sp-5:40px;--sp-6:56px}
.mt-1{margin-block-start:var(--sp-1)}
.mt-2{margin-block-start:var(--sp-2)}
.mt-3{margin-block-start:var(--sp-3)}
.mt-4{margin-block-start:var(--sp-4)}
.mt-5{margin-block-start:var(--sp-5)}
.mt-6{margin-block-start:var(--sp-6)}

/* Measure. Named by the role the text plays, not by a number. */
.mw-display{max-width:11ch}
.mw-head{max-width:16ch}
.mw-head-wide{max-width:19ch}
.mw-note{max-width:34ch}
.mw-lead{max-width:54ch}
.mw-prose{max-width:64ch}
.mw-doc{max-width:820px}

.items-center{align-items:center}
.strong{font-weight:500}
.brand-lg{font-size:24px}

/* Whole-card link: the card is the hit target, so the text inside carries no
   separate underline. */
.card-link{text-decoration:none;display:block}
.card-link{transition:background-color .18s ease}
.card-link:hover{background:var(--recessed)}

.card-lg{padding:56px 48px}
@media(max-width:600px){.card-lg{padding:36px 28px}}

.stack-sm{--s:14px}
.stack-lg{--s:44px}

.form-note{margin-block-start:var(--sp-2);color:var(--coral-text)}

/* ---------- consent ---------- */

.consent{
  position:fixed;inset-block-end:0;inset-inline:0;z-index:80;
  background:var(--elevated);
  padding:24px var(--gutter);
}
.consent-inner{
  max-width:var(--wrap);margin-inline:auto;
  display:grid;gap:24px;align-items:center;
}
@media(min-width:960px){
  .consent-inner{grid-template-columns:minmax(0,1fr) auto}
}
.consent-actions{display:flex;flex-wrap:wrap;gap:12px}
/* Reject carries the same weight as accept — a quieter reject is not consent. */
.consent-actions .btn-primary{flex:1 1 auto;justify-content:center;min-width:190px}

.consent-scrim{
  position:fixed;inset:0;z-index:90;
  background:rgba(44,46,42,.55);
  display:flex;align-items:center;justify-content:center;
  padding:var(--gutter);
  overflow-y:auto;
}
.consent-sheet{
  background:var(--canvas);
  border-radius:36px;
  padding:40px 36px;
  max-width:640px;width:100%;
  max-height:calc(100vh - 48px);
  overflow-y:auto;
}
@media(max-width:600px){.consent-sheet{padding:28px 22px;border-radius:28px}}

.consent-row{
  display:flex;gap:24px;align-items:flex-start;justify-content:space-between;
  padding-block:18px;
  margin-block-start:10px;
  background:var(--elevated);border-radius:var(--r-md);padding-inline:20px;
}
.consent-row>div{max-width:44ch}

/* Toggle built from a checkbox so it stays a real form control for
   screen readers and keyboards. 24px minimum target (WCAG 2.2, 2.5.8). */
.consent-toggle{
  appearance:none;-webkit-appearance:none;
  flex:none;margin:0;
  inline-size:56px;block-size:32px;
  border-radius:var(--r-pill);
  border:0;
  background:var(--recessed);
  position:relative;cursor:pointer;
  transition:background-color .18s ease,border-color .18s ease;
}
.consent-toggle::after{
  content:"";position:absolute;top:3px;inset-inline-start:3px;
  inline-size:24px;block-size:24px;border-radius:50%;
  background:var(--elevated);
  transition:transform .18s ease;
}
.consent-toggle:checked{background:var(--grass)}
.consent-toggle:checked::after{transform:translateX(24px)}
[dir="rtl"] .consent-toggle:checked::after{transform:translateX(-24px)}
.consent-toggle:focus-visible{outline:2px solid var(--ink);outline-offset:3px}


/* ---------- breadcrumbs ---------- */
.crumbs{padding:20px var(--gutter) 0}
.crumbs ol{
  max-width:var(--wrap);margin-inline:auto;
  list-style:none;padding:0;
  display:flex;flex-wrap:wrap;gap:6px 10px;
  font-size:14px;color:var(--muted);
}
.crumbs li{display:flex;align-items:center;gap:10px}
.crumbs li+li::before{content:"/";color:var(--hairline)}
.crumbs a{text-decoration:none}
.crumbs a:hover{text-decoration:underline;text-underline-offset:3px}
.crumbs [aria-current="page"]{color:var(--ink)}

/* ---------- WCAG 2.2 ----------
   2.4.11 Focus Not Obscured: the sticky nav must never cover the element an
   anchor jumps to, or the one a keyboard user tabs to. */
:root{scroll-padding-block-start:calc(var(--nav-h) + 40px)}
:target{scroll-margin-block-start:calc(var(--nav-h) + 40px)}

/* 2.5.8 Target Size (Minimum): every interactive control clears 24x24 CSS px. */
.link,.crumbs a,.foot a,.foot-btn{display:inline-block;min-block-size:24px}

/* ---------- form: error summary and spam traps ---------- */

.alert{
  background:var(--coral);
  color:var(--ink);
  border-radius:36px;
  padding:28px 32px;
  margin-block-end:var(--sp-4);
}
.alert a{color:var(--ink)}

/* Off-screen rather than display:none, so a bot's form parser still fills it.
   aria-hidden and tabindex=-1 keep it away from real people. */
.trap{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* ---------- card artwork ----------
   A small paper-cut scene at the head of a card. Sits on the recessed surface so
   the white shapes inside it read, same rule as the full-size illustration frame. */
.card-art{
  display:block;
  background:var(--recessed);
  border-radius:36px;
  padding:20px;
  margin-block-end:26px;
}
.card-art svg{display:block;width:100%;height:auto}

/* ---------- step markers ----------
   Filled discs cycling the brand fills. Only used where content is a sequence. */
.step-n{
  display:inline-flex;align-items:center;justify-content:center;
  inline-size:52px;block-size:52px;border-radius:50%;
  background:var(--grass);
  font-size:22px;letter-spacing:-.03em;color:var(--ink);line-height:1;
}
.steps li:nth-child(4n+2) .step-n{background:var(--sun)}
.steps li:nth-child(4n+3) .step-n{background:var(--coral)}
.steps li:nth-child(4n+4) .step-n{background:var(--elevated)}
@media(min-width:760px){
  .steps li{grid-template-columns:minmax(0,72px) minmax(0,3.3fr) minmax(0,6.5fr);align-items:start}
}

/* ============================================================
   Graphic system
   The reference brief asks for flat paper-cut illustration doing the emotional
   work. These are the devices that carry it beyond the illustrations themselves.
   ============================================================ */



/* ---------- full-bleed scene band ----------
   One dark chapter break in an otherwise light page. Used once. */
.band{
  background:var(--recessed);
  color:var(--ink);
  border-radius:var(--r-illus);
  margin-block:var(--gap-s);
  padding-block:clamp(48px,6vw,84px);
  overflow:hidden;
}
.band .t-muted{color:var(--muted)}
.band-scene{display:block;width:100%;height:auto;margin-block-start:44px}
.band-scene svg{display:block;width:100%;height:auto}

/* ---------- stat display ----------
   Large numerals are the one place the type scale is allowed to shout. Paired
   with a quiet label, and always described as a target in the surrounding copy. */
.stats{display:grid;gap:20px}
@media(min-width:640px){.stats{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1000px){.stats{grid-template-columns:repeat(4,1fr)}}
.stat{
  background:var(--grass);
  color:var(--ink);
  border-radius:var(--r-pill);
  padding:34px 30px 30px;
}
/* Colour is a whole surface, as on the reference — never an edge or a stripe. */
.stat:nth-child(2){background:var(--sun)}
.stat:nth-child(3){background:var(--coral)}
.stat:nth-child(4){background:var(--elevated)}
.stat-n{
  display:block;
  font-size:clamp(44px,4.6vw,62px);
  letter-spacing:-.05em;line-height:.95;font-weight:500;
}
.stat-u{font-size:.42em;letter-spacing:-.02em;margin-inline-start:2px}
.stat-l{display:block;margin-block-start:14px;font-size:15px;max-width:24ch}
.stat:nth-child(4) .stat-l,.stat:nth-child(4) .stat-u{color:var(--muted)}


/* ---------- list markers ----------
   A small filled disc: the reference's only marker device is the 100%-radius
   circle, so the bullet is one. No rings, no outlines. */
.list-bubble{list-style:none;margin:0;padding:0}
.list-bubble li{position:relative;padding-inline-start:28px;padding-block:9px}
.list-bubble li::before{content:"";position:absolute;inset-inline-start:0;top:.85em;width:10px;height:10px;border-radius:50%;background:var(--grass)}

/* ============================================================
   Reference alignment — measured from mindmarket.com
   Body weight 500, circular icon affordance on buttons, full-bleed green
   sections, and rounded page corners. These are the four things that separate
   the reference's warmth from a generic editorial layout.
   ============================================================ */

/* The page itself is a sheet of paper with cut corners. */
body{
  background:var(--recessed);
}
.sheet{
  background:var(--canvas);
  border-radius:var(--r-illus);
  overflow:clip;
}
.nav-shell{background:var(--canvas)}

/* A bleed section escapes the wrap to touch the sheet edges. */
.bleed{border-radius:0}
.hero.bleed{margin-block-start:-12px}

/* ---------- buttons, rebuilt ----------
   A pill with a coloured disc on the trailing edge holding an arrow. The disc is
   the affordance the reference uses everywhere; a bare dot was a weaker read of
   the same idea. */
.btn{
  border-radius:var(--r-btn);
  padding:9px 9px 9px 22px;
  gap:16px;
  font-weight:500;
  border:1px solid transparent;
  background:var(--elevated);
}
.btn::before{display:none}
.btn::after{
  content:"";
  inline-size:44px;block-size:44px;flex:none;
  border-radius:100%;
  background:var(--grass) no-repeat center;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 17 17'%3E%3Cpath d='M4 8.5h8M8.5 5l3.5 3.5-3.5 3.5' fill='none' stroke='%231f2833' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  transition:transform .18s ease;
}
.btn:hover{border-color:transparent;background:var(--elevated)}
.btn:hover::after{transform:translateX(3px)}
[dir="rtl"] .btn::after{transform:scaleX(-1)}
[dir="rtl"] .btn:hover::after{transform:scaleX(-1) translateX(3px)}

.btn-primary{background:var(--sun);color:var(--ink);border-color:transparent}
.btn-primary:hover{background:#ffcb7a}
.btn-primary::after{background-color:var(--elevated)}

.btn-service::after{background-color:var(--coral)}
.btn-quiet{background:var(--recessed)}
.btn-quiet:hover{background:var(--elevated)}

/* Text-only buttons keep the pill but drop the disc. */
.btn-plain{padding:14px 22px}
.btn-plain::after{display:none}

/* ---------- full-bleed colour sections ---------- */
.on-grass{background:var(--grass);color:var(--ink)}
.on-grass .t-muted{color:#1f5a52}
.on-grass .btn{background:var(--elevated)}
.on-grass .btn::after{background-color:var(--sun)}
.on-grass .btn-primary{background:var(--ink);color:var(--canvas)}
.on-grass .btn-primary::after{background-color:var(--grass)}

.bleed{
  margin-inline:0;
  padding-block:clamp(64px,8vw,120px);
  border-radius:var(--r-illus);
}

/* ---------- hero, centred like the reference ---------- */
.hero-center{text-align:center}
.hero-center .hero-head,.hero-center .hero-sub{margin-inline:auto}
.hero-center .btn-row{justify-content:center}
.hero-scene{display:block;width:100%;height:auto;margin-block-start:clamp(32px,4vw,56px)}
.hero-scene svg{display:block;width:100%;height:auto}

.mx-auto{margin-inline:auto}
/* A bleed section at the end of the sheet keeps the sheet's bottom corners. */
.sheet>main>.bleed:last-child{margin-block-end:0}

/* ---------- squiggle ----------
   A hand-drawn wave under one word of a heading, from the reference. */
.squiggle{
  padding-block-end:.14em;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='12' viewBox='0 0 60 12'%3E%3Cpath d='M0 6 q7.5 -6 15 0 t15 0 t15 0 t15 0' fill='none' stroke='%23c9bbf5' stroke-width='5' stroke-linecap='round'/%3E%3C/svg%3E") repeat-x left bottom;
  background-size:auto .18em;
}
.t-display .squiggle{background-size:auto .12em;padding-block-end:.08em}
.on-grass .squiggle{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='12' viewBox='0 0 60 12'%3E%3Cpath d='M0 6 q7.5 -6 15 0 t15 0 t15 0 t15 0' fill='none' stroke='%237fd6c8' stroke-width='5' stroke-linecap='round'/%3E%3C/svg%3E")}

/* ---------- stacked stat cards ----------
   Left: heading and a sentence. Right: fill cards stacked, each with a small
   icon disc and a sentence rather than a label. */
.stats-stack{display:grid;gap:16px}
.stat{position:relative;padding:34px 30px 30px}
.stat-ico{
  position:absolute;inset-inline-end:22px;top:22px;
  inline-size:44px;block-size:44px;border-radius:50%;
  background:var(--elevated);display:flex;align-items:center;justify-content:center;
}
.stat:nth-child(4) .stat-ico{background:var(--recessed)}
.stat-ico svg{width:20px;height:20px;display:block}
.stat-s{display:block;margin-block-start:22px;font-size:16px;max-width:30ch}
.stat-n{font-size:clamp(56px,6vw,84px)}

/* ---------- proof strip inside a colour section ---------- */
.proof-strip{display:grid;gap:18px;margin-block-start:clamp(48px,7vw,96px);text-align:center;font-size:17px}
@media(min-width:760px){.proof-strip{grid-template-columns:repeat(3,1fr)}}
