/* INDD Air — site helpers layered on the Modernist system.
   Tokens only: every value comes from var(--*) defined in styles.css. */

html { scroll-behavior: smooth; }
body { text-wrap: pretty; }
a { text-decoration: none; }

/* Respect the OS "Reduce Motion" setting: users who opt out (vestibular
   disorders, migraine, motion sensitivity) get instant scrolls and near-
   instant state changes instead of smooth-scroll glides and hover sweeps.
   Invisible to everyone who hasn't enabled the setting. */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Page container — matches the design comp's centered 1200px measure. */
.wrap {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 clamp(20px, 5vw, 72px);
}

/* — Navigation: center the bar on the same measure as .wrap — */
.nav {
  position: relative;
  padding-inline: max(clamp(20px, 5vw, 72px),
    calc((100% - 1200px) / 2 + clamp(20px, 5vw, 72px)));
}
.nav-brand { text-decoration: none; color: inherit; }
.nav-links { display: flex; align-items: center; gap: var(--space-4); }
.nav-links a { white-space: nowrap; font-weight: 600; }
.nav-toggle {
  display: none;
  align-items: center; justify-content: center;
  width: 40px; height: 36px; padding: 0;
  color: var(--color-text);
  background: transparent;
  border: 1px solid var(--color-divider);
  border-radius: var(--radius-md);
  cursor: pointer;
}
.nav-toggle:hover { background: color-mix(in srgb, var(--color-text) 7%, transparent); }
.nav-toggle svg { display: block; }

@media (max-width: 760px) {
  .nav { flex-wrap: wrap; }
  .nav-toggle { display: inline-flex; }
  .nav-links {
    display: none;
    flex-basis: 100%;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-1);
    padding-top: var(--space-2);
  }
  .nav[data-open] .nav-links { display: flex; }
  /* Larger, thumb-friendly tap targets in the open mobile menu (~40px). */
  .nav-links a:not(.btn) { display: block; padding: 9px 0; }
  .nav-links .btn { margin-top: var(--space-2); }
}

/* — Strong section rule, reused across pages — */
.rule { height: 2px; border: 0; margin: 0; background: var(--color-divider); }

/* — Fleet grid — */
.fleet-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: var(--space-8) var(--space-6);
}
/* Related-aircraft strip on detail pages — always three across, then 2, then 1. */
.related-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-8) var(--space-6);
}
/* Shorter photo crop than the fleet listing (16:9) so the strip reads as
   secondary browse-on content, not a second catalogue. */
.related-grid .fleet-card img { aspect-ratio: 2 / 1; }
@media (max-width: 820px) { .related-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .related-grid { grid-template-columns: 1fr; } }
.fleet-card {
  display: flex; flex-direction: column;
  color: inherit; text-decoration: none;
  /* Full interactive frame (borrowed from the reference build): a hairline box
     that lights to the accent on hover/focus. Square corners keep it in the
     modernist system. The photo sits flush to the frame; text is inset. */
  border: 1px solid var(--color-divider);
  padding: 0 0 var(--space-4);
  transition: border-color 0.45s ease;
}
.fleet-card:hover,
.fleet-card:focus-visible { border-color: var(--color-accent); }
.fleet-card figure { margin: 0 0 var(--space-4); overflow: hidden; }
/* Inset the text block so it clears the frame while the photo stays full-bleed. */
.fleet-card-class,
.fleet-card-name,
.fleet-card-meta,
.fleet-card-desc { padding-left: var(--space-4); padding-right: var(--space-4); }
/* height:auto is required so the width/height attributes (a presentation hint)
   don't pin the box to its intrinsic height and defeat aspect-ratio.
   16:9 keeps the card compact so the image + description read together. */
.fleet-card img { width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover; }
.fleet-card-name {
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: 22px; line-height: 1.2; letter-spacing: -0.01em; margin: 0;
}
.fleet-card:hover .fleet-card-name,
.fleet-card:focus-visible .fleet-card-name { color: var(--color-accent); }
/* Hover reveal (borrowed from the reference build): the grayscale photo eases
   to full colour and, where motion is allowed, drifts in on a slow zoom. The
   figure's overflow:hidden crops the zoom. The colour reveal is kept for
   everyone — under reduced-motion it simply snaps instead of fading — while the
   zoom is gated behind no-preference so motion-sensitive users get no movement. */
.fleet-card figure.grayscale { transition: filter 0.5s ease; }
.fleet-card:hover figure.grayscale,
.fleet-card:focus-visible figure.grayscale { filter: grayscale(0) contrast(1); }
@media (prefers-reduced-motion: no-preference) {
  .fleet-card figure img { transition: transform 0.7s cubic-bezier(0.16, 1, 0.3, 1); }
  .fleet-card:hover figure img,
  .fleet-card:focus-visible figure img { transform: scale(1.04); }
}
.fleet-card-meta {
  font-size: 13px; line-height: 1.5; margin: var(--space-2) 0 0;
  color: color-mix(in srgb, var(--color-text) 70%, transparent);
}
.fleet-card-desc {
  font-size: 14px; line-height: 1.6; margin: var(--space-2) 0 0;
  color: color-mix(in srgb, var(--color-text) 80%, transparent);
}
.fleet-card-class {
  display: block; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--color-accent-700); margin: 0 0 var(--space-1);
}

