/* =====================================================
   JPXGLOBAL THEME — MAIN STYLESHEET v1.1.0
   Variables duplicated here as belt-and-suspenders
   fallback in case style.css loads late on some hosts.
   ===================================================== */

/* --- CSS VARIABLES (fallback copy — canonical in style.css) --- */
:root {
  --color-navy:        #0D1B2A;
  --color-charcoal:    #1C2B3A;
  --color-gold:        #C9A84C;
  --color-gold-light:  #E8D08A;
  --color-gold-dim:    rgba(201,168,76,0.15);
  --color-off-white:   #F8F6F1;
  --color-grey-light:  #EEECEA;
  --color-white:       #FFFFFF;
  --color-text-body:   #1C2B3A;
  --color-text-muted:  #5A5550;
  --color-text-faint:  #9A9590;
  --color-border:      #D3D1C7;
  --font-heading:      'Cormorant Garamond', Georgia, 'Times New Roman', serif;
  --font-body:         'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --max-width:         1280px;
  --content-width:     820px;
  --narrow-width:      640px;
  --section-pad-v:     6rem;
  --transition-fast:   150ms ease;
  --transition-normal: 250ms ease;
  --shadow-card:       0 2px 12px rgba(0,0,0,0.07);
  --shadow-nav:        0 4px 24px rgba(0,0,0,0.28);
  --radius-sm:         4px;
  --radius-md:         8px;
  --radius-lg:         14px;
  --shadow-elevation-1: 0 1px 2px rgba(13,27,42,0.05), 0 1px 1px rgba(13,27,42,0.04);
  --shadow-elevation-2: 0 6px 16px rgba(13,27,42,0.09), 0 2px 5px rgba(13,27,42,0.06);
  --shadow-elevation-3: 0 16px 32px rgba(13,27,42,0.14), 0 5px 12px rgba(13,27,42,0.08);
  --shadow-elevation-4: 0 28px 56px rgba(13,27,42,0.18), 0 10px 20px rgba(13,27,42,0.10);
  --shadow-gold-glow:   0 10px 30px rgba(201,168,76,0.22);
  --shadow-inset-edge:  inset 0 0 0 1px rgba(255,255,255,0.06);
  --gradient-foil:        linear-gradient(115deg, #9C7A2E 0%, #C9A84C 24%, #F2DE9C 48%, #C9A84C 72%, #A8833A 100%);
  --gradient-foil-subtle: linear-gradient(135deg, #C9A84C 0%, #E8D08A 50%, #C9A84C 100%);
  --gradient-navy: radial-gradient(130% 140% at 12% -10%, rgba(201,168,76,0.09), transparent 55%), linear-gradient(165deg, #0D1B2A 0%, #12222F 55%, #1C2B3A 100%);
  --texture-grain: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='180'%20height='180'%3E%3Cfilter%20id='n'%3E%3CfeTurbulence%20type='fractalNoise'%20baseFrequency='0.85'%20numOctaves='2'%20stitchTiles='stitch'/%3E%3C/filter%3E%3Crect%20width='100%25'%20height='100%25'%20filter='url(%23n)'/%3E%3C/svg%3E");
}

/* =====================================================
   RESET & BASE
   ===================================================== */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { font-size: 16px; scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
  font-family: var(--font-body);
  font-size: 1.0625rem;
  line-height: 1.72;
  color: var(--color-text-body);
  background: var(--color-white);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
img, svg, video { display: block; max-width: 100%; height: auto; }
a { color: var(--color-gold); text-decoration: none; transition: color var(--transition-normal); }
a:hover { color: var(--color-gold-light); }
a:focus-visible { outline: 2px solid var(--color-gold); outline-offset: 3px; border-radius: 2px; }
ul, ol { list-style: none; }
h1,h2,h3,h4,h5,h6 {
  font-family: var(--font-heading);
  line-height: 1.18;
  font-weight: 500;
  color: var(--color-navy);
  margin-bottom: 1rem;
}
p { margin-bottom: 1.1rem; }
p:last-child { margin-bottom: 0; }
button, input, select, textarea { font-family: inherit; }
button { cursor: pointer; }

/* --- ACCESSIBILITY --- */
.skip-link { position: absolute; left: -9999px; top: auto; width: 1px; height: 1px; overflow: hidden; }
.skip-link:focus { position: static; width: auto; height: auto; padding: .5rem 1rem; background: var(--color-navy); color: #fff; z-index: 9999; }
.screen-reader-text { position: absolute !important; clip: rect(1px,1px,1px,1px); width: 1px; height: 1px; overflow: hidden; }

/* =====================================================
   LAYOUT
   ===================================================== */
.container {
  width: 100%;
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 0 1.5rem;
}
@media (min-width: 768px)  { .container { padding: 0 2.5rem; } }
@media (min-width: 1280px) { .container { padding: 0 3rem; } }

section { padding: 4.5rem 0; }
@media (min-width: 768px) { section { padding: var(--section-pad-v) 0; } }

.text-centre { text-align: center; }
.text-left   { text-align: left; }

/* Colour backgrounds */
/* NOTE: these use background-image (not the `background` shorthand) on
   purpose — .page-hero also sets background-image and must be able to
   layer on top without the shorthand silently resetting it back to none. */
.bg-navy       { background-color: var(--color-navy); background-image: var(--gradient-navy); }
.bg-charcoal   { background-color: var(--color-charcoal); }
.bg-off-white  { background-color: var(--color-off-white); background-image: linear-gradient(160deg, #F8F6F1 0%, #F5F2EC 100%); }
.bg-grey-light { background-color: var(--color-grey-light); background-image: linear-gradient(160deg, #EEECEA 0%, #E8E5E0 100%); }
.bg-white      { background-color: var(--color-white); }
.text-white    { color: var(--color-white) !important; }
.text-muted-light { color: #C8C4BC; }

/* =====================================================
   TYPOGRAPHY SCALE
   ===================================================== */
.eyebrow {
  display: block;
  font-family: var(--font-body);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin-bottom: 0.875rem;
}
.section-title {
  font-family: var(--font-heading);
  font-size: clamp(2rem, 3.5vw, 2.75rem);
  font-weight: 500;
  color: var(--color-navy);
  line-height: 1.18;
  margin-bottom: 1.375rem;
}
.section-title--centre { text-align: center; }
.section-title--left   { text-align: left; }
.section-title.text-white { color: var(--color-white) !important; }

.section-body {
  font-size: 1.0625rem;
  line-height: 1.85;
  color: var(--color-text-body);
  margin-bottom: 2rem;
}
.section-body--narrow {
  max-width: var(--narrow-width);
  margin-left: auto;
  margin-right: auto;
}
.disclaimer {
  font-size: 0.8125rem;
  color: var(--color-text-faint);
  line-height: 1.65;
  margin-top: 1rem;
}

/* =====================================================
   BUTTONS
   ===================================================== */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  padding: 0.9375rem 1.875rem;
  border-radius: var(--radius-sm);
  font-family: var(--font-body);
  font-size: 0.9375rem;
  font-weight: 500;
  line-height: 1;
  text-align: center;
  text-decoration: none;
  border: 1.5px solid transparent;
  transition: background var(--transition-normal), color var(--transition-normal),
              border-color var(--transition-normal), transform var(--transition-fast),
              box-shadow var(--transition-normal);
  cursor: pointer;
  white-space: nowrap;
  letter-spacing: 0.01em;
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }

.btn--primary  { background: var(--color-navy); color: var(--color-off-white); border-color: var(--color-navy); }
.btn--primary:hover { background: var(--color-gold); color: var(--color-navy); border-color: var(--color-gold); box-shadow: 0 4px 16px rgba(201,168,76,0.3); }

.btn--gold { background: var(--color-gold); color: var(--color-navy); border-color: var(--color-gold); }
.btn--gold:hover { background: var(--color-gold-light); border-color: var(--color-gold-light); box-shadow: 0 4px 20px rgba(201,168,76,0.4); }

.btn--secondary { background: transparent; color: var(--color-navy); border-color: var(--color-navy); }
.btn--secondary:hover { background: var(--color-navy); color: var(--color-white); }

.btn--outline-white { background: transparent; color: var(--color-white); border-color: rgba(255,255,255,0.6); }
.btn--outline-white:hover { background: rgba(255,255,255,0.1); border-color: var(--color-white); }

.btn--outline-navy { background: transparent; color: var(--color-navy); border-color: var(--color-navy); }
.btn--outline-navy:hover { background: var(--color-navy); color: var(--color-white); }

.btn--text-muted { background: transparent; border: none; color: #7A7570; padding-left: 0; padding-right: 0; font-size: 0.875rem; }
.btn--text-muted:hover { color: var(--color-white); transform: none; }

.btn--sm { padding: 0.625rem 1.25rem; font-size: 0.875rem; }
.btn--lg { padding: 1.0625rem 2.375rem; font-size: 1rem; }
.btn:focus-visible { outline: 2px solid var(--color-gold); outline-offset: 3px; }

.cta-group { display: flex; flex-wrap: wrap; gap: 0.875rem; }
.cta-group--centre { justify-content: center; }

/* =====================================================
   HEADER
   ===================================================== */
.site-header {
  position: sticky;
  top: 0;
  z-index: 1000;
  background: var(--color-navy);
  border-bottom: 1px solid rgba(201,168,76,0.18);
  transition: box-shadow var(--transition-normal), background var(--transition-normal);
}
.site-header.scrolled {
  box-shadow: var(--shadow-nav);
  background: rgba(13,27,42,0.97);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}
.header__inner {
  display: flex;
  align-items: center;
  gap: 1.25rem;
  height: 72px;
}
.header__logo { display: flex; align-items: center; flex-shrink: 0; text-decoration: none; }
.header__logo img { height: 42px; width: auto; }
.header__logo-text {
  font-family: var(--font-heading);
  font-size: 1.5rem;
  font-weight: 400;
  color: var(--color-white);
  letter-spacing: 0.02em;
  line-height: 1;
  text-decoration: none;
}
.header__logo-text strong { font-weight: 600; color: var(--color-gold); }

/* Primary nav */
.primary-nav { display: none; flex: 1; }
.nav-list {
  display: flex;
  align-items: center;
  gap: 0;
  list-style: none;
}
.nav-item { position: relative; }
.nav-link {
  display: flex;
  align-items: center;
  gap: 3px;
  padding: 0.5rem 0.875rem;
  font-size: 1rem;
  font-weight: 400;
  color: rgba(255,255,255,0.78);
  border-radius: var(--radius-sm);
  transition: color var(--transition-fast), background var(--transition-fast);
  white-space: nowrap;
  text-decoration: none;
  letter-spacing: 0.005em;
}
.nav-link:hover, .nav-link:focus { color: var(--color-white); background: rgba(255,255,255,0.07); }
.nav-chevron { transition: transform var(--transition-fast); flex-shrink: 0; }
.nav-item--has-dropdown .nav-link--dropdown-toggle[aria-expanded="true"] .nav-chevron { transform: rotate(180deg); }

.nav-dropdown {
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  min-width: 230px;
  background: var(--color-charcoal);
  border: 1px solid rgba(201,168,76,0.22);
  border-radius: var(--radius-md);
  padding: 0.5rem;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity var(--transition-fast), visibility var(--transition-fast), transform var(--transition-fast);
  z-index: 200;
  box-shadow: 0 8px 32px rgba(0,0,0,0.3);
}
.nav-item--has-dropdown:hover .nav-dropdown,
.nav-item--has-dropdown .nav-link--dropdown-toggle[aria-expanded="true"] + .nav-dropdown {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
.nav-dropdown li a {
  display: block;
  padding: 0.5625rem 0.875rem;
  font-size: 0.9375rem;
  color: rgba(255,255,255,0.72);
  border-radius: var(--radius-sm);
  transition: color var(--transition-fast), background var(--transition-fast);
  text-decoration: none;
}
.nav-dropdown li a:hover { color: var(--color-white); background: rgba(255,255,255,0.07); }

.header__cta { display: none; margin-left: auto; flex-shrink: 0; }

/* Hamburger */
.nav-toggle {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  width: 44px;
  height: 44px;
  background: transparent;
  border: none;
  margin-left: auto;
  padding: 8px;
  flex-shrink: 0;
}
.nav-toggle__bar {
  display: block;
  height: 2px;
  background: var(--color-white);
  border-radius: 2px;
  transition: transform var(--transition-fast), opacity var(--transition-fast);
}
.nav-toggle[aria-expanded="true"] .nav-toggle__bar:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] .nav-toggle__bar:nth-child(2) { opacity: 0; }
.nav-toggle[aria-expanded="true"] .nav-toggle__bar:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* Mobile nav panel */
@media (max-width: 1023px) {
  .primary-nav {
    display: block;
    position: fixed;
    top: 72px;
    left: 0; right: 0; bottom: 0;
    background: var(--color-navy);
    overflow-y: auto;
    transform: translateX(-100%);
    transition: transform var(--transition-normal);
    z-index: 999;
    padding: 1.5rem 1.5rem 3rem;
  }
  .primary-nav.is-open { transform: translateX(0); }
  .nav-list { flex-direction: column; align-items: stretch; gap: 0; }
  .nav-link {
    font-size: 1.125rem;
    padding: 0.9375rem 0;
    border-radius: 0;
    width: 100%;
    border-bottom: 1px solid rgba(255,255,255,0.07);
  }
  .nav-dropdown {
    position: static;
    opacity: 1;
    visibility: visible;
    transform: none;
    background: transparent;
    border: none;
    padding: 0 0 0 1rem;
    max-height: 0;
    overflow: hidden;
    transition: max-height var(--transition-normal);
    box-shadow: none;
  }
  .nav-item--has-dropdown.is-open .nav-dropdown { max-height: 500px; }
  .nav-dropdown li a { padding: 0.625rem 0; border-bottom: 1px solid rgba(255,255,255,0.04); font-size: 1rem; }
}
@media (min-width: 1024px) {
  .primary-nav { display: flex !important; position: static; transform: none; overflow: visible; padding: 0; background: transparent; }
  .header__cta  { display: flex; }
  .nav-toggle   { display: none; }
}

/* =====================================================
   HERO
   ===================================================== */
/* v3.1.0: the entire legacy .hero / .hero__* rule set (including the
   .hero.bg-navy::before grain layer that shipped with an accidental
   opacity:0.9 — the root cause of the "dirty/noisy hero" production bug)
   has been REMOVED from this file. The canonical hero/banner system now
   lives entirely in assets/css/hero.css (.page-hero / .page-hero__*),
   loaded last, so there is exactly one source of truth. See that file's
   header comment for the root-cause writeup. */

/* =====================================================
   HERO VISUAL MOCKUP (replaces blank dashed placeholder)
   A premium CSS-only mockup of sample smart tags
   ===================================================== */
/* .hero__image-slot removed in v3.1.0 — all hero templates now use
   .page-hero__media (assets/css/hero.css) instead. */

.hero-mockup {
  position: relative;
  width: 100%;
  max-width: 440px;
  height: 400px;
  margin: 0 auto;
}

/* Main tag card */
.hero-mockup__tag-main {
  position: absolute;
  top: 20px; left: 40px;
  width: 180px; height: 260px;
  background: linear-gradient(160deg, #F8F6F1 0%, #EDE9E1 100%);
  border-radius: 10px 10px 10px 10px;
  box-shadow: var(--shadow-elevation-4);
  display: flex; flex-direction: column;
  align-items: center; padding: 20px 16px;
  gap: 12px;
  z-index: 3;
}
/* Die-cut hole */
.hero-mockup__tag-main::before {
  content: '';
  width: 12px; height: 12px;
  border-radius: 50%;
  background: var(--color-navy);
  opacity: 0.25;
  margin-top: -4px;
  flex-shrink: 0;
}
/* String */
.hero-mockup__tag-main::after {
  content: '';
  position: absolute;
  top: -28px; left: 50%;
  transform: translateX(-50%);
  width: 1px; height: 28px;
  background: linear-gradient(180deg, transparent 0%, rgba(201,168,76,0.6) 100%);
}
.hero-mockup__brand-line {
  width: 60%; height: 2px;
  background: var(--gradient-foil);
  border-radius: 2px;
}
.hero-mockup__brand-name {
  font-family: var(--font-heading);
  font-size: 0.9375rem;
  font-weight: 500;
  color: var(--color-navy);
  letter-spacing: 0.08em;
  text-align: center;
}
.hero-mockup__qr {
  width: 72px; height: 72px;
  background: var(--color-navy);
  border-radius: 4px;
  position: relative;
  overflow: hidden;
  flex-shrink: 0;
}
/* QR pattern — CSS grid of squares */
.hero-mockup__qr::before {
  content: '';
  position: absolute;
  inset: 6px;
  background-image:
    repeating-linear-gradient(0deg, transparent 0px, transparent 4px, rgba(248,246,241,0.9) 4px, rgba(248,246,241,0.9) 5px),
    repeating-linear-gradient(90deg, transparent 0px, transparent 4px, rgba(248,246,241,0.9) 4px, rgba(248,246,241,0.9) 5px);
}
.hero-mockup__qr::after {
  content: '';
  position: absolute;
  top: 6px; left: 6px;
  width: 18px; height: 18px;
  border: 3px solid rgba(248,246,241,0.95);
  border-radius: 1px;
  box-shadow: inset 0 0 0 3px var(--color-navy), 42px 0 0 rgba(248,246,241,0.95), 0 42px 0 rgba(248,246,241,0.95);
}
.hero-mockup__tag-text {
  font-size: 0.6875rem;
  font-weight: 500;
  color: var(--color-text-muted);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-align: center;
}
.hero-mockup__nfc-dot {
  width: 28px; height: 28px;
  border-radius: 50%;
  border: 1.5px solid rgba(201,168,76,0.5);
  display: flex; align-items: center; justify-content: center;
  margin-top: auto;
}
.hero-mockup__nfc-dot::after {
  content: '';
  width: 10px; height: 10px;
  border-radius: 50%;
  background: radial-gradient(circle, var(--color-gold) 0%, rgba(201,168,76,0.4) 100%);
}

/* Secondary card — NFC product card */
.hero-mockup__card-nfc {
  position: absolute;
  bottom: 24px; right: 20px;
  width: 200px; height: 120px;
  background: linear-gradient(135deg, var(--color-charcoal) 0%, #0f1e2d 100%);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-elevation-4);
  border: 0.5px solid rgba(201,168,76,0.22);
  padding: 16px 18px;
  z-index: 2;
  overflow: hidden;
}
.hero-mockup__card-nfc::before {
  content: '';
  position: absolute;
  top: -20px; right: -20px;
  width: 80px; height: 80px;
  border-radius: 50%;
  border: 1.5px solid rgba(201,168,76,0.15);
  box-shadow: inset 0 0 0 1.5px rgba(201,168,76,0.08);
}
.hero-mockup__card-label {
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin-bottom: 6px;
}
.hero-mockup__card-title {
  font-family: var(--font-heading);
  font-size: 0.875rem;
  color: var(--color-white);
  line-height: 1.3;
  margin-bottom: 12px;
}
.hero-mockup__chip {
  width: 24px; height: 18px;
  background: var(--gradient-foil);
  border-radius: 3px;
  box-shadow: 0 1px 4px rgba(0,0,0,0.4);
}

/* Small label strip */
.hero-mockup__label-strip {
  position: absolute;
  top: 120px; right: 24px;
  width: 160px; height: 48px;
  background: var(--color-off-white);
  border-radius: 4px;
  border-left: 3px solid var(--color-gold);
  box-shadow: var(--shadow-elevation-3);
  display: flex;
  align-items: center;
  padding: 0 12px;
  gap: 10px;
  z-index: 4;
}
.hero-mockup__label-bar {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.hero-mockup__label-bar span {
  display: block;
  height: 4px;
  border-radius: 2px;
  background: var(--color-border);
}
.hero-mockup__label-bar span:first-child { background: var(--color-navy); width: 70%; }
.hero-mockup__barcode {
  display: flex;
  gap: 1.5px;
  align-items: stretch;
  height: 24px;
}
.hero-mockup__barcode span {
  display: block;
  width: 2px;
  background: var(--color-navy);
  opacity: 0.8;
}
.hero-mockup__barcode span:nth-child(even) { opacity: 0.4; width: 1px; }
.hero-mockup__barcode span:nth-child(3n)   { opacity: 0.9; width: 3px; }

/* Gold accent glow behind mockup */
.hero-mockup__glow {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 320px; height: 320px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(201,168,76,0.10) 0%, transparent 70%);
  pointer-events: none;
  z-index: 0;
}

/* v3.1.0: the old .page-hero background-grain band rules were removed
   from here — they were the second live source of unmodulated feTurbulence
   noise (this one had no opacity control at all, worse than the .hero one
   above). The canonical .page-hero is now defined in assets/css/hero.css. */

/* =====================================================
   PHOTO SLOT — graceful placeholder used by jpx_photo() until real
   photography is supplied (see inc/photography.php / SHOT-LIST.md)
   ===================================================== */
.photo-slot {
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  background-image: var(--gradient-navy);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-elevation-3), var(--shadow-inset-edge);
  aspect-ratio: var(--photo-slot-ratio, 4/3);
}
.photo-slot::before {
  content: '';
  position: absolute;
  inset: 0;
  border: 1px solid rgba(201,168,76,0.25);
  border-radius: var(--radius-lg);
  pointer-events: none;
}
.photo-slot__mark { position: relative; width: 25%; max-width: 64px; height: auto; opacity: 0.55; }
.photo-slot img { border-radius: var(--radius-lg); }

/* =====================================================
   REAL PHOTOGRAPHY — hero-frame (3:2) + full-bleed + card (4:3)
   Renders the <picture> markup from jpx_hero_photo_picture() /
   jpx_card_photo_picture() in inc/photography.php.
   ===================================================== */

/* Framed right-column hero photo (product/solution pages) — native 3:2,
   object-fit:cover as a distortion guard even though the source already
   matches the frame ratio. */
.jpx-hero-photo { display: block; width: 100%; }
.jpx-hero-photo__img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: cover;
  object-position: center;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-elevation-4);
}

/* v3.1.0: .hero--photo (full-bleed homepage variant) removed from here —
   it never actually applied at runtime: `.hero.bg-navy::before` had higher
   specificity (2 classes) than `.hero--photo::before` (1 class), so the
   old grain layer silently won the cascade over this scrim every time.
   The homepage now uses .page-hero--full-bleed from assets/css/hero.css,
   which has no such conflict because the old .hero* rules are gone. */

/* 4:3 card-crop reuse (Products hub, industry cards, NFC solution card) */
.jpx-card-photo { display: block; width: 100%; overflow: hidden; border-radius: var(--radius-md); }
.jpx-card-photo__img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  object-position: center;
}
/* Bleeds to the edges of a padded .card, rounded on the top corners only */
.industry-card__photo {
  margin: -1.625rem -1.625rem 0.375rem;
  width: calc(100% + 3.25rem);
  border-radius: var(--radius-md) var(--radius-md) 0 0;
}
.industry-card__photo .jpx-card-photo__img { border-radius: var(--radius-md) var(--radius-md) 0 0; }

/* =====================================================
   TRUST STRIP
   ===================================================== */
.trust-strip {
  padding: 1.875rem 0;
  background: var(--color-grey-light);
  border-top: 1px solid var(--color-border);
  border-bottom: 1px solid var(--color-border);
}
.trust-strip__list {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1.25rem 2rem;
  list-style: none;
}
@media (min-width: 768px) { .trust-strip__list { grid-template-columns: repeat(4, 1fr); } }

.trust-strip__item { display: flex; flex-direction: column; gap: 0.25rem; }
.trust-strip__label {
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--color-navy);
}
.trust-strip__desc { font-size: 0.875rem; color: var(--color-text-muted); line-height: 1.55; }

/* =====================================================
   GRID LAYOUTS
   ===================================================== */
.grid-2 { display: grid; gap: 1.75rem; }
.grid-3 { display: grid; gap: 1.75rem; }
.grid-4 { display: grid; gap: 1.5rem; }
@media (min-width: 640px)  { .grid-2 { grid-template-columns: repeat(2,1fr); } }
@media (min-width: 640px)  { .grid-3 { grid-template-columns: repeat(2,1fr); } }
@media (min-width: 960px)  { .grid-3 { grid-template-columns: repeat(3,1fr); } }
@media (min-width: 640px)  { .grid-4 { grid-template-columns: repeat(2,1fr); } }
@media (min-width: 960px)  { .grid-4 { grid-template-columns: repeat(4,1fr); } }

/* =====================================================
   CARDS
   ===================================================== */
.card {
  background: var(--color-white);
  border: 0.5px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: 1.625rem;
  box-shadow: var(--shadow-elevation-2);
  transition: box-shadow var(--transition-normal), transform var(--transition-normal);
}
.card:hover, .card:focus-within { box-shadow: var(--shadow-elevation-3); transform: translateY(-3px); }
.card:focus-within { outline: 2px solid var(--color-gold); outline-offset: 2px; }
.card--navy { background: var(--color-navy); border-color: rgba(201,168,76,0.2); }
.card__eyebrow { font-size: 0.75rem; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; color: var(--color-gold); margin-bottom: 0.625rem; }
.card__title { font-family: var(--font-heading); font-size: 1.3125rem; font-weight: 500; color: var(--color-navy); margin-bottom: 0.75rem; line-height: 1.25; }
.card--navy .card__title { color: var(--color-white); }
.card__body { font-size: 1rem; line-height: 1.72; color: var(--color-text-muted); }
.card__link { display: inline-block; margin-top: 1rem; font-size: 0.875rem; font-weight: 500; color: var(--color-gold); }
.card__link:hover { color: var(--color-gold-light); }

/* =====================================================
   IMAGE SLOTS — CSS Mockups (no empty boxes)
   ===================================================== */
.image-slot {
  background: linear-gradient(145deg, var(--color-grey-light) 0%, #E5E2DE 100%);
  border-radius: var(--radius-lg);
  aspect-ratio: 4/3;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  overflow: hidden;
}
/* Decorative corner accent */
.image-slot::before {
  content: '';
  position: absolute;
  top: 0; right: 0;
  width: 60px; height: 60px;
  background: linear-gradient(225deg, rgba(201,168,76,0.15) 0%, transparent 70%);
  border-radius: 0 var(--radius-lg) 0 0;
}
.image-slot__label {
  font-family: var(--font-body);
  font-size: 0.75rem;
  color: var(--color-text-faint);
  text-align: center;
  padding: 1rem;
  line-height: 1.6;
}

/* =====================================================
   SCOPE BOX
   ===================================================== */
.scope-box {
  display: grid;
  gap: 1.5rem;
  padding: 1.75rem;
  border-radius: var(--radius-md);
  background: var(--color-navy);
  border: 0.5px solid rgba(201,168,76,0.2);
}
@media (min-width: 640px) { .scope-box { grid-template-columns: 1fr 1fr; } }
.scope-box__heading { font-size: 0.75rem; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; color: var(--color-gold); margin-bottom: 1rem; }
.scope-list { display: flex; flex-direction: column; gap: 0.625rem; }
.scope-list li { font-size: 0.9375rem; color: rgba(200,196,188,0.88); padding-left: 1.5rem; position: relative; line-height: 1.55; }
.scope-list--yes li::before { content: "✓"; position: absolute; left: 0; color: var(--color-gold); font-weight: 700; }
.scope-list--no  li::before { content: "✕"; position: absolute; left: 0; color: #5A5550; }

/* =====================================================
   FAQ ACCORDION
   ===================================================== */
.faq-accordion { display: flex; flex-direction: column; }
.faq-section-group { margin-bottom: 2.75rem; }
.faq-group-heading {
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin-bottom: 1rem;
  padding-bottom: 0.625rem;
  border-bottom: 1px solid rgba(201,168,76,0.28);
}
.faq-accordion__item { border-bottom: 0.5px solid var(--color-border); }
.faq-accordion__trigger {
  display: flex;
  width: 100%;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1.25rem;
  padding: 1.1875rem 0;
  background: transparent;
  border: none;
  text-align: left;
  font-size: 1rem;
  font-weight: 500;
  color: var(--color-navy);
  line-height: 1.5;
  transition: color var(--transition-fast);
  cursor: pointer;
}
.faq-accordion__trigger:hover { color: var(--color-gold); }
.faq-accordion__icon { flex-shrink: 0; margin-top: 4px; transition: transform var(--transition-fast); color: var(--color-text-muted); }
.faq-accordion__item.is-open .faq-accordion__icon { transform: rotate(180deg); }
.faq-accordion__panel { overflow: hidden; transition: height var(--transition-normal); }
.faq-accordion__answer { padding: 0 0 1.375rem; font-size: 0.9375rem; line-height: 1.82; color: var(--color-text-muted); }

/* =====================================================
   CTA BANDS
   ===================================================== */
.section-sample-kit-cta { padding: 5.5rem 0; }
.section-sample-kit-cta .section-title { color: var(--color-white) !important; }
.section-sample-kit-cta .section-body  { color: #C8C4BC; }
.section-sample-kit-cta__photo { max-width: 340px; margin: 0 auto 2rem; }
.section-sample-kit-cta__photo .jpx-card-photo__img { box-shadow: var(--shadow-elevation-4); }
.section-final-cta { padding: 5.5rem 0; }
.section-final-cta .section-title { color: var(--color-white) !important; }

/* =====================================================
   FORMS
   ===================================================== */
.form-fieldset { border: none; padding: 0; margin: 0 0 2rem; }
.form-legend {
  font-size: 0.75rem; font-weight: 500; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--color-gold);
  margin-bottom: 1.375rem; display: block;
  padding-bottom: 0.5rem; border-bottom: 1px solid rgba(201,168,76,0.25); width: 100%;
}
.form-group { margin-bottom: 1.375rem; }
.form-label { display: block; font-size: 0.875rem; font-weight: 500; color: var(--color-navy); margin-bottom: 0.4375rem; }
.required { color: var(--color-gold); }
.form-control {
  display: block; width: 100%;
  padding: 0.8125rem 1rem;
  font-family: var(--font-body); font-size: 1rem;
  color: var(--color-text-body); background: var(--color-white);
  border: 1px solid var(--color-border); border-radius: var(--radius-sm);
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
  appearance: none; -webkit-appearance: none;
}
.form-control:focus { outline: none; border-color: var(--color-gold); box-shadow: 0 0 0 3px rgba(201,168,76,0.15); }
.form-control--error { border-color: #d9534f; }
.form-control--textarea { resize: vertical; min-height: 130px; line-height: 1.65; }
.form-control--file { padding: 0.5rem; font-size: 0.875rem; cursor: pointer; }
select.form-control {
  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='%235A5550' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 1rem center;
  padding-right: 2.5rem;
}
.form-row { display: grid; gap: 1.125rem; }
.form-row--2col { grid-template-columns: 1fr; }
@media (min-width: 640px) { .form-row--2col { grid-template-columns: 1fr 1fr; } }
.form-checkbox-group, .form-radio-group { display: flex; flex-direction: column; gap: 0.5rem; }
@media (min-width: 640px) { .form-checkbox-group { flex-direction: row; flex-wrap: wrap; gap: 0.75rem 1.5rem; } }
.form-checkbox-label, .form-radio-label { display: flex; align-items: flex-start; gap: 0.5rem; font-size: 0.875rem; color: var(--color-text-body); cursor: pointer; line-height: 1.55; }
.form-checkbox-label input, .form-radio-label input { flex-shrink: 0; margin-top: 0.2rem; accent-color: var(--color-gold); width: 16px; height: 16px; cursor: pointer; }
.form-checkbox-label--consent { font-size: 0.8125rem; color: var(--color-text-muted); }
.form-note { font-size: 0.8125rem; color: var(--color-text-faint); margin-top: 0.375rem; line-height: 1.55; }
.form-note--submit { margin-top: 0.875rem; text-align: center; }
.form-submit { margin-top: 1.125rem; }
.form-nav { display: flex; gap: 1rem; margin-top: 1.625rem; }
.form-nav--right   { justify-content: flex-end; }
.form-nav--between { justify-content: space-between; }
.form-alert { padding: 0.9375rem 1.375rem; border-radius: var(--radius-sm); margin-bottom: 1.5rem; font-size: 0.9375rem; }
.form-alert--error { background: #FEF0EF; border: 1px solid #F5C5C0; color: #7C2D28; }
.form-honeypot { display: none !important; position: absolute; left: -9999px; }

/* Multi-step form */
.form-steps { display: flex; gap: 0; margin-bottom: 2rem; border-bottom: 1px solid var(--color-border); }
.form-step { flex: 1; padding: 0.875rem 0.5rem; text-align: center; opacity: 0.4; transition: opacity var(--transition-fast); }
.form-step--active, .form-step.is-complete { opacity: 1; }
.form-step__num { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 50%; background: var(--color-grey-light); color: var(--color-text-muted); font-size: 0.8125rem; font-weight: 500; margin-bottom: 0.3rem; }
.form-step--active .form-step__num { background: var(--color-gold); color: var(--color-navy); }
.form-step__label { display: block; font-size: 0.8125rem; color: var(--color-text-muted); }
.form-step--active .form-step__label { color: var(--color-navy); font-weight: 500; }
.form-page[hidden] { display: none !important; }

/* Contact layout */
.contact-layout { display: grid; gap: 3.5rem; }
@media (min-width: 960px) { .contact-layout { grid-template-columns: 3fr 2fr; } }
.contact-sidebar { display: flex; flex-direction: column; gap: 1.5rem; }
.sidebar-box { background: var(--color-off-white); border-radius: var(--radius-md); padding: 1.625rem; }
.sidebar-box__heading { font-size: 0.75rem; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; color: var(--color-navy); margin-bottom: 1rem; }
.sidebar-box__steps { display: flex; flex-direction: column; gap: 1.125rem; }
.sidebar-box__step { display: flex; gap: 0.875rem; font-size: 0.875rem; color: var(--color-text-muted); line-height: 1.55; }
.sidebar-box__step-num { flex-shrink: 0; width: 24px; height: 24px; border-radius: 50%; background: var(--color-gold-dim); color: var(--color-navy); font-size: 0.75rem; font-weight: 500; display: flex; align-items: center; justify-content: center; margin-top: 1px; }
.sidebar-box__step-title { font-weight: 500; color: var(--color-navy); }

/* =====================================================
   FOOTER
   ===================================================== */
.site-footer { padding: 5rem 0 2.5rem; }
.footer__inner { display: flex; flex-direction: column; gap: 3.5rem; }
.footer__grid { display: grid; gap: 2.5rem; }
@media (min-width: 640px) { .footer__grid { grid-template-columns: repeat(2,1fr); } }
@media (min-width: 960px) { .footer__grid { grid-template-columns: 1.6fr 1fr 1fr 1fr; } }
.footer__logo-text { font-family: var(--font-heading); font-size: 1.375rem; color: var(--color-white); }
.footer__logo-text strong { color: var(--color-gold); }
.footer__logo-link img { height: 34px; width: auto; display: block; }
.footer__tagline { font-size: 0.75rem; font-weight: 500; letter-spacing: 0.06em; color: #7A7570; text-transform: uppercase; margin: 0.875rem 0 0.625rem; }
.footer__desc { font-size: 0.875rem; color: #5A5550; line-height: 1.72; max-width: 280px; }
.footer__address { font-style: normal; font-size: 0.8125rem; color: #C8C4BC; line-height: 1.6; max-width: 280px; margin-top: 0.875rem; display: block; }
.footer__col-heading { font-family: var(--font-body); font-size: 0.75rem; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: var(--color-gold); margin-bottom: 1rem; }
.footer__nav-list { display: flex; flex-direction: column; gap: 0.625rem; list-style: none; }
.footer__nav-list a { font-size: 0.875rem; color: #6A6560; transition: color var(--transition-fast); text-decoration: none; }
.footer__nav-list a:hover { color: var(--color-white); }
.footer__ships-to { border-top: 1px solid rgba(255,255,255,0.07); padding-top: 1.75rem; font-size: 0.8125rem; color: #4A4540; line-height: 1.7; }
.footer__flags { color: #5A5550; }
.footer__bottom { border-top: 1px solid rgba(255,255,255,0.07); padding-top: 1.75rem; }
.footer__copy { font-size: 0.875rem; color: #4A4540; }

/* =====================================================
   WHATSAPP FAB
   ===================================================== */
.whatsapp-fab {
  position: fixed;
  bottom: 1.75rem; right: 1.75rem;
  z-index: 500;
  display: flex; align-items: center; justify-content: center;
  width: 58px; height: 58px;
  border-radius: 50%;
  background: #25D366;
  color: var(--color-white);
  box-shadow: 0 4px 20px rgba(37,211,102,0.4), 0 2px 8px rgba(0,0,0,0.15);
  transition: transform var(--transition-fast), box-shadow var(--transition-fast);
  text-decoration: none;
}
.whatsapp-fab:hover { transform: scale(1.08); box-shadow: 0 6px 28px rgba(37,211,102,0.5); color: var(--color-white); }
.whatsapp-fab:focus-visible { outline: 3px solid #25D366; outline-offset: 3px; }

/* =====================================================
   BREADCRUMB
   ===================================================== */
.breadcrumb { padding: 0.75rem 0; border-bottom: 1px solid var(--color-border); }
.breadcrumb .container { font-size: 0.8125rem; color: var(--color-text-muted); display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
.breadcrumb a { color: var(--color-text-muted); text-decoration: none; }
.breadcrumb a:hover { color: var(--color-gold); }
.breadcrumb [aria-current="page"] { color: var(--color-navy); font-weight: 500; }

/* =====================================================
   PROCESS STEPS
   ===================================================== */
.process-steps { display: flex; flex-direction: column; max-width: var(--content-width); margin: 0 auto; }
.process-step { display: flex; gap: 1.375rem; padding: 1.625rem 0; border-bottom: 0.5px solid var(--color-border); }
.process-step:last-child { border-bottom: none; }
.process-step__num { flex-shrink: 0; width: 34px; height: 34px; border-radius: 50%; background: var(--color-gold-dim); color: var(--color-gold); font-size: 0.875rem; font-weight: 500; display: flex; align-items: center; justify-content: center; margin-top: 2px; }
.process-step__title { font-weight: 500; color: var(--color-navy); margin-bottom: 0.375rem; font-size: 1.0625rem; }
.process-step__body { font-size: 0.9375rem; color: var(--color-text-muted); line-height: 1.75; }

/* =====================================================
   CALLOUT
   ===================================================== */
.callout { border-left: 3px solid var(--color-gold); background: var(--color-off-white); padding: 1.125rem 1.375rem; border-radius: 0 var(--radius-sm) var(--radius-sm) 0; font-size: 0.9375rem; color: var(--color-text-body); line-height: 1.72; margin: 1.75rem 0; }

/* =====================================================
   TWO-COL CONTENT LAYOUT
   ===================================================== */
.two-col-content { display: grid; gap: 3.5rem; align-items: start; }
@media (min-width: 900px) { .two-col-content { grid-template-columns: 1fr 1fr; } }
@media (min-width: 900px) { .two-col-content--60-40 { grid-template-columns: 3fr 2fr; } }

/* =====================================================
   BLOG
   ===================================================== */
.blog-grid { display: grid; gap: 2rem; }
@media (min-width: 640px) { .blog-grid { grid-template-columns: repeat(2,1fr); } }
@media (min-width: 960px) { .blog-grid { grid-template-columns: repeat(3,1fr); } }
.post-card { background: var(--color-white); border: 0.5px solid var(--color-border); border-radius: var(--radius-md); overflow: hidden; box-shadow: var(--shadow-card); }
.post-card__thumb { aspect-ratio: 16/9; background: var(--color-grey-light); overflow: hidden; }
.post-card__thumb img { width: 100%; height: 100%; object-fit: cover; }
.post-card__content { padding: 1.375rem; }
.post-card__date { font-size: 0.75rem; color: var(--color-text-faint); margin-bottom: 0.5rem; }
.post-card__title { font-family: var(--font-heading); font-size: 1.3125rem; font-weight: 500; color: var(--color-navy); margin-bottom: 0.625rem; line-height: 1.25; }
.post-card__title a { color: inherit; text-decoration: none; }
.post-card__title a:hover { color: var(--color-gold); }
.post-card__excerpt { font-size: 0.9rem; color: var(--color-text-muted); line-height: 1.65; margin-bottom: 1rem; }
.post-card__read-more { font-size: 0.875rem; font-weight: 500; color: var(--color-gold); }
.single-post { max-width: 780px; margin: 0 auto; padding: 3.5rem 0; }
.single-post .post-title { font-family: var(--font-heading); font-size: clamp(2.25rem,5vw,3.25rem); font-weight: 500; color: var(--color-navy); line-height: 1.15; margin-bottom: 1rem; }
.single-post .post-meta { font-size: 0.875rem; color: var(--color-text-muted); margin-bottom: 2rem; }
.single-post .post-content { font-size: 1.0625rem; line-height: 1.85; color: var(--color-text-body); }
.single-post .post-content h2 { font-family: var(--font-heading); font-size: 2rem; margin: 2.75rem 0 1rem; }
.single-post .post-content h3 { font-family: var(--font-heading); font-size: 1.5rem; margin: 2.25rem 0 0.875rem; }
.single-post .post-content p { margin-bottom: 1.375rem; }
.single-post .post-content ul, .single-post .post-content ol { margin: 0 0 1.375rem 1.5rem; }
.single-post .post-content ul { list-style: disc; }
.single-post .post-content ol { list-style: decimal; }
.single-post .post-content li { margin-bottom: 0.5rem; }
.single-post .post-content blockquote { border-left: 3px solid var(--color-gold); padding: 0.875rem 1.375rem; background: var(--color-off-white); margin: 1.75rem 0; border-radius: 0 var(--radius-sm) var(--radius-sm) 0; font-style: italic; color: var(--color-text-muted); }
.post-pagination { display: flex; justify-content: space-between; gap: 1rem; padding: 2.5rem 0; border-top: 1px solid var(--color-border); font-size: 0.875rem; }

/* =====================================================
   404 PAGE
   ===================================================== */
.page-404 { min-height: 72vh; display: flex; align-items: center; }
.page-404 .container { text-align: center; max-width: 600px; }
.page-404__code { font-family: var(--font-heading); font-size: 7rem; font-weight: 500; color: var(--color-gold); opacity: 0.25; line-height: 1; margin-bottom: 0.5rem; }
.page-404__title { font-family: var(--font-heading); font-size: clamp(1.875rem,4vw,2.75rem); font-weight: 500; color: var(--color-navy); margin-bottom: 1rem; }
.page-404__body { font-size: 1rem; color: var(--color-text-muted); margin-bottom: 2.25rem; }
.page-404__ctas { display: flex; flex-wrap: wrap; gap: 0.875rem; justify-content: center; margin-bottom: 2.75rem; }
.page-404__links-heading { font-size: 0.75rem; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: #9A9590; margin-bottom: 1rem; }
.page-404__links { display: flex; flex-wrap: wrap; gap: 0.5rem 1.75rem; justify-content: center; }
.page-404__links a { font-size: 0.875rem; color: var(--color-gold); text-decoration: none; }

/* =====================================================
   THANK YOU PAGE
   ===================================================== */
.page-thank-you { min-height: 72vh; display: flex; align-items: center; background: var(--color-off-white); }
.page-thank-you .container { text-align: center; max-width: 560px; }
.page-thank-you__icon { font-size: 3.5rem; margin-bottom: 1.375rem; }
.page-thank-you__title { font-family: var(--font-heading); font-size: clamp(2rem,4vw,3rem); font-weight: 500; color: var(--color-navy); margin-bottom: 1rem; }
.page-thank-you__body { font-size: 1.0625rem; color: var(--color-text-muted); line-height: 1.82; margin-bottom: 2.25rem; }
.page-thank-you__ctas { display: flex; flex-wrap: wrap; gap: 0.875rem; justify-content: center; }

/* =====================================================
   ADMIN NOTICE (page setup helper)
   ===================================================== */
.jpx-setup-notice { background: var(--color-navy, #0D1B2A); border-left: 4px solid #C9A84C; padding: 1rem 1.25rem; margin: 1rem 0; }
.jpx-setup-notice p { color: #fff; margin: 0 0 .5rem; font-size: 14px; }
.jpx-setup-notice a.button { background: #C9A84C; color: #0D1B2A; border: none; font-weight: 600; }

/* =====================================================
   SECTION INTRO UTILITY
   ===================================================== */
.section-intro { max-width: var(--content-width); margin-left: auto; margin-right: auto; text-align: center; margin-bottom: 3.5rem; }
.divider { border: none; border-top: 1px solid var(--color-border); margin: 0; }
.tag-pill { display: inline-block; padding: 0.25rem 0.875rem; background: var(--color-gold-dim); color: var(--color-gold); border-radius: 999px; font-size: 0.75rem; font-weight: 500; }

/* =====================================================
   RESPONSIVE POLISH
   ===================================================== */
@media (max-width: 639px) {
  .section-title { font-size: clamp(1.75rem,6vw,2.25rem); }
  .btn--lg { padding: 0.9375rem 1.75rem; }
  .cta-group { flex-direction: column; }
  .cta-group .btn { width: 100%; justify-content: center; }
}

/* =====================================================
   FOCUS-VISIBLE — custom interactive components that only
   had default browser outlines before (keyboard nav parity)
   ===================================================== */
.nav-link:focus-visible,
.nav-link--dropdown-toggle:focus-visible,
.faq-accordion__trigger:focus-visible,
.offering-card:focus-visible,
.caps-grid__item:focus-visible,
.nfc-demo__tab:focus-visible,
.nfc-demo__trigger:focus-visible,
.comparison-card:focus-visible {
  outline: 2px solid var(--color-gold);
  outline-offset: 3px;
  border-radius: var(--radius-sm);
}

/* =====================================================
   REDUCED MOTION — looping wave/pulse animations and hover-lift
   transforms are decorative; honour the user's OS preference
   ===================================================== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  .card:hover, .card:focus-within,
  .offering-card:hover, .caps-grid__item:hover,
  .comparison-card:hover, .btn:hover {
    transform: none !important;
  }
}
