/* ==========================================================================
   ADHVANTA — MAIN STYLESHEET  ("Sand & Terracotta")
   --------------------------------------------------------------------------
   Reads top to bottom in the order the page is built:
     01 Reset / base      06 Hero (video)
     02 Typography        07 Sections & cards
     03 Layout            08 Forms
     04 Buttons           09 Footer & sticky CTA
     05 Header & nav      10 Editor content & small parts
                          11 Motion & print

   A light theme throughout. Sections alternate between three warm grounds —
   cream, cream-alt and sand — never between light and dark.

   All values come from tokens.css. No hex literals below.
   ========================================================================== */


/* ==========================================================================
   01  RESET / BASE
   ========================================================================== */

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

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--header-h) + 16px);
}

body {
  margin: 0;
  background: var(--cream);
  color: var(--ink-2);
  font-family: var(--font);
  font-size: var(--fs-body);
  font-weight: var(--fw-body);
  line-height: var(--lh-body);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
}

body.adh-no-scroll { overflow: hidden; }

/* The header is fixed, so content is pushed clear of it by default.
   The homepage is the exception: its video hero runs full-bleed up behind
   the translucent header and carries the offset in its own padding instead.
   inc/setup.php adds .adh-has-hero to <body> there. */
.adh-main { padding-top: var(--header-h); }
body.adh-has-hero .adh-main { padding-top: 0; }

img, svg, video, iframe { display: block; max-width: 100%; }
img, video { height: auto; }

a { color: inherit; text-decoration: none; }

button, input, select, textarea { font: inherit; color: inherit; }

button { background: none; border: 0; cursor: pointer; }

ul, ol { margin: 0; padding: 0; list-style: none; }

table { border-collapse: collapse; width: 100%; }

hr { border: 0; border-top: 1px solid var(--line); margin: 0; }

::selection { background: var(--accent); color: var(--surface); }

:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
  border-radius: 2px;
}

.adh-sr {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

.adh-skip {
  position: absolute; top: -100%; left: var(--gutter); z-index: 999;
  background: var(--accent); color: var(--surface);
  padding: .75rem 1.25rem; border-radius: 0 0 var(--r-sm) var(--r-sm);
  font-weight: var(--fw-semi);
}
.adh-skip:focus { top: 0; }


/* ==========================================================================
   02  TYPOGRAPHY
   --------------------------------------------------------------------------
   One typeface. Hierarchy comes from weight and tracking, not from a second
   family — so headings need noticeably negative letter-spacing to stop large
   sizes looking loose.
   ========================================================================== */

h1, h2, h3, h4 {
  font-family: var(--font-display);
  color: var(--ink);
  line-height: var(--lh-snug);
  letter-spacing: var(--ls-head);
  margin: 0;
  text-wrap: balance;
  /* Fraunces is a variable font: opsz lets the design adapt to the size it is
     set at, so the display sizes get the high-contrast cut and the small ones
     stay sturdy. SOFT keeps the terminals from turning brittle. */
  font-variation-settings: "SOFT" 20, "WONK" 0;
}

h1 { font-size: var(--fs-h1); font-weight: var(--fw-bold); line-height: var(--lh-tight); }
h2 { font-size: var(--fs-h2); font-weight: var(--fw-bold); }
h3 { font-size: var(--fs-h3); font-weight: var(--fw-semi); letter-spacing: -.008em; }
h4 { font-size: var(--fs-h4); font-weight: var(--fw-semi); letter-spacing: 0; }

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

strong, b { font-weight: var(--fw-semi); color: var(--ink); }

/* Small letterspaced label above almost every heading. */
.adh-eyebrow {
  display: inline-flex; align-items: center; gap: .6rem;
  font-size: var(--fs-eyebrow);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--accent-deep);
  margin: 0 0 1.1rem;
}
.adh-eyebrow::before {
  content: ""; width: 26px; height: 2px; border-radius: 2px;
  background: currentColor; opacity: .55; flex: none;
}
.adh-eyebrow--center { justify-content: center; }
.adh-eyebrow--center::after {
  content: ""; width: 26px; height: 2px; border-radius: 2px;
  background: currentColor; opacity: .55; flex: none;
}

.adh-lede {
  font-size: var(--fs-lede);
  color: var(--ink-2);
  max-width: 62ch;
  text-wrap: pretty;
}

/* Brass hairline under a section heading. This mark repeats more than any
   other on the site, so it is where the metallic note does the most work for
   the least ink — decorative, never carrying meaning on its own. */
.adh-rule {
  width: 52px; height: 3px; border-radius: 3px;
  background: var(--brass);
  margin: 1.4rem 0 0; border: 0;
}
.adh-rule--center { margin-left: auto; margin-right: auto; }


/* ==========================================================================
   03  LAYOUT
   ========================================================================== */

.adh-container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.adh-container--wide { max-width: var(--container-wide); }
.adh-container--text { max-width: var(--container-text); }

/* Default section ground is cream; the modifiers give the alternation. */
.adh-section {
  padding-block: var(--section-y);
  position: relative;
  background: var(--cream);
}
.adh-section--alt   { background: var(--cream-2); }
.adh-section--sand  { background: var(--sand); }
.adh-section--white { background: var(--surface); }
.adh-section--sm    { padding-block: var(--section-y-sm); }
.adh-section--flush-top { padding-top: 0; }

/* Section header block: eyebrow + heading + lede, optional trailing link. */
.adh-shead { margin-bottom: clamp(2.25rem, 4vw, 3.75rem); }
.adh-shead--center { text-align: center; }
.adh-shead--center .adh-lede { margin-inline: auto; }
.adh-shead--split {
  display: flex; flex-wrap: wrap; align-items: flex-end;
  justify-content: space-between; gap: 1.5rem 2rem;
}
.adh-shead--split > div { max-width: 62ch; }

.adh-grid { display: grid; gap: clamp(1.25rem, 2.2vw, 2rem); }
.adh-grid--2 { grid-template-columns: repeat(2, 1fr); }
.adh-grid--3 { grid-template-columns: repeat(3, 1fr); }
.adh-grid--4 { grid-template-columns: repeat(4, 1fr); }

@media (max-width: 1040px) { .adh-grid--4 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 860px)  { .adh-grid--3 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 620px)  {
  .adh-grid--2, .adh-grid--3, .adh-grid--4 { grid-template-columns: 1fr; }
}


/* ==========================================================================
   04  BUTTONS
   ========================================================================== */

.adh-btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: .55rem;
  padding: .95rem 1.75rem;
  border-radius: var(--r-pill);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semi);
  letter-spacing: -.005em;
  line-height: 1;
  border: 1.5px solid transparent;
  cursor: pointer;
  transition: background var(--t-fast) var(--ease),
              color var(--t-fast) var(--ease),
              border-color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease),
              box-shadow var(--t-fast) var(--ease);
  white-space: nowrap;
}
.adh-btn:hover { transform: translateY(-2px); }
.adh-btn:active { transform: translateY(0); }

.adh-btn--primary {
  background: var(--accent); color: var(--surface);
  box-shadow: var(--shadow-accent);
}
.adh-btn--primary:hover { background: var(--accent-deep); }

.adh-btn--outline {
  border-color: var(--line-2); color: var(--ink);
  background: var(--surface);
}
.adh-btn--outline:hover { border-color: var(--ink); background: var(--ink); color: var(--cream); }

/* Sits on the hero, over the cream scrim. */
.adh-btn--ghost {
  border-color: var(--line-2); color: var(--ink);
  background: rgba(255, 255, 255, .72);
  backdrop-filter: blur(8px);
}
.adh-btn--ghost:hover { border-color: var(--accent); color: var(--accent-deep); background: var(--surface); }

.adh-btn--ink { background: var(--ink); color: var(--cream); }
.adh-btn--ink:hover { background: var(--accent-deep); }

.adh-btn--wa { background: var(--whatsapp); color: var(--whatsapp-ink); }
.adh-btn--wa:hover { filter: brightness(1.07); }

.adh-btn--lg { padding: 1.12rem 2.2rem; font-size: var(--fs-body); }
.adh-btn--block { width: 100%; }

/* Quiet text link with an arrow that slides on hover. */
.adh-link {
  display: inline-flex; align-items: center; gap: .45rem;
  font-size: var(--fs-sm); font-weight: var(--fw-semi);
  color: var(--accent-deep);
}
.adh-link .adh-arrow { transition: transform var(--t-fast) var(--ease); }
.adh-link:hover .adh-arrow { transform: translateX(4px); }

.adh-actions { display: flex; flex-wrap: wrap; gap: .8rem; }


/* ==========================================================================
   05  HEADER & NAV
   --------------------------------------------------------------------------
   Opaque on every page from the first paint. The old theme faded a
   transparent header in over a dark hero; on a light design that trick
   costs legibility and buys nothing.
   ========================================================================== */

.adh-header {
  position: fixed; inset: 0 0 auto 0; z-index: var(--z-header);
  height: var(--header-h);
  display: flex; align-items: center;
  background: rgba(var(--cream-rgb), .88);
  backdrop-filter: blur(16px) saturate(150%);
  border-bottom: 1px solid var(--line);
  transition: box-shadow var(--t-med) var(--ease),
              background var(--t-med) var(--ease);
}
/* JS adds .is-solid past 80px — the only change is a lift off the page. */
.adh-header.is-solid {
  background: rgba(var(--cream-rgb), .97);
  box-shadow: var(--shadow-sm);
}

.adh-header__inner {
  width: 100%; max-width: var(--container-wide);
  margin-inline: auto; padding-inline: var(--gutter);
  display: flex; align-items: center; gap: 2rem;
}

.adh-brand { display: flex; align-items: center; gap: .7rem; flex: none; }
.adh-brand img { height: 46px; width: auto; }
.adh-brand__text {
  font-family: var(--font-display);
  font-size: 1.45rem; font-weight: var(--fw-bold);
  letter-spacing: -.012em; color: var(--ink); line-height: 1.05;
}
.adh-brand__tag {
  display: block;
  font-size: .5625rem; font-weight: var(--fw-bold);
  letter-spacing: .24em; text-transform: uppercase;
  color: var(--accent); margin-top: .3rem;
}

.adh-nav { margin-left: auto; }
.adh-nav > ul { display: flex; align-items: center; gap: .15rem; }
.adh-nav a {
  display: block; position: relative;
  padding: .6rem .7rem;
  font-size: var(--fs-sm); font-weight: var(--fw-med);
  color: var(--ink-2);
  border-radius: var(--r-sm);
  /* A menu item must never break across two lines. With eight top-level
     items, "Fair & Festivals" was splitting and doubling the header height. */
  white-space: nowrap;
  transition: color var(--t-fast) var(--ease), background var(--t-fast) var(--ease);
}
.adh-nav a:hover { color: var(--ink); background: rgba(31, 27, 23, .045); }
.adh-nav .current-menu-item > a,
.adh-nav .current_page_item > a,
.adh-nav a[aria-current="page"] { color: var(--accent-deep); font-weight: var(--fw-semi); }

/* Dropdowns */
.adh-nav li { position: relative; }
.adh-nav .sub-menu,
.adh-nav .adh-submenu {
  position: absolute; top: calc(100% + 8px); left: 0;
  min-width: 238px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: .5rem;
  box-shadow: var(--shadow-lg);
  opacity: 0; visibility: hidden; transform: translateY(-8px);
  transition: opacity var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease),
              visibility var(--t-fast);
}
.adh-nav li:hover > .sub-menu,
.adh-nav li:hover > .adh-submenu,
.adh-nav li:focus-within > .sub-menu,
.adh-nav li:focus-within > .adh-submenu {
  opacity: 1; visibility: visible; transform: translateY(0);
}
.adh-nav .sub-menu a,
.adh-nav .adh-submenu a { padding: .6rem .8rem; color: var(--ink-2); }
.adh-nav .sub-menu a:hover,
.adh-nav .adh-submenu a:hover { background: var(--accent-tint); color: var(--accent-deep); }

