/* ==========================================================================
   RSA School of Motoring Finglas: site stylesheet.

   Design governance: the rsa-leinster locked skins govern this site. This file
   is a curated port of sites/rsa-leinster/src/css/rsa.css (the brand-pack
   makeover sheet, with its Phase 0 contrast fixes and its 480/768/1100
   responsive rules). Rules were taken verbatim, never retyped, so a fix made
   in Leinster can be re-ported by re-running the same selection.

   tokens.css loads first (its own <link>, see below) and is the token layer. rsa.css redeclares a few of
   those tokens in its own :root with the contrast fixes applied (notably
   --rsa-red-hover, #C0261F rather than the raw pack's #F03A32), so the port
   must stay AFTER the tokens import or the failing value wins.

   Every makeover rule is scoped to body.rsa-site. The body carries that class
   in layouts/base.njk; remove it and this entire sheet stops applying.

   BROUGHT ACROSS (the anatomy Finglas's 15 routes use):
     base + :root + .wrap, type scale, buttons, badges, stars, header,
     homepage hero, stats, sections, ticks, call box, pricing tickets,
     prep row, FAQ, call band, footer, sticky mobile CTA, the lead-form
     re-skin (frozen ids and classes), the pay-now ticket rail and checkout
     (.pn-*, added 2026-10-23 with /pay-now/), the shared town-page furniture
     (crumbs, panels, EDT logbook object, nearby, pickups, side card,
     test-centre rows), the generic page hero, and the responsive block.
     Added 2026-10-23 with /gift-vouchers/: town skin B's hero, card, pin,
     road-dash figure, explore bar, numbered step rail and guide box
     (.tb-*), the green proof band (.tc-band), the package rail (.rail-*),
     .give-call, and the builder hero (.gv-create-hero). The voucher page's
     own components are in css/voucher-page.css, loaded by that page only.
     Added 2026-10-23 for the area pages: town skin A's photo hero (.ta-*),
     the town H1, the green rule, the EDT plates and track.
     Added later the same day: town skin C's photo hero (.tc-hero, .tc-media,
     .hm-c) for the Services, Pricing and About heroes.
     And for the homepage: .split, the pass-photo tile (.rtile), the "made
     equal" roundel band, the steps grid and the red learning band (.learn,
     .lcard). The review cards (.rcard) are still left: no review text exists.

   DELIBERATELY LEFT BEHIND (Leinster page types Finglas does not have):
     county signs (.csign-*) and the county directory/map, the rest of town
     skin C, the learning article cards (/learning/ is not built
     yet), the photo platform module, the BOOK|ASK
     bar and AI search/chat panel,
     the review wall (.reviews-row/.rcard),
     the green logo strip, and the legacy-page re-skin layer, which exists to
     drag pre-makeover markup into the new look and is unnecessary here
     because the Finglas components were rewritten to the locked anatomy.

   A handful of selectors from the left-behind page types survive inside
   grouped selector lists shared with a rule that was kept. They match no
   element on this site and are harmless; removing them by hand would make
   the port stop matching its source.
   ========================================================================== */

/* tokens.css is NOT @imported here. It is loaded by its own <link> in
   layouts/base.njk, before this sheet, so both URLs carry ?v=assetVersion.
   An @import URL cannot be versioned from a passthrough-copied file, and /css/*
   is served immutable for a year, so an @import would pin tokens.css forever.
   The link order keeps the cascade: tokens first, then the components. */

/* ==========================================================================
   RSA School of Motoring Leinster: site stylesheet (brand pack makeover)
   Built 2026-10-14 from sites/RSASOM_brand_pack/rsa-pack/css/rsa.css, with
   the Phase 0 contrast fixes (data/rsa-leinster/makeover/contrast-audit.md)
   and the responsive rules the pack never shipped (480 / 768 / 1100).

   Usage rules (contrast-audit.md):
   1 On red: white only. Green accents ride on a black chip (.chip-k).
   2 On Go Green: Road Black only.
   3 Red as text: #FF5A52, or 24px and up.
   4 Sign Green is a fill only.
   5 Every field and unselected toggle gets a #7A7A80 hairline.
   6 Hover on red darkens (#C0261F).
   7 Focus is the two-tone ring everywhere.
   8 Ledes on photos are white; mobile heroes stack the photo above the copy.
   9 Text never sits on a card photo without a solid strip.
   ========================================================================== */
:root {
  --rsa-road-black: #0B0B0C;
  --rsa-night: #000000;
  --rsa-surface: #161618;
  --rsa-raised: #1C1C1F;
  --rsa-track: #26262A;
  --rsa-navy-black: #0A141C;
  --rsa-white: #FFFFFF;
  --rsa-chalk: #F4F4F2;
  --rsa-fog: #D6D6D8;
  --rsa-mist: #C4C4C7;
  --rsa-haze: #B5B5B8;
  --rsa-smoke: #A6A6AB;
  --rsa-ash: #8A8A8F;
  --rsa-graphite: #3A3A3F;
  --rsa-red: #DA2A23;
  --rsa-red-hover: #C0261F;      /* FIX F2: darken, white 5.94:1 */
  --rsa-red-text: #FF5A52;       /* FIX F7 */
  --rsa-plate-red: #E32119;
  --rsa-green: #8EDB4F;
  --rsa-green-hover: #A6EA6E;
  --rsa-amber: #FFAE3B;
  --rsa-sign-green: #00703C;
  --rsa-sign-ink: #D5EADD;
  --rsa-sign-yellow: #FFD100;
  --rsa-avatar-blue: #2A72AF;    /* FIX F11 */
  --rsa-avatar-brown: #6B4433;
  --rsa-field-border: #7A7A80;   /* FIX F5 / F15 */
  --rsa-track-text: #9A9AA0;     /* FIX F12 */
  --line-08: rgba(255,255,255,.08);
  --line-10: rgba(255,255,255,.10);
  --line-12: rgba(255,255,255,.12);
  --line-16: rgba(255,255,255,.16);
  --line-22: rgba(255,255,255,.22);
  --line-25: rgba(255,255,255,.25);
  --font-display: Poppins, system-ui, sans-serif;
  --font-body: 'DM Sans', system-ui, sans-serif;
  --container: 1280px;
  --gutter: 40px;
  --ease-reveal: cubic-bezier(.2,.7,.2,1);
  --heading-underline:
    linear-gradient(var(--rsa-green), var(--rsa-green)) 0 100% / 54px 2px no-repeat,
    linear-gradient(var(--line-22), var(--line-22)) 0 100% / 100% 2px no-repeat;

  /* Legacy unified.css variables re-pointed at the pack palette, so older
     pages (county hubs, legacy towns, long-form pages) sit in the new look.
     Per-county accents are retired: every county now shares these values. */
  --brand: var(--rsa-red);
  --brand-fg: #fff;
  --accent: var(--rsa-green);
  --accent-fg: var(--rsa-road-black);
  --accent-2: var(--rsa-green);
  --accent-2-fg: var(--rsa-road-black);
  --accent-3: var(--rsa-amber);
  --accent-3-fg: var(--rsa-road-black);
  --bg-deep: var(--rsa-road-black);
  --bg-surface: var(--rsa-night);
  --bg-elevated: var(--rsa-surface);
  --bg-subtle: var(--rsa-raised);
  --bg-warm: var(--rsa-night);
  --bg-card: var(--rsa-surface);
  --card-bg: var(--rsa-surface);
  --card-border: var(--line-12);
  --bg-accent-subtle: rgba(142,219,79,.06);
  --text-primary: var(--rsa-chalk);
  --text-secondary: var(--rsa-mist);
  --text-muted: var(--rsa-smoke);
  --accent-red: var(--rsa-red);
  --accent-red-bright: var(--rsa-green);
  --accent-green: var(--rsa-green);
  --accent-green-bright: var(--rsa-green);
  --accent-green-soft: rgba(142,219,79,.08);
  --accent-green-dim: rgba(142,219,79,.14);
  --accent-amber: var(--rsa-amber);
  --accent-gold: var(--rsa-amber);
  --border-subtle: var(--line-08);
  --border-medium: var(--line-12);
  --max-width: var(--container);
}
/* Retire per-county accent chrome: the county sheets set these on
   body[data-county]; this rule out-specifies them. */
