/* ============================================================
   ABAMWE — THEME
   Structure, type, space, state. NO literal colour values.
   Every colour reference goes through a --c-* token.
   Grep test: this file must contain no hex literals and no colour functions.
   ============================================================ */

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--c-bg);color:var(--c-ink);
  font-family:var(--f-body);font-size:var(--fs-body);line-height:var(--lh-body);
  -webkit-font-smoothing:antialiased}

h1,h2,h3{font-family:var(--f-head);font-weight:var(--fw-head);letter-spacing:var(--tr-head);
  line-height:var(--lh-head);margin:0 0 var(--s-3)}
h1{font-size:var(--fs-h1)} h2{font-size:var(--fs-h2)} h3{font-size:var(--fs-h3);line-height:1.3}
p{margin:0 0 var(--s-4);max-width:var(--measure)}
img{max-width:100%;display:block}
a{color:inherit}
:focus-visible{outline:3px solid var(--c-focus);outline-offset:3px}

.wrap{width:var(--w-page);margin-inline:auto}
.narrow{width:var(--w-narrow);margin-inline:auto}
section{padding:var(--s-section) 0}
.band-surface{background:var(--c-surface)}
.stack>*+*{margin-top:var(--s-5)}

.eyebrow{font-family:var(--f-body);font-size:var(--fs-eyebrow);letter-spacing:.14em;
  text-transform:uppercase;font-weight:700;color:var(--c-ink-3);margin:0 0 var(--s-4)}

/* ---------- skip link ---------- */
.skip{position:absolute;left:var(--s-3);top:var(--s-3);z-index:60;
  background:var(--c-ink);color:var(--c-bg);padding:.65rem 1rem;border-radius:var(--radius);
  text-decoration:none;font-weight:600;transform:translateY(-250%);transition:transform .15s}
.skip:focus{transform:none}

/* ---------- mockup banner ---------- */
.mock-note{background:var(--c-band);color:var(--c-band-ink);text-align:center;
  font-size:var(--fs-meta);line-height:1.55;padding:.6rem var(--s-4);
  border-bottom:var(--border-w) solid var(--c-band-rule)}
.mock-note b{color:var(--c-band-ink)}

/* ---------- header ---------- */
header.site{position:sticky;top:0;z-index:20;background:var(--c-bg);border-bottom:var(--edge)}
header.site .wrap{display:flex;align-items:center;gap:var(--s-6);min-height:76px}
.brand{font-family:var(--f-head);font-weight:var(--fw-head);font-size:1.35rem;
  letter-spacing:var(--tr-head);text-decoration:none;margin-right:auto}
nav.main{display:flex;gap:var(--s-5);font-size:.95rem}
nav.main a{text-decoration:none;color:var(--c-ink-2);padding:var(--s-1) 0;
  border-bottom:2px solid transparent}
nav.main a:hover,nav.main a[aria-current]{color:var(--c-ink);border-bottom-color:var(--c-accent)}
.nav-toggle{display:none;align-items:center;gap:.5rem;margin-left:auto;
  background:none;border:var(--edge-strong);border-radius:var(--radius);color:var(--c-ink);
  font:inherit;font-size:.95rem;font-weight:600;min-height:44px;padding:0 var(--s-4);cursor:pointer}
.nav-toggle:hover{border-color:var(--c-accent)}
nav.mobile{display:none;background:var(--c-bg);border-bottom:var(--edge)}
nav.mobile .wrap{display:block;padding-block:var(--s-2)}
nav.mobile a{display:block;text-decoration:none;color:var(--c-ink);font-weight:600;
  padding:var(--s-3) 0;min-height:44px;border-bottom:var(--edge)}
nav.mobile a[aria-current]{color:var(--c-accent-ink)}
nav.mobile .btn{margin:var(--s-4) 0 var(--s-3);border-bottom:0}
@media(max-width:900px){
  nav.main{display:none}
  .nav-toggle{display:inline-flex}
  .header-cta{display:none}
  nav.mobile[data-open="true"]{display:block}
}

/* ---------- buttons: filled = primary, outlined = secondary ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;
  padding:.85rem 1.6rem;border-radius:var(--radius);
  text-decoration:none;font-weight:600;font-size:1rem;border:2px solid transparent;
  transition:background .15s,border-color .15s,color .15s;min-height:44px}
.btn-primary{background:var(--c-accent);color:var(--c-on-accent);border-color:var(--c-accent)}
.btn-primary:hover{background:var(--c-accent-hover);border-color:var(--c-accent-hover)}
.btn-ghost{border-color:var(--c-rule-strong);color:var(--c-ink)}
.btn-ghost:hover{border-color:var(--c-accent);color:var(--c-accent-ink)}

/* ---------- photo slot (mockup only; never ships) ---------- */
.photo{position:relative;background:var(--c-surface-alt);
  border:var(--border-w) dashed var(--c-rule-strong);border-radius:var(--radius);
  display:flex;align-items:center;justify-content:center;text-align:center;
  padding:var(--s-5);min-height:200px}
.photo span{font-size:.82rem;line-height:1.45;color:var(--c-ink-3);max-width:26ch}
.photo::after{content:"PHOTO TO COME";position:absolute;top:var(--s-2);left:var(--s-2);
  font-size:.6rem;letter-spacing:.12em;font-weight:700;color:var(--c-ink-3);opacity:.7}

/* ---------- sample marker for placeholder figures ---------- */
.samp{display:inline-block;font-family:var(--f-body);font-size:.58em;font-weight:700;
  letter-spacing:.1em;text-transform:uppercase;vertical-align:middle;line-height:1;
  color:var(--c-ink-3);border:var(--border-w) solid var(--c-rule-strong);
  border-radius:var(--radius);padding:.25em .45em;margin-left:.4em;white-space:nowrap}
.proof .samp{color:var(--c-band-ink);border-color:var(--c-band-rule)}

/* ---------- hero ---------- */
.hero-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(2rem,5vw,4rem);
  align-items:center}
.hero .photo{min-height:min(56vh,440px)}
.lead{font-size:1.2rem;color:var(--c-ink-2)}
.cta-row{display:flex;gap:var(--s-4);flex-wrap:wrap;margin-top:var(--s-6)}
@media(max-width:820px){.hero-grid{grid-template-columns:1fr}}