.adh-nav .menu-item-has-children > a::after,
.adh-nav .adh-has-children > a::after {
  content: ""; display: inline-block; vertical-align: middle;
  margin-left: .38rem;
  width: 5px; height: 5px;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: rotate(45deg) translateY(-2px);
  opacity: .55;
}

.adh-header__cta { display: flex; align-items: center; gap: .7rem; flex: none; }

/* Hamburger */
.adh-burger {
  display: none; width: 44px; height: 44px;
  align-items: center; justify-content: center;
  border-radius: var(--r-sm); flex: none;
}
.adh-burger span {
  display: block; width: 22px; height: 2px;
  background: var(--ink); border-radius: 2px;
  position: relative; transition: background var(--t-fast) var(--ease);
}
.adh-burger span::before,
.adh-burger span::after {
  content: ""; position: absolute; left: 0;
  width: 22px; height: 2px; background: var(--ink); border-radius: 2px;
  transition: transform var(--t-med) var(--ease-out);
}
.adh-burger span::before { top: -7px; }
.adh-burger span::after  { top: 7px; }
.adh-burger.is-open span { background: transparent; }
.adh-burger.is-open span::before { transform: translateY(7px) rotate(45deg); }
.adh-burger.is-open span::after  { transform: translateY(-7px) rotate(-45deg); }

/* Mobile drawer */
.adh-drawer {
  position: fixed; inset: 0; z-index: var(--z-drawer);
  background: var(--cream);
  padding: calc(var(--header-h) + 1.5rem) var(--gutter) 2rem;
  overflow-y: auto;
  opacity: 0; visibility: hidden;
  transform: translateY(-12px);
  transition: opacity var(--t-med) var(--ease),
              transform var(--t-med) var(--ease-out),
              visibility var(--t-med);
}
.adh-drawer.is-open { opacity: 1; visibility: visible; transform: translateY(0); }
.adh-drawer > ul > li { border-bottom: 1px solid var(--line); }
.adh-drawer > ul > li > a {
  display: block; padding: 1.05rem 0;
  font-size: 1.4rem; font-weight: var(--fw-bold);
  letter-spacing: var(--ls-head); color: var(--ink);
}
.adh-drawer .sub-menu,
.adh-drawer .adh-submenu { padding: 0 0 1rem .9rem; }
.adh-drawer .sub-menu a,
.adh-drawer .adh-submenu a {
  display: block; padding: .5rem 0;
  font-size: var(--fs-sm); color: var(--ink-2);
}
.adh-drawer__foot { margin-top: 2rem; display: grid; gap: .75rem; }

/* Eight top-level items is a wide menu, so between these widths the nav
   tightens before it is given up for the drawer. Without this step it either
   wraps or disappears into a hamburger on screens wide enough to show it. */
@media (max-width: 1400px) {
  .adh-header__inner { gap: 1.25rem; }
  .adh-nav a { padding: .55rem .5rem; font-size: .875rem; }
  .adh-brand__tag { letter-spacing: .18em; }
}

@media (max-width: 1180px) {
  .adh-nav { display: none; }
  .adh-burger { display: flex; }
  .adh-header__inner { gap: 1rem; }
  .adh-header__cta { margin-left: auto; }
}
@media (max-width: 520px) {
  .adh-header__cta .adh-btn { display: none; }
  .adh-brand img { height: 36px; }
}


/* ==========================================================================
   06  HERO — video background
   --------------------------------------------------------------------------
   Full-bleed looping video with a cream scrim swept in from the left. The
   copy sits on the opaque side in near-black; the video stays vivid on the
   right rather than being washed out by a flat white overlay.

   A poster image paints immediately and the iframe fades in on top once it
   is ready, so the Largest Contentful Paint never waits on YouTube.
   ========================================================================== */

/* 92svh meant the hero filled the whole screen and nothing below it was ever
   visible without scrolling — on a laptop the countdown strip and the first
   section were both off the fold. 76svh leaves a band of the next section
   showing, which is what tells a visitor there is more page. */
.adh-hero {
  position: relative;
  min-height: min(76svh, 680px);
  display: flex; align-items: center;
  isolation: isolate;
  overflow: hidden;
  background: var(--cream);
}

.adh-hero__media { position: absolute; inset: 0; z-index: -2; overflow: hidden; }

/* Poster — visible instantly, stays as the fallback if video never loads. */
.adh-hero__poster {
  position: absolute; inset: 0;
  width: 100%; height: 100%; object-fit: cover; object-position: center 55%;
}

/* A <video> covers its box exactly with object-fit, so it needs none of the
   aspect maths an iframe does. This is also what fixed the grey band across
   the top of the hero on phones: the old 56.25vw / 177.77vh sizing was
   calculated against the VIEWPORT, while the hero is capped at 860px, so on a
   tall narrow screen the media box and the video box stopped agreeing. */
.adh-hero__video {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  border: 0;
  pointer-events: none;                   /* wallpaper — never clickable */
  opacity: 0;
  transition: opacity 1s var(--ease);
}

/* The YouTube fallback is an iframe, which object-fit cannot touch: the player
   has to be grown past the box and cropped.
   The ratio must be held at 16:9 — set width AND height independently and the
   iframe stops being 16:9, so YouTube letterboxes INSIDE it and you get grey
   bands. That is what was showing across the top of the hero on phones.
   So: pick a width that covers both axes, then let aspect-ratio derive the
   height. 178vh is 16:9 against a full-height viewport, with margin to spare
   for the hero's 92svh cap. */
.adh-hero__video--yt {
  inset: auto; top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: max(101vw, 178vh);
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: fill;
}

.adh-hero__video.is-ready { opacity: 1; }

/* Once the video is up, the still underneath has no job left. Leaving it
   there is what produced two pictures at once on a phone — the sunset still
   across the top, the tent-city footage across the bottom, and a seam between
   them.
   The class goes on the wrapper rather than using a sibling selector, because
   the poster comes FIRST in the DOM and ~ only looks forwards. app.js adds it
   the moment the video is actually showing a frame, and only then. */
.adh-hero__poster { transition: opacity .6s var(--ease); }
.adh-hero__media.is-playing .adh-hero__poster { opacity: 0; }

/* The YouTube iframe is the one thing that cannot be made to cover a narrow
   screen: it is a fixed 16:9 player, and whatever size the box is given,
   YouTube letterboxes inside it. On phones it is not loaded at all — app.js
   drops it — which also saves a phone user the ~400 KB player. This rule is
   the belt to that braces.
   An uploaded MP4 still plays here: object-fit handles any aspect exactly. */
@media (max-width: 700px) {
  .adh-hero__video--yt { display: none; }
}

/* Cream scrim: opaque behind the copy, clear over the video.
   Fewer stops and a longer hold than before — the old five-stop ramp cleared
   to nothing by two-thirds across, which left a dense aerial photograph
   competing with the headline. The copy side is now solid to 40%. */
.adh-hero__media::after {
  content: ""; position: absolute; inset: 0;
  background:
    linear-gradient(100deg,
      rgba(var(--cream-rgb), .97) 0%,
      rgba(var(--cream-rgb), .95) 40%,
      rgba(var(--cream-rgb), .55) 66%,
      rgba(var(--cream-rgb), .22) 100%),
    linear-gradient(to top,
      rgba(var(--cream-rgb), .55) 0%,
      rgba(var(--cream-rgb), 0) 28%);
}

.adh-hero__inner {
  position: relative; width: 100%;
  max-width: var(--container); margin-inline: auto;
  padding: calc(var(--header-h) + 1.75rem) var(--gutter) 2rem;
}
.adh-hero__body { max-width: 32rem; }

.adh-hero h1 {
  font-size: var(--fs-hero);
  line-height: var(--lh-tight);
  font-weight: var(--fw-black);
  letter-spacing: var(--ls-hero);
  color: var(--ink);
  margin: 0 0 1rem;
}
.adh-hero h1 em { font-style: normal; color: var(--accent); }

.adh-hero__lede {
  font-size: clamp(1rem, .95rem + .3vw, 1.14rem);
  color: var(--ink-2);
  max-width: 42ch;
  margin-bottom: 1.6rem;
}

/* Play/pause control.
   Hidden until the hero is hovered or the button is tabbed to. A video the
   visitor cannot stop is a nuisance and WCAG 2.2.2 requires the control to
   exist — but it is wallpaper, and a permanent button floating over it was
   clutter on a hero that already carries an eyebrow, a headline, a lede and
   two buttons. It is still reachable by keyboard, and still announced. */
.adh-hero__toggle {
  position: absolute; right: var(--gutter); bottom: 1.25rem; z-index: 3;
  width: 38px; height: 38px; border-radius: 50%;
  display: grid; place-items: center;
  background: rgba(255, 255, 255, .78);
  backdrop-filter: blur(8px);
  border: 1px solid var(--line-2);
  color: var(--ink);
  opacity: 0;
  transition: opacity var(--t-med) var(--ease), background var(--t-fast) var(--ease);
}
.adh-hero:hover .adh-hero__toggle,
.adh-hero__toggle:focus-visible,
/* Once paused it stays put — fading away the only control that can restart
   the video would strand anyone who used it. */
.adh-hero__toggle[aria-pressed="true"] { opacity: 1; }
.adh-hero__toggle:hover { background: var(--surface); }

/* A touch device has no hover, so there it stays visible — otherwise there
   would be no way to stop the motion at all. */
@media (hover: none) {
  .adh-hero__toggle { opacity: 1; }
}

/* Season countdown strip along the bottom of the hero. */
/* Terracotta rather than a dark bar — this is an urgency strip, and on a
   light page a solid accent band reads as promotional where a dark one just
   reads as a hole. */
.adh-countdown {
  position: relative; z-index: 2;
  background: var(--accent);
  color: var(--surface);
}
.adh-countdown__inner {
  max-width: var(--container); margin-inline: auto;
  padding: 1.1rem var(--gutter);
  display: flex; flex-wrap: wrap; align-items: center;
  gap: 1rem 2rem;
}
.adh-countdown__label {
  font-size: var(--fs-xs); font-weight: var(--fw-bold);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--surface);
  margin: 0;
}
.adh-countdown__label span {
  display: block; color: rgba(255, 255, 255, .72);
  margin-top: .25rem; letter-spacing: .03em; font-weight: var(--fw-med);
  text-transform: none; font-size: var(--fs-xs);
}
.adh-countdown__clock { display: flex; gap: 1.35rem; margin-left: auto; }
.adh-countdown__unit { text-align: center; min-width: 52px; }
.adh-countdown__unit b {
  display: block;
  font-size: 1.85rem; font-weight: var(--fw-bold); line-height: 1;
  letter-spacing: -.03em;
  color: var(--surface);
  font-variant-numeric: tabular-nums;
}
.adh-countdown__unit small {
  font-size: .625rem; font-weight: var(--fw-semi);
  letter-spacing: var(--ls-eyebrow); text-transform: uppercase;
  color: rgba(255, 255, 255, .62);
}

@media (max-width: 900px) {
  .adh-hero { min-height: 0; }
  .adh-hero__inner { padding-block: calc(var(--header-h) + 3.5rem) 4rem; }
  .adh-hero__body { max-width: none; }
  /* On a narrow screen the sideways gradient leaves nothing readable, so it
     becomes a bottom-up scrim instead. */
  .adh-hero__media::after {
    background: linear-gradient(to top,
      rgba(var(--cream-rgb), .97) 0%,
      rgba(var(--cream-rgb), .90) 45%,
      rgba(var(--cream-rgb), .45) 75%,
      rgba(var(--cream-rgb), .25) 100%);
  }
}
@media (max-width: 720px) {
  .adh-countdown__clock { margin-left: 0; width: 100%; justify-content: space-between; gap: .4rem; }
  .adh-countdown__unit b { font-size: 1.5rem; }
}

