/* =============================================================
   EVS Europe - reusable content components
   Loaded after style.css. Class-based so WPBakery text blocks and
   raw HTML blocks can use them without touching templates.
   ============================================================= */

:root {
  --evs-ink: #1b2a3a;
  --evs-muted: #5a6b7d;
  /* Intro paragraphs were reading too light against white. --evs-muted is fine
     for captions and notes but too pale at 1.15rem across a full measure.
     #38485a is ~8.6:1 on white against ~4.6:1 before. */
  --evs-lede-ink: #38485a;
  --evs-line: #d9e2ea;
  --evs-tint: #f2f6fa;
  --evs-accent: #c8102e;      /* emergency red, used sparingly */
  --evs-ok: #1d7a4c;
}

/* ---------- Lede / section headings ---------- */
/* ---------- Reading measure ----------
   One measure for all body prose, set in rem so it is identical regardless of
   font size - ch would make the larger lede text wider than the paragraphs
   below it, which is what made the top of a page look squished next to
   full-width sections. Layout components (grids, tables, badge strips, forms)
   are deliberately NOT constrained and still run the full content width. */
:root { --evs-measure: 56rem; }

.site-main .evs-section > p,
.site-main .evs-section > ul:not([class]),
.site-main .evs-section > ol:not([class]),
.site-main .evs-callout > p,
.site-main .evs-features,
.evs-lede {
  max-width: var(--evs-measure);
}

.evs-lede {
  font-size: 1.15rem;
  line-height: 1.6;
  color: var(--evs-lede-ink);
  margin: 0 0 1.5rem;
}
/* position:relative so the Star of Life can be centred in the right gutter.
   Harmless elsewhere - the only other absolutely positioned thing inside a
   section is the card overlay link, which is contained by .evs-card. */
.evs-section { margin: 2.5rem 0; position: relative; }
.evs-section > h2 {
  color: var(--evs-blue);
  font-size: 1.5rem;
  margin: 0 0 .75rem;
  padding-bottom: .4rem;
  border-bottom: 2px solid var(--evs-line);
}
.evs-section > h3 { color: var(--evs-blue-soft); margin: 1.5rem 0 .5rem; }

/* ---------- Breadcrumb ---------- */
.evs-crumb {
  font-size: .85rem; color: var(--evs-lede-ink);
  margin: 0 0 1rem; padding: 0; list-style: none;
  display: flex; flex-wrap: wrap; gap: .35rem;
}
.evs-crumb li::after { content: "›"; margin-left: .35rem; color: var(--evs-line); }
.evs-crumb li:last-child::after { content: ""; }
/* 24px minimum tap target (WCAG 2.2 AA, 2.5.8). At .85rem the crumb links were
   about 19px tall, which is a fiddly thing to hit on a phone. inline-flex with
   a min-height pads them out without moving the text or the "›" separators,
   which sit on the li rather than the a. The negative inline margin keeps the
   trail reading as one line rather than gaining gaps between the words.

   Card titles look like failures to an automated check too, but are not: the
   .evs-card__title a::after overlay above stretches each one over its whole
   tile, which a getBoundingClientRect() on the <a> cannot see. */
.evs-crumb a {
  color: var(--evs-blue-soft); text-decoration: none;
  display: inline-flex; align-items: center;
  min-height: 24px;
}
.evs-crumb a:hover { text-decoration: underline; }

/* ---------- Card grid (product listing, audience entry points) ---------- */
.evs-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 20px;
  margin: 1.5rem 0;
  padding: 0;
  list-style: none;
}
.evs-card {
  display: flex; flex-direction: column;
  border: 1px solid var(--evs-line);
  border-radius: var(--radius);
  background: #fff;
  overflow: hidden;
  transition: box-shadow .18s ease, transform .18s ease;
}
.evs-card:hover { box-shadow: 0 6px 18px rgba(11,61,102,.15); transform: translateY(-2px); }
.evs-card__media {
  background: var(--evs-tint);
  aspect-ratio: 4 / 3;
  display: flex; align-items: center; justify-content: center;
  padding: 12px;
}
/* max-width was missing, and that is what broke it on iOS Safari (Richard,
   9 Sept: images sitting right of centre on the phone, fine on a narrowed
   desktop window). Safari does not reliably resolve a percentage max-height
   inside an aspect-ratio flex container; when it fails the image falls back
   to its intrinsic width, overflows the card, and .evs-card overflow:hidden
   clips it - which reads as shifted right. Chrome resolves it, hence the
   difference. max-width caps it whatever the engine does, and margin:auto
   centres it without depending on the flex alignment above. */