/* ---------- interior sub-hero (bold, energised) ---------- */
.subhero{background:var(--c-bg);border-bottom:var(--edge);position:relative;overflow:hidden;
  padding:clamp(3rem,7vw,5.5rem) 0}
.subhero::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(52% 82% at 100% -10%,color-mix(in oklab,var(--c-accent) 15%,transparent),transparent 60%)}
.subhero>.wrap{position:relative}
.subhero .eyebrow{color:var(--c-accent-ink);display:inline-flex;align-items:center;gap:.6rem}
.subhero .eyebrow::before{content:"";width:28px;height:2px;background:var(--c-accent)}
.subhero h1{font-family:var(--f-head);font-size:clamp(2.4rem,6vw,4.1rem);letter-spacing:-.03em;line-height:1.03}
.subhero .lead{max-width:52ch;font-size:clamp(1.1rem,1.5vw,1.32rem);color:var(--c-ink-2)}
.crumb{font-size:var(--fs-meta);color:var(--c-ink-3);margin:0 0 var(--s-3)}
.crumb a{color:var(--c-accent-ink);text-decoration:none;font-weight:600}
.crumb a:hover{text-decoration:underline}
.section-intro{max-width:var(--measure);margin-bottom:var(--s-7)}
.section-intro p{color:var(--c-ink-2)}

/* ---------- cards ---------- */
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-5)}
@media(max-width:820px){.cards{grid-template-columns:1fr}}
.card{background:var(--c-surface);border:var(--edge);border-radius:var(--radius);
  padding:var(--s-6);display:flex;flex-direction:column}
.card h3{margin-bottom:var(--s-2)}
.card p{font-size:.98rem;color:var(--c-ink-2);flex:1}
.card a.more{font-weight:600;color:var(--c-accent-ink);text-decoration:none;font-size:.95rem;margin-top:var(--s-3)}
.card a.more:hover{text-decoration:underline}

/* ---------- proof band: PLAIN TEXT, never a counter ---------- */
.proof{background:var(--c-band);color:var(--c-band-ink)}
.proof .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s-6);text-align:center}
.proof .n{font-family:var(--f-head);font-weight:var(--fw-head);
  font-size:clamp(2rem,4vw,2.9rem);line-height:1;display:block}
.proof .l{font-size:.85rem;letter-spacing:.06em;opacity:.85;margin-top:var(--s-2);display:block}
@media(max-width:820px){.proof .stats{grid-template-columns:repeat(2,1fr);gap:var(--s-5)}}

/* ---------- people ---------- */
.people{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s-5)}
@media(max-width:900px){.people{grid-template-columns:repeat(2,1fr)}}
.person .photo{aspect-ratio:4/5;min-height:0;margin-bottom:var(--s-3)}
.person h3{font-size:1.05rem;margin-bottom:var(--s-1)}
.person .role{font-size:.9rem;color:var(--c-ink-3);margin:0}

/* ---------- past events: the date is a first-class element ---------- */
.events{display:grid;gap:var(--s-5)}
.event{display:grid;grid-template-columns:220px 1fr;gap:var(--s-5);align-items:start;
  padding-bottom:var(--s-5);border-bottom:var(--edge)}
.event:last-child{border-bottom:0}
.event .photo{aspect-ratio:4/3;min-height:0}
.event .date{font-size:.9375rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;
  color:var(--c-accent-ink);margin:0 0 var(--s-1)}
.event h3{margin-bottom:var(--s-2)}
.event p{font-size:.97rem;color:var(--c-ink-2);margin-bottom:var(--s-2)}
.event .meta{font-size:var(--fs-meta);color:var(--c-ink-3)}
.event .more{font-weight:600;color:var(--c-accent-ink);text-decoration:none;font-size:.95rem}
.event .more:hover{text-decoration:underline}
.year-head{font-family:var(--f-head);font-weight:var(--fw-head);font-size:1.5rem;
  margin:0 0 var(--s-5);padding-bottom:var(--s-3);border-bottom:var(--edge-strong)}
.year-group+.year-group{margin-top:var(--s-8)}
@media(max-width:700px){.event{grid-template-columns:1fr}}

/* ---------- fee block ---------- */
.fee{background:var(--c-surface);border:2px solid var(--c-accent);
  border-radius:var(--radius);padding:var(--s-6)}
.fee .amount{font-family:var(--f-head);font-weight:var(--fw-head);font-size:2.4rem;
  line-height:1;margin:0}
.fee .incl{list-style:none;padding:0;margin:var(--s-5) 0 0;font-size:.96rem}
.fee .incl li{padding-left:var(--s-5);position:relative;margin-bottom:var(--s-2)}
.fee .incl li::before{content:"";position:absolute;left:0;top:.55em;width:.7rem;height:.7rem;
  border-radius:50%;background:var(--c-accent)}

/* ---------- split two-column ---------- */
.split{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,5vw,4rem);align-items:center}
@media(max-width:820px){.split{grid-template-columns:1fr}}

/* ---------- step list: numbered, NAMED ---------- */
.steps{list-style:none;counter-reset:step;padding:0;margin:0;display:grid;gap:var(--s-5)}
.steps li{counter-increment:step;display:grid;grid-template-columns:auto 1fr;gap:var(--s-5);
  align-items:start;padding-bottom:var(--s-5);border-bottom:var(--edge)}
.steps li:last-child{border-bottom:0;padding-bottom:0}
.steps li::before{content:counter(step,decimal-leading-zero);font-family:var(--f-head);
  font-weight:var(--fw-head);font-size:1.6rem;line-height:1.1;color:var(--c-accent-ink);min-width:2.4ch}
.steps h3{margin-bottom:var(--s-2)}
.steps p{font-size:.98rem;color:var(--c-ink-2);margin:0}
.steps .when{display:block;font-size:var(--fs-meta);color:var(--c-ink-3);margin-top:var(--s-2);font-weight:600}

/* ---------- spec / commitment grid ---------- */
.spec-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--s-5)}
.spec{border:var(--edge);border-radius:var(--radius);padding:var(--s-5);background:var(--c-surface)}
.spec dt{font-size:var(--fs-eyebrow);letter-spacing:.12em;text-transform:uppercase;font-weight:700;
  color:var(--c-ink-3);margin-bottom:var(--s-2)}