/* Compact hero for interior pages. */
/* Down from clamp(300px, 36vw, 440px). These banners carry a crumb trail, a
   headline, a lede, two facts and two buttons — at 440px tall that stack sat
   in a lot of empty space, and on a laptop the first real section of the page
   started below the fold. */
.adh-phero {
  position: relative; isolation: isolate;
  min-height: clamp(230px, 26vw, 340px);
  display: flex; align-items: flex-end;
  overflow: hidden;
  background: var(--sand);
}
.adh-phero__media { position: absolute; inset: 0; z-index: -2; }
.adh-phero__media img { width: 100%; height: 100%; object-fit: cover; }
/* Holds the cream longer than it used to and never clears completely. These
   heroes sit over busy photographs — tent rows, crowds, market stalls — and
   the old ramp was transparent by 60%, so the right-hand half of the banner
   was competing with the headline instead of supporting it. */
.adh-phero__media::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(105deg,
    rgba(var(--cream-rgb), .97) 0%,
    rgba(var(--cream-rgb), .94) 42%,
    rgba(var(--cream-rgb), .58) 70%,
    rgba(var(--cream-rgb), .26) 100%);
}
/* No header offset here — .adh-main already clears the header on these pages. */
.adh-phero__inner {
  position: relative; width: 100%;
  max-width: var(--container); margin-inline: auto;
  padding: clamp(1.75rem, 3.4vw, 2.75rem) var(--gutter) clamp(1.4rem, 2.2vw, 2.1rem);
}
.adh-phero h1 { max-width: 22ch; }


/* ==========================================================================
   07  SECTIONS & CARDS
   ========================================================================== */

/* --- Trust strip -------------------------------------------------------- */
.adh-trust { background: var(--surface); border-bottom: 1px solid var(--line); }
.adh-trust__grid { display: grid; grid-template-columns: repeat(4, 1fr); }
.adh-trust__item {
  padding: clamp(1.5rem, 2.4vw, 2.25rem) clamp(1rem, 2vw, 2rem);
  border-right: 1px solid var(--line);
  display: flex; gap: .9rem; align-items: flex-start;
}
.adh-trust__item:last-child { border-right: 0; }
.adh-trust__icon {
  color: var(--accent); flex: none;
  width: 38px; height: 38px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--accent-tint);
}
.adh-trust__item b {
  display: block; font-size: var(--fs-sm); font-weight: var(--fw-semi);
  color: var(--ink); margin-bottom: .18rem;
}
.adh-trust__item span { font-size: var(--fs-xs); color: var(--ink-3); line-height: 1.5; }

@media (max-width: 900px) {
  .adh-trust__grid { grid-template-columns: repeat(2, 1fr); }
  .adh-trust__item:nth-child(2n) { border-right: 0; }
  .adh-trust__item:nth-child(-n+2) { border-bottom: 1px solid var(--line); }
}
@media (max-width: 520px) {
  .adh-trust__grid { grid-template-columns: 1fr; }
  .adh-trust__item { border-right: 0; border-bottom: 1px solid var(--line); }
  .adh-trust__item:last-child { border-bottom: 0; }
}

/* --- Asymmetric feature split ------------------------------------------- */
.adh-feature {
  display: grid;
  grid-template-columns: 1.05fr .95fr;
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: center;
}
.adh-feature--flip .adh-feature__media { order: 2; }
.adh-feature__media { position: relative; }
.adh-feature__media img {
  width: 100%; aspect-ratio: 4 / 3.2; object-fit: cover;
  border-radius: var(--r-xl);
}
.adh-feature__badge {
  position: absolute; right: -14px; bottom: -20px;
  background: var(--accent); color: var(--surface);
  padding: 1.05rem 1.45rem; border-radius: var(--r-md);
  box-shadow: var(--shadow-lg);
  max-width: 220px;
}
.adh-feature__badge b {
  display: block; font-size: 1.7rem; line-height: 1;
  font-weight: var(--fw-bold); letter-spacing: -.03em; color: var(--surface);
}
.adh-feature__badge span {
  font-size: var(--fs-xs); font-weight: var(--fw-semi);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  opacity: .85;
}

/* Key-facts list. */
.adh-facts { display: grid; gap: 0; margin: 1.85rem 0; }
.adh-facts li {
  display: flex; justify-content: space-between; gap: 1.5rem;
  padding: .8rem 0;
  border-bottom: 1px solid var(--line);
  font-size: var(--fs-sm);
}
.adh-facts .k { color: var(--ink-3); }
.adh-facts .v { font-weight: var(--fw-semi); color: var(--ink); text-align: right; }

@media (max-width: 860px) {
  .adh-feature { grid-template-columns: 1fr; }
  .adh-feature--flip .adh-feature__media { order: 0; }
  .adh-feature__badge { right: 12px; bottom: -16px; }
}

/* --- Property / experience card ---------------------------------------- */
.adh-card {
  position: relative;
  display: flex; flex-direction: column;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  overflow: hidden;
  transition: transform var(--t-med) var(--ease-out),
              box-shadow var(--t-med) var(--ease),
              border-color var(--t-med) var(--ease);
}
.adh-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-lg);
  border-color: transparent;
}

.adh-card__media { position: relative; overflow: hidden; aspect-ratio: 4 / 3; }
.adh-card__media img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform var(--t-slow) var(--ease-out);
}
.adh-card:hover .adh-card__media img { transform: scale(1.06); }

.adh-card__tag {
  position: absolute; top: 1rem; left: 1rem;
  background: rgba(255, 255, 255, .93);
  backdrop-filter: blur(6px);
  color: var(--accent-deep);
  font-size: var(--fs-xs); font-weight: var(--fw-bold);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  padding: .4rem .8rem; border-radius: var(--r-pill);
}

.adh-card__body { padding: 1.4rem 1.4rem 1.55rem; display: flex; flex-direction: column; flex: 1; }
.adh-card__loc {
  display: flex; align-items: center; gap: .35rem;
  font-size: var(--fs-xs); font-weight: var(--fw-med);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--ink-3); margin-bottom: .5rem;
}
.adh-card__loc svg { color: var(--accent); flex: none; }
.adh-card h3 { margin-bottom: .5rem; }
.adh-card__desc { font-size: var(--fs-sm); color: var(--ink-2); margin-bottom: 1.1rem; }

.adh-card__foot {
  margin-top: auto; padding-top: 1rem;
  border-top: 1px solid var(--line);
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
}
.adh-card__price { font-size: var(--fs-xs); color: var(--ink-3); line-height: 1.35; }
.adh-card__price b {
  display: block; font-size: 1.28rem; font-weight: var(--fw-bold);
  letter-spacing: -.025em; color: var(--ink);
}

/* Whole card clickable without nesting <a> inside <a>. */
.adh-card__link::after { content: ""; position: absolute; inset: 0; z-index: 1; }

/* --- Experience chips --------------------------------------------------- */
.adh-chips { display: flex; flex-wrap: wrap; gap: .6rem; }
.adh-chip {
  display: inline-flex; align-items: baseline; gap: .55rem;
  padding: .65rem 1.15rem;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r-pill);
  font-size: var(--fs-sm); font-weight: var(--fw-med);
  color: var(--ink);
  transition: border-color var(--t-fast) var(--ease),
              background var(--t-fast) var(--ease),
              color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease);
}
.adh-chip:hover {
  border-color: var(--accent); background: var(--accent-tint);
  color: var(--accent-deep); transform: translateY(-2px);
}
.adh-chip small { font-size: var(--fs-xs); color: var(--ink-3); }
.adh-chip:hover small { color: var(--accent-deep); opacity: .75; }

/* --- Numbered "why us" list --------------------------------------------- */
.adh-why { display: grid; gap: clamp(1.5rem, 3vw, 2.5rem); grid-template-columns: repeat(4, 1fr); }
.adh-why__item { padding-top: 1.35rem; border-top: 2px solid var(--sand-2); }
.adh-why__n {
  font-family: var(--font-display);
  font-size: 2.4rem; font-weight: var(--fw-bold); line-height: 1;
  letter-spacing: -.015em;
  /* Brass-deep, not brass: this is type, and needs 4.5:1 rather than 3:1. */
  color: var(--brass-deep); display: block; margin-bottom: .85rem;
}
/* h3 since the SEO pass: these sit directly under the section's h2, so h4 was
   skipping a level in the document outline. The size stays h4's — this is a
   card title, not a section heading. h4 kept for any markup not yet updated. */
.adh-why__item h3,
.adh-why__item h4 { font-size: var(--fs-h4); margin-bottom: .45rem; }
.adh-why__item p { font-size: var(--fs-sm); color: var(--ink-2); }

/* Three across, for lists whose length divides by three — nine items in the
   four-column default leave a single orphan on the last row. */
.adh-why--3 { grid-template-columns: repeat(3, 1fr); }

@media (max-width: 900px) { .adh-why, .adh-why--3 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 540px) { .adh-why, .adh-why--3 { grid-template-columns: 1fr; } }

/* --- Reviews ------------------------------------------------------------ */
.adh-review {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  padding: 1.65rem;
  display: flex; flex-direction: column;
}
.adh-stars { display: flex; gap: .12rem; color: var(--brass); margin-bottom: .9rem; }
.adh-review blockquote { margin: 0 0 1.25rem; font-size: var(--fs-sm); color: var(--ink-2); flex: 1; }
.adh-review__who { display: flex; align-items: center; gap: .75rem; }
.adh-review__av {
  width: 40px; height: 40px; border-radius: 50%; flex: none;
  display: grid; place-items: center;
  background: var(--accent-tint); color: var(--accent-deep);
  font-weight: var(--fw-bold); font-size: var(--fs-sm);
}
.adh-review__who b { display: block; font-size: var(--fs-sm); color: var(--ink); }
.adh-review__who > span > span { font-size: var(--fs-xs); color: var(--ink-3); }

/* --- Blog card ---------------------------------------------------------- */
.adh-post { position: relative; }
.adh-post__media {
  aspect-ratio: 16 / 10; border-radius: var(--r-md);
  overflow: hidden; margin-bottom: 1rem; background: var(--sand);
}
.adh-post__media img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform var(--t-slow) var(--ease-out);
}
.adh-post:hover .adh-post__media img { transform: scale(1.05); }
.adh-post__meta {
  font-size: var(--fs-xs); font-weight: var(--fw-med);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--ink-3); margin-bottom: .45rem;
}
.adh-post h3 { font-size: 1.2rem; margin-bottom: .45rem; }
.adh-post p { font-size: var(--fs-sm); color: var(--ink-2); }

/* ==========================================================================
   TABLES
   --------------------------------------------------------------------------
   One system for every table on the site: the tariff and cancellation tables
   the theme authors, and the tables inside the 41 blog posts that contain
   them, which inc/content.php wraps and labels on the way out.

   On a phone a table either STACKS (each row becomes a labelled block) or
   SCROLLS sideways. Stacking is the better read and is the default; tables
   wider than five columns fall back to scrolling, marked by PHP.
   ========================================================================== */

.adh-table-wrap {
  position: relative;
  overflow-x: auto;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  background: var(--surface);
  -webkit-overflow-scrolling: touch;
  /* A fade on the right edge that disappears once scrolled to the end, so it
     is obvious there is more table off-screen. Pure CSS, no JS. */
  background-image:
    linear-gradient(to right, var(--surface), var(--surface)),
    linear-gradient(to right, var(--surface), var(--surface)),
    linear-gradient(to right, rgba(31, 27, 23, .10), rgba(31, 27, 23, 0)),
    linear-gradient(to left,  rgba(31, 27, 23, .10), rgba(31, 27, 23, 0));
  background-position: left center, right center, left center, right center;
  background-repeat: no-repeat;
  background-size: 28px 100%, 28px 100%, 14px 100%, 14px 100%;
  background-attachment: local, local, scroll, scroll;
}
.adh-table-wrap:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