html body[data-county] {
  --accent: var(--rsa-green); --accent-fg: var(--rsa-road-black);
  --accent-2: var(--rsa-green); --accent-2-fg: var(--rsa-road-black);
  --accent-3: var(--rsa-amber); --accent-3-fg: var(--rsa-road-black);
  --brand: var(--rsa-red);
}
/* ---------- Base ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body.rsa-site { margin: 0; background: var(--rsa-road-black); color: var(--rsa-chalk); font-family: var(--font-body); font-size: 16.5px; line-height: 1.6; overflow-x: clip; font-synthesis: none; -webkit-font-smoothing: antialiased; }
:where(body.rsa-site) img { max-width: 100%; height: auto; }
body.rsa-site picture { display: contents; }
[id] { scroll-margin-top: 110px; }
[hidden] { display: none !important; }
.rsa-site a { color: var(--rsa-green); }
.rsa-site a:hover { color: #fff; }
.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
.skip-link { position: absolute; left: 12px; top: -60px; z-index: 100; background: var(--rsa-green); color: var(--rsa-road-black) !important; font: 700 13px var(--font-display); text-transform: uppercase; padding: 12px 16px; border-radius: 2px; text-decoration: none; }
.skip-link:focus { top: 12px; }
/* FIX F9: two-tone focus ring, visible on black, red and green */
.rsa-site :where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 3px solid var(--rsa-green); outline-offset: 2px; box-shadow: 0 0 0 7px var(--rsa-night);
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
}
/* RSA name rule: red tag with the logo's slanted right edge */
.rsa { font: inherit; text-transform: inherit; white-space: nowrap; }
.rsa b { font-weight: 800; color: #fff; background: var(--rsa-red); padding: 0 .2em 0 .14em; margin-right: .05em; clip-path: polygon(0 0,100% 0,94% 100%,0 100%); display: inline-block; line-height: 1.1; letter-spacing: -.01em; }
.wrap { max-width: var(--container); margin: 0 auto; padding-left: var(--gutter); padding-right: var(--gutter); }
.acc { color: var(--rsa-green); }
/* ---------- Type ---------- */
.eyebrow { font: 700 12px var(--font-body); letter-spacing: .2em; text-transform: uppercase; color: var(--rsa-green); text-wrap: balance; }
.eyebrow.sm { letter-spacing: .12em; }
.eyebrow.on-red { color: #fff; }
/* FIX F3 */
.eyebrow.on-green { color: var(--rsa-road-black); }
.h1 { margin: 0; font: 800 clamp(34px, 4.6vw, 64px)/1.02 var(--font-display); letter-spacing: -.03em; text-transform: uppercase; }
.h2 { margin: 0; font: 800 clamp(30px, 3.6vw, 50px)/1.08 var(--font-display); letter-spacing: -.03em; text-transform: uppercase; text-wrap: balance; }
.h2.md { font-size: clamp(28px, 3vw, 40px); line-height: 1.06; }
.h2.sm { font-size: clamp(26px, 3.2vw, 44px); line-height: 1.14; }
.h3 { margin: 0; font: 800 clamp(20px, 2vw, 26px)/1.12 var(--font-display); letter-spacing: -.03em; text-transform: uppercase; }
.h4 { margin: 0; font: 800 18px/1.15 var(--font-display); text-transform: uppercase; }
.lede { margin: 0; font-size: 19px; line-height: 1.55; color: #fff; max-width: 40ch; text-wrap: pretty; }
.body { margin: 0; font-size: 17px; line-height: 1.7; color: var(--rsa-mist); text-wrap: pretty; }
.body.sm { font-size: 16px; }
.body b, .body strong { color: var(--rsa-chalk); }
.small { font-size: 13.5px; color: var(--rsa-smoke); line-height: 1.55; }
.fine { font-size: 12.5px; line-height: 1.6; color: var(--rsa-smoke); border-top: 1px solid var(--line-12); padding-top: 14px; }
.stack { display: flex; flex-direction: column; gap: 14px; }
.stack-sm { display: flex; flex-direction: column; gap: 8px; }
.stack-lg { display: flex; flex-direction: column; gap: 22px; }
/* ---------- Buttons ---------- */
.btn-r, .btn-g, .btn-k, .btn-line {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 48px;
  font: 700 13px var(--font-display); letter-spacing: -.01em; text-transform: uppercase; white-space: nowrap;
  padding: 15px 20px; border-radius: 2px; text-decoration: none; border: 0; cursor: pointer;
  transition: background .2s, color .2s, transform .2s, border-color .2s;
}
.rsa-site .btn-r { background: var(--rsa-red); color: #fff; }
.rsa-site .btn-r:hover { background: var(--rsa-red-hover); color: #fff; transform: translateY(-2px); box-shadow: 0 14px 30px rgba(218,42,35,.35); }
.rsa-site .btn-g { background: var(--rsa-green); color: var(--rsa-road-black); font-weight: 800; }
.rsa-site .btn-g:hover { background: var(--rsa-green-hover); color: var(--rsa-road-black); }
.rsa-site .btn-k { background: #000; color: #fff; font-weight: 800; }
.rsa-site .btn-k:hover { background: var(--rsa-red); color: #fff; }
.rsa-site .btn-line { background: transparent; color: #fff; border: 2px solid rgba(255,255,255,.7); font-weight: 800; padding: 13px 18px; }
.rsa-site .btn-line:hover { border-color: var(--rsa-green); color: var(--rsa-green); }
.btn-lg { padding: 20px 26px 18px; font-size: 14px; }
.btn-r[disabled], .btn-r[aria-disabled="true"] { opacity: .45; cursor: not-allowed; transform: none; box-shadow: none; }
.rsa-site .tlink { align-self: start; display: inline-block; color: var(--rsa-green); font: 700 13px var(--font-body); letter-spacing: .06em; text-transform: uppercase; text-decoration: none; border-bottom: 2px solid var(--rsa-green); padding-bottom: 4px; }
.rsa-site .tlink:hover { color: #fff; }
.rsa-site .tlink.w { color: #fff; }
.rsa-site .tlink.w:hover { color: var(--rsa-green); }
.rsa-site .tlink.k { color: var(--rsa-road-black); border-color: var(--rsa-road-black); }
.btn-row { display: flex; align-items: center; gap: 14px 22px; flex-wrap: wrap; }
/* ---------- Badges, chips ---------- */
.badge-g { display: inline-block; align-self: start; background: var(--rsa-green); color: var(--rsa-road-black); font: 700 12px var(--font-display); letter-spacing: -.01em; text-transform: uppercase; white-space: nowrap; padding: 7px 10px 6px; border-radius: 2px; }
.badge-r { display: inline-block; align-self: start; background: var(--rsa-red); color: #fff; font: 800 11px var(--font-display); text-transform: uppercase; padding: 7px 10px 6px; border-radius: 2px; }
.badge-k { display: inline-block; align-self: start; background: #000; color: var(--rsa-green); font: 800 11px var(--font-display); text-transform: uppercase; padding: 7px 10px 6px; border-radius: 2px; }
/* FIX F3: green accent on a red band rides on a black chip in the RSA tag shape */
.chip-k { display: inline-block; background: #000; color: var(--rsa-green); padding: 0 .28em 0 .16em; clip-path: polygon(0 0,100% 0,96% 100%,0 100%); }
/* ---------- Stars (real rating, partial fill) ---------- */
.stars { position: relative; display: inline-block; line-height: 1; letter-spacing: 2px; font-size: 15px; white-space: nowrap; vertical-align: middle; }
.stars-track { color: rgba(255,174,59,.28); }
.stars-fill { position: absolute; left: 0; top: 0; overflow: hidden; color: var(--rsa-amber); }
.stars.on-red .stars-track { color: rgba(255,255,255,.35); }
.stars.on-red .stars-fill { color: #fff; }
/* FIX F5 */
.stars.on-green .stars-track { color: rgba(11,11,12,.25); }
.stars.on-green .stars-fill { color: var(--rsa-road-black); }
.rating-chip { display: inline-flex; align-items: center; gap: 8px; background: #000; color: #fff; font: 700 12px var(--font-display); text-transform: uppercase; padding: 7px 10px; border-radius: 2px; white-space: nowrap; }
.rating-chip .stars { font-size: 12px; }
/* ---------- Header ---------- */
.site-header { position: sticky; top: 0; left: auto; right: auto; height: auto; z-index: 50; background: #000; border-bottom: 3px solid var(--rsa-red); box-shadow: 0 2px 18px rgba(0,0,0,.5); backdrop-filter: none; }
.hdr { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding-top: 12px; padding-bottom: 12px; }
.hdr-logo { display: block; flex: none; }
.hdr-logo img { height: 64px; width: auto; display: block; }
.hdr-nav { display: flex; gap: 2px; white-space: nowrap; min-width: 0; overflow-x: auto; scrollbar-width: none; }
.rsa-site .hdr-nav a { color: #fff; text-decoration: none; font: 700 12px var(--font-body); letter-spacing: .06em; text-transform: uppercase; padding: 10px; }
.rsa-site .hdr-nav a:hover, .rsa-site .hdr-nav a[aria-current="page"] { color: var(--rsa-green); }
.hdr-cta { display: flex; align-items: center; gap: 18px; flex: none; }
.rsa-site .hdr-call { display: flex; flex-direction: column; gap: 2px; text-decoration: none; color: #fff; line-height: 1.1; }
.hdr-call small { font-size: 11px; color: var(--rsa-haze); }
.hdr-call strong { font: 700 15px var(--font-body); }
.rsa-site .hdr-call:hover strong { color: var(--rsa-green); }
.hdr-icon { display: none; width: 48px; height: 48px; align-items: center; justify-content: center; border-radius: 2px; border: 1px solid var(--rsa-field-border); color: #fff; background: transparent; cursor: pointer; flex: none; padding: 0; }
.rsa-site a.hdr-icon { color: var(--rsa-green); }
.hdr-icon svg { width: 22px; height: 22px; }
.mobile-menu { display: none; background: #000; border-top: 3px solid var(--rsa-red); padding: 18px 20px 26px; max-height: calc(100dvh - 80px); overflow-y: auto; }
.mobile-menu.active { display: block; }
.mm-links { display: grid; gap: 2px; margin-bottom: 18px; }
.rsa-site .mm-links a { color: #fff; text-decoration: none; font: 700 16px var(--font-display); text-transform: uppercase; padding: 12px 0; border-bottom: 1px solid var(--line-12); }
.mm-label { display: block; margin: 6px 0 10px; }
/* ---------- Hero (homepage) ---------- */
.h-hero { position: relative; background: #000; color: #fff; overflow: hidden; }
.h-hero-media { position: absolute; left: 0; right: 0; top: 0; bottom: 104px; overflow: hidden; }
.h-hero-media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.h-hero-media::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,0,0,.9) 0%, rgba(0,0,0,.72) 32%, rgba(0,0,0,.34) 56%, rgba(0,0,0,.2) 76%, rgba(0,0,0,.16) 100%); }
.h-hero-media::before { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 90px; background: linear-gradient(0deg, rgba(0,0,0,.55), rgba(0,0,0,0)); z-index: 1; }
.h-hero-inner { position: relative; z-index: 2; padding-top: 96px; min-height: 640px; display: flex; flex-direction: column; justify-content: space-between; gap: 48px; }
.h-hero-copy { display: flex; flex-direction: column; gap: 22px; max-width: 760px; }
.h-hero-badges { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: 14px; color: var(--rsa-fog); }
.h-hero h1 > span { display: block; }
.h-hero h1 .nw { white-space: nowrap; }
.h-hero .btn-r { position: relative; }
.h-hero .btn-r .btn-chip { position: absolute; left: 12px; top: -12px; background: var(--rsa-green); color: var(--rsa-road-black); font: 700 10.5px var(--font-display); text-transform: uppercase; padding: 5px 8px 4px; border-radius: 2px; display: inline-flex; gap: 6px; align-items: center; }
.h-hero .btn-r .btn-chip .stars { font-size: 10px; letter-spacing: 1px; }
.proof { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 13px; color: #fff; }
.proof-faces { display: flex; padding-left: 8px; }
.proof-faces img { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; border: 2px solid #000; margin-left: -8px; }
/* BOOK | ASK bar (option H2) */
.hero-bar { position: relative; z-index: 30; padding: 22px 0 26px; }
.hb-head { display: flex; align-items: center; gap: 16px; margin-bottom: 12px; flex-wrap: wrap; }
.hb-switch { display: inline-grid; grid-template-columns: 1fr 1fr; gap: 4px; background: #000; border: 1px solid var(--rsa-field-border); border-radius: 2px; padding: 4px; }
.hb-switch button { border: 0; cursor: pointer; min-height: 40px; min-width: 88px; border-radius: 2px; padding: 8px 14px; font: 700 13px var(--font-display); text-transform: uppercase; letter-spacing: .04em; background: transparent; color: var(--rsa-chalk); }
.hb-switch button[aria-selected="true"] { background: var(--rsa-green); color: var(--rsa-road-black); }
.hb-switch button:not([aria-selected="true"]):hover { color: var(--rsa-green); }
.hb-hint { font-size: 12.5px; color: var(--rsa-fog); }
.hb-hint strong { display: block; font: 700 14px var(--font-display); color: var(--rsa-green); letter-spacing: .06em; text-transform: uppercase; }
.hb-book { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)) auto; gap: 10px; align-items: stretch; margin: 0; }
.field-label { display: block; font: 700 12px var(--font-display); letter-spacing: .06em; text-transform: uppercase; color: var(--rsa-chalk); margin-bottom: 6px; }
.hb-book .field-label { font-size: 11px; }
.fld, .rsa-site .hb-book input, .rsa-site .hb-book select {
  width: 100%; min-width: 0; border: 1px solid var(--rsa-field-border); border-radius: 2px; padding: 15px 16px; min-height: 52px;
  font: 400 16px var(--font-body); color: var(--rsa-chalk); background: var(--rsa-surface);
}
.rsa-site ::placeholder { color: var(--rsa-ash); opacity: 1; }
/* FIX F14 */
.hb-book .btn-r { align-self: end; min-height: 52px; padding: 0 24px; }
.hb-ask .hero-search-bar { margin: 0; }
@keyframes rsaDot { 0%, 80%, 100% { opacity: .3; } 40% { opacity: 1; } }
/* ---------- Stats ---------- */
.stats { background: var(--rsa-road-black); border-bottom: 1px solid var(--line-10); }
.stats-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 28px; align-items: center; padding-top: 44px; padding-bottom: 44px; }
.stat { display: flex; align-items: center; gap: 16px; }
.stat + .stat { border-left: 1px solid var(--line-10); padding-left: 28px; }
.stat-num { font: 800 clamp(44px, 4.6vw, 68px)/1 var(--font-display); letter-spacing: -.04em; color: var(--rsa-amber); white-space: nowrap; display: flex; align-items: flex-start; }
.stat-num.g { color: var(--rsa-green); }
.stat-num.w { color: var(--rsa-chalk); }
.stat-num sup { font-size: .45em; line-height: 1.4; color: var(--rsa-amber); margin-left: 2px; }
.stat-text { display: flex; flex-direction: column; gap: 4px; }
.stat-text strong { font: 700 15px/1.2 var(--font-body); }
.stat-text span { font-size: 13px; line-height: 1.4; color: var(--rsa-smoke); }
/* ---------- Split heading row ---------- */
.split { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); align-items: center; }
.split-l { display: flex; flex-direction: column; align-items: flex-end; text-align: right; gap: 10px; padding-right: 48px; border-right: 2px solid var(--line-12); }
.split-r { display: flex; flex-direction: column; gap: 14px; padding-left: 48px; }
.rule-g { display: block; height: 6px; background: var(--rsa-green); border-radius: 2px; width: 84%; margin: 0 auto; }
/* ---------- Sections ---------- */
.sec { padding: 96px 0; }
.sec.tight { padding: 64px 0; }
.sec-black { background: #000; }
.sec-road { background: var(--rsa-road-black); }
.sec-surface { background: var(--rsa-surface); }
.sec-gap { display: flex; flex-direction: column; gap: 48px; }
.sec-head { display: flex; flex-direction: column; gap: 10px; max-width: 820px; }
.avatar { width: 56px; height: 56px; flex: none; border-radius: 50%; background: var(--rsa-avatar-blue); color: #fff; display: grid; place-items: center; font: 600 24px var(--font-display); box-shadow: 0 0 0 3px var(--rsa-green); }
.rcard.red .avatar { background: var(--rsa-avatar-brown); box-shadow: 0 0 0 3px #fff; }
.tick-disc { width: 16px; height: 16px; border-radius: 50%; background: var(--rsa-green); color: var(--rsa-road-black); display: grid; place-items: center; font-size: 10px; font-weight: 700; }
.rtile { position: relative; border-radius: 2px; overflow: hidden; min-height: 400px; display: flex; align-items: flex-end; justify-content: center; padding: 28px; }
.rtile img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 60% 20%; transition: transform .6s; }
.rtile:hover img { transform: scale(1.05); }
.rtile::after { content: ''; position: absolute; inset: 0; background: linear-gradient(0deg, rgba(0,0,0,.55), rgba(0,0,0,0) 55%); }
.rtile .rtile-chip { position: relative; z-index: 1; background: var(--rsa-green); color: var(--rsa-road-black); font: 700 13px var(--font-display); text-transform: uppercase; padding: 16px 22px; border-radius: 2px; box-shadow: 0 8px 24px rgba(0,0,0,.3); display: inline-flex; align-items: center; gap: 10px; }
/* ---------- Made equal ---------- */
.equal { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: 48px; align-items: center; }
.equal .h2 { text-align: right; font-size: clamp(28px, 3.2vw, 44px); line-height: 1.14; }
.equal-strip { background: var(--rsa-green); color: var(--rsa-road-black); border-radius: 2px; padding: 22px 26px; display: grid; grid-template-columns: auto minmax(0,1fr) auto minmax(0,1fr); gap: 18px; align-items: center; }
.roundel { width: 84px; height: 84px; flex: none; border-radius: 50%; background: var(--rsa-navy-black); color: #fff; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; box-shadow: 0 0 0 3px var(--rsa-green), 0 0 0 5px var(--rsa-navy-black); }
.roundel b { font: 800 34px/1 var(--font-display); letter-spacing: -.04em; color: var(--rsa-green); }
.roundel span { font: 700 9.5px/1 var(--font-body); letter-spacing: .18em; padding-left: .18em; }
.equal-strip p { margin: 0; font: 700 13.5px/1.4 var(--font-body); }
.equal-div { width: 1px; align-self: stretch; background: rgba(10,20,28,.25); }
.rsa-site .equal-call { text-decoration: none; color: var(--rsa-road-black); display: flex; flex-direction: column; gap: 4px; font: 700 13.5px/1.35 var(--font-body); }
.equal-call span { font-weight: 500; }
.rsa-site .equal-call:hover { color: #000; text-decoration: underline; }
.quote-g { border-left: 4px solid var(--rsa-green); padding: 2px 0 2px 22px; }
.ticks { display: flex; flex-direction: column; gap: 12px; margin: 6px 0 0; padding: 0; list-style: none; }
.ticks li { display: flex; gap: 12px; align-items: flex-start; font-size: 17px; line-height: 1.4; }
.ticks li::before { content: '\2713'; width: 22px; height: 22px; flex: none; border-radius: 50%; border: 2px solid var(--rsa-green); color: var(--rsa-green); display: grid; place-items: center; font-size: 11px; font-weight: 700; margin-top: 1px; }
/* ---------- Steps ---------- */
.steps-grid { display: grid; grid-template-columns: minmax(0,1.5fr) minmax(0,1fr); gap: 56px; align-items: stretch; }
.steps-copy { display: flex; flex-direction: column; gap: 22px; padding-bottom: 40px; }
.steps-head { display: flex; justify-content: flex-end; padding-right: 40px; border-right: 2px solid var(--line-12); }
.steps-head .h2 { text-align: right; max-width: 17ch; font-size: clamp(30px, 3.4vw, 46px); line-height: 1.14; }
.steps-line { display: block; height: 2px; background: var(--line-12); }
.steps-media { position: relative; min-height: 460px; }
.steps-media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 20%; border-radius: 2px; }
.steps-bars { display: grid; grid-template-columns: minmax(0,1.5fr) minmax(0,1fr); gap: 56px; }
.steps-bar { background: var(--rsa-surface); border-radius: 2px; display: flex; align-items: center; margin-right: -56px; position: relative; z-index: 1; }
.rsa-site .steps-bar a { display: flex; align-items: center; gap: 12px; padding: 22px 28px; color: #fff; text-decoration: none; border-right: 1px solid rgba(255,255,255,.18); }
.rsa-site .steps-bar a:hover { color: var(--rsa-green); }
.steps-bar a > span:first-child { font-size: 22px; color: var(--rsa-green); }
.steps-bar a strong { display: flex; flex-direction: column; gap: 2px; font: 700 12px var(--font-body); letter-spacing: .08em; text-transform: uppercase; }
.steps-bar a strong small { font: 400 11px var(--font-body); letter-spacing: 0; color: var(--rsa-haze); text-transform: none; }
.steps-bar > span { padding: 22px 28px; font: 800 clamp(15px, 1.5vw, 19px)/1.3 var(--font-display); text-transform: uppercase; letter-spacing: -.03em; }
.rsa-site .call-box { background: var(--rsa-green); color: var(--rsa-road-black); border-radius: 2px; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 18px; gap: 2px; text-decoration: none; }
.call-box small { font: 700 11px var(--font-body); letter-spacing: .16em; text-transform: uppercase; }
.call-box strong { font: 800 18px var(--font-display); text-transform: uppercase; letter-spacing: -.03em; }
.rsa-site .call-box:hover { background: var(--rsa-green-hover); color: var(--rsa-road-black); }
.steps-list { display: flex; flex-direction: column; gap: 14px; margin: 0; padding: 0; list-style: none; counter-reset: st; }
.steps-list li { font-size: 17px; line-height: 1.7; color: var(--rsa-mist); }
.steps-list li b { color: var(--rsa-chalk); }
/* ---------- Learning (red band) ---------- */
.learn { position: relative; margin-top: 110px; color: #fff; }
.learn::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: clamp(420px, 34vw, 480px); background: var(--rsa-red); }
.learn-inner { position: relative; padding-top: 96px; padding-bottom: 40px; display: flex; flex-direction: column; gap: 56px; }
.learn-head { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: 56px; align-items: center; }
.learn-head p { margin: 0; font-size: 17px; line-height: 1.7; color: #fff; }
/* FIX F4 */
.learn-title { display: flex; flex-direction: column; align-items: flex-end; text-align: right; gap: 10px; padding-right: 40px; border-right: 5px solid #000; }
.learn-grid { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 28px; }
.rsa-site .lcard { background: var(--rsa-surface); color: var(--rsa-chalk); text-decoration: none; border-radius: 2px; padding: 20px; display: grid; grid-template-columns: minmax(0,47%) minmax(0,1fr); gap: clamp(20px, 2.4vw, 36px); align-items: center; box-shadow: 0 4px 44px rgba(0,0,0,.5); border: 1px solid var(--line-08); transition: transform .3s, box-shadow .3s; }
.rsa-site .lcard:hover { transform: translateY(-4px); color: var(--rsa-chalk); }
.lcard-media { position: relative; aspect-ratio: 402 / 292; overflow: hidden; border-radius: 2px; }
.lcard-media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 35%; }
.lcard-body { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.lcard-title { font: 600 clamp(17px, 1.5vw, 22px)/1.15 var(--font-body); text-transform: uppercase; }
.lticks { display: flex; flex-direction: column; gap: 9px; margin: 0; padding: 0; list-style: none; }
.lticks li { display: flex; gap: 9px; align-items: center; font: 500 clamp(14px, 1.15vw, 16px)/1.3 var(--font-body); }
.lticks li::before { content: '\2713'; width: 18px; height: 18px; flex: none; border-radius: 50%; border: 1.5px solid var(--rsa-amber); color: var(--rsa-amber); display: grid; place-items: center; font-size: 10px; font-weight: 700; }
.lcard-price { font: 700 14px var(--font-body); color: var(--rsa-green); }
.lcard-go { font: 800 12px var(--font-display); text-transform: uppercase; color: var(--rsa-green); }
/* ---------- Tickets (pricing, packages, pay-now) ---------- */
.tickets { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 16px; }
.rsa-site .ticket { position: relative; background: var(--rsa-surface); color: var(--rsa-chalk); text-decoration: none; border-top: 5px solid var(--rsa-red); border-radius: 2px; padding: 22px; display: flex; flex-direction: column; gap: 12px; box-shadow: 0 8px 24px rgba(0,0,0,.25); transition: transform .3s, box-shadow .3s; }
.ticket.g { border-top-color: var(--rsa-green); }
.rsa-site .ticket:hover { transform: translateY(-6px); box-shadow: 0 22px 40px rgba(0,0,0,.4); color: var(--rsa-chalk); }
.ticket-kicker { font: 700 11px var(--font-body); letter-spacing: .18em; color: var(--rsa-green); text-transform: uppercase; }
.ticket-num { display: flex; align-items: flex-end; gap: 6px; }
.ticket-num b { font: 800 72px/.86 var(--font-display); letter-spacing: -.05em; color: var(--rsa-green); padding-right: .04em; }
.ticket-num span { font: 600 15px var(--font-body); color: var(--rsa-smoke); padding-bottom: 4px; }
.ticket-name { font: 700 15px/1.25 var(--font-body); text-transform: uppercase; }
.ticket-sub { font: 600 11.5px var(--font-body); letter-spacing: .1em; color: var(--rsa-smoke); text-transform: uppercase; }
.ticket-prices { display: flex; flex-direction: column; gap: 4px; border-top: 1px dashed var(--line-16); padding-top: 12px; font-size: 14px; color: var(--rsa-mist); }
.ticket-prices strong { font: 800 22px var(--font-display); color: var(--rsa-chalk); letter-spacing: -.02em; }
.ticket-prices span b { color: var(--rsa-green); font-weight: 700; }
.rsa-site .ticket-go { margin-top: auto; background: var(--rsa-green); color: var(--rsa-road-black); font: 800 12px var(--font-display); text-transform: uppercase; padding: 14px 14px 12px; border-radius: 2px; display: flex; justify-content: space-between; gap: 8px; }
.rsa-site .ticket-go.r { background: var(--rsa-red); color: #fff; }
.ticket-actions { margin-top: auto; display: flex; flex-direction: column; gap: 8px; }
.ticket-actions a { display: flex; justify-content: space-between; text-decoration: none; }
.rsa-site .ticket-go:hover { background: var(--rsa-green-hover); color: var(--rsa-road-black); }
.rsa-site .ticket-go.r:hover { background: var(--rsa-red-hover); color: #fff; }
.proof-line { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: 14px; color: var(--rsa-mist); }
.proof-line a { font-weight: 700; }
/* ---------- Test prep ---------- */
.prep-row { display: flex; justify-content: center; align-items: center; gap: 18px; flex-wrap: wrap; }
.prep-row > span { font: 800 clamp(18px, 1.8vw, 24px)/1.2 var(--font-display); text-transform: uppercase; letter-spacing: -.03em; margin-right: 14px; }
/* ---------- FAQ (native details, schema text = visible text) ---------- */
.faq { display: flex; flex-direction: column; border-top: 2px solid var(--rsa-chalk); max-width: 900px; }
.faq details { border-bottom: 1px solid var(--line-12); }
.faq summary { list-style: none; display: flex; justify-content: space-between; align-items: center; gap: 16px; cursor: pointer; padding: 22px 0; font: 700 17px/1.4 var(--font-body); color: var(--rsa-chalk); }
.faq summary::-webkit-details-marker { display: none; }
.faq summary h3 { margin: 0; font: inherit; color: inherit; }
.faq summary::after { content: '+'; width: 32px; height: 32px; flex: none; border-radius: 50%; background: var(--rsa-surface); border: 1px solid var(--rsa-field-border); color: var(--rsa-chalk); display: grid; place-items: center; font: 700 18px var(--font-body); }
.faq details[open] summary::after { content: '\2212'; background: var(--rsa-green); border-color: var(--rsa-green); color: var(--rsa-road-black); }
/* FIX F6 */
.faq summary:hover { color: var(--rsa-green); }
.faq details > div, .faq details > p { margin: 0 0 22px; font-size: 16px; line-height: 1.7; color: var(--rsa-mist); max-width: 66ch; }
.faq details > div p { margin: 0 0 10px; }
/* ---------- Call band (red) ---------- */
.callband { background: var(--rsa-red); color: #fff; border-radius: 2px; padding: 44px 40px; display: flex; flex-direction: column; gap: 18px; border-bottom: 6px solid var(--rsa-green); }
.callband .h2 { font-size: clamp(32px, 3.6vw, 50px); line-height: 1.02; }
.callband p { margin: 0; font-size: 16.5px; line-height: 1.6; color: #fff; }
.rsa-site .callband-tel { display: flex; flex-direction: column; gap: 2px; color: #fff; text-decoration: none; line-height: 1.2; }
.callband-tel small { font-size: 12px; color: #fff; }
.callband-tel b { font: 800 18px var(--font-display); }
.rsa-site .callband-tel:hover { color: #fff; text-decoration: underline; }
/* ---------- Footer ---------- */
.site-footer { background: #000; color: #fff; overflow: hidden; border-top: 0; padding: 0; margin: 0; }
.ft { padding-top: 40px; display: flex; flex-direction: column; gap: 44px; }
.ft-ticks { display: flex; justify-content: center; gap: 12px 32px; flex-wrap: wrap; font-size: 14px; font-weight: 500; }
.ft-ticks span::before { content: '\2713'; color: var(--rsa-green); margin-right: 8px; }
.ft-cols { display: grid; grid-template-columns: 1.3fr 1fr 1fr 1fr; gap: 40px; border-top: 1px solid var(--line-12); padding-top: 44px; }
.ft-col { display: flex; flex-direction: column; gap: 11px; }
.ft-h { font: 700 13px var(--font-body); letter-spacing: .14em; text-transform: uppercase; padding-bottom: 12px; padding-right: 24px; background: var(--heading-underline); width: max-content; max-width: 100%; margin: 0 0 4px; color: #fff; }
.ft-two { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 12px; }
.rsa-site .ft a { color: var(--rsa-mist); text-decoration: none; font-size: 14px; line-height: 1.45; padding: 3px 0; }
.rsa-site .ft a:hover { color: var(--rsa-green); }
.rsa-site .ft a.ft-tel { color: var(--rsa-green); font: 800 18px var(--font-display); }
.ft-rating { display: flex; align-items: center; gap: 8px; font-size: 13.5px; color: var(--rsa-mist); }
.ft-legal { display: flex; justify-content: space-between; gap: 12px 24px; flex-wrap: wrap; border-top: 1px solid var(--line-12); padding-top: 22px; font-size: 12.5px; color: var(--rsa-ash); }
.ft-legal p { margin: 0; line-height: 1.6; max-width: 80ch; }
.rsa-site .ft-legal a { color: var(--rsa-ash); font-size: 12.5px; }
.ft-legal nav { display: flex; gap: 6px 16px; flex-wrap: wrap; }
.ft-word { display: flex; justify-content: center; gap: .25em; font: 800 min(10.5vw, 136px)/.9 var(--font-display); margin: 0 0 -.12em; white-space: nowrap; letter-spacing: -.03em; user-select: none; }
.ft-word span:first-child { color: rgba(255,255,255,.14); }
.ft-word span:last-child { color: var(--rsa-green); }
/* ---------- Sticky mobile CTA ---------- */
.rsa-site .sticky-mobile-cta { display: none; position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; background: #000; border-top: 3px solid var(--rsa-red); padding: 10px 12px calc(10px + env(safe-area-inset-bottom)); transform: none; transition: transform .25s; }
.rsa-site .sticky-mobile-cta.is-hidden { transform: translateY(110%); }
.rsa-site .sticky-mobile-cta-inner { display: grid; grid-template-columns: 1fr 1.4fr; gap: 10px; max-width: 560px; margin: 0 auto; }
.rsa-site .sticky-cta-call, .rsa-site .sticky-cta-book { display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 48px; border-radius: 2px; font: 800 13px var(--font-display); text-transform: uppercase; text-decoration: none; }
.rsa-site .sticky-cta-call { border: 2px solid rgba(255,255,255,.7); color: #fff; background: transparent; }
.rsa-site .sticky-cta-book { background: var(--rsa-red); color: #fff; }
/* ---------- Lead form re-skin (frozen ids and classes) ---------- */
.rsa-site #contact-form-anchor .container, .rsa-site .lead-wrap .container { max-width: none; padding: 0; }
.rsa-site .lead-form-card { background: var(--rsa-surface); border: 1px solid var(--line-12); border-top: 5px solid var(--rsa-green); border-radius: 2px; padding: 32px; box-shadow: 0 18px 40px rgba(0,0,0,.3); max-width: none; margin: 0; }
.rsa-site .lead-form-header { text-align: left; margin-bottom: 18px; }
.rsa-site .lead-form-header h2 { margin: 0 0 8px; font: 800 clamp(24px, 2.6vw, 34px)/1.08 var(--font-display); letter-spacing: -.03em; text-transform: uppercase; color: var(--rsa-chalk); }
.rsa-site .lead-form-header p { margin: 0; color: var(--rsa-mist); font-size: 16px; }
.rsa-site .lead-form-steps { display: flex; align-items: center; gap: 10px; margin: 0 0 22px; justify-content: flex-start; }
.rsa-site .lead-form-step { display: flex; align-items: center; gap: 8px; font: 700 12px var(--font-display); text-transform: uppercase; letter-spacing: .04em; color: var(--rsa-track-text); background: none; padding: 0; }
.rsa-site .lead-form-step-num { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 4px; background: var(--rsa-track); color: var(--rsa-track-text); font: 800 15px var(--font-display); border: 2px solid var(--rsa-track); }
.rsa-site .lead-form-step.active { color: var(--rsa-chalk); }
.rsa-site .lead-form-step.active .lead-form-step-num { background: var(--rsa-green); color: var(--rsa-road-black); border-color: var(--rsa-green); }
.rsa-site .lead-form-step-line { flex: 0 1 60px; height: 4px; background: repeating-linear-gradient(90deg, var(--rsa-green) 0 10px, transparent 10px 16px); }
.rsa-site .lead-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 16px 18px; }
.rsa-site .lead-form-field.full { grid-column: 1 / -1; }
.rsa-site .lead-form-label { display: block; font: 700 12px var(--font-display); letter-spacing: .06em; text-transform: uppercase; color: var(--rsa-chalk); margin-bottom: 7px; }
/* color-scheme, because Chrome draws the date picker's calendar glyph from it
   and nothing else. Undeclared it assumes light and draws a dark glyph, which
   on this --rsa-night field is invisible: still there, still clickable, just
   unseeable. Declared beside the background so the two stay together. */
.rsa-site .lead-form-input, .rsa-site .lead-form-select, .rsa-site .lead-form-textarea { width: 100%; min-height: 48px; background: var(--rsa-night); color-scheme: dark; border: 1px solid var(--rsa-field-border); border-radius: 2px; color: var(--rsa-chalk); font: 400 16px var(--font-body); padding: 12px 14px; }
.rsa-site .lead-form-select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--rsa-green) 50%), linear-gradient(135deg, var(--rsa-green) 50%, transparent 50%); background-position: calc(100% - 20px) 21px, calc(100% - 14px) 21px; background-size: 6px 6px; background-repeat: no-repeat; padding-right: 36px; }
.rsa-site .lead-form-select:disabled { opacity: .5; }
.rsa-site .lead-form-input:focus, .rsa-site .lead-form-select:focus, .rsa-site .lead-form-textarea:focus { border-color: var(--rsa-green); outline: none; }
.rsa-site .lead-form-radio-group { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; background: var(--rsa-night); border: 1px solid var(--rsa-field-border); border-radius: 2px; padding: 4px; }
.rsa-site .lead-form-radio { position: relative; display: block; cursor: pointer; margin: 0; padding: 0; }
.rsa-site .lead-form-radio input { position: absolute; opacity: 0; inset: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.rsa-site .lead-form-radio span { display: grid; place-items: center; min-height: 40px; border-radius: 2px; font: 700 13px var(--font-display); text-transform: uppercase; color: var(--rsa-chalk); background: transparent; border: 0; padding: 0 10px; }
.rsa-site .lead-form-radio input:checked + span { background: var(--rsa-green); color: var(--rsa-road-black); }
.rsa-site .lead-form-radio input:focus-visible + span { outline: 3px solid var(--rsa-green); outline-offset: 2px; }
.rsa-site .lead-form-submit { width: 100%; min-height: 52px; background: var(--rsa-red); color: #fff; border: 0; border-radius: 2px; font: 800 14px var(--font-display); text-transform: uppercase; cursor: pointer; padding: 0 20px; transition: background .2s; }
.rsa-site .lead-form-submit:hover { background: var(--rsa-red-hover); }
.rsa-site .lead-form-submit:disabled { opacity: .6; cursor: progress; }
.rsa-site .lead-form-actions { display: flex; align-items: center; gap: 18px; }
.rsa-site .lead-form-actions .lead-form-submit { flex: 1; }
.rsa-site .lead-form-back { background: none; border: 0; border-bottom: 2px solid var(--rsa-green); color: var(--rsa-chalk); font: 700 13px var(--font-body); letter-spacing: .06em; text-transform: uppercase; padding: 4px 0; cursor: pointer; min-height: 44px; }
.rsa-site .captcha-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.rsa-site .captcha-row .lead-form-label { margin: 0; }
.rsa-site .captcha-input { max-width: 160px; }
.rsa-site .captcha-error, .rsa-site .status-error { color: var(--rsa-red-text); border-left: 2px solid var(--rsa-red); padding-left: 10px; margin-top: 8px; font-size: 14px; }
.rsa-site .lead-form-status { margin-top: 12px; }
/* ---------- Town pages (shared) ---------- */
.crumbs { display: flex; gap: 10px; font-size: 13px; color: var(--rsa-fog); flex-wrap: wrap; }
.rsa-site .crumbs a { color: var(--rsa-fog); text-decoration: none; }
.rsa-site .crumbs a:hover { color: var(--rsa-green); }
.crumbs [aria-current] { color: #fff; font-weight: 600; }
.t-body { display: flex; flex-wrap: wrap; gap: 48px; align-items: flex-start; padding-top: 56px; padding-bottom: 104px; }
.t-main { flex: 999 1 560px; min-width: 0; display: flex; flex-direction: column; gap: 88px; }
.t-side { flex: 1 1 320px; position: sticky; top: 104px; display: flex; flex-direction: column; gap: 16px; }
.t-sec { display: flex; flex-direction: column; gap: 24px; }
.t-sec-lg { display: flex; flex-direction: column; gap: 40px; }
.t-head { display: flex; flex-direction: column; gap: 10px; }
.t-head .h2 { font-size: clamp(28px, 3vw, 40px); line-height: 1.06; }
.book-card { background: var(--rsa-surface); border: 1px solid var(--line-12); border-top: 5px solid var(--rsa-green); border-radius: 2px; padding: 32px; display: flex; flex-direction: column; gap: 18px; }
.book-card .lead-form-card { padding: 0; border: 0; box-shadow: none; background: transparent; }
.book-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; flex-wrap: wrap; }
.town-pin { display: inline-flex; align-items: center; gap: 8px; background: #000; font: 700 12px var(--font-body); letter-spacing: .08em; text-transform: uppercase; padding: 9px 12px; border-radius: 2px; }
.town-pin::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--rsa-red); }
.explore { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; border-bottom: 1px solid var(--line-12); padding-bottom: 14px; }
.explore > span { font: 800 12px var(--font-display); text-transform: uppercase; margin-right: 10px; }
.rsa-site .explore a { text-decoration: none; color: var(--rsa-chalk); font: 600 13px var(--font-body); padding: 10px 12px; border-radius: 2px; background: var(--rsa-surface); border: 1px solid var(--line-12); }
.rsa-site .explore a:hover { background: var(--rsa-green); color: var(--rsa-road-black); }
.duo { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 28px 40px; align-items: center; }
.ph { position: relative; overflow: hidden; border-radius: 2px; }
.ph img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.ph.tall { aspect-ratio: 4 / 4.4; }
.ph.wide { aspect-ratio: 3 / 2; }
.ph.sq { aspect-ratio: 1; }
.ph-tag { position: absolute; left: 0; bottom: 0; background: var(--rsa-red); color: #fff; font: 800 12px var(--font-display); text-transform: uppercase; padding: 12px 16px 10px; z-index: 1; }
.ph-tag.g { left: auto; right: 0; background: var(--rsa-green); color: var(--rsa-road-black); }
.panel { background: var(--rsa-surface); border-radius: 2px; padding: 40px 36px; display: flex; flex-direction: column; gap: 28px; }
.panel-line { border: 1px solid var(--line-12); border-radius: 2px; padding: 40px 36px; display: flex; flex-direction: column; gap: 20px; }
.edt-panel { position: relative; overflow: hidden; background: #000; color: #fff; border-radius: 2px; padding: 44px 40px; display: flex; flex-direction: column; gap: 28px; }
.edt-panel .wm { position: absolute; right: -30px; bottom: -60px; font: 800 260px/1 var(--font-display); color: rgba(255,255,255,.04); letter-spacing: -.05em; pointer-events: none; }
.edt-eq { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; position: relative; }
.edt-eq > span { display: flex; flex-direction: column; gap: 6px; }
.edt-eq b { font: 800 84px/.86 var(--font-display); letter-spacing: -.05em; padding-right: .06em; }
.edt-eq b.g { color: var(--rsa-green); }
.edt-eq small { font: 700 11px var(--font-body); letter-spacing: .16em; color: var(--rsa-haze); text-transform: uppercase; }
.edt-eq i { font: 800 40px var(--font-display); color: var(--rsa-green); font-style: normal; }
.edt-track { display: grid; grid-template-columns: repeat(12, minmax(0,1fr)); gap: 4px; position: relative; }
.edt-track span { height: 28px; border-radius: 2px; background: var(--rsa-track); color: var(--rsa-track-text); display: grid; place-items: center; font: 700 11px var(--font-display); }
.edt-track span.on { background: var(--rsa-green); color: var(--rsa-road-black); }
.plates { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.plate { width: 56px; height: 56px; background: #fff; border-radius: 4px; display: grid; place-items: center; font: 800 34px var(--font-display); color: var(--rsa-plate-red); box-shadow: inset 0 0 0 3px var(--rsa-plate-red); }
.plate.n { color: #1d4ed8; box-shadow: inset 0 0 0 3px #1d4ed8; }
.plates i { color: var(--rsa-smoke); font: 700 22px var(--font-display); font-style: normal; }
.steps3 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 160px), 1fr)); gap: 16px; }
.step-g { border-top: 4px solid var(--rsa-green); padding-top: 16px; display: flex; flex-direction: column; gap: 6px; }
.step-g b { font: 800 40px/1 var(--font-display); color: var(--rsa-green); }
.step-g span { font: 700 15px var(--font-body); }
.step-g p { margin: 0; font-size: 14px; color: var(--rsa-smoke); line-height: 1.55; }
.centres { display: flex; flex-direction: column; gap: 8px; }
.centre { display: grid; grid-template-columns: auto minmax(0,1fr) auto; gap: 14px; align-items: center; background: var(--rsa-surface); border: 1px solid var(--line-12); border-radius: 2px; padding: 14px 16px; }
.centre.first { border-color: var(--rsa-green); }
.centre-rank { width: 34px; height: 34px; border-radius: 50%; background: #000; color: var(--rsa-green); display: grid; place-items: center; font: 800 14px var(--font-display); }
.centre-name { font: 700 15.5px var(--font-body); display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.centre-addr { font-size: 13px; color: var(--rsa-smoke); }
.centre-dist { text-align: right; font-size: 12.5px; color: var(--rsa-smoke); }
.centre-dist strong { display: block; font: 800 18px var(--font-display); color: var(--rsa-chalk); }
.nearby { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 200px), 1fr)); gap: 10px; }
.rsa-site .nearby a { display: flex; justify-content: space-between; align-items: center; gap: 10px; border: 1px solid var(--line-12); border-radius: 2px; padding: 14px 16px; text-decoration: none; color: var(--rsa-chalk); font: 600 15px var(--font-body); transition: all .2s; min-height: 48px; }
.rsa-site .nearby a:hover { border-color: var(--rsa-green); color: var(--rsa-green); }
.nearby a small { display: block; font: 500 12px var(--font-body); color: var(--rsa-smoke); }
.county-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.rsa-site .county-chips a { text-decoration: none; color: var(--rsa-green); font: 600 13.5px var(--font-body); padding: 9px 12px; border-radius: 2px; background: var(--rsa-surface); border: 1px solid var(--line-12); }
.rsa-site .county-chips a:hover { background: var(--rsa-red); border-color: var(--rsa-red); color: #fff; }
.pickups { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 16px; }
.pickup { background: var(--rsa-surface); border-radius: 2px; padding: 18px 20px; display: flex; flex-direction: column; gap: 10px; }
.pickup h3 { margin: 0; font: 800 14px var(--font-display); text-transform: uppercase; color: var(--rsa-green); letter-spacing: .02em; }
.pickup ul { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 8px; }
.pickup li { font-size: 14.5px; line-height: 1.4; }
.pickup li span { display: block; font-size: 12.5px; color: var(--rsa-smoke); }
.side-card { background: #000; color: #fff; border-radius: 2px; overflow: hidden; box-shadow: 0 20px 44px rgba(0,0,0,.18); border: 1px solid var(--line-10); }
.side-card::before { content: ''; display: block; height: 5px; background: var(--rsa-green); }
.side-in { padding: 24px; display: flex; flex-direction: column; gap: 20px; }
.rsa-site .side-cta { background: var(--rsa-green); color: var(--rsa-road-black); text-decoration: none; font: 800 13px var(--font-display); text-transform: uppercase; padding: 17px 18px 15px; border-radius: 2px; display: flex; justify-content: space-between; gap: 12px; }
.rsa-site .side-cta:hover { background: var(--rsa-green-hover); color: var(--rsa-road-black); }
.rsa-site .side-cta.r { background: var(--rsa-red); color: #fff; }
.rsa-site .side-cta.r:hover { background: var(--rsa-red-hover); color: #fff; }
.side-dl { display: grid; grid-template-columns: 72px minmax(0,1fr); gap: 10px 12px; font-size: 14px; align-items: baseline; margin: 0; }
.side-dl dt { color: var(--rsa-haze); }
.side-dl dd { margin: 0; }
.rsa-site .side-dl a { color: #fff; text-decoration: none; overflow-wrap: anywhere; }
.rsa-site .side-dl a:hover { color: var(--rsa-green); }
.side-counties { display: flex; flex-direction: column; gap: 2px; border-top: 1px solid var(--line-16); padding-top: 16px; }
.side-counties > span { font: 700 11px var(--font-body); letter-spacing: .18em; color: var(--rsa-green); margin-bottom: 8px; text-transform: uppercase; }
.rsa-site .side-counties a { display: flex; justify-content: space-between; gap: 10px; font-size: 13.5px; padding: 6px 8px; border-radius: 2px; color: var(--rsa-fog); text-decoration: none; }
.rsa-site .side-counties a:hover { color: var(--rsa-green); }
.rsa-site .side-counties a[aria-current] { background: #22261C; color: var(--rsa-chalk); font-weight: 700; box-shadow: inset 3px 0 0 var(--rsa-green); }
/* FIX F10 */
.map-frame { background: var(--rsa-surface); border-radius: 2px; padding: 6px; display: flex; flex-direction: column; gap: 6px; border-top: 3px solid var(--rsa-green); }
.map-frame iframe { width: 100%; height: 240px; border: 0; display: block; border-radius: 2px; }
.rsa-site .map-frame a { font: 700 12px var(--font-body); letter-spacing: .08em; text-transform: uppercase; text-decoration: none; padding: 8px; }
/* ---------- Skin A: Signpost ---------- */
.ta-hero { position: relative; background: #000; color: #fff; overflow: hidden; }
.ta-hero > picture img, .ta-hero > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.ta-hero::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,0,0,.93) 0%, rgba(0,0,0,.74) 36%, rgba(0,0,0,.3) 62%, rgba(0,0,0,.14) 100%); }
.ta-hero-in { position: relative; z-index: 1; padding-top: 28px; padding-bottom: 64px; min-height: 580px; display: flex; flex-direction: column; gap: 20px; }
.ta-copy { display: flex; flex-direction: column; gap: 20px; max-width: 640px; margin-top: auto; }
.town-h1 { margin: 0; font-family: var(--font-display); font-weight: 800; text-transform: uppercase; letter-spacing: -.03em; display: flex; flex-direction: column; }
.town-h1:has([data-town-fit]) { container-type: inline-size; min-width: 0; }
.town-h1 .s { font-size: clamp(28px, 3.2vw, 44px); line-height: 1; }
.town-h1 .t { --town-font-size: clamp(52px, 7vw, 100px); font-size: var(--town-font-size); line-height: .95; color: var(--rsa-green); margin: 4px 0 6px; padding-right: .06em; text-wrap: balance; overflow-wrap: break-word; hyphens: auto; }
.town-h1 [data-town-fit] { font-size: var(--town-fit-size, min(var(--town-font-size), calc(95cqi / var(--town-name-length, 20)))); white-space: nowrap; overflow-wrap: normal; word-break: normal; hyphens: none; }
.rsa-site .town-h1 .t.long { --town-font-size: clamp(40px, 5.2vw, 76px); }
.rsa-site .town-h1 .t.xlong { --town-font-size: clamp(30px, 3.9vw, 56px); }
.h1 .rsa, .h2 .rsa, .h3 .rsa, .ft-legal .rsa, .prep-row .rsa { white-space: normal; }
.rsa-site .give-call { color: #fff; text-decoration: none; font-size: 14px; }
.rsa-site .give-call b { color: #fff; }
.rsa-site .give-call:hover b { color: var(--rsa-green); }
.green-rule { height: 6px; background: var(--rsa-green); }
/* ---------- Skin B: Route ---------- */
.tb-hero { background: var(--rsa-surface); position: relative; overflow: hidden; }
.tb-hero-in { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 440px), 1fr)); gap: 40px 56px; align-items: center; padding-top: 28px; padding-bottom: 64px; }
.tb-copy { display: flex; flex-direction: column; gap: 20px; }
.tb-copy .crumbs { color: var(--rsa-smoke); }
.rsa-site .tb-copy .crumbs a { color: var(--rsa-smoke); }
.tb-copy .crumbs [aria-current] { color: var(--rsa-chalk); }
.tb-copy .town-h1 .t { --town-font-size: clamp(50px, 6.4vw, 92px); margin: 6px 0 0; }
.tb-copy .lede { color: var(--rsa-mist); }
.tb-card { position: relative; min-height: 470px; }
.tb-card::before { content: ''; position: absolute; inset: 40px 0 0 40px; background: var(--rsa-green); border-radius: 2px; }
.tb-card picture img, .tb-card > img { position: absolute; inset: 0 40px 40px 0; width: calc(100% - 40px); height: calc(100% - 40px); object-fit: cover; object-position: 50% 20%; border-radius: 2px; }
.tb-pin { position: absolute; left: 0; top: 28px; background: #000; color: #fff; font: 800 13px var(--font-display); text-transform: uppercase; padding: 13px 16px 11px; display: flex; gap: 10px; align-items: center; z-index: 1; }
.tb-pin::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--rsa-green); }
.tb-eq { position: absolute; right: 0; bottom: 0; z-index: 1; background: var(--rsa-surface); border-radius: 2px; padding: 18px 20px; box-shadow: 0 18px 40px rgba(0,0,0,.35); display: flex; align-items: center; gap: 12px; }
.tb-eq b { font: 800 40px/.9 var(--font-display); color: var(--rsa-green); letter-spacing: -.04em; }
.tb-eq b.c { color: var(--rsa-chalk); }
/* FIX F1 (was black on Surface) */
.tb-eq i { font: 800 22px var(--font-display); color: var(--rsa-amber); font-style: normal; }
.tb-eq small { font: 700 10.5px/1.35 var(--font-body); letter-spacing: .12em; color: var(--rsa-smoke); text-transform: uppercase; }
.tb-explore { background: var(--rsa-red); }
.tb-explore-in { display: flex; align-items: center; gap: 4px; overflow-x: auto; scrollbar-width: none; }
.tb-explore-in > span { font: 800 13px var(--font-display); text-transform: uppercase; white-space: nowrap; padding: 18px 20px 18px 0; margin-right: 6px; border-right: 1px solid var(--line-25); }
.tb-explore-in > span .chip-k { padding-top: 2px; padding-bottom: 2px; }
.rsa-site .tb-explore-in a { color: #fff; text-decoration: none; font: 700 13px var(--font-body); white-space: nowrap; padding: 18px 14px; }
.rsa-site .tb-explore-in a:hover { color: #000; text-decoration: underline; }
.tb-main { position: relative; padding-left: 64px; gap: 84px; }
.tb-main::before { content: ''; position: absolute; left: 20px; top: 20px; bottom: 20px; width: 4px; background: repeating-linear-gradient(180deg, var(--rsa-graphite) 0 18px, transparent 18px 30px); }
.tb-step { position: relative; }
.tb-num { position: absolute; left: -64px; top: -6px; width: 44px; height: 44px; border-radius: 50%; background: #000; color: var(--rsa-green); display: grid; place-items: center; font: 800 15px var(--font-display); box-shadow: 0 0 0 6px var(--rsa-road-black); }
.tb-num.p { border-radius: 4px; background: var(--rsa-surface); border: 3px solid var(--rsa-chalk); color: var(--rsa-plate-red); font: 800 24px var(--font-body); }
.tb-rail { display: flex; flex-direction: column; gap: 12px; }
.rsa-site .rail { display: flex; flex-wrap: wrap; align-items: stretch; background: var(--rsa-surface); border: 1px solid var(--line-12); border-radius: 2px; text-decoration: none; color: var(--rsa-chalk); overflow: hidden; transition: transform .3s, border-color .3s; }
.rsa-site .rail:hover { transform: translateX(6px); border-color: var(--rsa-green); color: var(--rsa-chalk); }
.rail-num { flex: 0 0 112px; background: var(--rsa-red); color: #fff; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; padding: 18px 8px; }
.rail-num b { font: 800 46px/.9 var(--font-display); letter-spacing: -.04em; }
.rail-num b .chip-k { padding: 2px 6px; }
.rail-num small { font: 700 10px var(--font-body); letter-spacing: .2em; color: #fff; text-transform: uppercase; }
.rail-num.g { background: var(--rsa-green); color: var(--rsa-road-black); }
.rail-num.g small { color: var(--rsa-road-black); }
.rail-body { flex: 1 1 240px; padding: 18px 22px; display: flex; flex-direction: column; gap: 6px; justify-content: center; border-left: 2px dashed var(--line-12); }
.rail-body strong { font: 700 16px/1.25 var(--font-body); text-transform: uppercase; }
.rail-body .p { font-size: 14px; color: var(--rsa-mist); }
.rail-body .p b { color: var(--rsa-green); }
.tb-guide { border: 6px solid var(--rsa-green); border-radius: 2px; padding: 36px; display: flex; flex-direction: column; gap: 22px; }
.tb-guide .edt-eq b { font-size: 96px; line-height: .84; color: var(--rsa-chalk); }
/* FIX F1 */
.tb-guide .edt-eq b.g { color: var(--rsa-green); }
.road-dash { flex: 0 1 120px; min-width: 50px; height: 6px; background: repeating-linear-gradient(90deg, var(--rsa-green) 0 16px, transparent 16px 26px); }
.tb-redcard .ph { min-height: 260px; border-radius: 0; }
/* ---------- Skin C: Night drive ---------- */
.tc-hero { position: relative; background: #000; color: #fff; overflow: hidden; }
.tc-media { --town-wedge-top: 16%; --town-wedge-bottom: 0%; position: absolute; top: 0; right: 0; bottom: 0; width: clamp(0px, calc(100% - 640px), 58%); }
.tc-media::before { content: ''; position: absolute; inset: 0; background: var(--rsa-green); clip-path: polygon(var(--town-wedge-top) 0,100% 0,100% 100%,var(--town-wedge-bottom) 100%); }
.tc-media picture img, .tc-media > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; clip-path: polygon(19% 0,100% 0,100% 100%,3% 100%); }
.tc-media::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,0,0,.55), rgba(0,0,0,0) 45%); clip-path: polygon(19% 0,100% 0,100% 100%,3% 100%); }
.tc-hero-in { position: relative; z-index: 1; padding-top: 28px; padding-bottom: 72px; min-height: 600px; display: flex; flex-direction: column; gap: 20px; }
.tc-copy { max-width: min(560px, calc(100% - 40px)); margin-top: auto; display: flex; flex-direction: column; gap: 20px; }
.tc-copy .town-h1 { text-shadow: 0 4px 24px rgba(0,0,0,.6); }
.tc-copy .town-h1 .s { font-size: clamp(26px, 3vw, 40px); }
.tc-copy .town-h1 .t { --town-font-size: clamp(48px, min(7.6vw, 8.5vw - 20px), 104px); line-height: .92; }
.tc-ink .rsa { color: inherit; }
.tc-ink .rsa b { color: #fff; }
.btn-line > .tc-ink { display: flex; align-items: center; justify-content: center; inset: -1px; border: 1px solid var(--rsa-road-black); border-radius: inherit; }
.tc-band { background: var(--rsa-green); color: var(--rsa-road-black); }
.tc-band-in { display: flex; gap: 12px 36px; flex-wrap: wrap; align-items: center; padding-top: 16px; padding-bottom: 16px; }
.tc-band-in span { display: flex; align-items: center; gap: 10px; font: 700 14px var(--font-body); }
.tc-band-in span::before { content: '\2713'; width: 22px; height: 22px; border-radius: 50%; background: #000; color: var(--rsa-green); display: grid; place-items: center; font-size: 11px; }
.tc-redbook .lead-form-card { box-shadow: 0 14px 30px rgba(0,0,0,.25); border-top-color: #000; }
.tc-lesson .ph { aspect-ratio: 4 / 3.4; border-radius: 0; }
.rsa-site .tc-lesson:hover .tlink { color: #fff; }
.tc-ticket .ticket-go { margin: 20px 22px 22px; }
.tc-step.r b .chip-k { padding: 0 .2em; }
.tc-greenband .h2 { color: #000; }
.rsa-site .tc-greenband .callband-tel { color: var(--rsa-road-black); }
/* ---------- Generic page hero (service, utility pages) ---------- */
.p-hero { position: relative; background: #000; color: #fff; overflow: hidden; border-bottom: 6px solid var(--rsa-green); }
.p-hero > picture img, .p-hero > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.p-hero.has-photo::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,0,0,.93) 0%, rgba(0,0,0,.78) 40%, rgba(0,0,0,.35) 70%, rgba(0,0,0,.2) 100%); }
.p-hero-in { position: relative; z-index: 1; padding-top: 40px; padding-bottom: 56px; display: flex; flex-direction: column; gap: 20px; }
.p-hero-copy { display: flex; flex-direction: column; gap: 20px; max-width: 700px; }
.p-hero.compact .p-hero-in { padding-top: 28px; padding-bottom: 40px; }
.p-hero .h1 { font-size: clamp(34px, 4.6vw, 60px); }
.p-hero .hero-search-bar { max-width: 760px; }
.rsa-site .container { max-width: var(--container); padding-left: var(--gutter); padding-right: var(--gutter); }
.rsa-site [class*="-card"]:not(.lead-form-card):not(.lcard):not(.rcard):not(.book-card):not(.side-card):not(.tb-side-card):not(.tc-bigcard):not(.chat-cta-card) { border-radius: 2px; }
.rsa-site .cn-final-cta, .rsa-site .cta-section .container > div:first-child { border-radius: 2px; }
.rsa-site table { border-collapse: collapse; }
.rsa-site th { font-family: var(--font-display); text-transform: uppercase; font-size: 12px; letter-spacing: .06em; color: var(--rsa-chalk); }
.rsa-site td, .rsa-site th { border-color: var(--line-12) !important; }
/* ---------- Pay-now: ticket rail (option P1) ---------- */
.rsa-site .pn-products-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr)); gap: 14px; }
.rsa-site .pn-product-card { position: relative; background: var(--rsa-surface); border: 1px solid var(--line-12); border-top: 5px solid var(--rsa-red); border-radius: 2px; padding: 20px; display: flex; flex-direction: column; gap: 10px; text-align: left; transition: transform .3s, box-shadow .3s; }
.rsa-site .pn-product-card:hover { transform: translateY(-4px); border-color: var(--line-16); border-top-color: var(--rsa-red); box-shadow: 0 18px 36px rgba(0,0,0,.4); }
.rsa-site .pn-product-card.is-selected { box-shadow: inset 0 0 0 3px var(--rsa-red); }
.rsa-site .pn-ticket-num { font: 800 64px/.86 var(--font-display); letter-spacing: -.05em; color: var(--rsa-green); }
.rsa-site .pn-ticket-num.pre { font-size: 44px; }
.rsa-site .pn-product-name { font: 700 14px/1.3 var(--font-body); text-transform: uppercase; color: var(--rsa-chalk); }
.rsa-site .pn-product-price { font: 800 24px var(--font-display); color: var(--rsa-chalk); letter-spacing: -.02em; }
.rsa-site .pn-product-btn { margin-top: auto; width: 100%; min-height: 46px; background: var(--rsa-green); color: var(--rsa-road-black); border: 0; border-radius: 2px; font: 800 12px var(--font-display); text-transform: uppercase; cursor: pointer; filter: none; }
.rsa-site .pn-product-btn:hover { background: var(--rsa-green-hover); filter: none; }
.rsa-site .pn-checkout-container { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 28px; align-items: start; }
.rsa-site .pn-form-section { background: var(--rsa-surface); border: 1px solid var(--line-12); border-radius: 2px; padding: 26px; margin-bottom: 16px; }
.rsa-site .pn-section-header { display: flex; align-items: center; gap: 14px; margin-bottom: 18px; flex-wrap: wrap; }
.rsa-site .pn-section-number { width: auto; height: auto; background: none; border: 0; font: 800 44px/1 var(--font-display); color: transparent; -webkit-text-stroke: 2px var(--rsa-red); }
.rsa-site .pn-section-title { margin: 0; font: 800 20px var(--font-display); text-transform: uppercase; color: var(--rsa-chalk); letter-spacing: -.02em; }
.rsa-site .pn-label { display: block; font: 700 12px var(--font-display); letter-spacing: .06em; text-transform: uppercase; color: var(--rsa-chalk); margin-bottom: 7px; }
.rsa-site .pn-input { width: 100%; min-height: 48px; background: #000; border: 1px solid var(--rsa-field-border); border-radius: 2px; color: var(--rsa-chalk); font: 400 16px var(--font-body); padding: 12px 14px; }
.rsa-site .pn-input:focus { border-color: var(--rsa-green); outline: none; }
.rsa-site .pn-card-element { background: #000; border: 1px solid var(--rsa-field-border); border-radius: 2px; padding: 15px 14px; }
.rsa-site .pn-card-element.StripeElement--focus { border-color: var(--rsa-green); }
.rsa-site .pn-toggle-group { display: inline-grid; grid-template-columns: 1fr 1fr; gap: 4px; background: #000; border: 1px solid var(--rsa-field-border); border-radius: 2px; padding: 4px; }
.rsa-site .pn-toggle { position: relative; }
.rsa-site .pn-toggle input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.rsa-site .pn-toggle-btn { display: grid; place-items: center; min-height: 40px; min-width: 80px; border-radius: 2px; font: 700 13px var(--font-display); text-transform: uppercase; color: var(--rsa-chalk); background: transparent; border: 0; }
.rsa-site .pn-toggle input:checked + .pn-toggle-btn { background: var(--rsa-green); color: var(--rsa-road-black); }
.rsa-site .pn-pay-button { width: 100%; min-height: 56px; background: var(--rsa-red); color: #fff; border: 0; border-radius: 2px; font: 800 15px var(--font-display); text-transform: uppercase; display: flex; align-items: center; justify-content: center; gap: 10px; cursor: pointer; margin-top: 16px; }
.rsa-site .pn-pay-button:hover { background: var(--rsa-red-hover); }
.rsa-site .pn-pay-button:disabled { opacity: .5; }
.rsa-site .pn-spinner { width: 28px; height: 4px; display: inline-block; background: repeating-linear-gradient(90deg, var(--rsa-green) 0 6px, transparent 6px 10px); }
.rsa-site .pn-order-card { position: sticky; top: 104px; background: #000; border: 1px solid var(--line-10); border-radius: 2px; overflow: hidden; }
.rsa-site .pn-order-card::before { content: ''; display: block; height: 5px; background: var(--rsa-green); }
.rsa-site .pn-order-card-header { padding: 20px 24px 0; font: 700 11px var(--font-body); letter-spacing: .18em; text-transform: uppercase; color: var(--rsa-green); background: none; border: 0; }
.rsa-site .pn-order-product { padding: 12px 24px; }
.rsa-site .pn-order-product-name { font: 800 20px/1.15 var(--font-display); text-transform: uppercase; color: #fff; }
.rsa-site .pn-order-product-meta { font-size: 13px; color: var(--rsa-smoke); }
.rsa-site .pn-order-total { display: flex; justify-content: space-between; align-items: baseline; padding: 14px 24px; border-top: 1px solid var(--line-16); border-bottom: 1px solid var(--line-16); color: var(--rsa-mist); }
.rsa-site .pn-order-total-price { font: 800 30px var(--font-display); color: #fff; }
.rsa-site .pn-order-trust { padding: 16px 24px 22px; display: flex; flex-direction: column; gap: 10px; }
.rsa-site .pn-trust-item { display: flex; gap: 10px; align-items: center; font-size: 13.5px; color: var(--rsa-mist); }
.rsa-site .pn-terms-label { display: flex; gap: 10px; align-items: flex-start; font-size: 14px; color: var(--rsa-mist); }
.rsa-site .pn-terms-label input { width: 20px; height: 20px; accent-color: var(--rsa-green); }
.rsa-site .pn-stripe-badge { display: flex; align-items: center; justify-content: center; gap: 6px; margin-top: 12px; font-size: 12.5px; color: var(--rsa-smoke); }
.pn-shop-head { display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; }
.pn-side-proof { padding: 0 24px 22px; display: flex; flex-direction: column; gap: 8px; font-size: 13.5px; color: var(--rsa-mist); }
.rsa-site .pn-side-proof a { color: #fff; font-weight: 700; text-decoration: none; }
.passed-tag { display: inline-flex; align-items: center; gap: 8px; background: var(--rsa-green); color: var(--rsa-road-black); font: 800 13px var(--font-display); text-transform: uppercase; letter-spacing: .1em; padding: 9px 12px; border-radius: 2px; }
.rsa-site #gv-card * { font-family: var(--font-body); }
.rsa-site [id^="gv-preview-recipient"], .rsa-site #gv-recipient { font-family: var(--font-display) !important; font-weight: 800; text-transform: uppercase; }
.rsa-site [id^="gv-preview-amount"], .rsa-site [id^="gv-preview-value"], .rsa-site [id^="gv-preview-price"] { color: var(--rsa-green) !important; font-family: var(--font-display) !important; font-weight: 800; }
.rsa-site [id^="gv-preview-message"] { font-style: italic; }
.rsa-site #gv-char-used { color: var(--rsa-ash); }
.rsa-site .gv-hero, .rsa-site .gv-create-hero { background: #000 !important; border-bottom: 6px solid var(--rsa-green); }
.rsa-site [class*="gv-"] input, .rsa-site [class*="gv-"] select, .rsa-site [class*="gv-"] textarea { background: #000 !important; border: 1px solid var(--rsa-field-border) !important; border-radius: 2px !important; color: var(--rsa-chalk) !important; min-height: 46px; font-size: 16px; }
.rsa-site [class*="gv-"] button[type="submit"], .rsa-site #gv-pay-btn, .rsa-site [id^="gv-continue"] { background: var(--rsa-red) !important; color: #fff !important; border-radius: 2px !important; font-family: var(--font-display) !important; font-weight: 800 !important; text-transform: uppercase; border: 0 !important; }
.rsa-site [class*="gv-"] h1, .rsa-site [class*="gv-"] h2 { font-family: var(--font-display); font-weight: 800; text-transform: uppercase; letter-spacing: -.03em; }
/* ---------- Responsive (the pack ships none) ---------- */
@media (max-width: 1100px) {
  .rsa-site .hdr-call { display: none; }
  .stats-grid { grid-template-columns: repeat(2, minmax(0,1fr)); row-gap: 28px; }
  .stat:nth-child(3) { border-left: 0; padding-left: 0; }
  .rtile { grid-column: 1 / -1; min-height: 320px; }
  .equal { grid-template-columns: 1fr; gap: 24px; }
  .equal .h2 { text-align: left; }
  .learn-grid { grid-template-columns: 1fr; }
  .ft-cols { grid-template-columns: 1fr 1fr; }
  .rsa-site .pn-checkout-container { grid-template-columns: 1fr; }
  .tc-media { width: 46%; }
}
@media (max-width: 900px) {
  .hdr-nav { display: none; }
  .hdr-icon { display: inline-flex; }
  .hdr-logo img { height: 52px; }
  .hb-book { grid-template-columns: 1fr 1fr; }
  .hb-book .btn-r { grid-column: 1 / -1; }
  .split { grid-template-columns: 1fr; gap: 18px; }
  .split-l { align-items: flex-start; text-align: left; padding-right: 0; border-right: 0; border-left: 5px solid var(--rsa-green); padding-left: 16px; }
  .split-r { padding-left: 0; }
  .steps-grid, .steps-bars { grid-template-columns: 1fr; gap: 20px; }
  .steps-head { justify-content: flex-start; padding-right: 0; border-right: 0; }
  .steps-head .h2 { text-align: left; }
  .steps-media { min-height: 340px; }
  .steps-bar { margin-right: 0; flex-wrap: wrap; }
  .learn-head { grid-template-columns: 1fr; gap: 24px; }
  .learn-title { order: -1; align-items: flex-start; text-align: left; padding-right: 0; border-right: 0; border-left: 5px solid #000; padding-left: 16px; }
  .learn::before { height: 560px; }
  .t-side { position: static; }
  .tc-media { position: relative; width: 100%; height: 300px; }
  .tc-hero-in { min-height: 0; padding-top: 24px; }
  .tc-copy { max-width: none; }
}
@media (max-width: 768px) {
  :root { --gutter: 20px; }
  body.rsa-site { font-size: 16px; }
  .rsa-site .sticky-mobile-cta { display: block; }
  body.rsa-site { padding-bottom: calc(72px + env(safe-area-inset-bottom)); }
  .hdr { gap: 10px; padding-top: 8px; padding-bottom: 8px; }
  .hdr-logo img { height: 46px; }
  .hdr-cta { gap: 8px; }
  .hdr-cta .btn-r { padding: 12px 14px; min-height: 48px; font-size: 12px; }
  .sec { padding: 64px 0; }
  .h-hero-media { position: relative; bottom: auto; height: 300px; }
  .h-hero-media::after { background: linear-gradient(0deg, #000 0%, rgba(0,0,0,.25) 45%, rgba(0,0,0,0) 70%); }
  .h-hero-media::before { display: none; }
  .h-hero-inner { padding-top: 0; margin-top: -48px; min-height: 0; gap: 28px; }
  .h-hero-copy { gap: 18px; }
  .lede { font-size: 17px; }
  .h-hero .btn-row { flex-direction: column; align-items: stretch; }
  .h-hero .btn-row > a { justify-content: center; }
  .hero-bar { padding: 0 0 28px; }
  .hb-switch { width: 100%; }
  .hb-book { grid-template-columns: 1fr; }
  .stats-grid { grid-template-columns: 1fr 1fr; gap: 24px 16px; padding-top: 32px; padding-bottom: 32px; }
  .stat { flex-direction: column; align-items: flex-start; gap: 8px; }
  .stat + .stat { border-left: 0; padding-left: 0; }
  .equal-strip { grid-template-columns: auto minmax(0,1fr); }
  .equal-div { display: none; }
  .equal-call { grid-column: 1 / -1; }
  .rsa-site .lcard { grid-template-columns: 1fr; padding: 14px; }
  .learn { margin-top: 64px; }
  .learn-inner { padding-top: 56px; }
  .learn::before { height: 620px; }
  .prep-row { justify-content: flex-start; }
  .prep-row > a { flex: 1 1 100%; }
  .ft-cols { grid-template-columns: 1fr; gap: 28px; }
  .callband { padding: 32px 22px; }
  .rsa-site .lead-form-card { padding: 22px 18px; }
  .rsa-site .lead-form-grid { grid-template-columns: 1fr; }
  .book-card { padding: 22px 18px; }
  .t-body { padding-top: 40px; gap: 40px; }
  .t-main { gap: 64px; }
  .panel, .panel-line, .edt-panel, .tb-guide, .tc-greenband { padding: 28px 20px; }
  .edt-eq b { font-size: 64px; }
  .tb-guide .edt-eq b { font-size: 72px; }
  .edt-track span { height: 24px; font-size: 10px; }
  .ta-hero-in { min-height: 0; padding-top: 20px; padding-bottom: 40px; }
  .ta-hero > picture img, .ta-hero > img { object-position: 78% 20% !important; }
  .ta-hero::after { background: linear-gradient(0deg, rgba(0,0,0,.95) 0%, rgba(0,0,0,.85) 50%, rgba(0,0,0,.35) 100%); }
  .ta-copy { margin-top: 140px; }
  .ta-copy .btn-row, .tb-copy .btn-row, .tc-copy .btn-row { flex-direction: column; align-items: stretch; }
  .tb-hero-in { gap: 32px; }
  .tb-card { min-height: 380px; }
  .tb-main { padding-left: 0; }
  .tb-main::before { display: none; }
  .tb-num { position: static; margin-bottom: 12px; }
  .tb-explore-in { -webkit-mask-image: linear-gradient(90deg, #000 85%, transparent); mask-image: linear-gradient(90deg, #000 85%, transparent); }
  .rail-num { flex-basis: 92px; }
  .centre { grid-template-columns: auto minmax(0,1fr); }
  .centre-dist { grid-column: 2; text-align: left; }
  .centre-dist strong { display: inline; margin-right: 6px; }
  .rsa-site .pn-form-section { padding: 20px 16px; }
  .ft-word { font-size: 15vw; }
}
@media (max-width: 480px) {
  .stats-grid { grid-template-columns: 1fr 1fr; }
  .stat-num { font-size: 44px; }
  .h-hero h1 .nw { white-space: normal; }
  .tickets { grid-template-columns: 1fr; }
  .rsa-site .pn-products-grid { grid-template-columns: 1fr 1fr; }
  .rsa-site .pn-ticket-num { font-size: 48px; }
}
/* ---------- Legacy page helpers (added after first screenshots) ---------- */
/* Lead form auto-inserted after a legacy hero: give it the page container. */
.rsa-site #contact-form-anchor:not(.lead-wrap) { max-width: var(--container); margin: 56px auto; padding: 0 var(--gutter); }
.rsa-site #contact-form-anchor:not(.lead-wrap):empty { margin: 0 auto; }
@media (max-width: 768px) {
  .steps-bar a { border-right: 0; border-bottom: 1px solid rgba(255,255,255,.18); width: 100%; }
}
/* Retired brand blue and Outfit inside older inline SVG maps on county hubs */
.rsa-site svg [fill="#1e3a5f"] { fill: var(--rsa-red); }
.rsa-site svg [stroke="#1e3a5f"] { stroke: var(--rsa-red); }
.rsa-site svg text { font-family: var(--font-display); }
.rsa-site .gv-testimonial-stars .stars { font-size: 18px; }
/* Long Leinster town names (Newtownmountkennedy) and the voucher builder on phones */
.h1, .h2, .h3, .h4 { overflow-wrap: break-word; hyphens: auto; }
.t-body, main#main { overflow-x: clip; }
/* Contrast re-measure fix: breadcrumbs over the top of a phone-width photo hero sit on a black chip */
.ta-hero .crumbs, .tc-hero .crumbs { align-self: flex-start; }
@media (max-width: 768px) {
  .ta-hero .crumbs { background: rgba(0,0,0,.82); padding: 6px 10px; border-radius: 2px; }
}
@media (max-width: 768px) {
  .tc-redbook .rsa-site .lead-form-card, .tc-redbook .lead-form-card, .tb-dark .lead-form-card { padding: 18px 14px; }
}
/* ---------- Round 2 (2026-10-14): hero image rule, zoomed-out cut-outs ----------
   Heroes always use the hero pool (src-images/hero/), never pass photos. Cut-outs
   and photos are shown whole (object-fit: contain) on Night, right-aligned, so the
   licence in her hand is in shot. The headline column stays on solid black. */
.h-hero-media.cutout { left: auto; right: 0; top: 0; bottom: auto; width: 50%; height: 600px; }
.h-hero-media.cutout img { object-fit: contain; object-position: right top; }
.h-hero-media.cutout::after { background: linear-gradient(90deg, #000 0%, rgba(0,0,0,0) 18%); }
.h-hero-media.cutout::before { height: 120px; background: linear-gradient(0deg, #000, rgba(0,0,0,0)); }
.h-hero-inner { min-height: 0; justify-content: flex-start; }
.h-hero-copy { min-height: 440px; }
.hero-bar { padding-top: 8px; }
.hb-form .lead-form-card { background: rgba(22,22,24,.97); }
.hero-bar .lead-form-grid { grid-template-columns: repeat(3, minmax(0,1fr)); }
.ta-hero .hero-cut { position: absolute; right: 0; top: 0; bottom: 0; width: 56%; }
.ta-hero .hero-cut img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; object-position: right bottom; }
.ta-hero::after { background: linear-gradient(90deg, #000 0%, rgba(0,0,0,.85) 40%, rgba(0,0,0,0) 62%); }
.tc-media picture img, .tc-media > img { object-fit: contain; object-position: right bottom; background: #000; }
@media (max-width: 1100px) {
  .hero-bar .lead-form-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
}
@media (max-width: 768px) {
  .h-hero-media.cutout { position: relative; width: 100%; height: auto; aspect-ratio: 3 / 2; }
  .h-hero-media.cutout::after { background: none; }
  .h-hero-media.cutout::before { display: block; height: 70px; }
  .h-hero-copy { min-height: 0; }
  .h-hero-inner { margin-top: -24px; }
  .hero-bar .lead-form-grid { grid-template-columns: 1fr; }
  .ta-hero .hero-cut { position: relative; width: 100%; aspect-ratio: 3 / 2; }
  .ta-hero::after { display: none; }
  .ta-hero-in { padding-top: 12px; }
  .ta-copy { margin-top: 0; }
  /* Google 4.7 chip sits above the Book button, never over it */
  .h-hero .btn-row { margin-top: 30px; }
  .h-hero .btn-r .btn-chip { top: -30px; left: 0; }
}
/* Irish plates (round 2): learner L and novice N are a red letter on white. No P-plates in Ireland. */
.plate.n { color: var(--rsa-plate-red); box-shadow: inset 0 0 0 3px var(--rsa-plate-red); }
.tb-num.p { background: #fff; border: 3px solid var(--rsa-plate-red); color: var(--rsa-plate-red); font: 800 24px var(--font-display); }
/* Town B split card: show the whole hero image (no half-cropped baked-in logo) */
.tb-card picture img, .tb-card > img { object-fit: contain; background: #000; }
/* ==========================================================================
   Hero media (art-directed hero pool, 2026-10-14 final)
   .hm.is-bleed  full-bleed photo (object-fit cover, per-image object-position)
   .hm.is-cut    transparent cut-out (tight figure crop, object-fit contain)
   Per-image positions arrive as --pos-d / --pos-t / --pos-m from the sidecar
   json; the defaults below apply when a sidecar leaves them out. --lift is the
   per-image brightness. Copy always sits on solid black or under the pack
   gradient, never over a face. At 1100px and under every hero stacks: image
   band first, copy below on Night.
   ========================================================================== */
.hm { position: absolute; overflow: hidden; }
.hm img { position: absolute; inset: 0; width: 100%; height: 100%; filter: brightness(var(--lift, 1)); }
.hm.is-bleed img { object-fit: cover; object-position: var(--pos-d, 60% 40%); }
.hm.is-cut img { object-fit: contain; object-position: var(--pos-d, right bottom); }
/* Homepage */
.h-hero > .hm-home.is-bleed { left: 28%; right: 0; top: 0; height: 600px; }
.h-hero > .hm-home.is-bleed::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,0,0,.92) 0%, rgba(0,0,0,.75) 34%, rgba(0,0,0,.3) 58%, rgba(0,0,0,.1) 80%, rgba(0,0,0,0) 100%), linear-gradient(0deg, #000 0%, rgba(0,0,0,0) 26%); }
.h-hero > .hm-home.is-cut { right: max(0px, calc((100vw - var(--container)) / 2)); top: 20px; width: min(46%, 620px); height: 580px; }
.h-hero > .hm-home.is-cut::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 70px; background: linear-gradient(0deg, #000, rgba(0,0,0,0)); }
/* Skin A: full-width photo, or the cut-out standing on the right */
.ta-hero > .hm-a.is-bleed { inset: 0; }
.ta-hero > .hm-a.is-cut { top: 16px; bottom: 0; right: max(0px, calc((100vw - var(--container)) / 2)); width: min(46%, 620px); }
.ta-hero:has(> .hm-a.is-cut)::after { background: none; }
.ta-hero:has(> .hm-a.is-bleed)::after { background: linear-gradient(90deg, rgba(0,0,0,.93) 0%, rgba(0,0,0,.74) 36%, rgba(0,0,0,.3) 62%, rgba(0,0,0,.14) 100%); }
/* Skin B: split card on the green offset block */
.tb-card > .hm-b { inset: 0 40px 40px 0; border-radius: 2px; background: #000; }
.tb-card > .hm-b.is-bleed img { object-position: var(--pos-d, 65% 40%); }
.tb-card > .hm-b.is-cut img { object-position: var(--pos-d, center bottom); }
/* Skin C: slanted panel. Photos are clipped to the slant; cut-outs stand on the green wedge */
.tc-hero > .hm-c { top: 0; right: 0; bottom: 0; width: clamp(0px, calc(100% - 640px), 58%); }
.tc-hero > .hm-c.is-bleed img { clip-path: polygon(19% 0,100% 0,100% 100%,3% 100%); object-position: var(--pos-d, 75% 40%); }
.tc-hero > .hm-c.is-cut img { clip-path: none; object-position: var(--pos-d, 85% bottom); padding-top: 24px; }
.tc-hero > .hm-c.is-cut::after { display: none; }
@media (max-width: 1100px) {
  .hm.is-bleed img { object-position: var(--pos-t, 60% 40%); }
  .hm.is-cut img { object-position: var(--pos-t, center bottom); }
  .rsa-site .h-hero > .hm, .rsa-site .ta-hero > .hm { position: relative; inset: auto; top: auto; right: auto; width: 100%; height: auto; }
  .rsa-site .h-hero > .hm.is-bleed, .rsa-site .ta-hero > .hm.is-bleed { aspect-ratio: 16 / 8; }
  .rsa-site .h-hero > .hm.is-cut, .rsa-site .ta-hero > .hm.is-cut { height: 440px; }
  .h-hero > .hm-home.is-bleed::after { background: linear-gradient(0deg, #000 0%, rgba(0,0,0,0) 35%); }
  .ta-hero::after { display: none; }
  .ta-hero-in { min-height: 0; padding-top: 20px; }
  .ta-copy { margin-top: 0; }
  .h-hero-inner { padding-top: 0; margin-top: -24px; }
  .h-hero-copy { min-height: 0; }
  .rsa-site .tc-hero > .hm-c { width: 54%; }
  .tb-card > .hm-b.is-bleed img { object-position: var(--pos-t, 50% 40%); }
}
@media (max-width: 900px) {
  .rsa-site .tc-hero > .hm-c { position: relative; width: 100%; height: 320px; }
  .tc-hero > .hm-c.is-bleed img { clip-path: polygon(8% 0,100% 0,100% 100%,0 100%); }
}
@media (max-width: 768px) {
  .hm.is-bleed img { object-position: var(--pos-m, 60% 40%); }
  .hm.is-cut img { object-position: var(--pos-m, center bottom); }
  .rsa-site .h-hero > .hm.is-bleed, .rsa-site .ta-hero > .hm.is-bleed { aspect-ratio: 4 / 3; }
  .rsa-site .h-hero > .hm.is-cut, .rsa-site .ta-hero > .hm.is-cut { height: 340px; }
  .rsa-site .tc-hero > .hm-c { height: 300px; }
  .tb-card > .hm-b.is-bleed img { object-position: var(--pos-m, 50% 40%); }
}
.tb-card > .hm-b img, .tc-hero > .hm-c img { inset: 0; width: 100%; height: 100%; }
.tc-hero > .hm-c.is-cut img, .tb-card > .hm-b.is-cut img { background: transparent; }
@media (min-width: 901px) and (max-width: 1100px) {
  .tc-copy { max-width: calc(46vw - var(--gutter) - 16px); }
}
/* ==========================================================================
   County hubs (2026-10-14). Composition rules only: every hub section is a
   locked module (town skins A and B, homepage modules). The additions below
   size and place those modules for a county page; no new visual language.
   Direction 1 "Signpost hub": layouts/hub-signpost.njk
   Direction 2 "Route hub":    layouts/hub-route.njk (preview /_mockups/)
   ========================================================================== */
/* County sign as the hero identity plate (D1) and on the split card (D2) */
.rsa-site .ta-copy .hub-plate { align-self: flex-start; min-width: min(100%, 280px); }
.rsa-site .tb-card .hub-card-sign { position: absolute; right: 0; bottom: 0; z-index: 1; min-width: 250px; box-shadow: 0 18px 40px rgba(0,0,0,.35); }
.hub-filter .field-label { margin: 0; }
@media (max-width: 768px) {
  .rsa-site .ta-copy .hub-plate { min-width: 0; align-self: stretch; }
  .rsa-site .tb-card .hub-card-sign { min-width: 0; left: auto; right: 0; }
}
.tickets.hub-centres { grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr)); }
.steps3.hub-routes { grid-template-columns: repeat(auto-fit, minmax(min(100%, 136px), 1fr)); }
/* ==========================================================================
   Finglas layer. Everything above this line is the rsa-leinster port, taken
   verbatim. Everything below exists because this site has markup Leinster's
   sheet does not describe, or because a pack rule strands a row at a width
   Leinster never hits. Keep it short; if a rule here starts doing a component's
   whole job, the component belongs in the port instead.
   ========================================================================== */

/* Header badge. The locked skin has no equivalent, because Leinster's header
   carries no place name. This is measured off the live Cork and Automatic
   headers, which ship an identical badge: .ck-header__place and
   .au-header__tag are both 800 13px/13px Poppins, letter-spacing 1.04px,
   uppercase, Go Green, padding 5px 9px, sitting BESIDE the logo in a row flex
   anchor. It is NOT the 3.5em .nav-logo-tag rule in sites/rsa-auto's repo CSS:
   that class does not exist on the live Automatic header at all, and at 3.5em
   a four-letter badge renders 211px wide against a 112px logo. Read the
   computed style off the live element, never the nearest plausible rule. */
.rsa-site .nav-logo { display: flex; flex-direction: row; align-items: center; gap: 2px; }
.nav-logo-tag { display: block; font: 800 13px/13px var(--font-display); color: var(--rsa-green); letter-spacing: 1.04px; text-transform: uppercase; padding: 5px 9px; }
@media (max-width: 768px) { .nav-logo-tag { padding: 4px 6px; } }
/* At phone width the header has to hold the logo, a seven-letter badge, the
   phone icon, Book now and the burger, and it overflowed by 10px: measured,
   not guessed. Leinster's header fits the same controls because it carries no
   badge, and Cork's fits because it carries no phone icon or Book button.
   Book now is the one to drop: the sticky bar at the foot of the screen is
   that same call to action, 48px tall and always on screen, so hiding it here
   removes a duplicate rather than a route. The phone icon stays, because the
   Page Quality Rule is that the number is always reachable from the mobile
   nav. */
@media (max-width: 480px) {
  .rsa-site .hdr-cta > .btn-r { display: none; }
}

/* Fixed-column grids. The pack's grids are auto-fit with a min track, which
   picks its column count from the available width and not from how many items
   there are. With three cards that leaves a half-empty last row between roughly
   480px and 700px: two cards, then one on its own, which reads as a fault
   rather than a layout. No correctness gate sees it. Columns here come from
   the item count, and collapse to one in a single step. */
.grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px; }
.grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 28px; }
@media (max-width: 900px) {
  .grid-3, .grid-2 { grid-template-columns: minmax(0, 1fr); gap: 20px; }
  /* Same reason: three price tickets strand one at tablet widths. */
  .tickets { grid-template-columns: minmax(0, 1fr); }
}

/* The .panel cards carry their own heading and link, so they need the column
   gap the pack gives .stack rather than .panel's single 28px. */
.rsa-site .panel > .eyebrow + .h3 { margin-top: -14px; }
.rsa-site .panel .tlink { margin-top: auto; }
.rsa-site .panel { justify-content: flex-start; gap: 18px; }

/* Long-form body copy inside .t-main (about, privacy, terms). The locked skin
   styles its own components but has no prose rule, and these pages are mostly
   prose. 66ch keeps the measure readable at 1440. */
.rsa-site .prose { max-width: 66ch; }
.rsa-site .prose > * + * { margin-top: 18px; }
.rsa-site .prose p, .rsa-site .prose li { font-size: 17px; line-height: 1.7; color: var(--rsa-mist); text-wrap: pretty; }
.rsa-site .prose strong, .rsa-site .prose b { color: var(--rsa-chalk); }
/* Section headings inside a 66ch reading column are a different job from the
   pack's .h2, which is a 50px display heading for a full-width band. They are
   plain <h2> elements and are styled as the element here, so .h2 keeps one
   meaning across the site and a measurement of .h2 still measures the pack. */
.rsa-site .prose h2 { margin: 48px 0 0; font: 800 clamp(24px, 2.4vw, 34px)/1.1 var(--font-display); letter-spacing: -.03em; text-transform: uppercase; color: var(--rsa-chalk); }
.rsa-site .prose h3 { margin: 28px 0 0; font: 700 17px/1.3 var(--font-body); color: var(--rsa-chalk); text-transform: none; letter-spacing: 0; }
.rsa-site .prose > :first-child { margin-top: 0; }
.rsa-site .prose ul { margin: 0; padding-left: 20px; }
.rsa-site .prose ul.ticks { padding-left: 0; }
.rsa-site .prose li + li { margin-top: 8px; }
.rsa-site .prose table { width: 100%; margin-top: 8px; border-collapse: collapse; font-size: 15px; }
.rsa-site .prose th, .rsa-site .prose td { border: 1px solid var(--line-12); padding: 10px 12px; text-align: left; }
.rsa-site .prose th { font: 700 12px var(--font-display); text-transform: uppercase; letter-spacing: .06em; color: var(--rsa-chalk); }
.rsa-site .prose .panel-line { margin-top: 28px; }
.rsa-site .terms-version { margin-top: 32px; font-size: 12.5px; color: var(--rsa-smoke); }

/* Section headings on prose pages come through as .h2 inside .prose; the
   component pages use .h2 on its own, which the port already styles. */
.rsa-site .t-main .t-sec { gap: 0; }

/* Cookie notice. Was an inline-styled grey bar with its own hard-coded colours
   that ignored the palette entirely. */
.cookie-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 60; display: flex; align-items: center; justify-content: center; gap: 16px; flex-wrap: wrap; background: #000; border-top: 1px solid var(--line-16); padding: 12px 20px calc(12px + env(safe-area-inset-bottom)); }
.cookie-bar p { margin: 0; font-size: 13.5px; color: var(--rsa-mist); }
.rsa-site .cookie-bar a { color: var(--rsa-green); }
.cookie-bar button { min-height: 40px; padding: 0 20px; border: 0; border-radius: 2px; background: var(--rsa-green); color: var(--rsa-road-black); font: 800 12px var(--font-display); text-transform: uppercase; cursor: pointer; }
.cookie-bar button:hover { background: var(--rsa-green-hover); }
@media (max-width: 768px) {
  /* On a phone the notice rests on the bottom edge and only lifts clear of the
     sticky call bar while that bar is actually showing. It used to be lifted
     72px unconditionally, but the bar is hidden while the page hero is on
     screen, so the notice floated mid-screen with a gap under it and sat on
     top of whatever was there: on /pay-now/ that was the Automatic toggle,
     so a tap meant for the toggle dismissed nothing and selected nothing.
     Found by a scripted tap at 390px that never registered. */
  .cookie-bar { gap: 10px; padding: 10px 16px calc(10px + env(safe-area-inset-bottom)); }
  .cookie-bar p { font-size: 12.5px; flex: 1 1 200px; }
  .cookie-bar button { min-height: 40px; }
  body:has(.sticky-mobile-cta:not(.is-hidden)) .cookie-bar { bottom: calc(72px + env(safe-area-inset-bottom)); padding-bottom: 10px; }
}

/* The proof line in the hero badges row wraps as a unit on phones. */
.h-hero-badges .proof-line { gap: 8px; }
.h-hero-badges .proof-line .stars { font-size: 14px; }

/* Nested lists inside .nearby rows: the pack's anchor is a flex row, so the
   label and its sub-label need to stack. */
.rsa-site .nearby a > span:first-child { display: flex; flex-direction: column; gap: 2px; min-width: 0; }

/* .centre rows put the name and the address in one middle cell. */
.centre > span:nth-child(2) { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.centre-name .badge-g { font-size: 10px; padding: 4px 7px 3px; }

/* .pickup lists are plain ULs in the pack; ours carry no bullets. */
.rsa-site .pickup ul { list-style: none; padding: 0; }

/* .nearby and .pickups hold a list whose length is data, not a design choice:
   six areas here, five on a leaf page, one to three fact cards. A grid with a
   min track picks its columns from the width and leaves whatever is left over
   stranded on the last row, which reads as a fault rather than a list. Wrapping
   flex items that are allowed to grow have no last row to strand: the final
   row's items share the leftover width instead of leaving a hole.
   min-width:0 is load-bearing. Without it a long label ("Driving lessons
   Blanchardstown") sets the item's min-content width and the row overflows the
   container, which is what it was doing at 1440. */
.rsa-site .nearby, .rsa-site .pickups { display: flex; flex-wrap: wrap; }
.rsa-site .nearby > a, .rsa-site .pickups > * { flex: 1 1 260px; min-width: 0; }
.rsa-site .pickups > * { flex-basis: 280px; }

/* Standalone link lists need a real tap target on a phone. Links inside a
   sentence are left alone: WCAG 2.5.8 exempts them, and padding them out
   would open up the line spacing of every paragraph on the page. */
@media (max-width: 768px) {
  .rsa-site .tlink,
  .rsa-site .ft a,
  .rsa-site .crumbs a,
  .rsa-site .side-counties a,
  .rsa-site .side-dl a,
  .rsa-site .mm-links a { min-height: 44px; display: inline-flex; align-items: center; }
  .rsa-site .ft-two a { min-height: 44px; }
}

/* The .prep-row label is the row's heading. At 768 the pack already gives the
   buttons flex:1 1 100%, which leaves the label alone on a short row with a
   hole beside it. Give it the full width too so it reads as a heading. */
@media (max-width: 768px) {
  .rsa-site .prep-row > span { flex: 1 1 100%; margin-right: 0; }
}

/* Underlines the port could not have covered. In Leinster these three anchors
   hold only an image or an SVG, so the UA's default underline had nothing to
   draw on and the pack never needed a rule. Here the logo anchor carries the
   Finglas badge, the phone icon anchor carries a label for screen readers, and
   the ticket CTA carries its own words, so all three came out underlined.
   Found by walking every anchor on every route and reading the computed
   text-decoration, rather than by reading the stylesheet. */
.rsa-site .hdr-logo,
.rsa-site .hdr-icon,
.rsa-site .ticket-go { text-decoration: none; }

/* Phone-width fixes found by the corrected probe, 2026-10-23.
   - .crumbs: the tap-target rule above makes each crumb link 44px tall. The
     row stretched its items, so the link's text was centred in 44px while the
     "/" separators and the current page's name sat at the top, putting "Home"
     12px below "Buy lessons" on every page with a breadcrumb. Centre the row.
   - .rating-chip: nowrap, and with the brand-network clarifier the line is
     longer than a phone is wide, so it was cut off mid-word on /pay-now/.
     Let it wrap; the stars stay together. */
@media (max-width: 768px) {
  .rsa-site .crumbs { align-items: center; }
  .rsa-site .rating-chip { white-space: normal; flex-wrap: wrap; max-width: 100%; line-height: 1.35; }
  .rsa-site .rating-chip .stars { white-space: nowrap; }
}

/* Area pages: the route list in "The roads you'll be tested on". Leinster's
   skin has no route list (its town pages name roads in running copy), and
   three narrow text columns of road names was what read as badly styled.
   Each route is a chip with its number on a sign plate in the Irish signage
   colours: yellow on green for national (N) roads, black on white for
   regional (R) roads. Chips wrap to content, so no grid row is left short. */
.rsa-site .road-list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px; }
.rsa-site .road-list li { display: inline-flex; align-items: center; gap: 12px; min-height: 48px; background: var(--rsa-surface); border: 1px solid var(--line-12); border-radius: 2px; padding: 6px 16px 6px 6px; font: 600 15px/1.25 var(--font-body); color: var(--rsa-chalk); }
.rsa-site .road-no { display: inline-grid; place-items: center; min-width: 54px; height: 34px; padding: 0 8px; border-radius: 3px; font: 800 15px/1 var(--font-display); letter-spacing: .02em; }
.rsa-site .road-no.n { background: #00543C; color: #FFD200; box-shadow: inset 0 0 0 2px #FFD200; }
.rsa-site .road-no.r { background: #fff; color: #000; box-shadow: inset 0 0 0 2px #000; }
.rsa-site #roads .pickup li span { display: block; font-size: 13px; color: var(--rsa-smoke); }
/* Two pick-up cards of very different lengths: let each take its own height
   rather than stretching the short one into an empty block. */
.rsa-site #roads .pickups { align-items: flex-start; }
/* Area pages: three price tickets in the main column. The pack's auto-fit
   grid fits two at 1100 (sidebar still beside it) and strands the third on a
   row of its own, which Leinster's own town pages also do. Columns are picked
   from the count instead: three across wherever three fit, one below. */
@media (min-width: 769px) {
  .rsa-site .t-main .tickets { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
/* The "Explore" bar under the form is a standalone link list: 44px targets. */
@media (max-width: 768px) {
  .rsa-site .explore a,
  .rsa-site .map-frame a { min-height: 44px; display: inline-flex; align-items: center; }
  /* The skin's section heads drop to 28px here; the pack's floor is 30px. */
  .rsa-site .t-main .h2 { font-size: 30px; }
}

/* Service-page photo hero (components/hero/v1.njk with heroPhotoIndex): town
   skin C's .tc-hero, sized as rsa-leinster's /pricing/ sizes it
   (css/pricing-page.css, .pp-hero-c), under a Finglas class because the same
   hero serves Services, Pricing and About here. */
.rsa-site .fg-hero-c .tc-hero-in { min-height: 550px; padding-bottom: 50px; }
.rsa-site .fg-hero-c > .hm-c { width: 48%; }
.rsa-site .fg-hero-c .tc-copy { max-width: 560px; }
.fg-rating { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; font-size: 13px; color: var(--rsa-mist); }
.fg-rating .stars { font-size: 17px; }
@media (max-width: 1100px) {
  .rsa-site .fg-hero-c .tc-copy { max-width: 47%; }
}
@media (max-width: 900px) {
  .rsa-site .fg-hero-c > .hm-c { width: 100%; }
  .rsa-site .fg-hero-c .tc-copy { max-width: none; }
  .rsa-site .fg-hero-c .tc-hero-in { min-height: 0; }
}

/* Contact hero, from rsa-leinster's css/contact-page.css (.cp-hero-b). */
.cp-form-hero-grid { display: grid; grid-template-columns: minmax(0, .95fr) minmax(0, 1.05fr); gap: 52px; align-items: start; padding-top: 32px; padding-bottom: 56px; }
.cp-form-hero-grid .tb-copy { gap: 22px; }
.cp-hero-book { margin-top: 26px; background: var(--rsa-night); }
.cp-hero-proof { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; font-size: 12px; color: var(--rsa-mist); }
.fg-contact-hero .cp-hero-photo { height: 190px; min-height: 0; width: min(100%, 350px); margin-top: 10px; align-self: flex-start; border-radius: 2px; }
.fg-contact-hero .cp-hero-photo::before { inset: 10px -10px -10px 10px; }
.fg-contact-hero .cp-hero-photo > .hm-b { min-height: 0; }
.fg-contact-hero .cp-hero-photo > .hm-b.is-cut img { padding-top: 12px; object-position: center bottom; }
.fg-contact-hero .cp-hero-photo .tb-pin { top: auto; bottom: 10px; left: 10px; font-size: 10px; }
.fg-contact-hero .cp-hero-book .give-call { display: block; margin-top: 16px; }
@media (max-width: 1100px) { .cp-form-hero-grid { gap: 32px; } }
@media (max-width: 900px) {
  .cp-form-hero-grid { grid-template-columns: 1fr; }
  .cp-hero-book { margin-top: 8px; }
  .fg-contact-hero .cp-hero-photo { width: min(100%, 320px); height: 180px; }
}
@media (max-width: 768px) {
  .cp-form-hero-grid { padding-top: 24px; padding-bottom: 40px; }
}

/* Homepage "Passed with RSA" strip: four pass-photo tiles from the national
   library. The locked skin's .rtile is a single tile beside review cards;
   Finglas has no review text to put beside it, so the tiles get a row of
   their own, four across, two on a phone. */
.rsa-site .pass-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.rsa-site .pass-grid .rtile { margin: 0; aspect-ratio: 1; min-height: 0; grid-column: auto; padding: 16px; }
@media (max-width: 900px) { .rsa-site .pass-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.rsa-site .pass-grid .rtile { justify-content: flex-start; padding: 12px; }
.rsa-site .pass-grid .rtile .rtile-chip { padding: 7px 11px; font-size: 11px; letter-spacing: .04em; }

/* Homepage Finglas guide: long-form copy beside the "choosing a school"
   checklist. */
.rsa-site .fg-guide { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 48px; align-items: start; }
.rsa-site .fg-guide-main .body { max-width: 68ch; }
.rsa-site .fg-guide-side .ticks li { margin-bottom: 12px; }
@media (max-width: 1000px) { .rsa-site .fg-guide { grid-template-columns: 1fr; gap: 32px; } }
.rsa-site .fg-guide-side .rating-chip { flex-wrap: wrap; white-space: normal; max-width: 100%; }
/* Contact: the standalone phone links need phone-width targets. */
@media (max-width: 768px) {
  .rsa-site .fg-contact-hero .give-call,
  .rsa-site #contact-details .h3 a { min-height: 44px; display: inline-flex; align-items: center; }
}

/* Homepage learning cards: titles are <h3> (they were <span>s) so the four
   lesson types count as headings; this keeps the skin's span styling. */
.rsa-site h3.lcard-title { margin: 0; }

/* Light Meath town pages (src/meath/town.njk): the booking card under the
   hero, nothing else, so it needs its own vertical rhythm. */
.rsa-site .fg-meath-body { padding-top: 48px; padding-bottom: 72px; }
.rsa-site .fg-meath-body .book-card { max-width: 920px; }
.rsa-site .fg-meath-more { margin-top: 20px; }