.spec dd{margin:0;font-size:1.1rem;font-weight:600}

/* ---------- "what you get" checklist ---------- */
.getlist{list-style:none;padding:0;margin:0;display:grid;gap:var(--s-3)}
.getlist li{padding-left:var(--s-6);position:relative;font-size:1.02rem}
.getlist li::before{content:"";position:absolute;left:0;top:.1em;width:1.15rem;height:1.15rem;
  border:2px solid var(--c-accent);border-radius:50%}
.getlist li::after{content:"";position:absolute;left:.34rem;top:.5em;width:.44rem;height:.24rem;
  border-left:2px solid var(--c-accent);border-bottom:2px solid var(--c-accent);transform:rotate(-45deg)}

/* ---------- cohort / schedule table ---------- */
.calendar{width:100%;border-collapse:collapse;font-size:1rem}
.calendar caption{text-align:left;color:var(--c-ink-3);font-size:var(--fs-meta);margin-bottom:var(--s-3)}
.calendar th,.calendar td{text-align:left;padding:var(--s-4) var(--s-5) var(--s-4) 0;
  border-bottom:var(--edge);vertical-align:top}
.calendar thead th{font-size:var(--fs-eyebrow);letter-spacing:.1em;text-transform:uppercase;
  color:var(--c-ink-3);font-weight:700}
.calendar td .d{font-weight:700}
.calendar tbody tr:last-child td{border-bottom:0}
.status{display:inline-block;font-size:.8rem;font-weight:700;letter-spacing:.03em;
  border:var(--edge-strong);border-radius:var(--radius);padding:.15rem .55rem;white-space:nowrap}
.status.open{border-color:var(--c-accent);color:var(--c-accent-ink)}
.wrap-scroll{overflow-x:auto}

/* ---------- safety grid (no left-accent tiles) ---------- */
.safety{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--s-5)}
.safety .item{border:var(--edge);border-radius:var(--radius);padding:var(--s-5);background:var(--c-surface)}
.safety .item h3{font-size:1.05rem;margin-bottom:var(--s-3);display:flex;gap:.55rem;align-items:center}
.safety .item svg{width:22px;height:22px;flex:none;stroke:var(--c-accent-ink);stroke-width:1.7;fill:none}
.safety .item p{font-size:.96rem;color:var(--c-ink-2);margin:0}

/* ---------- FAQ ---------- */
.faq{border-top:var(--edge)}
.faq details{border-bottom:var(--edge)}
.faq summary{cursor:pointer;list-style:none;padding:var(--s-5) var(--s-6) var(--s-5) 0;position:relative;
  font-family:var(--f-head);font-weight:var(--fw-head);font-size:1.1rem;min-height:44px}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";position:absolute;right:0;top:50%;transform:translateY(-50%);
  font-size:1.5rem;line-height:1;color:var(--c-accent-ink)}
.faq details[open] summary::after{content:"\2013"}
.faq details>p{margin:0 0 var(--s-5);color:var(--c-ink-2);font-size:1rem}

/* ---------- testimonial slot (labelled brief, not a fake quote) ---------- */
.quotes{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:var(--s-5)}
.quote-slot{border:var(--border-w) dashed var(--c-rule-strong);border-radius:var(--radius);
  background:var(--c-surface-alt);padding:var(--s-6)}
.quote-slot .mark{font-family:var(--f-head);font-weight:var(--fw-head);font-size:2.2rem;
  line-height:.6;color:var(--c-ink-3)}
.quote-slot p{color:var(--c-ink-3);font-size:.92rem;margin:var(--s-3) 0 0}

/* ---------- trust strip ---------- */
.trust{display:flex;flex-wrap:wrap;gap:var(--s-6) var(--s-8);align-items:baseline}
.trust .bit{font-size:var(--fs-meta);color:var(--c-ink-2)}
.trust .bit b{display:block;font-family:var(--f-head);font-weight:var(--fw-head);
  font-size:1.5rem;color:var(--c-ink);letter-spacing:var(--tr-head)}

/* ---------- highlights row ---------- */
.highlights{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--s-5)}
.highlight b{display:block;font-family:var(--f-head);font-weight:var(--fw-head);font-size:1.5rem}
.highlight span{font-size:.95rem;color:var(--c-ink-2)}

/* ---------- contact ---------- */
.contact-grid{display:grid;grid-template-columns:1fr 1.15fr;gap:clamp(2rem,5vw,4rem)}
@media(max-width:820px){.contact-grid{grid-template-columns:1fr}}
.deets{list-style:none;padding:0;margin:0 0 var(--s-6);display:grid;gap:var(--s-5)}
.deets .k{font-size:var(--fs-eyebrow);letter-spacing:.12em;text-transform:uppercase;
  font-weight:700;color:var(--c-ink-3);margin-bottom:var(--s-1)}
.deets .v{font-size:1.15rem;font-weight:600}
.deets a{color:var(--c-accent-ink);text-decoration:none}
.deets a:hover{text-decoration:underline}

/* ---------- form ---------- */
.form{display:grid;gap:var(--s-5);max-width:640px}
.field{display:grid;gap:var(--s-2)}
.field label{font-weight:600;font-size:1rem}
.field .req{color:var(--c-accent-ink)}
.field input,.field textarea,.field select{font:inherit;font-size:1.05rem;
  padding:.7rem var(--s-4);border:var(--edge-strong);border-radius:var(--radius);
  background:var(--c-bg);color:var(--c-ink);min-height:44px;width:100%}
.field textarea{min-height:140px;resize:vertical}
.field .hint{font-size:var(--fs-meta);color:var(--c-ink-3)}
.field .err{font-size:var(--fs-meta);color:var(--c-accent-ink);font-weight:700;min-height:1.2em}
.field [aria-invalid="true"]{border-color:var(--c-accent);border-width:2px}
.form-status{font-size:var(--fs-meta);color:var(--c-ink-2);font-weight:600}
.form-note{font-size:var(--fs-meta);color:var(--c-ink-3)}

/* ---------- CTA band (energised) ---------- */
.cta-band{background:var(--c-surface);position:relative;overflow:hidden}
.cta-band::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(58% 120% at 100% 0%,color-mix(in oklab,var(--c-accent) 13%,transparent),transparent 62%)}
.cta-band .inner{position:relative;display:flex;justify-content:space-between;align-items:center;
  gap:var(--s-6);flex-wrap:wrap}