/* Editor-content tables get room to breathe in the article flow. */
.adh-table-wrap--prose { margin-block: 2em; }
.adh-prose .adh-table-wrap table { margin: 0; }

.adh-table,
.adh-prose .adh-t { font-size: var(--fs-sm); width: 100%; }

/* min-width forces the scroller on desktop-width tables. It is removed again
   in the stacked view below, or the stacking would still overflow. */
.adh-table { min-width: 620px; }
.adh-table--slim { min-width: 380px; }
.adh-t--scroll { min-width: 640px; }

.adh-table th, .adh-table td,
.adh-prose .adh-t th, .adh-prose .adh-t td {
  padding: .9rem 1.1rem; text-align: left; vertical-align: top;
  border-bottom: 1px solid var(--line);
}

.adh-table thead th,
.adh-prose .adh-t thead th {
  background: var(--accent); color: var(--surface);
  font-size: var(--fs-xs); font-weight: var(--fw-semi);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  white-space: nowrap;
  border-bottom: 0;
}

.adh-table tbody tr:last-child td,
.adh-prose .adh-t tbody tr:last-child td { border-bottom: 0; }

.adh-table tbody tr:nth-child(even),
.adh-prose .adh-t tbody tr:nth-child(even) { background: var(--cream-2); }

.adh-table .adh-tier {
  display: inline-flex; align-items: center; gap: .5rem;
  font-weight: var(--fw-semi); color: var(--ink);
}
.adh-table .adh-tier::before { content: ""; width: 9px; height: 9px; border-radius: 50%; flex: none; }
.adh-tier--premium::before { background: var(--tier-premium); }
.adh-tier--regular::before { background: var(--tier-regular); }
.adh-tier--economy::before { background: var(--tier-economy); }
.adh-table__note { font-size: var(--fs-xs); color: var(--ink-3); margin-top: .8rem; }

/* --------------------------------------------------------------------------
   STACKED VIEW
   Below 720px a stackable table stops being a table and becomes a list of
   cards, one per row, with the column heading printed beside each value.
   -------------------------------------------------------------------------- */
@media (max-width: 720px) {

  /* The wrapper no longer scrolls, so drop its border and edge fades —
     the rows carry their own outline now. */
  .adh-table-wrap:has(.adh-t--stack) {
    overflow: visible;
    border: 0;
    background: none;
    border-radius: 0;
  }

  .adh-t--stack { min-width: 0; display: block; }
  .adh-t--stack thead { display: none; }           /* headings move into the cells */
  .adh-t--stack tbody,
  .adh-t--stack tr,
  .adh-t--stack td,
  .adh-t--stack tbody th { display: block; width: auto; }

  .adh-t--stack caption { display: block; }

  .adh-t--stack tr {
    background: var(--surface) !important;          /* overrides the zebra rule */
    border: 1px solid var(--line);
    border-radius: var(--r-md);
    padding: .35rem .25rem;
    margin-bottom: .85rem;
    overflow: hidden;
  }
  .adh-t--stack tr:last-child { margin-bottom: 0; }

  .adh-t--stack td {
    display: flex; align-items: baseline;
    justify-content: space-between; gap: 1rem;
    padding: .6rem .9rem;
    border-bottom: 1px solid var(--line);
    text-align: right;
  }
  .adh-t--stack td:last-child { border-bottom: 0; }

  /* The column heading, carried over by data-label. */
  .adh-t--stack td[data-label]::before {
    content: attr(data-label);
    flex: 0 0 42%;
    text-align: left;
    font-size: var(--fs-xs); font-weight: var(--fw-semi);
    letter-spacing: var(--ls-caps); text-transform: uppercase;
    color: var(--ink-3);
    line-height: 1.4;
  }

  /* A cell with no heading (the Enquire button) spans the full width. */
  .adh-t--stack td:not([data-label]) { justify-content: flex-start; text-align: left; }
  .adh-t--stack .adh-t__action { background: var(--cream); }

  /* First cell of each row reads as that row's title. Migrated tables open
     their rows with <th scope="row"> rather than a <td>, so both count. */
  .adh-t--stack td:first-child,
  .adh-t--stack tbody th {
    background: var(--cream-2);
    color: var(--ink);
    font-weight: var(--fw-semi);
    text-align: left;
    padding: .6rem .9rem;
    border-bottom: 1px solid var(--line);
  }
  .adh-t--stack tbody th[scope="row"] { font-size: var(--fs-body); }

  /* Wide tables keep scrolling — make the affordance unmissable. */
  .adh-table-wrap:has(.adh-t--scroll)::after {
    content: "";
    position: absolute; inset: 0 0 0 auto; width: 34px;
    pointer-events: none;
    background: linear-gradient(to left, var(--surface), transparent);
    border-radius: 0 var(--r-md) var(--r-md) 0;
  }
}

/* Fallback for browsers without :has() — Firefox before 121, older Safari.
   Without it the stacked table would sit inside a bordered scroll box. Harmless
   where :has() is supported, because the rules above win on specificity. */
@supports not selector(:has(*)) {
  @media (max-width: 720px) {
    .adh-table-wrap { border: 0; background: none; overflow-x: auto; }
  }
}


/* ==========================================================================
   08  FORMS
   ========================================================================== */

.adh-form { display: grid; gap: 1rem; }
.adh-form__row { display: grid; gap: 1rem; grid-template-columns: repeat(2, 1fr); }
@media (max-width: 600px) { .adh-form__row { grid-template-columns: 1fr; } }

.adh-field { display: grid; gap: .4rem; }

/* The enquiry form wraps each input inside its <label> rather than pairing
   them by id, because the same form renders twice on a page that has both an
   inline form and the popup. So the caps treatment lives on an inner span —
   put on the label itself, text-transform would inherit into the input and
   uppercase whatever the visitor types. */
.adh-field label { display: grid; gap: .4rem; }
.adh-field label,
.adh-label {
  font-size: var(--fs-xs); font-weight: var(--fw-semi);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--ink-3);
}
.adh-field .req { color: var(--accent); }

.adh-input {
  width: 100%;
  /* Reset, not decoration: the label above is uppercase and an input nested
     inside it would otherwise inherit that and shout back what is typed. */
  text-transform: none; letter-spacing: normal; font-weight: var(--fw-body);
  padding: .85rem 1rem;
  background: var(--surface);
  border: 1.5px solid var(--line-2);
  border-radius: var(--r-sm);
  color: var(--ink);
  font-size: var(--fs-sm);
  transition: border-color var(--t-fast) var(--ease),
              box-shadow var(--t-fast) var(--ease);
}
.adh-input::placeholder { color: var(--ink-3); }
.adh-input:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-glow);
}
textarea.adh-input { min-height: 112px; resize: vertical; }
select.adh-input {
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%2371695F' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 1rem center;
  padding-right: 2.5rem;
}

/* Enquiry band */
.adh-enquiry {
  display: grid; grid-template-columns: .85fr 1.15fr;
  gap: clamp(2rem, 5vw, 4rem);
  align-items: start;
}
.adh-enquiry__panel {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  padding: clamp(1.65rem, 3vw, 2.4rem);
  box-shadow: var(--shadow-md);
}
.adh-enquiry__alt {
  display: grid; gap: .8rem; margin-top: 1.85rem;
  padding-top: 1.85rem; border-top: 1px solid var(--line);
}
.adh-enquiry__alt a {
  display: flex; align-items: center; gap: .85rem;
  font-size: var(--fs-sm); color: var(--ink-2);
  transition: color var(--t-fast) var(--ease);
}
.adh-enquiry__alt a:hover { color: var(--accent-deep); }
.adh-enquiry__alt svg { color: var(--accent); flex: none; }
.adh-enquiry__alt b { display: block; color: var(--ink); font-size: var(--fs-body); }
.adh-form__consent { font-size: var(--fs-xs); color: var(--ink-3); line-height: 1.55; }
.adh-form__consent a { color: var(--accent-deep); text-decoration: underline; text-underline-offset: 2px; }
@media (max-width: 900px) { .adh-enquiry { grid-template-columns: 1fr; } }


/* --- Contact Form 7 ------------------------------------------------------
   One CF7 form serves the whole site (inc/forms.php). Its field markup is the
   theme's own, so all that is needed here is to tame the wrappers CF7 adds of
   its own accord and to make its messages look like .adh-notice. */

.adh-enquiry-form .wpcf7-form { display: grid; gap: 1rem; }

/* CF7 wraps every control in an inline span, which collapses the field grid. */
.adh-enquiry-form .wpcf7-form-control-wrap { display: block; }

/* The honeypot. Off-screen rather than display:none — a bot that reads styles
   skips hidden fields, and this one is only useful if it gets filled in. */
.adh-hp {
  position: absolute !important;
  left: -9999px; width: 1px; height: 1px; overflow: hidden;
}

/* Per-field validation message, under the input it belongs to. */
.adh-enquiry-form .wpcf7-not-valid-tip {
  display: block; margin-top: .35rem;
  font-size: var(--fs-xs); font-weight: var(--fw-med);
  text-transform: none; letter-spacing: normal;
  color: var(--warn);
}
.adh-enquiry-form .wpcf7-not-valid { border-color: var(--warn); }

/* Form-level response. CF7 ships it hidden and reveals it by state class. */
.adh-enquiry-form .wpcf7-response-output {
  margin: 0; padding: .9rem 1.1rem;
  border: 1px solid; border-radius: var(--r-sm);
  font-size: var(--fs-sm); line-height: 1.55;
}
.adh-enquiry-form form.init .wpcf7-response-output,
.adh-enquiry-form form.resetting .wpcf7-response-output,
.adh-enquiry-form form.submitting .wpcf7-response-output { display: none; }

.adh-enquiry-form form.sent .wpcf7-response-output {
  background: rgba(46, 125, 91, .10); border-color: var(--ok); color: var(--ok);
}
.adh-enquiry-form form.invalid .wpcf7-response-output,
.adh-enquiry-form form.unaccepted .wpcf7-response-output,
.adh-enquiry-form form.payment-required .wpcf7-response-output {
  background: rgba(180, 84, 58, .10); border-color: var(--warn); color: var(--warn);
}
.adh-enquiry-form form.failed .wpcf7-response-output,
.adh-enquiry-form form.aborted .wpcf7-response-output,
.adh-enquiry-form form.spam .wpcf7-response-output {
  background: rgba(180, 84, 58, .10); border-color: var(--warn); color: var(--warn);
}

/* Once it has sent there is nothing left to fill in, so get the fields out of
   the way and leave the confirmation on its own. */
.adh-enquiry-form form.sent .adh-form__row,
.adh-enquiry-form form.sent .adh-field,
.adh-enquiry-form form.sent .adh-form__consent,
.adh-enquiry-form form.sent .wpcf7-submit { display: none; }

/* CF7's spinner sits next to the submit button. */
.adh-enquiry-form .wpcf7-spinner { margin: .6rem auto 0; display: block; }
.adh-enquiry-form form.submitting .wpcf7-submit { opacity: .6; pointer-events: none; }

/* CF7's submit tag renders an <input>, so it cannot hold the arrow icon the
   theme's other buttons carry. It keeps the button styling, minus the icon. */
.adh-enquiry-form .wpcf7-submit { -webkit-appearance: none; appearance: none; }


/* --- Closing CTA band ---------------------------------------------------- */
.adh-cta { padding-block: clamp(3rem, 5vw, 4.75rem); }
.adh-cta--sand { background: var(--sand); }
.adh-cta--accent { background: var(--accent); }

.adh-cta__inner {
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 1.75rem 3rem;
}
.adh-cta__copy { max-width: 46ch; }
.adh-cta__copy h2 { margin-bottom: .6rem; }
.adh-cta__copy p { font-size: var(--fs-lede); color: var(--ink-2); }
.adh-cta__actions { display: flex; flex-wrap: wrap; gap: .75rem; }