.evs-card__media img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  margin: auto;
  object-fit: contain;
}
.evs-card__body { padding: 14px 16px 18px; display: flex; flex-direction: column; flex: 1; }
.evs-card__title { color: var(--evs-blue); font-size: 1.15rem; margin: 0 0 .35rem; }
.evs-card__title a { text-decoration: none; color: inherit; }
.evs-card__title a:hover { text-decoration: underline; }
.evs-card__meta { font-size: .8rem; text-transform: uppercase; letter-spacing: .04em; color: var(--evs-muted); margin: 0 0 .5rem; }
.evs-card__text { font-size: .95rem; margin: 0 0 1rem; }
/* Push the call to action to the bottom of the card so buttons line up across
   a row, whatever the length of the text above them.

   This has to target the LAST CHILD, not the button. WordPress's wpautop wraps
   a bare <a> in a <p>, so the flex item is that paragraph and the button is
   inside it - margin-top:auto on the <a> is not on a flex item at all and
   silently resolves to 0. That is why the rule below looked correct for weeks
   and did nothing: buttons sat 35px to 108px off the bottom depending on how
   much text the card carried.

   Excluded: .evs-bases, used by the base and armrest cards. Those end in
   different things - a status badge on some, a "Fits:" note on others - so
   bottom-aligning the last child would line up elements that are not
   equivalent. They are better left flowing.

   The !important is not decoration. custom.css carries
   ".site-main p + p { margin-top: 1rem !important }", and the button's wrapping
   paragraph follows another paragraph, so that blunt rule wins against anything
   without it. Same override layer that was quietly setting the page title's
   margins. Remove the !important here only when that rule goes. */
.evs-cards:not(.evs-bases) .evs-card__body > :last-child {
  margin-top: auto !important;
  margin-bottom: 0;
}
/* Still needed for the case where the button is a direct child and no <p> is
   inserted - keeps the button its own width rather than stretching. */
.evs-card__body .evs-btn { align-self: flex-start; }