.cta-band .lead{margin-bottom:0}

/* ---------- prose helpers ---------- */
.note{font-size:var(--fs-meta);color:var(--c-ink-3)}
.ack{border:var(--edge);border-radius:var(--radius);background:var(--c-surface);
  padding:var(--s-6);font-size:1rem;color:var(--c-ink-2)}
.map-slot{min-height:280px}

/* ---------- footer ---------- */
footer.site{background:var(--c-band);color:var(--c-band-ink);padding:var(--s-7) 0 var(--s-6)}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:var(--s-6)}
@media(max-width:820px){.foot-grid{grid-template-columns:1fr}}
footer.site h3{font-size:.85rem;letter-spacing:.12em;text-transform:uppercase;opacity:.85}
footer.site p{opacity:.9;font-size:.95rem}
footer.site a{color:inherit}
footer.site ul{list-style:none;padding:0;margin:0;font-size:.95rem}
footer.site li{margin-bottom:var(--s-2)}
footer.site li a{text-decoration:none}
footer.site li a:hover{text-decoration:underline}
.legal{margin-top:var(--s-6);padding-top:var(--s-5);border-top:var(--border-w) solid var(--c-band-rule);
  font-size:var(--fs-meta);opacity:.8;display:flex;justify-content:space-between;
  gap:var(--s-4);flex-wrap:wrap}

/* ============================================================
   WARMTH PASS — signature "thread" motif (Abamwe = those who
   are together), editorial hero, the signed letter, ledger
   marks, warmer placeholders. Token-only: no literal colour.
   ============================================================ */

/* every placeholder caption reads as a considered note, not system text */
.photo span{font-family:var(--f-head);font-style:italic;font-size:.98rem;color:var(--c-ink-3)}

/* the thread — a stitched line that binds, recurring as a signature */
.thread{height:3px;border:0;margin:var(--s-6) 0;
  background:repeating-linear-gradient(90deg,currentColor 0 7px,transparent 7px 15px);
  color:var(--c-accent);opacity:.7}
.mark-thread{display:inline-flex;gap:4px;vertical-align:-3px;margin-right:.55rem;color:var(--c-accent)}
.mark-thread i{width:3px;height:15px;background:currentColor;border-radius:2px}
.mark-thread i:nth-child(2){height:21px;opacity:.55}
.mark-thread i:nth-child(3){opacity:.85}

/* editorial hero */
.hero-warm .greet{font-family:var(--f-head);font-style:italic;font-size:1.2rem;
  color:var(--c-accent-ink);margin:0 0 var(--s-4)}
.hero-warm h1{font-size:clamp(2.8rem,6.2vw,4.6rem);letter-spacing:-.025em;margin:0 0 var(--s-4)}
.hero-warm h1 em{font-style:italic;color:var(--c-accent-ink)}
.hero-warm .lead{font-size:1.3rem;max-width:38ch}
.ledger{display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-5);align-items:center;
  margin-top:var(--s-6);padding-top:var(--s-5);border-top:var(--edge);
  font-size:var(--fs-meta);letter-spacing:.05em;text-transform:uppercase;
  color:var(--c-ink-3);font-weight:700}
.ledger span{display:inline-flex;align-items:center}

/* warmer, matted photo frame + caption */
.photo.framed{background:var(--c-surface);border-style:solid;border-color:var(--c-rule-strong);
  padding:var(--s-3)}
figcaption.cap{font-family:var(--f-head);font-style:italic;color:var(--c-ink-2);
  font-size:1rem;margin-top:var(--s-3);max-width:46ch}

/* drop cap — the almanac/record warmth */
.drop::first-letter{font-family:var(--f-head);font-weight:var(--fw-head);float:left;
  font-size:3.2em;line-height:.78;padding:.06em .14em 0 0;color:var(--c-accent-ink)}

/* the signed letter — the emotional centre */
.letter{background:var(--c-surface);border:var(--edge);border-radius:var(--radius-lg);
  padding:clamp(var(--s-6),4vw,var(--s-8))}
.letter .kicker{font-size:var(--fs-eyebrow);letter-spacing:.14em;text-transform:uppercase;
  font-weight:700;color:var(--c-ink-3);margin:0 0 var(--s-5)}
.letter p{font-size:1.2rem;line-height:1.7;color:var(--c-ink);max-width:60ch}
.letter p+p{margin-top:var(--s-4)}
.sign{margin-top:var(--s-6)}
.sign .name{font-family:var(--f-head);font-style:italic;font-size:1.7rem;
  color:var(--c-accent-ink);line-height:1.1}
.sign .role{font-size:var(--fs-meta);color:var(--c-ink-3);margin-top:var(--s-2)}

/* pull quote (not a card — no radius, no fill) */
.pull{font-family:var(--f-head);font-style:italic;font-size:clamp(1.4rem,2.6vw,2rem);
  line-height:1.35;color:var(--c-ink);border-left:3px solid var(--c-accent);
  padding-left:var(--s-5);margin:var(--s-7) 0;max-width:38ch}

/* ============================================================
   BOLD SET — exciting blocks for the flagship. Token-only:
   colour comes only from color-mix(var(--c-*)) and tokens.
   ============================================================ */

/* full-bleed hero, layered colour, no image required */
.hero-xl{position:relative;overflow:hidden;padding:clamp(2.5rem,6vw,5rem) 0 clamp(3.5rem,8vw,6.5rem)}
.hero-xl::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(58% 80% at 100% -5%, color-mix(in oklab,var(--c-accent) 18%,transparent), transparent 62%),
    radial-gradient(46% 70% at -5% 105%, color-mix(in oklab,var(--c-accent) 10%,transparent), transparent 58%)}
.hero-xl>.wrap{position:relative;z-index:1}
.hero-grid-xl{display:grid;grid-template-columns:1.15fr .85fr;gap:clamp(2rem,5vw,4.5rem);align-items:center}
@media(max-width:860px){.hero-grid-xl{grid-template-columns:1fr}}
.kicker-num{display:inline-flex;align-items:center;gap:.7rem;font-size:var(--fs-eyebrow);
  letter-spacing:.18em;text-transform:uppercase;font-weight:700;color:var(--c-accent-ink);margin:0 0 var(--s-5)}