/* The strong variant reverses onto terracotta. */
.adh-cta--accent .adh-cta__copy h2 { color: var(--surface); }
.adh-cta--accent .adh-cta__copy p  { color: rgba(255, 255, 255, .84); }
.adh-cta--accent .adh-btn--primary { background: var(--surface); color: var(--accent-deep); box-shadow: none; }
.adh-cta--accent .adh-btn--primary:hover { background: var(--cream); }
.adh-cta--accent .adh-btn--outline {
  background: transparent; border-color: rgba(255, 255, 255, .45); color: var(--surface);
}
.adh-cta--accent .adh-btn--outline:hover { background: var(--surface); color: var(--accent-deep); border-color: var(--surface); }

@media (max-width: 720px) {
  .adh-cta__actions { width: 100%; }
  .adh-cta__actions .adh-btn { flex: 1 1 100%; }
}


/* ==========================================================================
   09b  ENQUIRY POPUP
   --------------------------------------------------------------------------
   Replaces the enquiry form that used to sit at the foot of every page. The
   form is the same one — only where it lives has changed.
   ========================================================================== */

.adh-modal {
  position: fixed; inset: 0; z-index: 300;
  display: grid; place-items: center;
  padding: var(--gutter);
}
.adh-modal[hidden] { display: none; }

.adh-modal__backdrop {
  position: absolute; inset: 0;
  background: rgba(31, 27, 23, .55);
  backdrop-filter: blur(4px);
  opacity: 0;
  transition: opacity var(--t-med) var(--ease);
}
.adh-modal.is-open .adh-modal__backdrop { opacity: 1; }

.adh-modal__dialog {
  position: relative;
  width: min(100%, 620px);
  max-height: calc(100dvh - 2 * var(--gutter));
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background: var(--cream);
  border-radius: var(--r-lg);
  box-shadow: 0 32px 80px rgba(31, 27, 23, .32);
  padding: clamp(1.5rem, 3.5vw, 2.5rem);
  opacity: 0;
  transform: translateY(16px) scale(.985);
  transition: opacity var(--t-med) var(--ease-out),
              transform var(--t-med) var(--ease-out);
}
.adh-modal.is-open .adh-modal__dialog { opacity: 1; transform: none; }

/* --- Split dialog --------------------------------------------------------
   Two panels: the reason on the left, the fields on the right. The form has
   eight fields plus a message box, which in one 620px column ran off the
   bottom of the viewport — the visitor met a scrollbar before the first field
   and lost the heading as soon as they started typing.

   The DIALOG itself no longer scrolls; only the form column does, and only
   when the viewport is genuinely too short. So the pitch and the phone number
   stay put while the fields move. */
.adh-modal__dialog--split {
  width: min(100%, 1020px);
  padding: 0;
  overflow: hidden;                 /* clips the aside image to the radius */
  display: grid;
  grid-template-columns: minmax(0, .8fr) minmax(0, 1fr);
  align-items: stretch;
}

/* --- Left panel --- */
.adh-modal__aside {
  position: relative;
  display: flex; flex-direction: column; justify-content: flex-end;
  padding: clamp(1.5rem, 2.6vw, 2.25rem);
  color: var(--surface);
  background: var(--accent-deep);   /* shows through if the image is slow */
  min-height: 100%;
}
.adh-modal__aside-img {
  position: absolute; inset: 0;
  width: 100%; height: 100%; object-fit: cover;
}
/* Ink over oxblood, weighted to the bottom where the text sits. */
.adh-modal__aside::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg,
    rgba(31, 27, 23, .30) 0%,
    rgba(82, 24, 36, .72) 45%,
    rgba(82, 24, 36, .94) 100%);
}
.adh-modal__aside-body { position: relative; z-index: 1; }

/* The eyebrow's rule is currentColor, so recolouring the text moves both. */
.adh-modal__aside .adh-eyebrow { color: var(--brass); margin-bottom: .85rem; }
.adh-modal__aside h2 {
  color: var(--surface);
  font-size: clamp(1.4rem, 1.1rem + 1.1vw, 1.85rem);
  margin-bottom: .6rem;
}
.adh-modal__aside .adh-modal__lede { color: rgba(255, 255, 255, .8); }

/* The footer links are ink on cream everywhere else; here they sit on oxblood. */
.adh-modal__aside .adh-modal__foot { border-top-color: rgba(255, 255, 255, .22); }
.adh-modal__aside .adh-modal__foot a { color: var(--surface); }
.adh-modal__aside .adh-modal__foot a:hover { color: var(--brass); }
.adh-modal__aside .adh-modal__foot svg { color: var(--brass); }

.adh-modal__points {
  display: grid; gap: .5rem;
  margin: 1.1rem 0 0;
}
.adh-modal__points li {
  position: relative; padding-left: 1.5rem;
  font-size: var(--fs-sm); line-height: 1.5;
  color: rgba(255, 255, 255, .88);
}
.adh-modal__points li::before {
  content: ""; position: absolute; left: 0; top: .34em;
  width: 14px; height: 14px; border-radius: 50%;
  background: var(--brass) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath d='M2 6.2l2.6 2.6L10 3.4' stroke='%23FFFFFF' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center no-repeat;
}

/* --- Right panel --- */
.adh-modal__panel {
  padding: clamp(1.4rem, 2.6vw, 2.1rem);
  background: var(--cream);
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  max-height: calc(100dvh - 2 * var(--gutter));
}
.adh-modal__panel-title {
  font-size: var(--fs-xs); font-weight: var(--fw-semi);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--ink-3);
  margin: 0 0 1rem;
  padding-right: 2.5rem;            /* clear of the close button */
}

/* The dialog is wider than the old one, so the message box does not need to
   be as tall to look right — and this is what keeps the whole thing inside a
   laptop viewport without scrolling. */
.adh-modal__panel textarea.adh-input { min-height: 78px; }
.adh-modal__panel .adh-form { gap: .85rem; }
.adh-modal__panel .adh-form__row { gap: .85rem; }

/* On the split dialog the close button sits over the cream panel. */
.adh-modal__dialog--split .adh-modal__close { top: 1rem; right: 1rem; z-index: 2; }

/* --- Stacked, below the split ------------------------------------------- */
@media (max-width: 880px) {
  .adh-modal__dialog--split {
    grid-template-columns: 1fr;
    width: min(100%, 560px);
    max-height: calc(100dvh - 2 * var(--gutter));
    overflow-y: auto;
  }
  /* The photograph is the first thing to go: on a phone it costs a third of
     the screen and the fields are the point. */
  .adh-modal__aside { min-height: 0; padding: 1.35rem 1.35rem 1.5rem; }
  .adh-modal__aside-img { display: none; }
  .adh-modal__aside::after { background: none; }
  .adh-modal__aside { background: var(--accent-deep); }
  .adh-modal__points { display: none; }
  .adh-modal__panel { max-height: none; overflow: visible; }
  .adh-modal__panel textarea.adh-input { min-height: 92px; }
}

.adh-modal__close {
  position: absolute; top: .85rem; right: .85rem;
  width: 38px; height: 38px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--surface);
  border: 1px solid var(--line);
  color: var(--ink-2);
  transition: all var(--t-fast) var(--ease);
}
.adh-modal__close:hover { background: var(--accent); color: var(--surface); border-color: var(--accent); }

.adh-modal__head { margin-bottom: 1.4rem; padding-right: 2.5rem; }
.adh-modal__head h2 { font-size: clamp(1.5rem, 1.2rem + 1.2vw, 1.95rem); margin-bottom: .55rem; }

/* The package the visitor was looking at when they clicked. */
.adh-modal__ctx {
  display: inline-block;
  background: var(--accent-tint); color: var(--accent-deep);
  font-size: var(--fs-xs); font-weight: var(--fw-semi);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  padding: .35rem .75rem; border-radius: var(--r-pill);
  margin-bottom: .75rem;
}
.adh-modal__ctx[hidden] { display: none; }

.adh-modal__lede { font-size: var(--fs-sm); color: var(--ink-2); margin: 0; }

.adh-modal__foot {
  display: flex; flex-wrap: wrap; gap: .75rem 1.5rem;
  margin-top: 1.4rem; padding-top: 1.25rem;
  border-top: 1px solid var(--line);
}
.adh-modal__foot a {
  display: inline-flex; align-items: center; gap: .5rem;
  font-size: var(--fs-sm); font-weight: var(--fw-semi); color: var(--ink);
}
.adh-modal__foot a:hover { color: var(--accent-deep); }
.adh-modal__foot svg { color: var(--accent); }

@media (prefers-reduced-motion: reduce) {
  .adh-modal__backdrop, .adh-modal__dialog { transition: none; }
}


/* ==========================================================================
   09  FOOTER & STICKY CTA
   ========================================================================== */

.adh-footer { background: var(--sand); color: var(--ink-2); border-top: 1px solid var(--sand-2); }
.adh-footer__top {
  display: grid;
  grid-template-columns: 1.5fr 1fr 1fr 1.2fr;
  gap: clamp(2rem, 4vw, 3.5rem);
  padding-block: clamp(3rem, 5.5vw, 4.75rem);
}
.adh-footer__about { max-width: 34ch; font-size: var(--fs-sm); }
.adh-footer .adh-brand { margin-bottom: 1.2rem; }
.adh-footer h4 {
  font-size: var(--fs-xs); font-weight: var(--fw-bold);
  letter-spacing: var(--ls-eyebrow); text-transform: uppercase;
  color: var(--accent-deep); margin-bottom: 1rem;
}
.adh-footer__links li { margin-bottom: .55rem; }
.adh-footer__links a { font-size: var(--fs-sm); transition: color var(--t-fast) var(--ease); }
.adh-footer__links a:hover { color: var(--accent-deep); }
.adh-footer__contact { display: grid; gap: .85rem; font-size: var(--fs-sm); }
.adh-footer__contact a { display: flex; gap: .65rem; align-items: flex-start; }
.adh-footer__contact svg { color: var(--accent); flex: none; margin-top: .25rem; }
.adh-footer__contact a:hover { color: var(--accent-deep); }

.adh-social { display: flex; gap: .55rem; margin-top: 1.4rem; }
.adh-social a {
  width: 38px; height: 38px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--surface);
  border: 1px solid var(--sand-2);
  color: var(--ink-2);
  transition: all var(--t-fast) var(--ease);
}
.adh-social a:hover { border-color: var(--accent); color: var(--accent); transform: translateY(-2px); }

.adh-footer__bottom {
  border-top: 1px solid var(--sand-2);
  padding-block: 1.4rem;
  display: flex; flex-wrap: wrap; gap: 1rem 2rem;
  align-items: center; justify-content: space-between;
  font-size: var(--fs-xs); color: var(--ink-3);
}
.adh-footer__ssl { display: inline-flex; align-items: center; gap: .45rem; }
.adh-footer__ssl svg { color: var(--ok); }