/* ---------- Buttons ---------- */
.evs-btn {
  display: inline-block;
  padding: 10px 18px;
  border-radius: 6px;
  font-weight: 600;
  text-decoration: none;
  background: linear-gradient(#2a577d, #173a57);
  color: #fff !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.15);
  border: 0; cursor: pointer;
}
.evs-btn:hover { background: linear-gradient(#2f6a98, #1b4c73); }
.evs-btn--ghost {
  background: #fff; color: var(--evs-blue) !important;
  border: 1px solid var(--evs-blue-soft); box-shadow: none;
}
.evs-btn--ghost:hover { background: var(--evs-tint); }

/* ---------- Approval badges ---------- */
.evs-badges { display: flex; flex-wrap: wrap; gap: 8px; margin: 1rem 0; padding: 0; list-style: none; }
.evs-badge {
  display: inline-flex; align-items: center; gap: .4rem;
  padding: 6px 12px;
  border: 1px solid var(--evs-blue-soft);
  border-radius: 999px;
  background: var(--evs-tint);
  color: var(--evs-blue);
  font-size: .85rem; font-weight: 700; letter-spacing: .02em;
}
.evs-badge--lead { background: var(--evs-blue); color: #fff; border-color: var(--evs-blue); }
/* Same light blue ground as the plain badges - Richard, 9 Sept. The dashed
   border is what now carries "in progress" rather than the paler fill, so it
   still reads differently from an approval already held. */
.evs-badge--pending {
  background: var(--evs-tint);
  color: var(--evs-muted);
  border: 1px dashed var(--evs-blue-soft);
  font-weight: 600;
}

/* ---------- Spec table ---------- */
.evs-spec-wrap { overflow-x: auto; margin: 1.25rem 0; }
.evs-spec { border-collapse: collapse; width: 100%; min-width: 460px; font-size: .95rem; }
.evs-spec caption { text-align: left; font-weight: 700; color: var(--evs-blue); padding-bottom: .5rem; }
.evs-spec th, .evs-spec td { text-align: left; padding: 10px 14px; border-bottom: 1px solid var(--evs-line); vertical-align: top; }
.evs-spec th { width: 34%; background: var(--evs-tint); color: var(--evs-blue); font-weight: 700; }
.evs-spec tr:last-child th, .evs-spec tr:last-child td { border-bottom: 0; }

/* ---------- Feature list ---------- */
.evs-features { list-style: none; margin: 1rem 0; padding: 0; }
.evs-features li { position: relative; padding: .35rem 0 .35rem 1.6rem; }
.evs-features li::before {
  content: ""; position: absolute; left: 0; top: .85em;
  width: 8px; height: 8px; margin-top: -4px;
  background: var(--evs-blue-soft); border-radius: 2px; transform: rotate(45deg);
}

/* ---------- Callout ---------- */
.evs-callout {
  border-left: 4px solid var(--evs-blue);
  background: var(--evs-tint);
  padding: 16px 20px;
  border-radius: 0 var(--radius) var(--radius) 0;
  margin: 1.5rem 0;
}
.evs-callout h3 { margin-top: 0; color: var(--evs-blue); }
.evs-callout p:last-child { margin-bottom: 0; }

/* ---------- Colour swatches ---------- */
.evs-swatches {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 16px; margin: 1.5rem 0; padding: 0; list-style: none;
}
.evs-swatch { text-align: center; }
.evs-swatch img {
  width: 100%; aspect-ratio: 1 / 1; object-fit: cover;
  border-radius: var(--radius); border: 1px solid var(--evs-line);
}
.evs-swatch__name { display: block; margin-top: .5rem; font-size: .9rem; font-weight: 600; color: var(--evs-ink); }

/* ---------- Media + text split ---------- */
.evs-split { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; align-items: center; margin: 1.5rem 0; }
.evs-split img { border-radius: var(--radius); width: 100%; }
@media (max-width: 720px) { .evs-split { grid-template-columns: 1fr; } }

/* ---------- Audience entry points ---------- */
.evs-audience .evs-card__media { aspect-ratio: auto; padding: 18px 16px 0; }
.evs-audience .evs-card { border-top: 4px solid var(--evs-blue-soft); }

/* ---------- Notes ---------- */
.evs-note { font-size: .85rem; color: var(--evs-muted); margin: .75rem 0; }

/* ---------- Small screens ----------
   Tightened so the first product tile clears the fold on a 375x812 phone. At
   the desktop sizes the front-page h1 ran to four lines and pushed the first
   seat to 799px - just below the fold on the commonest phone viewport, which
   defeats the point of leading with the products. */
@media (max-width: 560px) {
  .evs-cards { grid-template-columns: 1fr; }
  .evs-section > h2 { font-size: 1.3rem; }
  .evs-section { margin: 1.75rem 0; }

  .site-main h1 { font-size: 1.65rem; line-height: 1.2; margin-bottom: .6rem; }
  .evs-lede { font-size: 1rem; line-height: 1.5; margin-bottom: 1rem; }
}

/* ---------- Print ---------- */
@media print {
  .primary-nav, .nav-toggle, .site-footer, .hero-image { display: none !important; }
  .site-main { box-shadow: none; }
}

/* ---------- Whole-tile click target ----------
   The card title stays the real link (so it reads correctly to screen readers
   and shows a proper URL on hover); this overlay extends the click target to
   the whole tile. Any other genuine link inside a card must sit above it. */
.evs-card { position: relative; }
.evs-card__title a::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}
.evs-card:focus-within { box-shadow: 0 0 0 3px rgba(42,87,125,.45); }
.evs-card .evs-btn { position: relative; z-index: 2; }

/* Text columns in a split should align to the top, not float mid-height. */
.evs-split { align-items: start; }

/* Sensible top alignment when a split pairs an image with a list. */
.evs-split > * { min-width: 0; }

/* ---------- Contact Form 7 ----------
   CF7 ships essentially unstyled. Keep it to the same visual language as the
   rest of the site rather than letting it look bolted on. */
.wpcf7 { max-width: 640px; margin-top: 1rem; }
.evs-form-row { margin: 0 0 1rem; }
.evs-form-row label { display: block; font-weight: 600; color: var(--evs-blue); font-size: .95rem; }
.wpcf7 input[type="text"],
.wpcf7 input[type="email"],
.wpcf7 input[type="tel"],
.wpcf7 select,
.wpcf7 textarea {
  width: 100%;
  padding: 10px 12px;
  margin-top: .35rem;
  border: 1px solid var(--evs-line);
  border-radius: 6px;
  font: inherit;
  color: var(--evs-ink);
  background: #fff;
}
.wpcf7 textarea { resize: vertical; min-height: 140px; }
.wpcf7 input:focus, .wpcf7 select:focus, .wpcf7 textarea:focus {
  outline: none;
  border-color: var(--evs-blue-soft);
  box-shadow: 0 0 0 3px rgba(42,87,125,.18);
}
.wpcf7 input[type="submit"] { font: inherit; }
.wpcf7 .wpcf7-not-valid { border-color: var(--evs-accent); }
.wpcf7-not-valid-tip { color: var(--evs-accent); font-size: .85rem; margin-top: .25rem; }
.wpcf7 form .wpcf7-response-output {
  margin: 1rem 0 0;
  padding: 12px 16px;
  border-radius: var(--radius);
  border-width: 1px;
}
.wpcf7 form.sent .wpcf7-response-output { border-color: var(--evs-ok); background: #eef7f2; }
.wpcf7 form.invalid .wpcf7-response-output,
.wpcf7 form.failed .wpcf7-response-output { border-color: var(--evs-accent); background: #fdf0f2; }
.wpcf7-spinner { vertical-align: middle; }

/* ---------- Approvals badge group labels ----------
   R44 is a type approval; R14/R16/R17 are witnessed dynamic tests. The two are
   labelled separately so the page never implies the seat is type approved. */
.evs-badges__label {
  margin: 1.25rem 0 .35rem;
  font-size: .75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .07em;
  color: var(--evs-muted);
}
.evs-badges__label + .evs-badges { margin-top: 0; }

/* Upholstery alternative line on a seat card - sits just above the button,
   quiet enough not to compete with the summary above it. */
.evs-card__alt {
  margin: 0 0 1rem;
  font-size: .85rem;
  font-weight: 600;
  color: var(--evs-blue-soft);
}

/* ---------- Front-page heading band ----------
   A faded image BEHIND the h1, not a separate image band above it. The
   distinction matters: this costs no vertical space, so it does not push the
   product tiles down the page. The banner-blindness finding applies to
   decorative bands that occupy the fold, not to a tinted backdrop carrying the
   page's own heading.

   Source: cropped and desaturated from the EVS Ltd carousel. Deliberately
   people-free - the US-crew shots read as American to a UK audience. */
.evs-hero-band {
  position: relative;
  isolation: isolate;
  margin: -24px calc(-1 * var(--gutter)) 2rem;
  padding: 2.75rem var(--gutter) 2.25rem;
  border-radius: var(--radius) var(--radius) 0 0;
  background: linear-gradient(#0f4a78, #072741);
  overflow: hidden;
}
.evs-hero-band::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: url("hero-ambulance-interior.jpg") center 38% / cover no-repeat;
  opacity: .22;                 /* faded hard: the text has to stay legible */
  mix-blend-mode: luminosity;
}
.evs-hero-band h1 {
  color: #fff;
  margin: 0 0 .6rem;
  max-width: var(--evs-measure);
}
.evs-hero-band .evs-lede {
  color: #d7e8ff;
  margin: 0;
}

@media (max-width: 560px) {
  .evs-hero-band { padding: 1.75rem var(--gutter) 1.5rem; margin-bottom: 1.5rem; }
}

/* ---------- Header branding ----------
   The EVS mark is navy and red on transparency and the header band is dark
   navy, so the mark sits on a light chip rather than being recoloured.
   Recolouring a manufacturer's logo without their approved reversed artwork is
   not our call - if EVS supply an official white version, use it and delete
   the chip rules below. */
.site-header .branding {
  flex-direction: row;
  align-items: center;
  gap: 14px;
  min-width: 0;
}
.branding__logo {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 54px;
  height: 54px;
  padding: 3px;
  background: #fff;
  border-radius: var(--radius);
  box-shadow: 0 1px 3px rgba(0,0,0,.25);
}
.branding__logo img,
.branding__logo .custom-logo-link img {
  width: 100%; height: 100%;
  object-fit: contain;
  display: block;
}
.branding__text { display: flex; flex-direction: column; min-width: 0; }

@media (max-width: 560px) {
  .site-header .branding { gap: 10px; }
  .branding__logo { width: 42px; height: 42px; padding: 2px; }
  .site-header .site-title { font-size: 20px; line-height: 1.15; }
}

/* ---------- Seat page media ----------
   Cap the image column at the tile's native width. The tiles are 338px and the
   split column was ~555px, so the main product shot was being upscaled 1.64x
   and looking soft. Never upscale a product photo. */
.evs-split { grid-template-columns: minmax(0, 340px) 1fr; }
.evs-split__media img { width: 100%; height: auto; }

@media (max-width: 720px) {
  .evs-split { grid-template-columns: 1fr; }
  .evs-split__media { max-width: 340px; }
}

/* ---------- Additional product views ----------
   Supporting views, deliberately smaller than the main product image in
   .evs-split__media (capped at 340px wide). These are portrait shots up to
   1440x2560, so they must be constrained by HEIGHT, not width: a 1fr column
   on a 1138px container gave a 525x933 tile - taller than the viewport and
   nearly three times the area of the seat photo it was supporting. Cap the
   height and let the width follow, so tall and square shots sit level. */
.evs-gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(160px, 200px));
  justify-content: start;
  gap: 16px;
  margin: 1.25rem 0 0;
  padding: 0;
  list-style: none;
}
.evs-gallery li {
  background: var(--evs-tint);
  border: 1px solid var(--evs-line);
  border-radius: var(--radius);
  padding: 12px;
  display: flex;
}
.evs-gallery figure {
  margin: 0;
  display: flex;
  flex-direction: column;
  flex: 1;
}
/* Images share a fixed box so the captions below them line up across the row,
   whatever each shot's aspect ratio. */
.evs-gallery figure > img:first-child,
.evs-gallery figure > a > img {
  width: auto;
  max-width: 100%;
  height: 200px;
  object-fit: contain;
  align-self: center;
}
.evs-gallery figcaption {
  margin-top: 10px;
  padding-top: 8px;
  border-top: 1px solid var(--evs-line);
  font-size: .8rem;
  line-height: 1.35;
  color: var(--evs-muted);
}

/* ---------- Footer navigation ----------
   A flat row of links between the two widget columns and the copyright line.
   style.css styles .footer-menu as a vertical stack for the old single-column
   footer; this overrides it for the horizontal row only, so both still work. */
.footer-nav {
  border-top: 1px solid rgba(255, 255, 255, .18);
  padding: 16px 0 4px;
  margin: 0 0 8px;
}
.footer-nav .footer-menu {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px 10px;
}
.footer-nav .footer-menu li { margin: 0; }
.footer-nav .footer-menu a { font-size: 15px; }

/* ---------- Lightbox ----------
   Enlarges the "More views" thumbnails. Built on the native <dialog>, so the
   ::backdrop pseudo-element does the dimming and the browser handles focus and
   Escape - see assets/lightbox.js for why no plugin. */
.evs-zoom {
  display: block;
  position: relative;
  cursor: zoom-in;
  line-height: 0;
}
.evs-zoom::after {
  content: "";
  position: absolute;
  right: 4px; bottom: 4px;
  width: 26px; height: 26px;
  border-radius: 50%;
  background: rgba(255, 255, 255, .92) center / 13px 13px no-repeat
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230b3d66' stroke-width='2.5' stroke-linecap='round'%3E%3Ccircle cx='10.5' cy='10.5' r='7'/%3E%3Cpath d='M15.6 15.6 21 21M7.5 10.5h6M10.5 7.5v6'/%3E%3C/svg%3E");
  box-shadow: 0 1px 4px rgba(11, 61, 102, .3);
  opacity: 0;
  transition: opacity .15s ease;
  pointer-events: none;
}
.evs-zoom:hover::after,
.evs-zoom:focus-visible::after { opacity: 1; }
.evs-zoom:focus-visible { outline: 2px solid var(--evs-blue-soft); outline-offset: 3px; }

.evs-lightbox {
  border: 0;
  padding: 0;
  background: transparent;
  max-width: min(92vw, 900px);
  max-height: 92vh;
  overflow: visible;
}
.evs-lightbox::backdrop { background: rgba(9, 26, 42, .82); }
.evs-lightbox__figure {
  margin: 0;
  background: #fff;
  border-radius: var(--radius);
  padding: 14px;
  box-shadow: 0 18px 50px rgba(0, 0, 0, .45);
}
.evs-lightbox__img {
  display: block;
  margin: 0 auto;
  max-width: 100%;
  max-height: calc(92vh - 90px);
  width: auto; height: auto;
}
.evs-lightbox__caption {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 14px;
  justify-content: space-between;
  align-items: baseline;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid var(--evs-line);
  font-size: .88rem;
  color: var(--evs-muted);
}
.evs-lightbox__counter { font-size: .8rem; white-space: nowrap; }

.evs-lightbox__close,
.evs-lightbox__btn {
  position: absolute;
  border: 0;
  cursor: pointer;
  background: rgba(255, 255, 255, .94);
  color: var(--evs-blue);
  border-radius: 50%;
  box-shadow: 0 2px 8px rgba(0, 0, 0, .3);
  line-height: 1;
}
.evs-lightbox__close {
  top: -14px; right: -14px;
  width: 34px; height: 34px;
  font-size: 22px;
}
.evs-lightbox__btn {
  top: 50%;
  transform: translateY(-50%);
  width: 42px; height: 42px;
  font-size: 28px;
}
.evs-lightbox__prev { left: -21px; }
.evs-lightbox__next { right: -21px; }
.evs-lightbox__close:hover,
.evs-lightbox__btn:hover { background: #fff; }
.evs-lightbox__close:focus-visible,
.evs-lightbox__btn:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* On small screens there is no room outside the panel, so bring the controls in. */
@media (max-width: 640px) {
  .evs-lightbox { max-width: 94vw; }
  .evs-lightbox__close { top: 4px; right: 4px; }
  .evs-lightbox__prev { left: 4px; }
  .evs-lightbox__next { right: 4px; }
}

/* ---------- Base cards ----------
   Bases are photographed on white at wildly different aspect ratios (340x340
   squares next to a 3600x2449 landscape), so the media box is fixed and the
   image contained inside it. Without this the grid steps up and down the page. */
.evs-bases .evs-card__media {
  aspect-ratio: auto;
  height: 180px;
  background: #fff;
  border-bottom: 1px solid var(--evs-line);
  padding: 14px;
}
.evs-bases .evs-card__media img {
  max-height: 100%;
  max-width: 100%;
  width: auto;
  object-fit: contain;
}
.evs-bases .evs-card__title { font-size: 1.05rem; letter-spacing: .01em; }
.evs-bases .evs-card__meta { text-transform: none; letter-spacing: 0; font-style: italic; }
.evs-bases .evs-card__text { margin-bottom: .5rem; }
.evs-bases .evs-note { margin: 0 0 .75rem; }

/* ---------- Option tiles ----------
   Text-only cards, so they need a little more presence than a bare card. The
   sewn tile has no button by design - it states something rather than leading
   anywhere until there is a page behind it. */
/* 3:2 media band. Shallower than the 4:3 on the seat tiles above - these
   support the range rather than being the products - but not the letterbox
   strip 16:9 gave: at the 265px desktop tile width that was only 149px tall
   and the tile became mostly text. 3:2 also matches the Bases cards, which
   are a fixed 180px at the same width, so the two grids sit consistently.
   Fixed ratio so the grid cannot step up and down when images have different
   shapes, and contain rather than cover so a cut-out is never cropped. */
.evs-options .evs-card__media {
  aspect-ratio: 3 / 2;
  background: #fff;
  border-bottom: 1px solid var(--evs-line);
}
.evs-options .evs-card__media img {
  max-height: 100%;
  max-width: 100%;
  width: auto;
  object-fit: contain;
}
.evs-options .evs-card__body { padding: 18px 18px 20px; }
.evs-options .evs-card { border-top: 3px solid var(--evs-blue-soft); }
.evs-options .evs-card__title a { color: var(--evs-blue); text-decoration: none; }
.evs-options .evs-card__title a:hover { text-decoration: underline; }

/* ---------- Side-by-side comparison figure ----------
   Landscape, and its whole value is in the detail - stitched panels against a
   smooth surface - so it runs the content width rather than sitting in the
   340px portrait media column. Capped at its native 575px so it never upscales. */
.evs-compare { margin: 1.25rem 0 0; }
.evs-compare img {
  display: block;
  width: 100%;
  max-width: 575px;
  height: auto;
  border: 1px solid var(--evs-line);
  border-radius: var(--radius);
  background: #fff;
}
.evs-compare figcaption {
  max-width: 575px;
  margin-top: .6rem;
  font-size: .85rem;
  line-height: 1.4;
  color: var(--evs-lede-ink);
}

/* ---------- Brand strapline band ----------
   Sits between the page content and the footer. EVS Ltd run the same line at
   the foot of their pages; this is our palette rather than theirs.

   The separators are CSS ::before dots, not characters in the markup, so a
   screen reader announces five values rather than reading bullets aloud. */
.evs-strapline {
  background: var(--evs-tint);
  border-top: 1px solid var(--evs-line);
  border-bottom: 1px solid var(--evs-line);
  padding: 26px 0;
  margin-top: 2.5rem;
}
.evs-strapline__inner {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 28px;
  flex-wrap: wrap;
}
.evs-strapline__mark img {
  display: block;
  width: auto;
  height: 62px;
}
.evs-strapline__list {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0 10px;
  margin: 0;
  padding: 0;
  list-style: none;
}
.evs-strapline__list li {
  position: relative;
  padding: 0 10px;
  color: var(--evs-blue);
  font-weight: 700;
  font-size: clamp(.95rem, 2.2vw, 1.35rem);
  letter-spacing: .08em;
  text-transform: uppercase;
  line-height: 1.5;
}
/* Separator dot between items, never before the first */
.evs-strapline__list li + li::before {
  content: "";
  position: absolute;
  left: -8px;
  top: 50%;
  width: 6px;
  height: 6px;
  margin-top: -3px;
  border-radius: 50%;
  background: var(--evs-accent);
}

@media (max-width: 700px) {
  .evs-strapline { padding: 20px 0; }
  .evs-strapline__inner { gap: 16px; }
  .evs-strapline__mark img { height: 48px; }
  .evs-strapline__list li { letter-spacing: .05em; padding: 0 8px; }
}

/* Not wanted on a printed page. */
@media print { .evs-strapline { display: none !important; } }

/* ---------- Page title ----------
   The <h1> had no rule of its own anywhere, so it ran on browser defaults:
   0.67em top margin and the same below, which computes to about 38px above and
   16px below once the breadcrumb's own margin collapses in. That imbalance is
   why the heading reads as attached to the content beneath rather than sitting
   in its own space - the "H1 rising and eating the white space".

   Explicit and balanced now, so it does not depend on the browser or on what
   happens to sit above it. */
.entry-title {
  margin: 1.5rem 0 1.25rem;
  line-height: 1.15;
}
/* The breadcrumb supplies the space above on pages that have one, so the two
   should not stack. Margins collapse to the larger, which is the h1's. */
.evs-crumb + .entry-title { margin-top: 1.25rem; }

@media (max-width: 560px) {
  .entry-title { margin: 1rem 0 1rem; }
}

/* ---------- Star of Life mark ----------
   A small, quiet credential mark. Floated so the text wraps round it rather
   than being pushed down, which is the point - it fills the space beside a
   text-only panel instead of adding a band of its own. */
.evs-callout, .evs-section { position: relative; }
.evs-callout__mark,
/* The badge floats into a right-hand gutter beside the heading and the
   opening paragraph. Richard, 8 Sept: it read as "floating between sections".
   Cause was the h2 border: a block box beside a float still spans the full
   width, so the 2px heading rule ran BEHIND the star and the star straddled
   it, belonging to neither the heading nor the text. flow-root on the h2 makes
   it a block formatting context, so the rule now stops short of the badge and
   the badge sits in a column of its own. */
.evs-section__mark {
  float: right;
  width: 74px;
  margin: 4px 0 12px 20px;   /* 4px lines the star up with the cap height */
  /* Pull the float in to the text measure. Body copy is capped at
     --evs-measure (56rem) but the section box is not, so a plain float:right
     parked the badge ~240px to the right of the paragraph edge, out on its own
     in the margin - which is what read as "floating". max() keeps it at 0 on
     narrow screens where the section is already narrower than the measure. */
  margin-right: max(0px, calc(100% - var(--evs-measure)));
}
.evs-section__mark + h2,
.evs-section > h2 { display: flow-root; }
/* Wide screens: lift the badge out of the flow and centre it vertically
   against the whole block, sitting further right and larger. Richard, 8 Sept.

   Safe to take out of flow because the gutter is genuinely empty: body copy is
   capped at --evs-measure (56rem) while the section box is not, so there is
   ~240px of nothing to its right at this width. Below the breakpoint that
   gutter closes, so it reverts to the float above rather than landing on top
   of the text. 1170px is where 118px of badge plus a 24px gap still clears
   the measure. */
@media (min-width: 1170px) {
  .evs-section__mark {
    position: absolute;
    float: none;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
    width: 118px;
    margin: 0;
  }
}

.evs-callout__mark img,
.evs-section__mark img {
  display: block;
  width: 100%;
  height: auto;
  opacity: .85;
}
@media (max-width: 560px) {
  .evs-callout__mark,
  .evs-section__mark { width: 56px; margin-left: 14px; }
}

/* ---------- Seat card images: full width, natural height ----------------------
   Fourth pass at the iOS Safari tiles, 10 Sept - and the first one based on
   measuring rather than reasoning.

   The old look Richard wanted was NOT a 4:3 box. Measured in Chrome with the
   1.53.0 rule: box 370x638, image 346x614 - Chrome was ignoring aspect-ratio
   because the content was taller, and growing the box to fit a full-width
   portrait photo. Safari OBEYED the 4:3, which is what made the photos small
   and off-centre on the iPhone. The two browsers disagreed about a rule that
   was asking for something nobody wanted.

   1.54.0 forced a true 4:3 box, which fixed the disagreement by making Chrome
   match Safari - small photos everywhere. Wrong direction.

   So: stop asking for 4:3 on seat cards and say what is actually meant. Full
   width, natural height. No aspect-ratio, no flexbox, no percentage heights -
   the three things the browsers disagreed about - so every engine lays it out
   the same way.

   Verified on the live page by injection: 469px viewport gives 346x614 in a
   370x638 box, identical to the old Chrome rendering; 1400px gives four cards
   at 239x423, all the same height, so the buttons still line up. 12px gutter
   either side on every card.

   Scoped to plain seat cards. .evs-options and .evs-bases size their own boxes
   and already work. */
.evs-cards:not(.evs-options):not(.evs-bases) .evs-card__media {
  aspect-ratio: auto;
  display: block;
  padding: 12px;
}
.evs-cards:not(.evs-options):not(.evs-bases) .evs-card__media img {
  display: block;
  width: 100%;
  height: auto;
  max-width: 100%;
  max-height: none;
  margin: 0;
}