.kicker-num::before{content:"";width:34px;height:2px;background:var(--c-accent)}
.display{font-family:var(--f-head);font-weight:var(--fw-head);
  font-size:clamp(2.6rem,7.4vw,5.4rem);line-height:.98;letter-spacing:-.03em;margin:0}
.display .hl{color:var(--c-accent-ink)}
.hero-xl .lead{font-size:clamp(1.12rem,1.5vw,1.35rem);max-width:48ch;margin-top:var(--s-5);color:var(--c-ink-2)}

/* hero visual panel — premium even without a photo */
.hero-visual{position:relative;border-radius:var(--radius-lg);overflow:hidden;
  background:color-mix(in oklab,var(--c-accent) 12%,var(--c-surface));border:var(--edge);
  min-height:min(58vh,460px);display:flex;align-items:center;justify-content:center;text-align:center;padding:var(--s-7)}
.hero-visual .ph-note{font-family:var(--f-head);font-style:italic;color:var(--c-ink-2);max-width:24ch;font-size:1.1rem}
.hero-visual .badge{position:absolute;left:var(--s-4);bottom:var(--s-4);background:var(--c-band);
  color:var(--c-band-ink);border-radius:999px;padding:.5rem 1.05rem;font-size:.85rem;font-weight:700;letter-spacing:.03em}

/* colour chips */
.chips{display:flex;flex-wrap:wrap;gap:var(--s-3);margin-top:var(--s-6)}
.chip{display:inline-flex;align-items:center;gap:.5rem;font-size:.92rem;font-weight:600;
  padding:.5rem 1rem;border-radius:999px;border:var(--edge-strong);color:var(--c-ink-2)}
.chip::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--c-accent)}

/* section number kicker */
.numk{display:inline-flex;align-items:baseline;gap:.6rem;font-size:var(--fs-eyebrow);
  letter-spacing:.16em;text-transform:uppercase;font-weight:700;color:var(--c-ink-3);margin:0 0 var(--s-4)}
.numk b{color:var(--c-accent-ink);font-size:1.05rem}

/* big interactive service rows */
.svc-list{border-top:var(--edge);margin-top:var(--s-7)}
.svc{display:grid;grid-template-columns:auto 1fr auto;gap:clamp(1rem,3vw,2.5rem);align-items:center;
  padding:clamp(1.4rem,3vw,2.3rem) 0;border-bottom:var(--edge);text-decoration:none;color:inherit;
  transition:padding .2s,background .2s}
.svc:hover{padding-left:var(--s-4);background:color-mix(in oklab,var(--c-accent) 6%,transparent)}
.svc .idx{font-family:var(--f-head);font-weight:var(--fw-head);font-size:clamp(1.4rem,3vw,2.1rem);
  color:var(--c-accent-ink);min-width:2.6ch}
.svc h3{font-size:clamp(1.35rem,3.1vw,2rem);margin:0 0 var(--s-2)}
.svc p{margin:0;color:var(--c-ink-2);font-size:1.02rem;max-width:62ch}
.svc .go{font-size:1.7rem;color:var(--c-accent-ink);transition:transform .2s;line-height:1}
.svc:hover .go{transform:translateX(7px)}
@media(max-width:700px){.svc{grid-template-columns:auto 1fr}.svc .go{display:none}}

/* bold stat band */
.statband{background:var(--c-band);color:var(--c-band-ink)}
.statband .grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s-6);text-align:left}
.statband .big{font-family:var(--f-head);font-weight:var(--fw-head);font-size:clamp(2.4rem,5vw,3.6rem);
  line-height:1;display:block;color:color-mix(in oklab,var(--c-accent) 60%,var(--c-band-ink))}
.statband .lbl{font-size:.92rem;opacity:.82;margin-top:var(--s-3);display:block;max-width:22ch}
@media(max-width:760px){.statband .grid{grid-template-columns:repeat(2,1fr);gap:var(--s-6)}}

/* moving events strip (marquee), reduced-motion safe */
.marquee{overflow:hidden;position:relative}
.marquee .track{display:flex;gap:var(--s-5);width:max-content;animation:mq 46s linear infinite}
.marquee:hover .track{animation-play-state:paused}
@keyframes mq{to{transform:translateX(-50%)}}
.ev-card{width:308px;flex:none;border:var(--edge);border-radius:var(--radius);background:var(--c-surface);padding:var(--s-5)}
.ev-card .date{font-size:.82rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--c-accent-ink);margin:0 0 var(--s-2)}
.ev-card h4{font-family:var(--f-head);font-size:1.12rem;margin:0 0 var(--s-2);line-height:1.25}
.ev-card p{margin:0;font-size:.94rem;color:var(--c-ink-2)}

/* big voice / quote */
.voice{background:var(--c-surface);border:var(--edge);border-radius:var(--radius-lg);padding:clamp(var(--s-6),4vw,var(--s-8))}
.voice blockquote{margin:0;font-family:var(--f-head);font-weight:var(--fw-head);
  font-size:clamp(1.4rem,3.2vw,2.3rem);line-height:1.28;letter-spacing:-.01em}
.voice .by{margin-top:var(--s-5);font-size:1rem;color:var(--c-ink-2)}
.voice .by b{color:var(--c-ink)}

/* leadership cards (role-forward, honest) */
.leaders{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s-5)}
@media(max-width:900px){.leaders{grid-template-columns:repeat(2,1fr)}}
.leader{border:var(--edge);border-radius:var(--radius);background:var(--c-surface);padding:var(--s-5);text-align:center}
.leader .av{width:76px;height:76px;border-radius:50%;margin:0 auto var(--s-4);
  background:color-mix(in oklab,var(--c-accent) 18%,var(--c-surface-alt));
  display:flex;align-items:center;justify-content:center;font-family:var(--f-head);
  font-weight:var(--fw-head);font-size:1.6rem;color:var(--c-accent-ink)}
.leader h3{font-size:1.05rem;margin:0 0 var(--s-1)}
.leader .role{font-size:.9rem;color:var(--c-ink-3);margin:0}

/* big CTA */
.cta-xl{background:var(--c-band);color:var(--c-band-ink);border-radius:var(--radius-lg);
  padding:clamp(var(--s-7),6vw,calc(var(--s-8) + var(--s-4)));text-align:center;position:relative;overflow:hidden}