@media (max-width: 980px) { .adh-footer__top { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .adh-footer__top { grid-template-columns: 1fr; } }

/* Sticky mobile action bar. */
.adh-sticky-cta {
  position: fixed; inset: auto 0 0 0; z-index: var(--z-sticky-cta);
  display: none;
  background: rgba(255, 255, 255, .97);
  backdrop-filter: blur(14px);
  border-top: 1px solid var(--line);
  padding: .55rem var(--gutter) calc(.55rem + env(safe-area-inset-bottom));
  grid-template-columns: repeat(3, 1fr);
  gap: .5rem;
}
.adh-sticky-cta a {
  display: flex; flex-direction: column; align-items: center; gap: .22rem;
  padding: .5rem .25rem; border-radius: var(--r-sm);
  font-size: .6875rem; font-weight: var(--fw-bold);
  letter-spacing: .03em; text-transform: uppercase;
  color: var(--ink-2);
}
.adh-sticky-cta a svg { color: var(--accent); }
.adh-sticky-cta a.is-wa svg { color: var(--whatsapp); }
.adh-sticky-cta a.is-primary { background: var(--accent); color: var(--surface); }
.adh-sticky-cta a.is-primary svg { color: var(--surface); }

@media (max-width: 860px) {
  .adh-sticky-cta { display: grid; }
  body { padding-bottom: 72px; }
}

/* Desktop floating WhatsApp button. */
.adh-wa-float {
  position: fixed; right: 22px; bottom: 22px; z-index: var(--z-sticky-cta);
  width: 54px; height: 54px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--whatsapp); color: var(--whatsapp-ink);
  box-shadow: 0 8px 26px rgba(37, 211, 102, .36);
  transition: transform var(--t-fast) var(--ease);
}
.adh-wa-float:hover { transform: scale(1.08); }
@media (max-width: 860px) { .adh-wa-float { display: none; } }


/* ==========================================================================
   10  EDITOR CONTENT & SMALL PARTS
   ========================================================================== */

/* --- Prose (the_content) ------------------------------------------------- */
.adh-prose { font-size: 1.0625rem; color: var(--ink-2); }
.adh-prose > * + * { margin-top: 1.25em; }
.adh-prose h2 { font-size: var(--fs-h3); margin-top: 2.2em; }
.adh-prose h3 { font-size: 1.3rem; margin-top: 1.8em; }
.adh-prose a { color: var(--accent-deep); text-decoration: underline; text-underline-offset: 3px; }
.adh-prose a:hover { color: var(--ink); }
.adh-prose ul, .adh-prose ol { padding-left: 1.3em; }
.adh-prose ul { list-style: disc; }
.adh-prose ol { list-style: decimal; }
.adh-prose li { margin-bottom: .5em; }
.adh-prose li::marker { color: var(--accent); }
.adh-prose img { border-radius: var(--r-md); }
.adh-prose blockquote {
  margin: 2em 0; padding: .25em 0 .25em 1.4em;
  border-left: 3px solid var(--accent);
  font-size: 1.2rem; font-weight: var(--fw-med); color: var(--ink);
}
.adh-prose code { background: var(--cream-2); padding: .15em .4em; border-radius: 4px; font-size: .9em; }
/* Prose tables are styled by the shared table system further down, which
   inc/content.php applies by adding .adh-t. These are the fallback for a
   table that somehow reaches the page unprocessed — same look, horizontal
   rules only, never a four-sided grid. */
.adh-prose table { margin: 2em 0; font-size: var(--fs-sm); width: 100%; }
.adh-prose th, .adh-prose td {
  padding: .75rem 1rem; text-align: left; vertical-align: top;
  border: 0; border-bottom: 1px solid var(--line);
}
.adh-prose th { background: var(--cream-2); font-weight: var(--fw-semi); color: var(--ink); }
.adh-prose figcaption { font-size: var(--fs-xs); color: var(--ink-3); margin-top: .6em; }

/* --- Guards for editor markup the theme did not author -------------------
   These posts were written elsewhere and pasted in; 22 carry width attributes
   on images and one has an inline width style. Nothing in article content is
   allowed to push the page sideways on a phone. */
.adh-prose { overflow-wrap: break-word; }
.adh-prose img,
.adh-prose video,
.adh-prose iframe,
.adh-prose embed,
.adh-prose object { max-width: 100%; }
.adh-prose img, .adh-prose video { height: auto; }
.adh-prose iframe { aspect-ratio: 16 / 9; height: auto; width: 100%; }
.adh-prose pre { overflow-x: auto; -webkit-overflow-scrolling: touch; }

@media (max-width: 720px) {
  /* An inline width in pasted markup loses to the viewport. */
  .adh-prose [style*="width"] { max-width: 100% !important; }
}

/* --- Breadcrumbs --------------------------------------------------------- */
.adh-crumbs { font-size: var(--fs-xs); color: var(--ink-3); }
.adh-crumbs ol { display: flex; flex-wrap: wrap; gap: .4rem; }
.adh-crumbs li:not(:last-child)::after { content: "/"; margin-left: .4rem; opacity: .5; }
.adh-crumbs a:hover { color: var(--accent-deep); }
.adh-crumbs [aria-current] { color: var(--ink); font-weight: var(--fw-med); }

/* --- Notices ------------------------------------------------------------- */
.adh-notice {
  padding: .9rem 1.1rem; border-radius: var(--r-sm);
  font-size: var(--fs-sm); margin-bottom: 1.25rem;
  border-left: 3px solid;
}
.adh-notice--ok   { background: rgba(46, 125, 91, .10);  border-color: var(--ok);   color: var(--ok); }
.adh-notice--warn { background: rgba(180, 84, 58, .10);  border-color: var(--warn); color: var(--warn); }

/* --- Pagination ---------------------------------------------------------- */
.adh-pagination { margin-top: clamp(2.5rem, 5vw, 4rem); }
.adh-pagination .nav-links { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: center; }
.adh-pagination .page-numbers {
  min-width: 42px; height: 42px; padding: 0 .8rem;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--surface);
  border: 1px solid var(--line); border-radius: var(--r-sm);
  font-size: var(--fs-sm); font-weight: var(--fw-med);
  transition: all var(--t-fast) var(--ease);
}
.adh-pagination .page-numbers:hover { border-color: var(--accent); color: var(--accent-deep); }
.adh-pagination .page-numbers.current { background: var(--accent); color: var(--surface); border-color: var(--accent); }
.adh-pagination .screen-reader-text { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

/* --- Post navigation ----------------------------------------------------- */
.adh-postnav {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem;
  margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--line);
}
.adh-postnav a {
  padding: 1.05rem 1.2rem; background: var(--surface);
  border: 1px solid var(--line); border-radius: var(--r-md);
  transition: border-color var(--t-fast) var(--ease);
}
.adh-postnav a:hover { border-color: var(--accent); }
.adh-postnav a.is-next { text-align: right; }
.adh-postnav small {
  display: block; font-size: var(--fs-xs); font-weight: var(--fw-med);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--ink-3); margin-bottom: .25rem;
}
.adh-postnav span { font-weight: var(--fw-semi); font-size: var(--fs-sm); color: var(--ink); }
@media (max-width: 560px) {
  .adh-postnav { grid-template-columns: 1fr; }
  .adh-postnav a.is-next { text-align: left; }
}

/* --- Tags ---------------------------------------------------------------- */
.adh-tags { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: 2rem; }
.adh-tags a {
  padding: .35rem .8rem; border-radius: var(--r-pill);
  background: var(--cream-2); font-size: var(--fs-xs); color: var(--ink-2);
}
.adh-tags a:hover { background: var(--accent); color: var(--surface); }

/* --- Search form --------------------------------------------------------- */
.adh-searchform { display: flex; gap: .5rem; }
.adh-searchform .adh-input { flex: 1; }

/* --- Comments ------------------------------------------------------------ */
.adh-comments { margin-top: 3.5rem; padding-top: 2.5rem; border-top: 1px solid var(--line); }
.adh-comments h3 { margin-bottom: 1.5rem; }
.adh-comments__list li { margin-bottom: 1.5rem; }
.adh-comments .comment-body { font-size: var(--fs-sm); color: var(--ink-2); }
.adh-comments .comment-meta { font-size: var(--fs-xs); color: var(--ink-3); margin-bottom: .5rem; }
.adh-comments .children { padding-left: 1.5rem; margin-top: 1.5rem; border-left: 2px solid var(--line); }
.adh-comments .comment-form { display: grid; gap: 1rem; margin-top: 2rem; }
.adh-comments .comment-form input[type="text"],
.adh-comments .comment-form input[type="email"],
.adh-comments .comment-form input[type="url"] {
  width: 100%; padding: .85rem 1rem; background: var(--surface);
  border: 1.5px solid var(--line-2); border-radius: var(--r-sm);
}

/* --- Widgets ------------------------------------------------------------- */
.adh-widget { margin-bottom: 2.5rem; }
.adh-widget__title {
  font-size: var(--fs-xs); font-weight: var(--fw-bold);
  letter-spacing: var(--ls-eyebrow); text-transform: uppercase;
  color: var(--accent-deep); margin-bottom: 1rem;
}
.adh-widget li { margin-bottom: .55rem; font-size: var(--fs-sm); }
.adh-widget a:hover { color: var(--accent-deep); }

/* --- FAQ accordion ------------------------------------------------------- */
.adh-faq details { border-bottom: 1px solid var(--line); padding: 1.1rem 0; }
.adh-faq summary {
  display: flex; align-items: center; justify-content: space-between; gap: 1.5rem;
  cursor: pointer; list-style: none;
  font-weight: var(--fw-semi); font-size: 1.05rem; color: var(--ink);
}
.adh-faq summary::-webkit-details-marker { display: none; }
.adh-faq summary::after {
  content: ""; flex: none; width: 10px; height: 10px;
  border-right: 2px solid var(--accent); border-bottom: 2px solid var(--accent);
  transform: rotate(45deg) translateY(-3px);
  transition: transform var(--t-fast) var(--ease);
}
.adh-faq details[open] summary::after { transform: rotate(-135deg) translateY(-3px); }
.adh-faq details > div { padding-top: .9rem; font-size: var(--fs-sm); color: var(--ink-2); max-width: 70ch; }

/* --- Misc ---------------------------------------------------------------- */
.adh-note { font-size: var(--fs-sm); color: var(--ink-3); }


/* ==========================================================================
   10b  INTERIOR PAGE COMPONENTS
   --------------------------------------------------------------------------
   Everything used by the Rann pillar, the resort and festival pages, about,
   contact and gallery.
   ========================================================================== */

/* --- Page hero extras ---------------------------------------------------- */
.adh-phero__crumbs { margin-bottom: 1.1rem; }
.adh-phero__lede { max-width: 46ch; margin-top: 1.1rem; }

/* One quiet line, not a row of stacked label/value blocks.
   Dates and Where were set as two-line units in body-size bold, which gave
   the banner a third block of typography competing with the headline and the
   lede. They are facts, not headlines — so they read as one line now, with
   the label small and the value carrying the weight. */
.adh-phero__meta {
  display: flex; flex-wrap: wrap;
  gap: .35rem 1.5rem;
  margin-top: 1.35rem;
}
.adh-phero__meta li {
  display: flex; align-items: baseline; gap: .5rem;
  position: relative;
}
/* A hairline between items instead of a wide gap. */
.adh-phero__meta li + li::before {
  content: ""; position: absolute; left: -.75rem; top: .3em; bottom: .3em;
  width: 1px; background: var(--sand-2);
}
.adh-phero__meta span {
  font-size: var(--fs-xs); font-weight: var(--fw-semi);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--ink-3);
}
.adh-phero__meta b {
  font-size: var(--fs-sm); font-weight: var(--fw-semi); color: var(--ink);
}
@media (max-width: 560px) {
  .adh-phero__meta li + li::before { display: none; }
  .adh-phero__meta { gap: .3rem 1.25rem; }
}

.adh-phero__actions { margin-top: 1.6rem; }

/* --- Generic panel ------------------------------------------------------- */
.adh-panel {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  padding: clamp(1.4rem, 2.4vw, 1.9rem);
}
.adh-section--white .adh-panel { background: var(--cream); }
.adh-panel h3 { font-size: var(--fs-h4); margin-bottom: .5rem; }
.adh-panel p { font-size: var(--fs-sm); color: var(--ink-2); }
.adh-panel__icon {
  display: grid; place-items: center;
  width: 44px; height: 44px; border-radius: 50%;
  background: var(--accent-tint); color: var(--accent);
  margin-bottom: 1rem;
}
.adh-panel__title {
  display: flex; align-items: center; gap: .55rem;
  font-size: var(--fs-h4); margin-bottom: 1.1rem;
}
.adh-panel__title--in::before,
.adh-panel__title--ex::before {
  content: ""; width: 22px; height: 22px; border-radius: 50%; flex: none;
  background-repeat: no-repeat; background-position: center;
}
.adh-panel__title--in::before {
  background-color: rgba(46, 125, 91, .14);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 6.2l2.6 2.6L10 3.4' stroke='%232E7D5B' stroke-width='1.8' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.adh-panel__title--ex::before {
  background-color: rgba(180, 84, 58, .14);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M3 3l6 6M9 3L3 9' stroke='%23B4543A' stroke-width='1.8' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
}