/* Back-to-listing link on aircraft detail pages: a quiet, tight utility link
   that recedes beneath the eyebrow and title instead of competing with them
   (the eyebrow keeps the strong accent; this stays muted until hover/focus). */
.detail-back {
  display: inline-block;
  font-size: 12px; line-height: 1; letter-spacing: 0.08em; text-transform: uppercase;
  color: color-mix(in srgb, var(--color-text) 52%, transparent);
  margin-bottom: 20px;
  transition: color 0.15s ease;
}
.detail-back:hover,
.detail-back:focus-visible { color: var(--color-accent); }

/* — Aircraft detail spec rows — */
.spec-row {
  display: grid;
  grid-template-columns: minmax(120px, 200px) 1fr;
  gap: var(--space-3) clamp(24px, 4vw, 64px);
  align-items: baseline;
  padding: var(--space-4) 0;
  border-top: 2px solid var(--color-divider);
}
.spec-label {
  font-size: 13px; letter-spacing: 0.08em; text-transform: uppercase;
  color: color-mix(in srgb, var(--color-text) 70%, transparent); margin: 0;
}
.spec-value {
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: 20px; line-height: 1.3; margin: 0;
  font-feature-settings: 'tnum' 1;
}

/* — Responsive collapse for the inline-styled section grids —
   These override inline grid-template-columns at mobile widths, so the
   numbered rows, two-column splits and destination rows stack cleanly. */
@media (max-width: 820px) {
  .row3 {
    grid-template-columns: 1fr !important;
    gap: 10px !important;
    padding-top: 28px !important;
    padding-bottom: 28px !important;
  }
  .split { grid-template-columns: 1fr !important; }
  .split-media-first > figure { order: -1; }
  .destinations { grid-template-columns: 1fr auto !important; }
  /* Aircraft detail: on mobile, lead with the description right under the photo,
     specs below — so the image + description share one screen. */
  .detail-desc { order: -1; }
  .detail-specs .spec-row { padding: var(--space-3) 0; }
}

/* Fleet filter: a single-line, horizontally scrollable strip on small screens
   instead of letting the option labels wrap within each segment. */
@media (max-width: 760px) {
  .seg {
    display: flex;
    max-width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .seg::-webkit-scrollbar { display: none; }
  .seg-opt { flex: 0 0 auto; white-space: nowrap; }
}

/* Data tables (charter class, membership tiers, fractional comparison):
   on phones a 3–4 column table can't shrink to fit. Rather than hide columns
   behind a horizontal scroll, stack each row into a labelled card — the first
   cell is the card title, every other cell shows its column header (via the
   td's data-label) above the value, so nothing is lost. */
@media (max-width: 760px) {
  .table thead { display: none; }
  .table,
  .table tbody { display: block; width: 100%; }
  .table tbody tr {
    display: block;
    padding: var(--space-4) 0;
    border-top: 2px solid var(--color-divider);
  }
  .table tbody tr:last-child { border-bottom: 2px solid var(--color-divider); }
  .table tbody tr:hover { background: none; }
  .table td {
    display: block;
    padding: 0;
    border: 0;
    white-space: normal;
    font-size: 15px;
    line-height: 1.5;
  }
  .table td + td { margin-top: var(--space-3); }
  .table td::before {
    content: attr(data-label);
    display: block;
    font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase;
    color: color-mix(in srgb, var(--color-text) 55%, transparent);
    margin-bottom: 3px;
  }
  .table td:first-child {
    font-family: var(--font-heading); font-weight: var(--font-heading-weight);
    font-size: 19px; line-height: 1.2; letter-spacing: -0.01em;
  }
  .table td:first-child::before { display: none; }
}

/* — Stats ledger (home “in numbers”) —
   Four ruled columns framed by heavy top/bottom rules, a numbered category
   eyebrow over each figure. Collapses 4 → 2 columns on phones. */
.stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  border-top: 2px solid var(--color-text);
  border-bottom: 2px solid var(--color-text);
}
.stat {
  padding: var(--space-8) clamp(20px, 2vw, 28px) var(--space-6);
  border-left: 1px solid var(--color-divider);
}
.stat:first-child { border-left: 0; padding-left: 0; }
.stat-eyebrow {
  display: flex; align-items: baseline; gap: var(--space-2);
  font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--color-accent-700); margin: 0 0 22px;
}
.stat-idx {
  font-variant-numeric: tabular-nums;
  color: color-mix(in srgb, var(--color-text) 45%, transparent);
}
.stat-num {
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: clamp(40px, 4.4vw, 62px); line-height: 0.92; letter-spacing: -0.03em;
  color: var(--color-accent); margin: 0;
}
.stat-num .stat-unit {
  font-size: 0.42em; letter-spacing: 0; margin-left: 2px;
  color: color-mix(in srgb, var(--color-accent) 78%, transparent);
}
.stat-label {
  font-size: 13px; line-height: 18px; letter-spacing: 0.06em; text-transform: uppercase;
  color: color-mix(in srgb, var(--color-text) 68%, transparent);
  margin: 20px 0 0; max-width: 20ch;
}
@media (max-width: 760px) {
  .stats { grid-template-columns: 1fr 1fr; }
  .stat { padding: var(--space-6) clamp(16px, 4vw, 24px); }
  /* Left column of each 2-wide row loses its vertical rule … */
  .stat:nth-child(2n + 1) { border-left: 0; padding-left: 0; }
  /* … and the second row gains a horizontal rule to separate it. */
  .stat:nth-child(n + 3) { border-top: 1px solid var(--color-divider); }
}