.cta-xl::before{content:"";position:absolute;inset:0;
  background:radial-gradient(62% 130% at 50% 0%,color-mix(in oklab,var(--c-accent) 30%,transparent),transparent 62%)}
.cta-xl>*{position:relative}
.cta-xl h2{font-size:clamp(2rem,5vw,3.3rem);margin:0 0 var(--s-4)}
.cta-xl .lead{color:var(--c-band-ink);opacity:.9;max-width:46ch;margin:0 auto var(--s-6)}
.btn-on-band{background:var(--c-band-ink);color:var(--c-band);border-color:var(--c-band-ink)}
.btn-on-band:hover{background:transparent;color:var(--c-band-ink)}

@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}
  .marquee .track{animation:none;flex-wrap:wrap;width:auto}}

/* ============================================================
   TYPE SCALE NORMALISATION  (added 2026-08-07)
   The block library lets each block set its own sizes. Measured on the
   live site, that produced p at 15/16/19/20/36px and h3 at 15/19/20/26px,
   in two families. A page should have one scale, not five.
   The plugin supplies structure; the theme decides type. This is that layer.
   ============================================================ */

:where(.el-hero,.el-page-header,.el-section,.el-cards,.el-team,.el-quotes,
       .el-timeline,.el-faq,.el-stats,.el-benefits,.el-contact-cards,
       .el-split,.el-pricing,.el-guarantee,.el-trust,.el-values) {
  font-family: var(--f-body);
}

/* headings: one family, one ladder */
[class^="el-"] h1, [class*=" el-"] h1 { font-family:var(--f-head); font-size:var(--fs-h1); line-height:1.08; letter-spacing:var(--tr-head) }
[class^="el-"] h2, [class*=" el-"] h2 { font-family:var(--f-head); font-size:var(--fs-h2); line-height:1.15; letter-spacing:var(--tr-head) }
[class^="el-"] h3, [class*=" el-"] h3 { font-family:var(--f-head); font-size:1.25rem;      line-height:1.3;  letter-spacing:0 }
[class^="el-"] h4, [class*=" el-"] h4 { font-family:var(--f-head); font-size:1.05rem;      line-height:1.35; letter-spacing:0 }

/* body: one size, one family. 18px floor. */
[class^="el-"] p, [class*=" el-"] p,
[class^="el-"] li, [class*=" el-"] li { font-family:var(--f-body); font-size:var(--fs-body); line-height:var(--lh-body) }

/* the deliberate exceptions, each earning its size */
[class^="el-"] .lead, [class*=" el-"] .lead { font-size:1.2rem; line-height:1.55 }
[class^="el-"] .role,
[class^="el-"] .meta,
[class^="el-"] .date,
[class^="el-"] .who,
[class^="el-"] .lbl,
[class^="el-"] .note   { font-size:var(--fs-meta); line-height:1.5 }
[class^="el-"] .eyebrow,
[class^="el-"] .kicker { font-family:var(--f-body); font-size:var(--fs-eyebrow); letter-spacing:.14em;
                         text-transform:uppercase; font-weight:700 }
[class^="el-"] .big,
[class^="el-"] .number,
[class^="el-"] .amount { font-family:var(--f-head); letter-spacing:var(--tr-head); line-height:1 }

/* Never below 14px — but named, not blanket.
   A universal `font-size:max(.875rem,1em)` makes every element inherit its
   parent and flattens the whole hierarchy (h1 collapsed from 57px to 32px).
   Measured, caught, replaced. */
[class^="el-"] small,
[class^="el-"] .fine,
[class^="el-"] figcaption { font-size:var(--fs-meta) }

/* measure: prose never runs wider than it can be read */
[class^="el-"] p:not(.lead):not(.meta):not(.note) { max-width:var(--measure) }
.el-section > .wrap > p, .el-split p { max-width:var(--measure) }

/* ============================================================
   FULL-BLEED BANDS  (v4, 2026-08-07 — the version that actually works)

   Two things had to be understood first:
   1. WordPress core's constrained-layout rule sets
        margin-left:auto !important; margin-right:auto !important
      on every child of .is-layout-constrained. That silently overrode the
      breakout margins — measured margin-left computed to 0px.
   2. `align` on el/page-header already means TEXT alignment, so adding
      WordPress block-align to these blocks collided with it.

   So: break out with !important, matching core's own specificity, and leave
   the blocks' own attributes alone.

   BLEED   (paints its own background)  el-pagehead · el-hero · el-ctaband
                                        el-guarantee · el-section
   GRID    (no background)              cards · team · timeline · stats
                                        benefits · quotes · faq · pricing · split
   MEASURE (prose)                      capped at --measure
   ============================================================ */

/* No scrollbar-gutter here: it reserves space so that 50% (parent content width)
   and 50vw (viewport incl. gutter) disagree, which offset every band by 7px.
   overflow-x:clip lets 100vw overshoot harmlessly instead. */
html, body { overflow-x: clip; }

.entry-content > .el-pagehead,
.entry-content > .el-hero,
.entry-content > .el-ctaband,
.entry-content > .el-guarantee,
.entry-content > .el-section {
  margin-left: calc(50% - 50vw) !important;
  margin-right: calc(50% - 50vw) !important;
  max-width: 100vw !important;
  width: 100vw;
}

/* contents return to the 1140 grid, so only colour reaches the edge */
.entry-content > .el-pagehead > *,
.entry-content > .el-hero > *,
.entry-content > .el-ctaband > *,
.entry-content > .el-guarantee > *,
.entry-content > .el-section > * {
  width: min(1140px, 92vw);
  margin-inline: auto;
}

/* a bleeding band sets its own vertical rhythm */
.entry-content > .el-pagehead,
.entry-content > .el-hero      { padding-block: clamp(3rem, 7vw, 5.5rem); }
.entry-content > .el-ctaband,
.entry-content > .el-guarantee,
.entry-content > .el-section   { padding-block: clamp(2.5rem, 6vw, 4.5rem); }

@media (max-width: 780px) {
  .entry-content > .el-pagehead,
  .entry-content > .el-hero    { padding-block: clamp(2rem, 8vw, 3rem); }
}