/* --- Tick lists ---------------------------------------------------------- */
.adh-ticks { display: grid; gap: .7rem; }
.adh-ticks li {
  position: relative; padding-left: 1.75rem;
  font-size: var(--fs-sm); color: var(--ink-2);
}
.adh-ticks li::before {
  content: ""; position: absolute; left: 0; top: .42em;
  width: 13px; height: 8px;
  border-left: 2px solid var(--ok); border-bottom: 2px solid var(--ok);
  transform: rotate(-45deg);
}
.adh-ticks--ex li::before {
  width: 12px; height: 12px; top: .3em;
  border: 0; transform: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 2.5l7 7M9.5 2.5l-7 7' stroke='%23B4543A' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
}

/* --- Tariff -------------------------------------------------------------- */
.adh-tierkey {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 1rem; margin-bottom: clamp(1.75rem, 3vw, 2.5rem);
}
.adh-tierkey__item {
  background: var(--cream); border: 1px solid var(--line);
  border-radius: var(--r-md); padding: 1rem 1.15rem;
}
.adh-tierkey__item p { font-size: var(--fs-xs); color: var(--ink-2); margin: .5rem 0 0; }
@media (max-width: 760px) { .adh-tierkey { grid-template-columns: 1fr; } }

.adh-tariff { margin-bottom: clamp(2rem, 3.5vw, 3rem); }
.adh-tariff__head { margin-bottom: 1rem; }
.adh-tariff__head h3 { margin-bottom: .3rem; }
.adh-tariff__head p { font-size: var(--fs-sm); color: var(--ink-2); }
.adh-tariff__notes { display: grid; gap: .5rem; margin-top: 1.25rem; }
.adh-tariff__notes li {
  position: relative; padding-left: 1.1rem;
  font-size: var(--fs-xs); color: var(--ink-3);
}
.adh-tariff__notes li::before {
  content: ""; position: absolute; left: 0; top: .55em;
  width: 5px; height: 5px; border-radius: 50%; background: var(--accent);
}
.adh-table--slim { min-width: 380px; }
.adh-table .adh-link { white-space: nowrap; }

/* --- Date-tier calendar -------------------------------------------------- */
.adh-callegend {
  display: flex; flex-wrap: wrap; gap: .75rem; justify-content: center;
  margin-bottom: clamp(1.75rem, 3vw, 2.5rem);
}
.adh-callegend .adh-tier {
  display: inline-flex; align-items: center; gap: .5rem;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r-pill); padding: .45rem 1rem;
  font-size: var(--fs-xs); font-weight: var(--fw-semi); color: var(--ink);
}
.adh-callegend .adh-tier::before { content: ""; width: 9px; height: 9px; border-radius: 50%; }

.adh-calgrid {
  display: grid; gap: clamp(1rem, 2vw, 1.75rem);
  grid-template-columns: repeat(4, 1fr);
}
@media (max-width: 1040px) { .adh-calgrid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px)  { .adh-calgrid { grid-template-columns: 1fr; } }

.adh-cal {
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r-md); padding: 1.1rem;
}
.adh-cal__title {
  font-size: var(--fs-sm); font-weight: var(--fw-bold);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--accent-deep); margin-bottom: .85rem; text-align: center;
}
.adh-cal__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; }
.adh-cal__dow {
  font-size: .625rem; font-weight: var(--fw-bold);
  color: var(--ink-3); text-align: center; padding-bottom: .3rem;
}
.adh-cal__pad { aspect-ratio: 1; }
.adh-cal__day {
  aspect-ratio: 1;
  display: grid; place-items: center;
  font-size: .6875rem; font-weight: var(--fw-semi);
  border-radius: 5px;
  color: var(--surface);
}
.adh-cal__day--premium { background: var(--tier-premium); }
.adh-cal__day--regular { background: var(--tier-regular); }
.adh-cal__day--economy { background: var(--tier-economy); }
.adh-cal__day--off     { background: transparent; color: var(--ink-3); opacity: .38; font-weight: var(--fw-body); }

.adh-cal__note {
  margin-top: 1.5rem; padding: .95rem 1.15rem;
  background: var(--accent-tint); border-left: 3px solid var(--accent);
  border-radius: var(--r-sm);
  font-size: var(--fs-xs); color: var(--accent-deep);
}
.adh-cal__cta { margin-top: 1.75rem; text-align: center; }

/* --- Itinerary ----------------------------------------------------------- */
.adh-itin {
  background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--r-lg); padding: clamp(1.4rem, 2.4vw, 2rem);
  display: flex; flex-direction: column;
}
.adh-itin__head { padding-bottom: 1.1rem; border-bottom: 1px solid var(--line); margin-bottom: 1.35rem; }
.adh-itin__head h3 { margin-bottom: .35rem; }
/* "What the extra night buys you" — the line people actually choose on. */
.adh-itin__best {
  font-size: var(--fs-sm); font-weight: var(--fw-semi);
  color: var(--accent-deep); margin: 0;
}
.adh-itin__day {
  font-size: var(--fs-sm); font-weight: var(--fw-bold);
  color: var(--accent-deep); margin: 1.5rem 0 .9rem;
}
.adh-itin__day:first-of-type { margin-top: 0; }

.adh-timeline { position: relative; padding-left: 1.5rem; }
.adh-timeline::before {
  content: ""; position: absolute; left: 4px; top: .5rem; bottom: .5rem;
  width: 2px; background: var(--sand-2); border-radius: 2px;
}
.adh-timeline li { position: relative; padding-bottom: 1.05rem; }
.adh-timeline li:last-child { padding-bottom: 0; }
.adh-timeline li::before {
  content: ""; position: absolute; left: -1.5rem; top: .42em;
  width: 10px; height: 10px; border-radius: 50%;
  background: var(--surface); border: 2px solid var(--accent);
}
.adh-timeline time {
  display: block;
  font-size: var(--fs-xs); font-weight: var(--fw-bold);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--ink-3); margin-bottom: .15rem;
}
.adh-timeline p { font-size: var(--fs-sm); color: var(--ink-2); margin: 0; }

/* --- Price bar ----------------------------------------------------------- */
.adh-pricebar {
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 1rem 2rem;
  margin-top: 2.5rem; padding: 1.35rem 1.6rem;
  background: var(--accent-tint);
  border-radius: var(--r-lg);
}
.adh-pricebar span {
  display: block;
  font-size: var(--fs-xs); font-weight: var(--fw-semi);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--accent-deep);
}
.adh-pricebar b {
  display: block; font-size: 1.85rem; font-weight: var(--fw-bold);
  letter-spacing: -.03em; color: var(--ink); line-height: 1.1;
}
.adh-pricebar small { font-size: var(--fs-xs); color: var(--ink-3); }

/* --- Stats --------------------------------------------------------------- */
.adh-stats {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: clamp(1.25rem, 2.5vw, 2rem);
}
.adh-stat { text-align: center; padding: 1.25rem .5rem; }
.adh-stat b {
  display: block; font-family: var(--font-display);
  font-size: clamp(2rem, 1.4rem + 2vw, 3rem);
  font-weight: var(--fw-bold); letter-spacing: -.015em;
  color: var(--brass-deep); line-height: 1;
}
.adh-stat span {
  display: block; margin-top: .55rem;
  font-size: var(--fs-sm); font-weight: var(--fw-semi); color: var(--ink);
}
.adh-stat small { display: block; margin-top: .25rem; font-size: var(--fs-xs); color: var(--ink-3); }
@media (max-width: 760px) { .adh-stats { grid-template-columns: repeat(2, 1fr); } }

/* --- FAQ layout ---------------------------------------------------------- */
.adh-faq-layout {
  display: grid; grid-template-columns: .8fr 1.2fr;
  gap: clamp(2rem, 4vw, 4rem); align-items: start;
}
.adh-faq-layout .adh-shead { margin-bottom: 0; position: sticky; top: calc(var(--header-h) + 2rem); }
@media (max-width: 900px) {
  .adh-faq-layout { grid-template-columns: 1fr; }
  .adh-faq-layout .adh-shead { position: static; }
}

/* --- Gallery -------------------------------------------------------------
   Filtering is pure CSS: hidden radios, labels as buttons, sibling selectors
   doing the work. The per-group rules are generated by the template from the
   data file, so adding a group needs no change here.                        */
.adh-gallery__filter {
  display: flex; flex-wrap: wrap; gap: .6rem; justify-content: center;
  margin-bottom: clamp(1.75rem, 3vw, 2.5rem);
}
.adh-gallery__filter label { cursor: pointer; user-select: none; }

.adh-gallery__grid {
  display: grid; gap: clamp(.75rem, 1.4vw, 1.1rem);
  grid-template-columns: repeat(4, 1fr);
}
.adh-gallery__item {
  position: relative; margin: 0;
  border-radius: var(--r-md); overflow: hidden;
  aspect-ratio: 4 / 3; background: var(--sand);
}
.adh-gallery__item.is-wide { grid-column: span 2; aspect-ratio: 8 / 3; }
.adh-gallery__item img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform var(--t-slow) var(--ease-out);
}
/* Photographer attribution under a gallery. Deliberately quiet, but present —
   the CC licences on the stand-in photographs require visible credit. */
.adh-credits {
  margin-top: 1.25rem;
  font-size: var(--fs-xs); color: var(--ink-3); line-height: 1.6;
}
.adh-credits a { color: var(--ink-3); text-decoration: underline; text-underline-offset: 2px; }
.adh-credits a:hover { color: var(--accent-deep); }

.adh-gallery__item:hover img { transform: scale(1.05); }
.adh-gallery__item figcaption {
  position: absolute; inset: auto 0 0 0;
  padding: 1.6rem .9rem .7rem;
  background: linear-gradient(to top, rgba(31, 27, 23, .82), transparent);
  color: #fff; font-size: var(--fs-xs); line-height: 1.4;
  opacity: 0; transform: translateY(6px);
  transition: opacity var(--t-med) var(--ease), transform var(--t-med) var(--ease);
}
.adh-gallery__item:hover figcaption,
.adh-gallery__item:focus-within figcaption { opacity: 1; transform: none; }

@media (max-width: 1040px) { .adh-gallery__grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 760px)  {
  .adh-gallery__grid { grid-template-columns: repeat(2, 1fr); }
  .adh-gallery__item.is-wide { grid-column: span 2; aspect-ratio: 16 / 9; }
  /* Captions can't be hovered on a phone, so show them. */
  .adh-gallery__item figcaption { opacity: 1; transform: none; }
}


/* ==========================================================================
   10c  JOURNAL
   --------------------------------------------------------------------------
   The blog index, archives and the article page. Built for long reads: these
   posts average ~2,700 words.
   ========================================================================== */

/* --- Post card ----------------------------------------------------------- */
.adh-post__link { display: block; }
.adh-post__media { position: relative; }
.adh-post__tag {
  position: absolute; top: .75rem; left: .75rem;
  background: rgba(255, 255, 255, .93);
  backdrop-filter: blur(6px);
  color: var(--accent-deep);
  font-size: .6875rem; font-weight: var(--fw-bold);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  padding: .3rem .65rem; border-radius: var(--r-pill);
}
.adh-post__meta { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; }
.adh-post h3 { transition: color var(--t-fast) var(--ease); }
.adh-post:hover h3 { color: var(--accent-deep); }