/* — Contact form status line — */
.form-status { font-size: 13px; line-height: 1.7; margin: var(--space-2) 0 0;
  color: color-mix(in srgb, var(--color-text) 70%, transparent); }
.form-status[data-state="error"] { color: var(--color-accent-700); }

/* — Site footer: full-bleed inverted band — */
.site-footer {
  background: var(--color-text);
  color: var(--color-bg);
  margin-top: var(--space-8);
}
.site-footer-top {
  display: grid;
  grid-template-columns: 1.7fr 1fr auto;
  gap: clamp(32px, 5vw, 72px);
  padding: clamp(44px, 6vw, 64px) 0 40px;
}
.site-footer-logo { height: 44px; width: auto; }
.site-footer-tag {
  margin: 20px 0 0;
  max-width: 46ch;
  font-size: 14.5px;
  line-height: 1.65;
  color: color-mix(in srgb, var(--color-bg) 62%, transparent);
}
.site-footer-h {
  font-family: var(--font-heading);
  font-weight: var(--font-heading-weight);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin: 0 0 18px;
  color: color-mix(in srgb, var(--color-bg) 45%, transparent);
}
.site-footer-nav ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 13px; }
.site-footer-nav a {
  font-size: 14px;
  color: color-mix(in srgb, var(--color-bg) 82%, transparent);
  transition: color 0.15s ease;
}
.site-footer-nav a:hover { color: var(--color-accent-2); }

/* Members column — far right of the footer top row, links out to the booking app. */
.site-footer-members { justify-self: end; max-width: 30ch; }
.site-footer-members-note {
  margin: 0 0 20px;
  font-size: 13.5px;
  line-height: 1.6;
  color: color-mix(in srgb, var(--color-bg) 62%, transparent);
}
/* Ghost button re-tuned for the inverted band: the base .btn-ghost is dark-on-dark here. */
.btn.btn-footer {
  color: var(--color-bg);
  border-color: color-mix(in srgb, var(--color-bg) 38%, transparent);
}
.btn.btn-footer:hover { color: var(--color-bg); border-color: var(--color-accent); }

.site-footer-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 28px;
  justify-content: space-between;
  align-items: center;
  border-top: 1px solid color-mix(in srgb, var(--color-bg) 22%, transparent);
  padding: 22px 0 var(--space-8);
  font-size: 12.5px;
  color: color-mix(in srgb, var(--color-bg) 55%, transparent);
}
@media (max-width: 640px) {
  .site-footer-top { grid-template-columns: 1fr; gap: 32px; }
  .site-footer-members { justify-self: start; }
  .site-footer-bar { flex-direction: column; align-items: flex-start; }
}

/* Home hero — decorative brand texture (Comfy-generated line-art turbine contours) */
.hero-home { position: relative; isolation: isolate; }
.hero-home::before {
  content: "";
  position: absolute;
  /* Contained to the hero section box only — no viewport full-bleed, no bleed into the next section. */
  inset: 0;
  z-index: -1;
  pointer-events: none;
  /* The whole decorative layer sits at 30% over the cream page bg,
     so the turbine linework reads as a faint, soft backdrop. */
  opacity: 0.3;
  /* Line-art turbine anchored to the right negative space; a cream fade from the left
     keeps the headline and body copy on clean page-bg ground. */
  background:
    linear-gradient(100deg,
      var(--color-bg) 0%,
      var(--color-bg) 24%,
      color-mix(in srgb, var(--color-bg) 68%, transparent) 44%,
      transparent 68%),
    url("../brand/hero-turbine.webp") no-repeat right center / cover;
}
@media (max-width: 720px) {
  .hero-home::before {
    /* On the tall phone column, drop the turbine low-right and fade the top so the headline stays clear. */
    background:
      linear-gradient(180deg,
        var(--color-bg) 0%,
        var(--color-bg) 40%,
        color-mix(in srgb, var(--color-bg) 55%, transparent) 64%,
        transparent 100%),
      url("../brand/hero-turbine.webp") no-repeat right bottom / 165% auto;
  }
}

/* Closing CTA banner headline: large on desktop, sized to keep
   each line on a single row down to small phones. */
.cta-title { font-size: clamp(32px, 4.2vw, 56px); }
@media (max-width: 600px) { .cta-title { font-size: 22px; } }
@media (max-width: 340px) { .cta-title { font-size: 19px; } }