/* ============================================================
   BUTTONS · RHYTHM · LINKS   (2026-08-07)
   Implements web/01_Discovery/PAGE_DEPTH_STANDARD.md
   ============================================================ */

/* --- buttons: a target, not a bar -------------------------------------
   The band rule "pull contents back to 1140" was also stretching the button
   to 1140px. A button should never span the page on desktop. */
.btn, .wp-element-button, .el-btn,
[class*="el-"] a[class*="btn"],
[class*="el-"] button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;
  max-width: 22rem;
  text-align: center;
}
/* below 480px the thumb is the constraint, so full width is right */
@media (max-width: 480px) {
  .el-ctaband .btn, .el-ctaband .wp-element-button,
  .el-hero .btn, .el-hero .wp-element-button { width: 100%; max-width: none; }
}
/* button rows centre inside centred bands, left-align elsewhere */
.el-ctaband :where(.el-btnrow, .el-actions, .wp-block-buttons) { justify-content: center; }

/* --- rhythm: not every gap is the same --------------------------------
   Every gap measured exactly 24px, which reads as a list rather than a page. */
.entry-content > * + * { margin-block-start: clamp(3rem, 6vw, 5rem); }

/* bands meeting bands share an edge — no gap between two coloured areas */
.entry-content > .el-pagehead + *,
.entry-content > * + .el-ctaband,
.entry-content > .el-hero + * { margin-block-start: 0; }

/* a closing action gets room before it */
.entry-content > .el-ctaband { margin-block-start: clamp(3.5rem, 7vw, 6rem); }

/* continuation: a section that carries on the previous thought sits closer */
.entry-content > .el-split + .el-split,
.entry-content > .el-timeline + .el-timeline,
.entry-content > .el-cards + .el-cards { margin-block-start: clamp(1.5rem, 3vw, 2.5rem); }

/* --- links: underline where it carries meaning, not everywhere --------
   7 underlines in the footer read as noise. Body links keep theirs, because
   colour alone is not an accessible signal. */
/* the footer's link columns are paragraphs, not <nav>, so target the footer
   broadly. Measured: 7 underlines in the footer, which reads as noise. */
footer.site a,
header.site a,
[class*="el-"] .btn, [class*="el-"] .wp-element-button,
.el-cards a, .el-card a,
.el-member a, .el-timeline a { text-decoration: none; }

footer.site a:hover,
header.site nav a:hover,
.el-cards a:hover, .el-card a:hover { text-decoration: underline; text-underline-offset: .18em; }

/* body prose keeps its underline, set properly rather than by default */
.el-prose a, .el-split p a, .entry-content > p a, .el-pagehead__lead a {
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: .18em;
  text-decoration-color: color-mix(in oklab, currentColor 45%, transparent);
}
.el-prose a:hover, .el-split p a:hover, .entry-content > p a:hover {
  text-decoration-color: currentColor;
}

/* ============================================================
   HEADER + FOOTER   (rebuilt 2026-08-07)
   Measured problems this fixes:
   · mobile header 191px tall, brand wrapping to 2 lines,
     CTA squeezed into 4 lines, hamburger rendering as a bare "="
   · footer nav links ~45px apart with no rhythm
   · footer columns 433/172/172/172 — unbalanced, dead space bottom-left
   · column headings not sharing a baseline
   ============================================================ */

/* ---------------- HEADER ---------------- */
.abamwe-header { border-bottom: 1px solid color-mix(in oklab, var(--c-ink) 10%, transparent); }
.abamwe-header__bar { padding-block: var(--s-4); }

.abamwe-brand a, .abamwe-brand {
  font-size: 1.2rem; font-weight: 700; letter-spacing: -.02em;
  line-height: 1.1; text-decoration: none; white-space: nowrap;
}
.abamwe-header__right { gap: var(--s-6); }

.abamwe-nav { --wp--style--block-gap: var(--s-5); }
.abamwe-nav .wp-block-navigation__container { gap: var(--s-5); }
.abamwe-nav a { font-size: .95rem; padding-block: .35rem; border-bottom: 2px solid transparent; }
.abamwe-nav a:hover { border-bottom-color: var(--c-accent); text-decoration: none; }
.abamwe-nav .current-menu-item a { border-bottom-color: var(--c-accent); }

.abamwe-header__cta .wp-block-button__link { white-space: nowrap; padding: .6rem 1.1rem; }

/* the hamburger: give it a real target and a label, not a bare glyph */
.abamwe-header .wp-block-navigation__responsive-container-open {
  display: none; min-height: 44px; min-width: 44px; padding: .5rem;
  border: 1px solid color-mix(in oklab, var(--c-ink) 22%, transparent);
  border-radius: var(--radius);
}
.abamwe-header .wp-block-navigation__responsive-container-open svg { width: 22px; height: 22px; }

@media (max-width: 900px) {
  /* WordPress collapses its own nav at 600px. Between 600 and 900 the inline list
     and my burger were both showing, and 768 overflowed. Force the overlay up to
     900 so there is exactly one navigation at every width. */
  .abamwe-nav .wp-block-navigation__responsive-container:not(.is-menu-open) { display: none; }
  .abamwe-header .wp-block-navigation__responsive-container-open { display: flex; }
  /* the CTA lives in the menu on small screens; it cannot survive a 390px bar.
     Specificity bumped: core's .wp-block-buttons{display:flex} was winning. */
  .abamwe-header .abamwe-header__cta,
  .abamwe-header .wp-block-buttons.abamwe-header__cta { display: none !important; }
  .abamwe-header__right { gap: var(--s-4); }
}
/* 900-1100: nav + CTA no longer fit on one line and the header grew to 95px.
   Tighten before dropping anything. */
@media (min-width: 901px) and (max-width: 1100px) {
  .abamwe-header__right { gap: var(--s-4); }
  .abamwe-nav .wp-block-navigation__container { gap: var(--s-4); }
  .abamwe-nav a { font-size: .9rem; }
  .abamwe-header__cta .wp-block-button__link { padding: .55rem .9rem; }
}
@media (max-width: 380px) { .abamwe-brand a, .abamwe-brand { font-size: 1.05rem; } }

/* ---------------- FOOTER ---------------- */
.abamwe-footer { padding-block: clamp(3rem, 6vw, 5rem) clamp(2rem, 4vw, 3rem); }