/* --- Featured post (page one of the index) ------------------------------- */
.adh-feat {
  display: grid; grid-template-columns: 1.15fr .85fr;
  gap: clamp(1.5rem, 3.5vw, 3rem);
  align-items: center;
}
.adh-feat__media {
  display: block; overflow: hidden;
  border-radius: var(--r-lg);
  aspect-ratio: 16 / 10; background: var(--sand);
}
.adh-feat__media img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform var(--t-slow) var(--ease-out);
}
.adh-feat:hover .adh-feat__media img { transform: scale(1.04); }
.adh-feat__body h2 { margin-bottom: .75rem; }
.adh-feat__body h2 a { transition: color var(--t-fast) var(--ease); }
.adh-feat__body h2 a:hover { color: var(--accent-deep); }
.adh-feat__meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: .4rem;
  font-size: var(--fs-xs); font-weight: var(--fw-med);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--ink-3); margin-bottom: 1rem;
}
.adh-feat__excerpt { font-size: var(--fs-lede); color: var(--ink-2); margin-bottom: 1.6rem; }
@media (max-width: 860px) { .adh-feat { grid-template-columns: 1fr; } }

/* --- Reading progress ----------------------------------------------------
   Fixed directly under the header. Width is set by JS from scroll position. */
.adh-progress {
  position: fixed; top: var(--header-h); left: 0; right: 0;
  height: 3px; z-index: calc(var(--z-header) - 1);
  background: transparent; pointer-events: none;
}
.adh-progress__bar {
  display: block; height: 100%; width: 0;
  background: var(--accent);
  transition: width .1s linear;
}

/* --- Article layout ------------------------------------------------------ */
.adh-article__layout {
  display: grid;
  grid-template-columns: 260px minmax(0, 1fr);
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: start;
}
.adh-article__layout.is-single-column { grid-template-columns: minmax(0, 1fr); max-width: var(--container-text); margin-inline: auto; }
.adh-article__body { max-width: 72ch; }

@media (max-width: 1040px) {
  .adh-article__layout { grid-template-columns: minmax(0, 1fr); }
  .adh-article__body { max-width: none; }
}

/* --- Table of contents ---------------------------------------------------- */
.adh-toc__inner {
  position: sticky; top: calc(var(--header-h) + 1.75rem);
  background: var(--cream);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 1.25rem;
  max-height: calc(100vh - var(--header-h) - 3.5rem);
  overflow-y: auto;
}
.adh-toc__title {
  font-size: var(--fs-xs); font-weight: var(--fw-bold);
  letter-spacing: var(--ls-eyebrow); text-transform: uppercase;
  color: var(--accent-deep); margin: 0 0 .9rem;
}
.adh-toc__list { counter-reset: toc; display: grid; gap: .1rem; }
.adh-toc__list a {
  display: block; position: relative;
  padding: .45rem .5rem .45rem .75rem;
  font-size: var(--fs-sm); line-height: 1.45;
  color: var(--ink-2);
  border-left: 2px solid transparent;
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  transition: color var(--t-fast) var(--ease),
              background var(--t-fast) var(--ease),
              border-color var(--t-fast) var(--ease);
}
.adh-toc__list a:hover { color: var(--ink); background: var(--cream-2); }
.adh-toc__list a.is-current {
  color: var(--accent-deep); font-weight: var(--fw-semi);
  border-left-color: var(--accent);
  background: var(--accent-tint);
}
.adh-toc__cta { margin-top: 1.15rem; padding-top: 1.15rem; border-top: 1px solid var(--line); }

/* On narrow screens the list collapses into a details element instead of
   taking a full screen of vertical space before the article starts. */
@media (max-width: 1040px) {
  .adh-toc__inner { position: static; max-height: none; margin-bottom: 2rem; }
  .adh-toc__list { max-height: 15rem; overflow-y: auto; }
  .adh-toc__cta { display: none; }
}

/* --- Article foot: tags and share ---------------------------------------- */
.adh-article__foot {
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 1.25rem 2rem;
  margin-top: 2.5rem; padding-top: 1.75rem;
  border-top: 1px solid var(--line);
}
.adh-article__foot .adh-tags { margin-top: 0; }

.adh-share { display: flex; align-items: center; gap: .5rem; }
.adh-share span {
  font-size: var(--fs-xs); font-weight: var(--fw-semi);
  letter-spacing: var(--ls-caps); text-transform: uppercase;
  color: var(--ink-3); margin-right: .25rem;
}
.adh-share a {
  width: 36px; height: 36px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--surface);
  border: 1px solid var(--line);
  color: var(--ink-2);
  transition: all var(--t-fast) var(--ease);
}
.adh-share a:hover { border-color: var(--accent); color: var(--accent); transform: translateY(-2px); }

/* --- Prose tweaks for long articles --------------------------------------
   These posts are classic-editor HTML, so the headings need scroll offset for
   the contents links and a little more air than default.                    */
.adh-prose h2 {
  scroll-margin-top: calc(var(--header-h) + 1.5rem);
  font-size: clamp(1.45rem, 1.2rem + 1vw, 1.85rem);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-head);
}
.adh-prose h3 { scroll-margin-top: calc(var(--header-h) + 1.5rem); }
.adh-prose > h2:first-child { margin-top: 0; }


/* ==========================================================================
   10d  STRUCTURED PAGE BODY
   --------------------------------------------------------------------------
   The migrated page copy, rebuilt into the theme's vocabulary by
   inc/content-blocks.php: one band per <h2>, alternating grounds, with FAQ
   runs becoming accordions and sub-heading runs becoming card grids.
   ========================================================================== */

.adh-cband { background: var(--surface); padding-block: clamp(2.75rem, 5vw, 4.5rem); }
.adh-cband--alt { background: var(--cream); }

.adh-cband__inner {
  width: 100%;
  max-width: var(--container-text);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
/* Grids, tables, panels and feature splits need more than a reading column. */
.adh-cband__inner--wide { max-width: var(--container); }

/* Framing copy above a grid or panel set, and the note below it. */
.adh-cband__lead { margin-bottom: clamp(1.5rem, 2.5vw, 2.25rem); max-width: 68ch; }
.adh-cband__tail { margin-top: 1.5rem; max-width: 72ch; font-size: var(--fs-sm); color: var(--ink-3); }

/* A terracotta tick above each section heading, so the eye can find the
   structure while scrolling a long page. */
.adh-cband__title {
  position: relative;
  font-size: clamp(1.5rem, 1.2rem + 1.3vw, 2.15rem);
  font-weight: var(--fw-bold);
  letter-spacing: var(--ls-head);
  margin-bottom: 1.35rem;
  padding-top: 1.1rem;
}
.adh-cband__title::before {
  content: "";
  position: absolute; top: 0; left: 0;
  width: 40px; height: 3px; border-radius: 3px;
  background: var(--brass);
}

/* Inside a band the prose needs no top margin — the heading owns the spacing. */
.adh-cband .adh-prose > *:first-child { margin-top: 0; }
.adh-cband .adh-prose h3 { margin-top: 1.9em; }
.adh-cband .adh-prose h3:first-child { margin-top: 0; }

/* --- Split: image beside text -------------------------------------------
   The renderer alternates the image side down the page, so a long page reads
   as a rhythm rather than a column.                                        */
.adh-cband--split .adh-feature { align-items: center; }
.adh-cband--split .adh-cband__title { padding-top: 0; }
.adh-cband--split .adh-cband__title::before { display: none; }
/* The eyebrow rule moves above the copy instead, where the heading sits
   beside a photograph rather than under a band edge. */
.adh-cband--split .adh-feature > div:last-child::before {
  content: ""; display: block;
  width: 40px; height: 3px; border-radius: 3px;
  background: var(--brass); margin-bottom: 1.1rem;
}
.adh-cband--split .adh-feature__media img { border-radius: var(--r-lg); }

/* Opening image on a page whose sections carry none of their own. */
.adh-cband--opener { padding-bottom: 0; }
.adh-cband--opener + .adh-cband { padding-top: clamp(2rem, 3.5vw, 3rem); }

/* --- Banner: wide image above a long read -------------------------------- */
.adh-cbanner {
  margin: 0 0 clamp(1.75rem, 3vw, 2.75rem);
  border-radius: var(--r-lg);
  overflow: hidden;
  aspect-ratio: 21 / 9;
  background: var(--sand);
}
.adh-cbanner img { width: 100%; height: 100%; object-fit: cover; }
/* The text under a full-width banner still reads in a column. */
.adh-cband--banner .adh-cband__col { max-width: var(--container-text); }
.adh-cband--banner .adh-cband__title { padding-top: 0; }
.adh-cband--banner .adh-cband__title::before { top: -1.1rem; }
@media (max-width: 720px) { .adh-cbanner { aspect-ratio: 16 / 9; } }

/* --- Panel band ---------------------------------------------------------- */
.adh-cband--panel .adh-panel { background: var(--cream); }
.adh-cband--panel.adh-cband--alt .adh-panel { background: var(--surface); }
.adh-cband--panel .adh-panel .adh-prose,
.adh-cband--panel .adh-panel ul { margin: 0; }

/* --- Table band ---------------------------------------------------------- */
.adh-cband--table .adh-prose { max-width: none; }
.adh-cband--table .adh-prose > p { max-width: 72ch; }

/* --- Card grid (a run of sub-headings) ----------------------------------- */
.adh-cgrid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: clamp(1rem, 2vw, 1.5rem);
}
.adh-ccard {
  background: var(--cream);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 1.35rem 1.45rem;
  transition: border-color var(--t-fast) var(--ease),
              transform var(--t-fast) var(--ease-out);
}
.adh-cband--alt .adh-ccard { background: var(--surface); }
.adh-ccard:hover { border-color: var(--accent); transform: translateY(-3px); }
.adh-ccard h3 {
  font-size: var(--fs-h4);
  font-weight: var(--fw-semi);
  color: var(--ink);
  margin: 0 0 .5rem;
}
.adh-ccard p { font-size: var(--fs-sm); color: var(--ink-2); margin: 0; }

/* --- Tick lists in body copy --------------------------------------------- */
.adh-cband .adh-prose ul.adh-ticks { list-style: none; padding-left: 0; }
.adh-cband .adh-prose ul.adh-ticks li { margin-bottom: .6rem; }

/* --- FAQ band ------------------------------------------------------------ */
.adh-cband--faq .adh-faq { max-width: var(--container-text); }
.adh-cband--faq .adh-faq details { border-bottom-color: var(--line); }

/* The last band runs into the closing CTA, so trim its tail. */
.adh-cbody > .adh-cband:last-child { padding-bottom: clamp(3rem, 5.5vw, 5rem); }

@media (max-width: 620px) {
  .adh-cgrid { grid-template-columns: 1fr; }
}


/* ==========================================================================
   11  MOTION & PRINT
   ========================================================================== */

.adh-reveal {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity var(--t-slow) var(--ease-out),
              transform var(--t-slow) var(--ease-out);
}
.adh-reveal.is-in { opacity: 1; transform: none; }
.adh-reveal[data-delay="1"] { transition-delay: .08s; }
.adh-reveal[data-delay="2"] { transition-delay: .16s; }
.adh-reveal[data-delay="3"] { transition-delay: .24s; }
.adh-reveal[data-delay="4"] { transition-delay: .32s; }

@media (prefers-reduced-motion: reduce) {
  .adh-reveal { opacity: 1; transform: none; transition: none; }
  .adh-hero__video { display: none; }
  html { scroll-behavior: auto; }
}

@media print {
  .adh-header, .adh-sticky-cta, .adh-wa-float, .adh-drawer,
  .adh-hero__media, .adh-hero__toggle, .adh-countdown { display: none !important; }
  body { background: #fff; color: #000; padding: 0; }
  .adh-main { padding-top: 0; }
}