.abamwe-footer__grid {
  display: grid;
  grid-template-columns: 1.6fr 1fr 1fr 1.3fr;   /* was 433/172/172/172 */
  gap: clamp(2rem, 4vw, 3.5rem);
  align-items: start;                            /* headings share a baseline */
}
@media (max-width: 900px) { .abamwe-footer__grid { grid-template-columns: 1fr 1fr; row-gap: 2.5rem; } }
@media (max-width: 560px) { .abamwe-footer__grid { grid-template-columns: 1fr; } }

.abamwe-footer__name { font-size: 1.15rem; margin: 0 0 var(--s-3); letter-spacing: -.01em; }
.abamwe-footer__blurb { font-size: var(--fs-meta); opacity: .85; max-width: 34ch; margin-bottom: var(--s-4); }
.abamwe-footer__addr  { font-size: var(--fs-meta); opacity: .85; line-height: 1.7; margin: 0; }

/* column headings: one size, uppercase, sharing a baseline with the brand */
.abamwe-footer__h {
  font-family: var(--f-body); font-size: .78rem; font-weight: 700;
  letter-spacing: .14em; text-transform: uppercase;
  opacity: .62; margin: 0 0 var(--s-4); line-height: 1.4;
}

/* nav + list: a tight rhythm, not 45px apart */
.abamwe-footer__nav .wp-block-navigation__container,
.abamwe-footer__list { gap: 0; margin: 0; padding: 0; list-style: none; }
.abamwe-footer__nav li, .abamwe-footer__list li { margin: 0 0 var(--s-3); }
.abamwe-footer__nav a, .abamwe-footer__list a {
  font-size: var(--fs-meta); opacity: .9; text-decoration: none;
}
.abamwe-footer__nav a:hover, .abamwe-footer__list a:hover { opacity: 1; text-decoration: underline; text-underline-offset: .18em; }

.abamwe-footer__cta p { font-size: var(--fs-meta); opacity: .85; max-width: 30ch; margin-bottom: var(--s-4); }
.abamwe-footer__cta .wp-block-button__link { font-size: .92rem; padding: .6rem 1.1rem; white-space: nowrap; }

.abamwe-footer__legal {
  display: flex; justify-content: space-between; flex-wrap: wrap; gap: var(--s-3) var(--s-5);
  margin-top: clamp(2.5rem, 5vw, 4rem);
  padding-top: var(--s-5);
  border-top: 1px solid color-mix(in oklab, var(--c-band-ink) 18%, transparent);
}
.abamwe-footer__legal p { font-size: var(--fs-meta); opacity: .62; margin: 0; }
@media (max-width: 560px) { .abamwe-footer__legal { flex-direction: column; gap: var(--s-2); } }

/* ============================================================
   ELEMENT SWEEP   (2026-08-07)
   Consistency pass over the block library so the page reads as
   one system rather than a set of components from different places.
   ============================================================ */

/* --- eyebrows: one treatment everywhere -------------------------------- */
.el-eyebrow, [class*="el-"] .eyebrow {
  display: inline-flex; align-items: center; gap: .45rem;
  /* 14px floor honoured: was rendering 12px, below our own minimum */
  font-size: .875rem; font-weight: 700; letter-spacing: .13em; text-transform: uppercase;
  margin: 0 0 var(--s-4);
}

/* --- section intros: heading and lead share one rhythm ----------------- */
[class*="el-"] > .el-wrap > h2,
[class*="el-"] .el-section__head h2 { margin-bottom: var(--s-3); }
[class*="el-"] .el-section__head p,
[class*="el-"] > .el-wrap > p:first-of-type { margin-bottom: var(--s-6); }

/* --- cards: equal height, consistent padding, honest hover ------------- */
.el-cards, .el-benefits__grid, .el-safety { align-items: stretch; }
.el-card, .el-benefit, .el-quote, .el-faq-item, .el-member, .el-stat {
  border-radius: var(--radius);
}
.el-card { display: flex; flex-direction: column; padding: var(--s-5); }
.el-card p { flex: 1; }
.el-card:hover, .el-benefit:hover {
  border-color: color-mix(in oklab, var(--c-accent) 40%, transparent);
  transition: border-color .15s ease;
}

/* --- lists: readable rhythm, never cramped ---------------------------- */
[class*="el-"] ul:not(.wp-block-navigation__container):not(.el-footer__list) { padding-left: 1.15rem; }
[class*="el-"] li + li { margin-top: .35rem; }

/* --- timeline: the date is evidence, so give it weight ----------------
   Measured at 13px, which broke our own rule that dates and prices are never
   the smallest type on the page. They are the proof; they get proper size. */
.el-timeline-item .date, .el-timeline .date,
.el-timeline .d, [class*="el-"] .d {
  font-size: var(--fs-meta); font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--c-accent-ink);
}

/* --- tables: readable at every width ---------------------------------- */
[class*="el-"] table { width: 100%; border-collapse: collapse; font-size: var(--fs-meta); }
[class*="el-"] :where(th, td) { padding: var(--s-3) var(--s-4) var(--s-3) 0; text-align: left; vertical-align: top; }
.el-table-scroll, .wrap-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }

/* --- forms: 44px targets, visible focus, errors in words -------------- */
.ff-el-form-control, [class*="el-"] :where(input, select, textarea) {
  font: inherit; font-size: 1.02rem; min-height: 44px;
  padding: .65rem var(--s-4);
  border: 1px solid color-mix(in oklab, var(--c-ink) 28%, transparent);
  border-radius: var(--radius); background: var(--c-bg); color: var(--c-ink);
  width: 100%;
}
.ff-el-form-control:focus-visible, [class*="el-"] :where(input, select, textarea):focus-visible {
  outline: 3px solid var(--c-focus); outline-offset: 2px; border-color: var(--c-accent);
}
.ff-el-input--label label { font-weight: 600; margin-bottom: .3rem; display: inline-block; }
.ff-el-group { margin-bottom: var(--s-5); }
.ff-btn-submit { max-width: 22rem; }

/* --- images: never overflow, never distort --------------------------- */
[class*="el-"] img { max-width: 100%; height: auto; }

/* --- focus: one visible treatment sitewide --------------------------- */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 3px solid var(--c-focus); outline-offset: 3px; border-radius: 2px;
}

/* --- reduced motion honoured everywhere ------------------------------ */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}
