/*
Theme Name: MindOFF
Theme URI: https://example.com/
Author: MindOFF
Author URI: https://example.com/
Description: Custom WordPress theme for MindOFF, a premium mental wellness device for binaural frequencies and daily relaxation. Converted directly from the approved static site implementation — no visual, content, or interaction changes were made during conversion.
Version: 1.0.0
Requires at least: 6.0
Requires PHP: 7.4
Tested up to: 6.5
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: mindoff
*/

/* ==========================================================================
   Everything below this line is the UNCHANGED approved site stylesheet,
   carried over verbatim from the reviewed mindoff-website.zip source.
   ========================================================================== */

/* ==========================================================================
   MindOFF™ — Homepage Stylesheet
   Mobile-first. Design tokens derived from measured brand asset values
   (see build notes). Organized by: Tokens → Base → Layout → Components →
   Sections → Responsive breakpoints.
   ========================================================================== */

/* ---------------------------------------------------------------------
   1. DESIGN TOKENS
   Colors below are taken directly from the official logo asset
   (measured), with tints/shades derived from the same hues for
   hover/border states — no unrelated colors introduced.
--------------------------------------------------------------------- */
:root {
  /* Brand colors — measured from official logo asset */
  --color-ink: #0B0906;          /* near-black, matches logo wordmark */
  --color-cream: #FFFADD;        /* logo background cream */
  --color-cream-soft: #FFFDF5;   /* lighter tint, alternating sections */
  --color-orange: #E94E0C;       /* logo accent — power icon / tagline */
  --color-orange-dark: #C43F09;  /* darker shade, hover state */
  --color-forest: #1A3227;       /* NEW (disclosed): sampled from the "Curious about your mind?" Mind Check CTA reference screenshot — used only by .mind-check-entry */
  --color-blush: #F8E9E1;        /* NEW (disclosed): exact hex supplied for the About page "What We're Giving You" cards — used only by .about-giving-cards */

  /* Neutral scale (derived, same undertone as ink/cream) */
  --color-white: #FFFFFF;
  --color-gray-50: #F7F6F1;
  --color-gray-200: #E4E1D8;
  --color-gray-400: #B8B3A6;
  --color-gray-600: #726C5F;
  --color-gray-800: #3A362E;

  /* Typography — primary: Outfit (headlines/labels/buttons), secondary: Source Sans 3 (body) */
  --font-display: 'Outfit', system-ui, sans-serif;
  --font-body: 'Source Sans 3', system-ui, sans-serif;

  /* Type scale (mobile-first base; scaled up at breakpoints) */
  --text-sm: 0.875rem;
  --text-base: 1rem;
  --text-lg: 1.125rem;
  --text-xl: 1.375rem;
  --text-2xl: 1.75rem;
  --text-3xl: 2.25rem;
  --text-4xl: 2.75rem;

  /* Spacing scale */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4rem;
  --space-9: 6rem;

  /* Radius — soft/restrained, open decision flagged for client sign-off */
  --radius-sm: 8px;
  --radius-md: 12px;
  --radius-lg: 20px;             /* NEW (disclosed): added for the About page "What We're Giving You" cards' larger corner radius — not referenced anywhere else, so no existing rounded corner changes size */
  --radius-pill: 999px;

  /* Shadow — minimal, used sparingly */
  --shadow-soft: 0 8px 30px rgba(11, 9, 6, 0.06);

  /* Motion */
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
  --duration: 200ms;

  --container-max: 1200px;
}

/* ---------------------------------------------------------------------
   2. RESET & BASE
--------------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }

@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;
  }
}

body {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: 1.6;
  color: var(--color-ink);
  background: var(--color-white);
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4 {
  font-family: var(--font-display);
  font-weight: 400;
  line-height: 1.15;
  margin: 0 0 var(--space-4);
  letter-spacing: -0.01em;
}

h1 { font-size: var(--text-3xl); }
h2 { font-size: var(--text-2xl); }
h3 { font-size: var(--text-lg); font-weight: 500; }

p { margin: 0 0 var(--space-4); color: var(--color-gray-800); }
p:last-child { margin-bottom: 0; }

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

img { max-width: 100%; height: auto; display: block; }

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

button { font-family: inherit; cursor: pointer; }

svg { display: block; }

/* Accessible focus states — visible everywhere, not just :hover */
a:focus-visible,
button:focus-visible,
.accordion-trigger:focus-visible {
  outline: 2px solid var(--color-orange);
  outline-offset: 3px;
  border-radius: 4px;
}

.skip-link {
  position: absolute;
  left: -999px;
  top: auto;
  background: var(--color-ink);
  color: var(--color-white);
  padding: var(--space-3) var(--space-5);
  z-index: 1000;
  border-radius: var(--radius-sm);
}
.skip-link:focus {
  left: var(--space-4);
  top: var(--space-4);
}

/* ---------------------------------------------------------------------
   3. LAYOUT PRIMITIVES
--------------------------------------------------------------------- */
.container {
  width: 100%;
  max-width: var(--container-max);
  margin-inline: auto;
  padding-inline: var(--space-5);
}

.section { padding-block: var(--space-8); }
.section-alt { background: var(--color-cream-soft); }
.section-narrow { max-width: 720px; }

.section-heading-block { margin-bottom: var(--space-6); max-width: 640px; }

.eyebrow {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  /* orange-dark (not the base brand orange) used here for AA text contrast
     at this small size — base orange is reserved for large text/icons/fills */
  color: var(--color-orange-dark);
  margin: 0 0 var(--space-2);
}
.eyebrow-invert { color: var(--color-cream); }

.section-lede {
  font-size: var(--text-lg);
  color: var(--color-gray-800);
}

/* ---------------------------------------------------------------------
   4. BUTTONS
--------------------------------------------------------------------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  /* All buttons sitewide are Inter (final typography rule: headline =
     Outfit, navigation + buttons = Inter, supporting/body/proof text =
     Source Sans 3) — not the --font-display token. */
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 500;
  font-size: var(--text-base);
  padding: 0.9rem 1.75rem;
  border-radius: var(--radius-pill);
  border: 2px solid transparent;
  transition: transform var(--duration) var(--ease), background var(--duration) var(--ease), border-color var(--duration) var(--ease);
  white-space: nowrap;
}
.btn:hover { transform: translateY(-2px); }
.btn:active { transform: translateY(0); }

.btn-primary { background: var(--color-ink); color: var(--color-white); }
.btn-primary:hover { background: #000; }

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

/* Accent buttons use BLACK text on orange — measured contrast (5.5:1)
   performs meaningfully better than white text on orange (3.8:1) */
.btn-accent { background: var(--color-orange); color: var(--color-ink); }
.btn-accent:hover { background: var(--color-orange-dark); color: var(--color-white); }

/* NEW (disclosed, added for the Homepage "MindOFF™ Wearable Device"
   purchase section's Buy Now button, per direct instruction that its
   color be white): a white-filled button with an orange border/text so
   it still reads clearly against this theme's white/cream section
   backgrounds, rather than disappearing into them. */
.btn-white { background: var(--color-white); color: var(--color-orange-dark); border-color: var(--color-orange-dark); }
.btn-white:hover { background: var(--color-orange-dark); color: var(--color-white); }

.btn-sm { padding: 0.6rem 1.25rem; font-size: var(--text-sm); }
.btn-lg { padding: 1.1rem 2.25rem; font-size: var(--text-lg); }

.text-link {
  display: inline-block;
  margin-top: var(--space-5);
  font-family: var(--font-display);
  font-weight: 500;
  color: var(--color-ink);
  border-bottom: 2px solid var(--color-orange);
  padding-bottom: 2px;
  transition: color var(--duration) var(--ease);
}
.text-link:hover { color: var(--color-orange); }

/* ---------------------------------------------------------------------
   5. HEADER / NAV
--------------------------------------------------------------------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--color-white);
  border-bottom: 1px solid var(--color-gray-200);
  /* Note: intentionally no backdrop-filter/transform here — either would
     make this element the containing block for the fixed mobile nav
     panel below, breaking its full-viewport coverage. */
  transition: background var(--duration) var(--ease), border-color var(--duration) var(--ease);
}

/* Transparent-over-hero header (homepage only — see is_front_page()
   conditional class in header.php). Plain position:fixed does not
   create a containing block for descendant fixed elements (only
   transform/filter/etc. do), so the mobile nav panel's full-viewport
   fixed positioning is unaffected by this. */
.site-header--transparent {
  position: fixed;
  left: 0;
  right: 0;
  background: transparent;
  border-bottom-color: transparent;
}
.site-header--transparent.is-scrolled {
  background: var(--color-white);
  border-bottom-color: var(--color-gray-200);
}

.header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-block: var(--space-3);
}

.header-logo img { width: 140px; height: auto; }

/* HOME PAGE FIX #2 (disclosed): no ".elementor-kit-5" selector, or any
   Elementor code at all, exists anywhere in this theme's own files
   (verified) — this is a hand-coded theme with no Elementor plugin
   present in this codebase. So the rounded corners reported on these
   two elements must come from an external stylesheet outside this
   theme (most likely a live-site Elementor global "Kit" stylesheet
   this codebase can't reach). This is a defensive, narrowly-scoped
   override that guarantees square corners on exactly the MindOFF logo
   and the Home Page hero image, wherever the rounding is coming from —
   it does not touch border-radius anywhere else in the theme. */
.header-logo img,
.hero-bg-photo {
  border-radius: 0 !important;
}

.primary-nav {
  position: fixed;
  inset: 0 0 0 30%;
  z-index: 200;
  background: var(--color-white);
  padding: var(--space-9) var(--space-6) var(--space-6);
  transform: translateX(100%);
  transition: transform var(--duration) var(--ease);
  overflow-y: auto;
}
.primary-nav.is-open { transform: translateX(0); }

.primary-nav ul {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.primary-nav a {
  display: block;
  /* Nav typography is Inter specifically (not the sitewide --font-display
     token) — direct instruction, scoped to the header/nav only. */
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 500;
  font-size: var(--text-xl);
  padding: var(--space-3) 0;
  border-bottom: 1px solid var(--color-gray-200);
}
/* HOME PAGE FIX #3 (disclosed): a clean, subtle active-page underline
   that works at every viewport width, not only the ≥1024px desktop
   rule further down (which already existed but was previously unused,
   since the fallback menu never output these classes). At mobile
   widths every nav item already has the 1px gray separator above, so
   here only its color is switched to the MindOFF orange accent for the
   active item — no pill, box, or background is introduced. */
.primary-nav .current-menu-item > a,
.primary-nav .current_page_item > a {
  border-bottom-color: var(--color-orange);
}

.header-actions { display: flex; align-items: center; gap: var(--space-3); position: relative; z-index: 250; }
/* Buy Now already inherits Inter from the base .btn rule (all buttons
   sitewide are Inter now) — no header-specific override needed. */

.nav-toggle {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  width: 40px;
  height: 40px;
  background: transparent;
  border: none;
  padding: 0;
}
.nav-toggle-bar {
  display: block;
  width: 22px;
  height: 2px;
  background: var(--color-ink);
  transition: transform var(--duration) var(--ease), opacity var(--duration) var(--ease);
}
.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); }

/* ---------------------------------------------------------------------
   6. HERO
--------------------------------------------------------------------- */
.hero { padding-block: var(--space-9); overflow: hidden; }

.hero-inner {
  display: flex;
  flex-direction: column;
  gap: var(--space-8);
}

.hero h1 { font-size: var(--text-3xl); }

.hero-lede {
  font-size: var(--text-lg);
  color: var(--color-gray-800);
  max-width: 46ch;
}

.hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-6);
}

/* Full-bleed photo hero (this task) — overrides/extends the base
   .hero rule above only where this specific modifier class is used. */
.hero--photo {
  position: relative;
  overflow: hidden;
  padding: 0;
  min-height: 560px;
}
.hero-bg-photo {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 70% center; /* keeps the person/device in frame on narrow viewports */
}
.hero-photo-inner {
  position: relative;
  z-index: 1;
  min-height: 560px;
  display: flex;
  align-items: center;
}
.hero-photo-content {
  width: 100%;
  max-width: 420px;
  padding-block: var(--space-8);
}
.hero-accent-word { color: var(--color-orange); }

/* Locked Design System §02 — Inter throughout, headline Light (~300),
   body Regular (~400), labels/buttons Medium (~500). Scoped strictly
   to this hero (via .hero--photo ancestor / hero-only classes) so the
   sitewide --font-display (now Inter site-wide too, per the locked
   design system) and the
   Product page's own .hero-lede usage are completely unaffected. */
.hero--photo h1 {
  font-weight: 300; /* Only the weight needs overriding — font-family already inherits the global --font-display token (Outfit). */
  letter-spacing: -0.01em;
  margin-bottom: var(--space-5); /* 24px — locked "heading→subheading" spacing */
  /* Very subtle soft white glow behind the dark headline for gentle
     readability against the bright/variable photo background — not a
     hard drop shadow, and not applied anywhere else. */
  text-shadow: 0 2px 18px rgba(255, 255, 255, 0.55);
}
/* Forces the exact two-line split shown in the approved reference —
   "The mind" / "finally gets a pause." — as a single unconditional
   break at every viewport, with the second line kept on one line
   (see .hero-line-2 below) rather than reflowing further. */
.hero-break { display: block; }
.hero-line-2 {
  display: inline-block;
  white-space: nowrap;
}
@media (max-width: 480px) {
  /* Only shrink the headline where needed so "finally gets a pause."
     still fits on its single line at very narrow widths — no extra
     line break introduced. */
  .hero--photo h1 { font-size: 1.7rem; }
}
.hero--photo .hero-lede {
  margin-bottom: var(--space-5); /* tightened to match the reference's compact rhythm; font-family/weight already match the global body defaults. */
  text-shadow: 0 2px 14px rgba(255, 255, 255, 0.5);
}
/* .hero-cta: no rule needed — base .btn is already Inter Medium (500)
   site-wide, so this hero button already matches without an override. */

/* Scoped to this hero only — global .btn-accent (used on other pages/
   sections) keeps its existing style; this matches the locked design
   system's button spec (§04: filled orange resting state, white text;
   hover = inverted light surface, orange text/icon, restrained border). */
.hero-actions .btn-accent {
  color: var(--color-white);
}
.hero-actions .btn-accent:hover {
  background: var(--color-white);
  color: var(--color-orange);
  border-color: var(--color-orange);
}

/* Mobile-only protective backdrop: at narrow viewports the object-fit
   cover crop can place text over highly variable image content
   (verified — the darkest sampled pixel behind the text was near-
   black hair), unlike the wide desktop crop which stays over plain
   light wall. rgba value is the exact existing --color-cream
   (#FFFADD) with opacity added — not a new color. */
/* Locked Design System §13 — mobile: stack content and image
   vertically, message understood first, device still clearly
   visible. DOM order is picture→content, so column-reverse puts the
   text first visually without changing the markup. The image reverts
   from an absolute full-bleed overlay to a normal, non-distorted
   block image (object-fit:cover within a fixed aspect-ratio only,
   never stretched). The mobile-only cream backdrop card is no longer
   needed once text isn't sitting on top of the photo. */
@media (max-width: 767px) {
  .hero--photo {
    display: flex;
    flex-direction: column-reverse;
    min-height: auto;
  }
  .hero-bg-photo {
    position: static;
    width: 100%;
    height: auto;
    aspect-ratio: 8 / 5;
    object-position: 65% 22%;
  }
  .hero-photo-inner {
    position: static;
    min-height: auto;
    padding-block: var(--space-7) var(--space-6);
  }
  .hero-photo-content {
    max-width: none;
  }
  /* This specific long CTA label doesn't fit the narrow mobile column
     at the sitewide button padding — scoped reduction here only,
     global .btn padding used everywhere else is untouched. */
  .hero-actions .btn {
    padding-inline: 1.25rem;
  }
  /* At mobile's ~110px-per-item column width, "Built around the science
     of breath, attention and awareness" under the new "Breathing
     Science" label has no room to stay within the required 3-line cap
     as a third-width column. Stacking the three proof items into full-
     width rows (still the same icon/label/text component, spacing and
     colors — only the row direction changes) gives each item the width
     it needs. The vertical divider becomes a top border between rows. */
  .hero-signals {
    flex-direction: column;
    gap: var(--space-3);
  }
  .hero-signal + .hero-signal {
    border-left: none;
    padding-left: 0;
    border-top: 1px solid rgba(11, 9, 6, 0.14);
    padding-top: var(--space-3);
  }
  .hero-signal-label {
    white-space: normal;
  }
}

.hero-visual { display: flex; align-items: center; justify-content: center; }

.hero-photo {
  width: 100%;
  height: auto;
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-soft);
  animation: hero-photo-in 700ms var(--ease) both, hero-photo-breathe 7s ease-in-out 700ms infinite;
}
@keyframes hero-photo-in {
  from { opacity: 0; transform: translateY(10px) scale(0.99); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes hero-photo-breathe {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.012); }
}
@media (prefers-reduced-motion: reduce) {
  .hero-photo { animation: none; }
}

.breathing-rings {
  position: relative;
  width: 260px;
  height: 260px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.ring {
  position: absolute;
  border-radius: 50%;
  border: 2px solid var(--color-orange);
  opacity: 0;
  animation: breathe 4.5s var(--ease) infinite;
}
.ring-1 { width: 100%; height: 100%; animation-delay: 0s; }
.ring-2 { width: 100%; height: 100%; animation-delay: 1.5s; }
.ring-3 { width: 100%; height: 100%; animation-delay: 3s; }

@keyframes breathe {
  0%   { transform: scale(0.55); opacity: 0; }
  15%  { opacity: 0.55; }
  60%  { opacity: 0.15; }
  100% { transform: scale(1); opacity: 0; }
}

.breathing-core {
  position: relative;
  width: 108px;
  height: 108px;
  border-radius: 50%;
  background: var(--color-cream);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: var(--shadow-soft);
}

@media (prefers-reduced-motion: reduce) {
  .ring { animation: none; opacity: 0.25; transform: scale(0.85); }
}

/* ---------------------------------------------------------------------
   6b. PRODUCT FLOAT (prepared utility — not yet applied anywhere)
   For the real product photo once supplied: wrap the <img> in
   .product-float-wrap to get a calm, controlled float + a hint of
   rotation, with its shadow moving in counterpoint. Deliberately
   small values — this is meant to feel "alive," not animated.
   Usage:  <div class="product-float-wrap"><img ... ></div>
--------------------------------------------------------------------- */
.product-float-wrap {
  position: relative;
  display: inline-block;
}
.product-float-wrap img {
  animation: mindoff-product-float 6s ease-in-out infinite;
  will-change: transform;
}
.product-float-wrap::after {
  content: '';
  position: absolute;
  left: 50%;
  bottom: -14px;
  width: 65%;
  height: 18px;
  border-radius: 50%;
  background: radial-gradient(ellipse at center, rgba(11, 9, 6, 0.16), transparent 70%);
  transform: translateX(-50%);
  animation: mindoff-product-shadow 6s ease-in-out infinite;
  z-index: -1;
}
@keyframes mindoff-product-float {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50%      { transform: translateY(-10px) rotate(-1deg); }
}
@keyframes mindoff-product-shadow {
  0%, 100% { transform: translateX(-50%) scale(1); opacity: 0.5; }
  50%      { transform: translateX(-50%) scale(0.86); opacity: 0.3; }
}
@media (prefers-reduced-motion: reduce) {
  .product-float-wrap img,
  .product-float-wrap::after {
    animation: none;
  }
}

/* ---------------------------------------------------------------------
   7. MIND CHECK ENTRY
   REDESIGNED (disclosed, this update) per a supplied reference
   screenshot of a "Curious about your mind?" Mind Check band: dark
   forest-green background (was near-black), a centered stacked layout
   (was left-aligned text beside a button), a white pill button (was
   this site's usual orange), and a new row of 3 trust badges (Free /
   Takes 2 minutes / Personalised insights) with Lucide icons — all new
   markup added in template-parts/mind-check-cta.php (and mirrored in
   the orphaned template-parts/mind-check-entry.php for consistency,
   see that file's own doc-comment). Decorative background lines reuse
   this theme's own existing wavy-line technique (the same repeating
   quadratic-bezier path already used by .sci-mechanism-wave) rather
   than a new visual approach.
--------------------------------------------------------------------- */
.mind-check-entry {
  position: relative;
  overflow: hidden;
  background: var(--color-forest);
  color: var(--color-cream);
  padding-block: var(--space-8);
  text-align: center;
}

.mind-check-waves {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
}

.mind-check-inner {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-5);
}

.mind-check-text { max-width: 560px; }

.mind-check-entry h2 {
  color: var(--color-white);
  font-size: var(--text-2xl);
  margin-bottom: var(--space-2);
}

.mind-check-entry p:not(.eyebrow) { color: rgba(255, 255, 255, 0.75); font-size: var(--text-lg); }

/* White pill button, scoped to this section only — every other CTA on
   the site keeps its existing orange/ink button colors; this is the
   one section dark-green enough that white reads as the clear choice,
   matching the supplied reference exactly. */
.mind-check-entry .btn {
  background: var(--color-white);
  color: var(--color-ink);
}
.mind-check-entry .btn:hover { background: var(--color-cream); }

.mind-check-badges {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-5);
  margin: 0;
  padding: 0;
  list-style: none;
}

.mind-check-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  padding-right: var(--space-5);
  border-right: 1px solid rgba(255, 255, 255, 0.18);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: rgba(255, 255, 255, 0.85);
}
.mind-check-badge:last-child { border-right: none; padding-right: 0; }
.mind-check-badge svg { width: 18px; height: 18px; flex-shrink: 0; color: var(--color-white); }

@media (max-width: 640px) {
  .mind-check-badges { flex-direction: column; gap: var(--space-3); }
  .mind-check-badge { border-right: none; padding-right: 0; }
}

/* ---------------------------------------------------------------------
   8. PROBLEM / SOLUTION
--------------------------------------------------------------------- */
.problem-solution-grid {
  display: grid;
  gap: var(--space-5);
}

.problem-solution-card {
  background: var(--color-white);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  padding: var(--space-6);
}

.problem-solution-card-accent {
  background: var(--color-ink);
  border-color: var(--color-ink);
}
.problem-solution-card-accent h2 { color: var(--color-white); }
.problem-solution-card-accent p { color: var(--color-gray-200); }

/* ---------------------------------------------------------------------
   9. HOW IT WORKS / SCIENCE (shared two-column pattern)
--------------------------------------------------------------------- */
.how-it-works-grid {
  display: grid;
  gap: var(--space-6);
  align-items: center;
}

.how-it-works-visual {
  background: var(--color-cream-soft);
  border-radius: var(--radius-md);
  padding: var(--space-6);
}
.science-grid .how-it-works-visual { background: var(--color-white); border: 1px solid var(--color-gray-200); }

.science-disclaimer {
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  border-top: 1px solid var(--color-gray-200);
  padding-top: var(--space-4);
  margin-top: var(--space-5);
}

/* ---------------------------------------------------------------------
   10. BENEFITS GRID
--------------------------------------------------------------------- */
.benefit-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}

.benefit-card {
  background: var(--color-white);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  padding: var(--space-5);
  transition: border-color var(--duration) var(--ease), transform var(--duration) var(--ease);
}
.benefit-card:hover { border-color: var(--color-orange); transform: translateY(-3px); }

.benefit-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: var(--radius-sm);
  background: var(--color-cream);
  color: var(--color-orange);
  margin-bottom: var(--space-4);
}

.benefit-card h3 { margin: 0; }

/* ---------------------------------------------------------------------
   11. PRODUCT GALLERY / IMAGE PLACEHOLDERS
--------------------------------------------------------------------- */
.product-gallery {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
  margin-bottom: var(--space-6);
}

.image-placeholder {
  aspect-ratio: 4 / 3;
  border-radius: var(--radius-md);
  border: 1.5px dashed var(--color-gray-400);
  background: repeating-linear-gradient(
    135deg,
    var(--color-gray-50),
    var(--color-gray-50) 10px,
    var(--color-white) 10px,
    var(--color-white) 20px
  );
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: var(--space-4);
}
.image-placeholder span {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--color-gray-600);
}
.image-placeholder-lg { aspect-ratio: 16 / 10; }

.highlight-tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}
.highlight-tags li {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-pill);
  background: var(--color-cream);
  color: var(--color-ink);
}

/* ---------------------------------------------------------------------
   12. TRUST GRID
--------------------------------------------------------------------- */
.trust-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
}

.trust-card {
  padding: var(--space-6);
  border-radius: var(--radius-md);
  background: var(--color-cream-soft);
}
.trust-card h3 { color: var(--color-orange-dark); }

/* ---------------------------------------------------------------------
   13. FAQ ACCORDION
--------------------------------------------------------------------- */
.accordion { border-top: 1px solid var(--color-gray-200); margin-bottom: var(--space-5); }

.accordion-item { border-bottom: 1px solid var(--color-gray-200); }

.accordion-item h3 { margin: 0; font-size: var(--text-base); }

.accordion-trigger {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  background: transparent;
  border: none;
  text-align: left;
  padding: var(--space-5) var(--space-1);
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-base);
  color: var(--color-ink);
}

.accordion-icon { flex-shrink: 0; transition: transform var(--duration) var(--ease); color: var(--color-orange); }
.accordion-trigger[aria-expanded="true"] .accordion-icon { transform: rotate(180deg); }

/* Grid-collapse technique: panel animates 0fr -> 1fr, inner wrapper clips content */
.accordion-panel {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows var(--duration) var(--ease);
}
.accordion-item.is-open .accordion-panel { grid-template-rows: 1fr; }

.accordion-panel-inner { overflow: hidden; min-height: 0; }
.accordion-panel-inner p { padding-right: var(--space-6); padding-bottom: var(--space-5); margin: 0; }
.accordion-panel-inner p + p { padding-top: 0; }
.faq-list { padding-right: var(--space-6); padding-bottom: var(--space-5); padding-left: var(--space-5); margin: 0; }
.faq-list li { list-style: disc; color: var(--color-gray-800); margin-bottom: var(--space-2); }
.faq-list li:last-child { margin-bottom: 0; }

/* ---------------------------------------------------------------------
   14. FINAL CTA
--------------------------------------------------------------------- */
.final-cta {
  background: var(--color-ink);
  color: var(--color-white);
  padding-block: var(--space-9);
  text-align: center;
}
.final-cta-inner { display: flex; flex-direction: column; align-items: center; gap: var(--space-4); }
.final-cta h2 { color: var(--color-white); font-size: var(--text-2xl); }
.final-cta p { color: var(--color-gray-200); font-size: var(--text-lg); max-width: 48ch; }
.final-cta-price { font-family: var(--font-display); font-weight: 500; font-size: var(--text-2xl); color: var(--color-orange); max-width: none; }
.final-cta .btn { margin-top: var(--space-3); }
/* .btn-secondary defaults to dark text/border for light backgrounds;
   on final-cta's dark background that would be nearly invisible, so
   it's overridden here to reuse the same white already used for the
   heading/body text in this section — no new color introduced. */
.final-cta .btn-secondary { color: var(--color-white); border-color: var(--color-white); }
.final-cta .btn-secondary:hover { background: var(--color-white); color: var(--color-ink); }
.final-cta-buttons { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-3); }

/* ---------------------------------------------------------------------
   15. FOOTER
   Rebuilt to match the approved reference layout: brand block +
   3 link columns on a warm cream background, thin divider, bottom
   legal row. Structure/spacing/hierarchy follow the reference image;
   colors follow MindOFF's existing tokens (cream background, ink text).
--------------------------------------------------------------------- */
.site-footer {
  background: var(--color-cream-soft);
  border-top: 1px solid var(--color-gray-200);
  color: var(--color-ink);
  padding-block: var(--space-9) var(--space-5);
}

.footer-top {
  display: flex;
  flex-direction: column;
  gap: var(--space-7);
}

.footer-brand img { width: 150px; height: auto; margin-bottom: var(--space-3); }
.footer-tagline {
  max-width: 30ch;
  color: var(--color-gray-600);
  font-size: var(--text-sm);
  margin: 0;
}

.footer-col h3 {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--color-ink);
  margin: 0 0 var(--space-4);
}

.footer-col .footer-subheading { margin-top: var(--space-6); }

.footer-col ul {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin: 0;
  padding: 0;
}
.footer-col a {
  color: var(--color-gray-600);
  font-size: var(--text-sm);
}
.footer-col a:hover { color: var(--color-orange-dark); }

.footer-social {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  margin-top: var(--space-5);
}
.footer-social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--color-ink);
}
.footer-social a:hover { color: var(--color-orange-dark); }

.footer-support-line {
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  margin: 0 0 var(--space-2);
}
.footer-support-line a { color: var(--color-gray-600); }
.footer-support-line a:hover { color: var(--color-orange-dark); }

.footer-divider {
  border: none;
  border-top: 1px solid var(--color-gray-200);
  margin-block: var(--space-7) var(--space-5);
}

.footer-bottom {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.footer-copyright {
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  margin: 0;
}
.footer-legal {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-5);
}
.footer-legal a {
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.footer-legal a:hover { color: var(--color-orange-dark); }

/* ==========================================================================
   RESPONSIVE — TABLET (≥768px)
   ========================================================================== */
@media (min-width: 768px) {
  :root {
    --text-3xl: 3rem;
    --text-4xl: 3.25rem;
  }

  .section { padding-block: var(--space-9); }

  .problem-solution-grid { grid-template-columns: 1fr 1fr; }
  .how-it-works-grid { grid-template-columns: 1fr 1fr; }
  .benefit-grid { grid-template-columns: repeat(2, 1fr); }
  .product-gallery { grid-template-columns: repeat(2, 1fr); }
  .product-gallery .image-placeholder-lg { grid-column: span 2; }
  .trust-grid { grid-template-columns: repeat(3, 1fr); }

  .footer-top {
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: var(--space-6);
  }
  .footer-brand { flex: 0 1 220px; }
  .footer-col { flex: 0 1 200px; }

  .footer-bottom {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
  }

  .hero-inner { flex-direction: row; align-items: center; }
  .hero-content { flex: 1; }
  .hero-visual { flex: 1; }

  .hero--photo { min-height: 82vh; }
  .hero-photo-inner { min-height: 82vh; }
  .hero-bg-photo { object-position: right center; }
  .hero-photo-content { max-width: 460px; }

  /* REDESIGN (disclosed, this update): the old side-by-side desktop
     layout (text left, button right) is removed — the new design is
     centered/stacked at every screen size, per the supplied reference,
     so no desktop-only override is needed here anymore. */
}

/* ==========================================================================
   RESPONSIVE — DESKTOP (≥1024px)
   ========================================================================== */
@media (min-width: 1024px) {
  .primary-nav {
    position: static;
    inset: auto;
    background: transparent;
    padding: 0;
    transform: none;
    transition: none;
    overflow: visible;
  }
  .primary-nav ul { flex-direction: row; align-items: center; gap: var(--space-6); }
  .primary-nav a { border-bottom: none; padding: 0 0 4px; font-size: var(--text-sm); }
  .primary-nav a:hover { color: var(--color-orange-dark); }

  /* Current-page indicator — matches the approved reference's underlined
     "Home" state. WordPress adds .current-menu-item / .current_page_item
     to wp_nav_menu() output automatically; no PHP change needed. */
  .primary-nav .current-menu-item > a,
  .primary-nav .current_page_item > a {
    color: var(--color-ink);
    border-bottom: 2px solid var(--color-orange);
  }

  .nav-toggle { display: none; }

  .benefit-grid { grid-template-columns: repeat(3, 1fr); }

  .hero h1 { font-size: var(--text-4xl); }
}

@media (min-width: 1280px) {
  .header-logo img { width: 165px; }
}

/* ---------------------------------------------------------------------
   16. MIND CHARACTER
   Abstract, original — not a brain, not a copied mascot. Idle state is
   a near-imperceptible "breathing" scale; reactions are brief,
   deliberate, and triggered only at real Mind Check moments (see
   assets/js/mind-character.js). Never continuous bouncing.
--------------------------------------------------------------------- */
.mind-character {
  position: fixed;
  right: var(--space-5);
  bottom: var(--space-5);
  z-index: 150;
  pointer-events: none;
  filter: drop-shadow(0 6px 14px rgba(11, 9, 6, 0.12));
}

.mind-character-svg {
  animation: mc-breathe 4s ease-in-out infinite;
  transform-origin: 60px 70px;
}

.mc-body { fill: var(--color-cream); stroke: var(--color-ink); stroke-width: 2.5; }
.mc-hand { fill: var(--color-cream); stroke: var(--color-ink); stroke-width: 2.5; transform-origin: center; }
.mc-foot { fill: var(--color-ink); opacity: 0.85; }
.mc-accent { fill: var(--color-orange); }
.mc-eye ellipse { fill: var(--color-ink); transition: transform 150ms var(--ease); transform-origin: center; }

@keyframes mc-breathe {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.02); }
}

/* Blink — runs on its own independent loop, distinct from breathing */
.mc-eye { animation: mc-blink 5.5s ease-in-out infinite; transform-origin: center; }
.mc-eye-right { animation-delay: 0.05s; }
@keyframes mc-blink {
  0%, 92%, 100% { transform: scaleY(1); }
  95%           { transform: scaleY(0.15); }
}

/* --- Reaction states, toggled briefly by JS --- */

/* start: small wave from the right hand + eyes widen slightly */
.mind-character.is-start .mc-hand-right {
  animation: mc-wave 600ms ease-in-out;
}
.mind-character.is-start .mc-eye ellipse {
  transform: scale(1.12);
}
@keyframes mc-wave {
  0%, 100% { transform: rotate(0deg) translateY(0); }
  30%      { transform: rotate(-18deg) translateY(-3px); }
  60%      { transform: rotate(10deg) translateY(-2px); }
}

/* select: quick, gentle nod */
.mind-character.is-select .mc-body,
.mind-character.is-select .mc-eye,
.mind-character.is-select .mc-hand,
.mind-character.is-select .mc-accent {
  animation: mc-nod 400ms ease-in-out;
}
@keyframes mc-nod {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50%      { transform: translateY(2px) rotate(-2deg); }
}

/* next: one small step/hop, not a bounce loop */
.mind-character.is-next .mc-body {
  animation: mc-hop 450ms ease-in-out;
}
@keyframes mc-hop {
  0%, 100% { transform: translateY(0); }
  40%      { transform: translateY(-6px); }
  70%      { transform: translateY(1px); }
}

/* complete: one deliberate, slightly larger celebratory pulse */
.mind-character.is-complete .mc-body {
  animation: mc-complete 900ms ease-in-out;
}
.mind-character.is-complete .mc-hand {
  animation: mc-hands-up 900ms ease-in-out;
}
@keyframes mc-complete {
  0%, 100% { transform: scale(1); }
  30%      { transform: scale(1.08); }
  60%      { transform: scale(0.98); }
}
@keyframes mc-hands-up {
  0%, 100% { transform: translateY(0); }
  40%      { transform: translateY(-8px); }
}

@media (prefers-reduced-motion: reduce) {
  .mind-character-svg,
  .mc-eye,
  .mind-character.is-start .mc-hand-right,
  .mind-character.is-start .mc-eye ellipse,
  .mind-character.is-select .mc-body,
  .mind-character.is-select .mc-eye,
  .mind-character.is-select .mc-hand,
  .mind-character.is-select .mc-accent,
  .mind-character.is-next .mc-body,
  .mind-character.is-complete .mc-body,
  .mind-character.is-complete .mc-hand {
    animation: none;
  }
}

@media (max-width: 480px) {
  .mind-character-svg { width: 60px; height: 60px; }
  .mind-character { right: var(--space-3); bottom: var(--space-3); }
}

/* ---------------------------------------------------------------------
   17. MIND CHECK APP
--------------------------------------------------------------------- */
.mindcheck-page-hero {
  background: var(--color-ink);
  color: var(--color-cream);
  padding-block: var(--space-8);
  text-align: center;
}
.mindcheck-page-hero .eyebrow { color: var(--color-orange); }
.mindcheck-page-hero h1 { color: var(--color-white); }
.mindcheck-page-hero p { color: var(--color-gray-200); max-width: 52ch; margin-inline: auto; }
/* SEO TASK ADDITION: the new Product internal-link on this page (see
   page-mind-check.php) reuses the sitewide .text-link component, whose
   default color is near-black — invisible against this section's dark
   background. Scoped override, same pattern as the .eyebrow/h1/p rules
   just above, so only this dark section's text-link is affected. */
.mindcheck-page-hero .text-link { color: var(--color-white); }

/* Hero photo background (this task) — same technique as .hero--photo:
   an absolutely-positioned <img> behind the text, plus a dark scrim so
   the existing white/orange/gray-200 text keeps the same contrast it
   had against the previous solid --color-ink background. Scoped to
   the --photo modifier only, so no other page's hero is affected. */
.mindcheck-page-hero--photo {
  position: relative;
  overflow: hidden;
  min-height: 480px; /* gives the photo enough room that the hero copy doesn't have to sit directly across the face */
}
@media (max-width: 767px) {
  .mindcheck-page-hero--photo { min-height: 420px; }
}
@media (min-width: 1024px) {
  /* Wider viewports crop the image's height more aggressively at a
     fixed min-height (cover-fit on a wide/short box), so this section
     gets a little more room at desktop widths to keep the same
     face+shoulders composition visible instead of cropping in tight
     on just the face. */
  .mindcheck-page-hero--photo { min-height: 560px; }
}
.mindcheck-page-hero-bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 28%; /* keeps the face/shoulders centered in frame at every crop */
}
/* Scrim — existing --color-ink token at partial opacity, not a new
   color, tuned only so contrast matches this section's previous solid
   background. */
.mindcheck-page-hero--photo::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(11, 9, 6, 0.78) 0%, rgba(11, 9, 6, 0.6) 45%, rgba(11, 9, 6, 0.8) 100%);
}
.mindcheck-page-hero-inner {
  position: relative;
  z-index: 1;
}

.mindcheck-app-wrap {
  max-width: 640px;
  margin-inline: auto;
  padding: var(--space-8) var(--space-5);
  min-height: 60vh;
}

.mindcheck-screen { animation: mc-screen-in 300ms var(--ease); }
@keyframes mc-screen-in {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .mindcheck-screen { animation: none; }
}

.mindcheck-intro { text-align: center; }
.mindcheck-intro .btn { margin-top: var(--space-6); }

/* Primary hero button + questionnaire Next button: reuse the existing
   .btn-accent component (already the homepage's orange primary-CTA
   color/typography/radius/hover-motion) rather than introducing a new
   button style. The homepage hero itself scopes .btn-accent to white
   text with an inverted hover (see .hero-actions .btn-accent above) —
   duplicating that same scoped treatment here, to the same class, so
   these two buttons match the homepage primary CTA exactly. */
.mindcheck-intro .btn-accent,
.mc-nav .btn-accent {
  color: var(--color-white);
}
.mindcheck-intro .btn-accent:hover,
.mc-nav .btn-accent:hover {
  background: var(--color-white);
  color: var(--color-orange);
  border-color: var(--color-orange);
}

.mindcheck-calculating { text-align: center; padding-block: var(--space-9); }

.mc-progress {
  height: 6px;
  border-radius: var(--radius-pill);
  background: var(--color-gray-200);
  overflow: hidden;
  margin-bottom: var(--space-2);
}
.mc-progress-bar {
  height: 100%;
  background: var(--color-orange);
  border-radius: var(--radius-pill);
  transition: width 250ms var(--ease);
}
.mc-progress-label {
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  margin-bottom: var(--space-5);
}

.mc-question-text { margin-bottom: var(--space-5); }

.mc-options { display: flex; flex-direction: column; gap: var(--space-3); margin-bottom: var(--space-6); }
.mc-option {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-4) var(--space-5);
  border: 1.5px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  cursor: pointer;
  font-family: var(--font-display);
  font-weight: 500;
  transition: border-color var(--duration) var(--ease), background var(--duration) var(--ease);
}
.mc-option:hover { border-color: var(--color-orange); }
.mc-option input { width: 20px; height: 20px; accent-color: var(--color-orange); flex-shrink: 0; }
.mc-option:has(input:checked) { border-color: var(--color-orange); background: var(--color-cream-soft); }

.mc-text-input {
  width: 100%;
  padding: var(--space-4);
  border: 1.5px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  font-family: var(--font-body);
  font-size: var(--text-base);
  margin-bottom: var(--space-6);
}
.mc-text-input:focus-visible { outline: 2px solid var(--color-orange); outline-offset: 2px; }

.mc-nav { display: flex; justify-content: space-between; gap: var(--space-3); }
.mc-nav .btn:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }

.mindcheck-result { text-align: center; }

/* Wellness-language result screen — deliberately no score/percentage
   classes here. mc-result-title is the personalized headline (e.g.
   "Your mind looks relatively calm right now."), mc-result-message the
   supporting explanation. */
.mc-result-title {
  font-size: var(--text-2xl);
  margin-bottom: var(--space-3);
}
.mc-result-message {
  font-size: var(--text-lg);
  color: var(--color-gray-800);
  max-width: 56ch;
  margin-inline: auto;
}

.mc-meaning-block,
.mc-recommendation-block {
  text-align: left;
  background: var(--color-cream-soft);
  border-radius: var(--radius-md);
  padding: var(--space-5);
  margin: var(--space-6) 0;
}
.mc-meaning-heading,
.mc-recommendation-heading {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-sm);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-orange-dark);
  margin-bottom: var(--space-2);
}
.mc-meaning-text,
.mc-recommendation-text {
  font-size: var(--text-base);
  color: var(--color-gray-800);
  margin: 0;
}

.mindcheck-result .science-disclaimer { text-align: left; margin-bottom: var(--space-6); }

.mc-result-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-3); margin-bottom: var(--space-5); }

/* These are programmatic-only focus targets (question/result headings
   get .focus() called on them in app.js after every Next/Back/Start
   click purely so keyboard/screen-reader users land here instead of
   focus silently resetting to <body> — none of them are in the normal
   Tab order, since they're all tabindex="-1"). A visible focus ring
   was previously drawn here to signal that programmatic move, but per
   direct instruction this must not show any visible outline/ring/
   border/box-shadow. Removing it only affects this specific
   programmatic-focus case — real interactive controls (buttons,
   links, inputs) keep their own :focus-visible rules elsewhere in
   this file untouched, so keyboard accessibility elsewhere is
   unaffected; the .focus() calls themselves are also untouched, so
   screen readers still get moved/announced here exactly as before. */
.mindcheck-app-wrap [tabindex="-1"]:focus {
  outline: none;
  box-shadow: none;
  border: none;
}

/* ---------------------------------------------------------------------
   18. HOMEPAGE UX RESTRUCTURE — NEW COMPONENTS
   Every rule below reuses existing design tokens only (--color-*,
   --font-*, --space-*, --radius-*, --duration/--ease). No new colors,
   fonts, or spacing values were introduced for this task.
--------------------------------------------------------------------- */

/* Top availability bar */
.announcement-bar {
  background: var(--color-orange);
  color: var(--color-ink);
}
.announcement-bar-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  padding-block: var(--space-2);
  text-align: center;
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
}
/* FOLLOW-UP FIX (disclosed): announcement text set to white for
   contrast against the orange bar — scoped to the plain <p> text only,
   so the WhatsApp link beside it keeps its exact current color/
   underline/behavior, untouched. */
.announcement-bar-inner p { margin: 0; color: var(--color-white); }
.announcement-bar-inner a {
  text-decoration: underline;
  text-underline-offset: 2px;
  white-space: nowrap;
}

/* Hero: product tag line + credibility signals */
.hero-product-tag {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-lg);
  color: var(--color-gray-800);
  margin-top: calc(-1 * var(--space-2));
  margin-bottom: var(--space-4);
}
.hero-signals {
  display: flex;
  flex-wrap: nowrap;
  gap: var(--space-4);
  margin: var(--space-4) 0 var(--space-5);
}
.hero-signal {
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  gap: var(--space-2);
  flex: 1;
  min-width: 0;
}
/* Not equal-width columns — Breathing Science carries the longest
   supporting copy, so it gets a larger share of the row's width instead
   of being squeezed into an equal third. */
.hero-signal--wide { flex: 1.6; }
/* Locked Design System §08 — "subtle vertical separators matching the
   approved reference" between proof-row items. */
.hero-signal + .hero-signal {
  border-left: 1px solid rgba(11, 9, 6, 0.14);
  padding-left: var(--space-4);
}
.hero-signal-icon { flex-shrink: 0; color: var(--color-ink); margin-top: 1px; }
/* Breathing Science icon — approved exception: the supplied PNG used
   exactly as provided (unmodified file, not cropped/redrawn), sized up
   via width/height only so its visible glyph sits at roughly the same
   optical size as the two Lucide outline icons either side. */
.hero-signal-icon--img { width: 43px; height: 43px; }
/* HOME PAGE FIX #5 (disclosed): a very subtle, restrained frame around
   the Breathing Science PNG icon only — gives this raster image a
   defined container so its visual weight reads consistently alongside
   the two Lucide outline SVG icons either side, without touching the
   icon file itself. Border opacity matches the existing subtle
   vertical-divider treatment already used between proof-row items
   (rgba(11, 9, 6, 0.14)) rather than introducing a new value. */
.hero-signal-icon-frame {
  /* BORDER REMOVED (disclosed): per direct instruction, the bordered
     frame around the "Breathing Science" nose icon is gone. Padding/
     alignment/sizing are kept exactly as before so the icon still
     lines up with the other two hero-signal icons beside it — only
     the visible border/box background is removed. */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  padding: 3px;
  margin-top: 1px;
}
.hero-signal-icon-frame .hero-signal-icon--img { margin-top: 0; }
.hero-signal-text {
  display: block;
  font-family: var(--font-body);
  font-weight: 400;
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  line-height: 1.25;
}
.hero-signal-label {
  display: block;
  /* Proof row labels are "supporting/proof text" per the current
     typography rule — Source Sans 3, not the Outfit display token. */
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  white-space: nowrap; /* keeps "Breathing Science" on one line, matching the other two labels */
  color: var(--color-ink);
}

/* Mind Recognition */
.recognition-list {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
  margin: var(--space-6) 0;
}
.recognition-list li {
  padding: var(--space-3) var(--space-4);
  border-left: 3px solid var(--color-orange);
  background: var(--color-white);
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-base);
}
.recognition-transition {
  font-size: var(--text-lg);
  color: var(--color-ink);
}

/* Meet MindOFF: differentiator + simple flow */
.meet-mindoff-differentiator {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-xl);
  margin-top: var(--space-6);
}
.simple-flow {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  list-style: none;
  margin: var(--space-4) 0 0;
  padding: 0;
  counter-reset: flow;
}
.simple-flow li {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-sm);
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-pill);
  background: var(--color-cream);
}

/* How It Works: mechanism flow */
.mechanism-flow {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  list-style: none;
  margin: var(--space-5) 0;
  padding: 0;
}
.mechanism-flow li {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-sm);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-sm);
}

/* The MindOFF Experience: numbered sequence */
.experience-sequence {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
  list-style: none;
  margin: 0;
  padding: 0;
}
.experience-sequence li {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-4);
  background: var(--color-white);
  border-radius: var(--radius-md);
  border: 1px solid var(--color-gray-200);
}
.experience-step-num {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-xl);
  color: var(--color-orange);
  flex-shrink: 0;
}
.experience-step-text {
  font-family: var(--font-display);
  font-weight: 500;
}

/* Use cases grid */
.use-case-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
.use-case-card {
  padding: var(--space-5);
  border-radius: var(--radius-md);
  background: var(--color-cream-soft);
}
.use-case-card h3 { margin-bottom: var(--space-2); }
.use-case-card p { margin: 0; color: var(--color-gray-600); }

/* Use-case interactive selector (tabs + swapping panel) */
.use-case-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin-bottom: var(--space-5);
}
.use-case-tab {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-sm);
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-pill);
  border: 1.5px solid var(--color-gray-200);
  background: var(--color-white);
  color: var(--color-gray-800);
  transition: background var(--duration) var(--ease), color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}
.use-case-tab:hover { border-color: var(--color-orange); }
.use-case-tab.is-active {
  background: var(--color-orange);
  border-color: var(--color-orange);
  color: var(--color-ink);
}
.use-case-panels { position: relative; }
.use-case-panel {
  padding: var(--space-6);
  border-radius: var(--radius-md);
  background: var(--color-cream-soft);
  animation: use-case-panel-in 250ms var(--ease);
}
.use-case-panel h3 { margin-bottom: var(--space-2); }
.use-case-panel p { margin: 0; color: var(--color-gray-600); font-size: var(--text-lg); }
@keyframes use-case-panel-in {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .use-case-panel { animation: none; }
}
/* When JS builds the interactive selector, the plain <noscript> list
   fallback is never rendered by the browser at all (browsers with JS
   enabled don't execute noscript content), so no extra hiding rule is
   needed here — this comment just documents why. */

/* Why Different comparison list */
.comparison-list { display: flex; flex-direction: column; gap: var(--space-3); margin: var(--space-6) 0 0; }
.comparison-list li {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  font-family: var(--font-display);
  font-weight: 500;
  padding: var(--space-3) var(--space-4);
  background: var(--color-white);
  border-radius: var(--radius-sm);
  border: 1px solid var(--color-gray-200);
}
.comparison-list li span:first-child { color: var(--color-gray-600); }
.comparison-list li span:last-child { color: var(--color-orange-dark); }
.comparison-list svg { color: var(--color-orange); flex-shrink: 0; }

/* Product spec list */
.product-spec-list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  list-style: none;
  margin: var(--space-5) 0;
  padding: 0;
}
.product-spec-list li {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-sm);
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-pill);
  border: 1px solid var(--color-gray-200);
}
.product-spec-list li:first-child {
  background: var(--color-ink);
  color: var(--color-white);
  border-color: var(--color-ink);
  font-size: var(--text-base);
}

/* What's in the box */
.whats-in-box-warranty {
  margin-top: var(--space-5);
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-gray-200);
  font-family: var(--font-display);
  font-weight: 500;
  color: var(--color-orange-dark);
}

/* ---------------------------------------------------------------------
   Awarded By — static logo strip (3 supplied award marks)
--------------------------------------------------------------------- */
/* HOME PAGE FIX #6 (disclosed): section padding significantly reduced
   from the default .section (--space-8, 4rem) to a compact, editorial
   band, on both mobile and desktop — this section no longer uses the
   same generous vertical spacing as the major content sections. */
.awarded-by {
  padding-block: var(--space-5);
  position: relative;
}
/* HOME PAGE FIX #8 (disclosed): a quiet finishing edge/accent toward
   the section's top-right corner — a short, faint line, not a block,
   gradient, or card. Same low opacity already used for the proof-row
   dividers in the hero (rgba(11, 9, 6, 0.14/.16)), so no new color is
   introduced. */
.awarded-by::after {
  content: "";
  position: absolute;
  top: 0;
  right: var(--space-6);
  width: 72px;
  height: 2px;
  background: rgba(11, 9, 6, 0.16);
}
/* Single row: "Awarded By" label followed by all 3 logos, horizontally,
   per the supplied reference layout (label-then-logo-row, no names
   underneath). */
.awarded-by-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  column-gap: var(--space-9);
  row-gap: var(--space-6);
}
.awarded-by-heading {
  /* Section heading is Inter, per direct instruction — not the
     sitewide --font-display (Outfit) token. Kept on one line. */
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 500;
  font-size: var(--text-lg);
  letter-spacing: 0.02em;
  color: var(--color-ink);
  margin: 0;
  white-space: nowrap;
}
.awarded-by-logos {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-9);
  margin: 0;
  padding: 0;
  list-style: none;
}
.awarded-by-item {
  display: flex;
  align-items: center;
}
/* Height-matched, not width-matched — gives the three very differently
   shaped logos equal optical prominence without stretching or
   distorting any of them (object-fit: contain preserves each one's
   native aspect ratio exactly).
   HOME PAGE FIX #6/#7 (disclosed): height trimmed slightly (108px →
   96px) to suit the section's new compact padding. Re: the "22 Yoga"
   logo specifically — its only supplied source file
   (assets/images/awards/22-yoga.png) is itself just 156×99px; the
   project was searched for a higher-resolution alternative and none
   exists, so per the explicit instruction not to redraw/recreate a
   supplied logo, this is the best available asset. At this display
   height it is upscaled only marginally (~96/99, i.e. not upscaled at
   all in practice), which is the least-soft rendering achievable
   without a new source file from the client. */
.awarded-by-logo {
  height: 96px;
  width: auto;
  max-width: 260px;
  object-fit: contain;
}
@media (max-width: 767px) {
  .awarded-by-row {
    flex-direction: column;
    gap: var(--space-5);
  }
  .awarded-by-logos { gap: var(--space-6); }
  .awarded-by-logo { height: 76px; }
}

/* ---------------------------------------------------------------------
   Featured By — static logo strip (5 supplied media/press marks)
   Deliberately mirrors the Awarded By block above line-for-line (same
   structure, spacing tokens, alignment and logo heights at both
   breakpoints), per direct instruction to match it exactly. Kept as
   its own parallel .featured-by-* set of rules — rather than reusing
   .awarded-by-* on this section's markup — so Awarded By itself is
   never touched by this change.
--------------------------------------------------------------------- */
/* HOME PAGE FIX #11 (disclosed): padding now matches Awarded By's own
   new compact value exactly, so the two sections read as the same
   component family rather than two different design systems. */
.featured-by {
  padding-block: var(--space-5);
}
/* MARQUEE UPDATE (disclosed): always a stacked column now (heading
   above, marquee below, full row width) at every size — previously
   this was the mobile-only layout, with heading+static-row side by
   side on desktop. See the doc-comment in media-press.php for why. */
.featured-by-row {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-6);
}
.featured-by-heading {
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 500;
  font-size: var(--text-lg);
  letter-spacing: 0.02em;
  color: var(--color-ink);
  margin: 0;
  white-space: nowrap;
}
/* HOME PAGE FIX #12 (disclosed, kept from the earlier static-row
   build): 110px height, object-fit:contain so nothing stretches, and
   the same monochrome-grey treatment (filter: grayscale(1), pixels
   only — the underlying artwork files are untouched). This class is
   still used by every logo <img> inside the marquee markup below. */
.featured-by-logo {
  height: 110px;
  width: auto;
  max-width: 300px;
  object-fit: contain;
  filter: grayscale(1);
}

/* MARQUEE UPDATE (disclosed): unconditional now — previously gated to
   a max-width:767px query as a mobile-only fallback for the desktop
   static row (now removed from the markup entirely, so this is the
   only Featured By logo display at every size). Seamless-loop
   technique unchanged, matching this theme's existing .marquee-track
   pattern (template-parts/marquee.php / style.css): two identical
   groups placed back to back, animated with a single linear infinite
   translateX(-50%), so when the first group has scrolled fully out of
   view the second is exactly where the first started — no visible
   jump, no manual reset. Awarded By is completely unaffected — it
   keeps its own static row at every size, untouched. */
.featured-by-marquee {
  display: block;
  overflow: hidden;
  width: 100%;
}
.featured-by-track {
  display: flex;
  width: max-content;
  /* Slow, calm pace per direct instruction (originally tuned for
     mobile) — kept as-is for desktop too rather than introducing a
     second speed, since it already reads as calm and legible at this
     logo size. */
  animation: featured-by-scroll 34s linear infinite;
}
.featured-by-marquee-group {
  display: flex;
  align-items: center;
  flex-shrink: 0;
  gap: var(--space-7);
  padding-right: var(--space-7);
}
.featured-by-marquee-item {
  display: flex;
  align-items: center;
  flex-shrink: 0;
}
@keyframes featured-by-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
@media (max-width: 767px) {
  .featured-by-marquee .featured-by-logo { height: 64px; }
}
@media (prefers-reduced-motion: reduce) {
  .featured-by-track { animation: none; }
}

/* ---------------------------------------------------------------------
   Social Proof — video wall (5 horizontal video cards + CTA)
   Layout structure only inspired by the supplied Apollo reference
   (heading above a horizontally arranged card row); everything visual
   is MindOFF's own — Outfit heading (inherited from the sitewide h2
   rule), brand button styles.
   Background: full-bleed on the <section> itself (not the .container),
   so the subtle warm gradient runs the entire section width — a soft
   cream base washing into a very low-opacity orange from the top-left
   corner. Kept intentionally faint/premium, not a visible band.
--------------------------------------------------------------------- */
.social-proof-videos {
  background:
    radial-gradient(ellipse 900px 600px at 0% 0%, rgba(233, 78, 12, 0.10) 0%, rgba(233, 78, 12, 0) 60%),
    var(--color-cream-soft);
}
/* HOME PAGE FIX #9 (disclosed): left-aligned instead of centered; no
   longer constrained to a centered 900px column. */
.social-proof-heading-block {
  text-align: left;
  max-width: none;
  margin-inline: 0;
  margin-bottom: var(--space-8);
}
.social-proof-heading-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-6);
  /* nowrap so the CTA always stays pinned to the right edge of the row
     (space-between collapses a wrapped single item to flex-start) —
     the long heading wraps onto its own second line instead, which is
     the desired effect: heading text on the left, button on the right,
     on every desktop width. Mobile switches this to a column below. */
  flex-wrap: nowrap;
}
/* HOME PAGE FIX #9 (disclosed): font-size/weight now mirrors the hero
   headline's own responsive tokens exactly instead of a flat hardcoded
   5rem — var(--text-3xl) at mobile, var(--text-4xl) at the same
   ≥1024px breakpoint the hero uses, both at the hero's own
   font-weight: 300 — reusing the existing approved font system rather
   than inventing a new size. */
.social-proof-heading-block h2 {
  font-size: var(--text-3xl);
  font-weight: 300;
  line-height: 1.08;
  margin: 0;
  min-width: 0;
}
@media (min-width: 1024px) {
  .social-proof-heading-block h2 { font-size: var(--text-4xl); }
}
.social-proof-swiper {
  /* FOLLOW-UP FIX (disclosed): the outer Swiper container now owns
     overflow-clipping/touch-dragging (Swiper's own bundled CSS sets
     this up) — the native overflow-x:auto + scroll-snap the row used
     before is gone, replaced one-for-one by Swiper's own equivalent
     mechanism, so the visual result (a horizontally browsable row of
     the same cards) is unchanged. */
  width: 100%;
}
.social-proof-video-row {
  display: flex;
  margin: 0;
  padding: 0;
  list-style: none;
}
.social-proof-video-card {
  /* Card width = exactly 1/4 of the row (minus its share of the 3 gaps
     between 4 cards), so 4 cards always fit fully in the visible row
     with no horizontal scroll — the 5th card, same width, sits just
     past the edge and is reachable by swiping (without changing the
     section's structure — still 5 slots in the row). Formula is
     unchanged from before Swiper: Swiper spaces slides via its own
     spaceBetween option (see social-proof-swiper.js, set to the same
     32px/--space-6 value the row's CSS gap used to provide) rather
     than the CSS `gap` property, so the "3 gaps of --space-6" math
     here still holds exactly. */
  flex: 0 0 calc((100% - 3 * var(--space-6)) / 4);
  aspect-ratio: 4 / 5;
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--color-gray-200);
  /* PLAY BUTTON + AUDIO (disclosed): relative so .social-proof-play-btn
     below can center itself over the card via absolute positioning. */
  position: relative;
}
.social-proof-video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* MODAL PLAYER (disclosed, this update): centered circular control on
   every card except the ambient one (slot 1, which has no button at
   all — see template-parts/social-proof.php). Clicking it opens
   #social-proof-modal rather than playing this card's own <video> in
   place, so there is no more "is-playing" dimmed state to style here
   — the button always shows at full opacity as a simple, consistent
   "open this video" affordance. Reuses this row's existing
   .social-proof-nav-btn circular-button tokens (radius-pill, same
   border/hover-color convention) rather than inventing a new button
   style. */
.social-proof-play-btn {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  padding: 0;
  border: none;
  border-radius: var(--radius-pill);
  background: rgba(11, 9, 6, 0.55);
  color: var(--color-white);
  cursor: pointer;
  transition: background var(--duration) var(--ease);
}
.social-proof-play-btn:hover,
.social-proof-play-btn:focus-visible {
  background: var(--color-orange);
}
.social-proof-play-icon { margin-left: 2px; } /* optical centering — a play triangle's own visual weight sits slightly left of true center */
/* MODAL PLAYER (disclosed, this update): the shared lightbox/modal
   that opens when any non-ambient card's play button is clicked (see
   social-proof-swiper.js). z-index 2000 is deliberately above every
   other z-index used in this theme (the highest previously used,
   the sticky announcement bar, is 1000) so it always sits on top of
   the nav, announcement bar, and everything else. Videos in this row
   are portrait-orientation (480×854 source), so the panel is sized
   around that shape rather than a wide 16:9 frame. */
.social-proof-modal {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-5);
}
.social-proof-modal[hidden] { display: none; }
.social-proof-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(11, 9, 6, 0.85);
}
.social-proof-modal-panel {
  position: relative;
  z-index: 1;
  max-width: min(92vw, 420px);
  max-height: 90vh;
}
.social-proof-modal-video {
  display: block;
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 90vh;
  border-radius: var(--radius-md);
  background: var(--color-ink);
}
/* BUG FIX (disclosed): this button used to live inside
   .social-proof-modal-panel, layered on top of the video with CSS
   positioning alone. Native <video controls> turned out to paint
   above sibling positioned elements regardless of z-index in every
   browser tested here — a known quirk of how browsers render their
   own video-control chrome — so the button ended up invisible and
   unclickable underneath it. It's now a direct child of
   .social-proof-modal instead (a sibling of the panel, not nested
   inside it, per the markup in social-proof.php) and pinned to the
   screen's own top-right corner via the fixed modal as its containing
   block — same one position at every screen size, no media-query
   override needed, and no more competing with the video for stacking
   order. A light, high-contrast card (not the low-opacity dark tint
   used elsewhere in this row) so it reads clearly regardless of
   whatever is playing behind it. */
.social-proof-modal-close {
  position: absolute;
  top: var(--space-4);
  right: var(--space-4);
  z-index: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  border: 1.5px solid rgba(11, 9, 6, 0.15);
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, 0.9);
  color: var(--color-ink);
  cursor: pointer;
  box-shadow: 0 2px 10px rgba(11, 9, 6, 0.35);
  transition: background var(--duration) var(--ease), color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}
.social-proof-modal-close:hover,
.social-proof-modal-close:focus-visible {
  background: var(--color-orange);
  color: var(--color-white);
  border-color: var(--color-orange);
}
/* FOLLOW-UP FIX (disclosed): Swiper navigation, rendered below the
   video row and right-aligned with the container — not Swiper's own
   default overlay arrows (which sit vertically centered over the
   slides), per direct instruction. Styled as a small outline pill
   button reusing existing tokens (radius-pill, gray-200 border,
   orange-dark hover) already used for the same treatment elsewhere
   (e.g. .use-case-tab) — no new color or shape introduced. */
.social-proof-nav {
  display: flex;
  justify-content: flex-end;
  gap: var(--space-3);
  margin-top: var(--space-5);
}
.social-proof-nav-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  padding: 0;
  border-radius: var(--radius-pill);
  border: 1.5px solid var(--color-gray-200);
  background: var(--color-white);
  color: var(--color-ink);
  cursor: pointer;
  transition: border-color var(--duration) var(--ease), color var(--duration) var(--ease);
}
.social-proof-nav-btn:hover { border-color: var(--color-orange); color: var(--color-orange-dark); }
.social-proof-nav-btn.swiper-button-disabled { opacity: 0.35; cursor: default; pointer-events: none; }
@media (max-width: 767px) {
  .social-proof-heading-block { margin-bottom: var(--space-6); }
  .social-proof-heading-row { flex-direction: column; align-items: flex-start; }
  .social-proof-video-card { flex-basis: 250px; }
}

/* Testimonial grid (structural placeholder) */
.testimonial-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
  list-style: none;
  margin: 0;
  padding: 0;
}
.testimonial-placeholder {
  aspect-ratio: 4 / 3;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1.5px dashed var(--color-gray-400);
  border-radius: var(--radius-md);
  background: var(--color-gray-50);
}
.testimonial-placeholder span {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--color-gray-600);
}

/* ==========================================================================
   RESPONSIVE — TABLET/DESKTOP additions for new components
   ========================================================================== */
@media (min-width: 768px) {
  .recognition-list { grid-template-columns: repeat(2, 1fr); }
  .use-case-grid { grid-template-columns: repeat(3, 1fr); }
  .experience-sequence { grid-template-columns: repeat(2, 1fr); }
  .testimonial-grid { grid-template-columns: repeat(3, 1fr); }
}
@media (min-width: 1024px) {
  .use-case-grid { grid-template-columns: repeat(5, 1fr); }
}

/* ---------------------------------------------------------------------
   How MindOFF Fits Into Your Day — 4-slide swiper (rebuilt)
   Background colour system: each day's section background is a much
   lighter, softer version of that slide's own dominant environmental
   tone, so the background reads as an extension of the photograph
   rather than a separate coloured block — no contrast, no gradients,
   solid colours only.
   - Morning: sampled directly from the supplied Morning photo's warm
     sunlit-room tones (averaged patches ≈ #D6C29D, warm tan/gold) and
     lightened ~72% toward white → #F5EFE4, a soft warm cream with a
     subtle yellow-orange hint (matches the photo, not a generic cream).
   - Afternoon/Evening/Night: these 3 slides are still placeholders
     (no photo supplied yet — see the PHP file's doc comment), so their
     tones follow the brief's literal description directly: very light
     blue-grey daylight, soft muted lavender with a warm undertone, and
     a slightly deeper but still-light muted blue for Night. These will
     be worth re-checking against their real photos once those are
     supplied, the same way Morning was just tuned to its actual image.
     No green exists anywhere in the locked design-system doc or the
     theme as built — these 4 "day" tones remain a newly introduced,
     disclosed system for this section only.
--------------------------------------------------------------------- */
:root {
  --day-morning: #F5EFE4;
  --day-morning-accent: #C3D6B3;
  --day-afternoon: #EDF1F3;
  --day-afternoon-accent: #E4C696;
  --day-evening: #F0E8EC;
  --day-evening-accent: #C3B7E0;
  --day-night: #DEE5EE;
  --day-night-accent: #93A9CC;
}
.how-fits {
  background: var(--day-morning);
  transition: background-color 0.5s ease;
}
.how-fits[data-active-day="afternoon"] { background: var(--day-afternoon); }
.how-fits[data-active-day="evening"] { background: var(--day-evening); }
.how-fits[data-active-day="night"] { background: var(--day-night); }

.how-fits-heading-block { margin-bottom: var(--space-6); }
.how-fits-heading-block h2 {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: clamp(2.5rem, 2rem + 2vw, 3rem);
  margin: 0;
  white-space: nowrap;
}
.how-fits-pills {
  display: flex;
  flex-wrap: nowrap;
  gap: var(--space-3);
  margin-bottom: var(--space-8);
  overflow-x: auto;
}
.how-fits-pill {
  flex: 1 1 0;
  min-width: 100px;
  max-width: 180px;
  background: var(--color-white);
  color: var(--color-ink);
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 300;
  font-size: var(--text-sm);
  border: none;
  border-radius: var(--radius-pill);
  padding: 0.85rem 1rem;
  text-align: center;
  box-shadow: 0 1px 2px rgba(11, 9, 6, 0.06), 0 2px 8px rgba(11, 9, 6, 0.07);
  transition: background-color 0.3s ease;
}
/* Active pill subtly reflects its day's color (a light tint of that
   day's accent), not a bold fill — kept clean and minimal. */
/* Fallback (plain day color) declared first for browsers without
   color-mix support; the color-mix line overrides it where supported. */
.how-fits[data-active-day="morning"] .how-fits-pill.is-active { background: var(--day-morning); background: color-mix(in srgb, var(--day-morning-accent) 45%, var(--color-white)); }
.how-fits[data-active-day="afternoon"] .how-fits-pill.is-active { background: var(--day-afternoon); background: color-mix(in srgb, var(--day-afternoon-accent) 45%, var(--color-white)); }
.how-fits[data-active-day="evening"] .how-fits-pill.is-active { background: var(--day-evening); background: color-mix(in srgb, var(--day-evening-accent) 45%, var(--color-white)); }
.how-fits[data-active-day="night"] .how-fits-pill.is-active { background: var(--day-night); background: color-mix(in srgb, var(--day-night-accent) 45%, var(--color-white)); }

.how-fits-swiper {
  position: relative;
  overflow: hidden;
  border-radius: 14px;
}
.how-fits-track {
  display: flex;
  width: 400%; /* 4 slides */
  transition: transform 0.5s ease;
}
.how-fits-slide {
  position: relative;
  flex: 0 0 25%; /* 100% / 4 slides */
  width: 25%;
  min-height: 620px;
  background: var(--color-gray-200);
}
.how-fits-slide-image {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* Soft scrim behind the overlaid text only (left/bottom quadrant),
   for legibility — not a full-image overlay, per "clean editorial"
   direction rather than a heavy darkened photo. */
.how-fits-slide:not(.how-fits-slide--placeholder)::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(100deg, rgba(11, 9, 6, 0.40) 0%, rgba(11, 9, 6, 0.16) 38%, rgba(11, 9, 6, 0) 62%);
  pointer-events: none;
}
/* Minimal per-photo readability adjustment: the Afternoon photo's
   overlay-text corner (desk surface/props) reads noticeably brighter
   than the other 3 slides' — a stronger, slightly wider scrim scoped
   to this one slide only, rather than changing the shared scrim above
   (which stays as-is for Morning/Evening/Night). */
.how-fits-slide[data-day="afternoon"]::after {
  background: linear-gradient(100deg, rgba(11, 9, 6, 0.58) 0%, rgba(11, 9, 6, 0.30) 42%, rgba(11, 9, 6, 0) 68%);
}
.how-fits-slide-content {
  position: absolute;
  left: var(--space-7);
  bottom: var(--space-7);
  max-width: 460px;
  text-align: left;
  z-index: 1;
}
.how-fits-slide-tagline {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--text-2xl);
  color: var(--color-white);
  margin: 0 0 var(--space-3);
}
.how-fits-slide-copy {
  font-family: var(--font-body);
  font-size: var(--text-lg);
  line-height: 1.5;
  color: var(--color-white);
  margin: 0;
}
/* Placeholder slides (Afternoon/Evening/Night — final copy, photo
   still pending): a solid fill in that day's deeper accent tone,
   showing the same finished heading + copy treatment as a real photo
   slide, just recolored for legibility on a light card instead of a
   dark image scrim. */
.how-fits-slide--placeholder { display: flex; align-items: center; justify-content: flex-start; }
.how-fits-slide--placeholder[data-day="afternoon"] { background: var(--day-afternoon-accent); }
.how-fits-slide--placeholder[data-day="evening"] { background: var(--day-evening-accent); }
.how-fits-slide--placeholder[data-day="night"] { background: var(--day-night-accent); }
.how-fits-slide-content--placeholder { position: static; padding: var(--space-7); }
.how-fits-slide-content--placeholder .how-fits-slide-tagline,
.how-fits-slide-content--placeholder .how-fits-slide-copy { color: var(--color-ink); }

@media (prefers-reduced-motion: reduce) {
  .how-fits-track { transition: none; }
}
@media (max-width: 900px) {
  .how-fits-heading-block h2 { font-size: var(--text-3xl); white-space: normal; }
  .how-fits-pill { min-width: 78px; font-size: 0.8rem; padding: 0.7rem 0.5rem; }
  .how-fits-slide { min-height: 460px; }
  .how-fits-slide-content { left: var(--space-5); bottom: var(--space-5); max-width: calc(100% - var(--space-5) * 2); }
  .how-fits-slide-tagline { font-size: var(--text-xl); }
  .how-fits-slide-copy { font-size: var(--text-base); }
}

/* ---------------------------------------------------------------------
   NEW — COMPACT BENEFIT STRIP (5-point icon row, preview only)
   Warm cream background (--color-cream — the same warm yellow/cream
   used behind the logo, not the paler --color-cream-soft used by
   .section-alt elsewhere). Dark charcoal text/icons; orange appears
   only as a very subtle accent (a short underline beneath each icon).
   No gradient, no cards — a flat strip with hairline dividers between
   items, the same divider treatment as the hero proof row.
--------------------------------------------------------------------- */
.benefit-strip {
  background: var(--color-cream);
  padding-block: var(--space-7);
}
.benefit-strip-list {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  list-style: none;
  margin: 0;
  padding: 0;
}
.benefit-strip-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 0 var(--space-2);
}
.benefit-strip-icon {
  order: 0;
  color: var(--color-ink);
}
/* Very subtle brand-color accent: a short thin rule under the icon —
   not a fill, not a background, kept deliberately small and quiet. */
.benefit-strip-item::after {
  order: 1;
  content: "";
  display: block;
  width: 22px;
  height: 2px;
  background: var(--color-orange);
  margin: var(--space-3) auto 0;
  opacity: 0.55;
}
.benefit-strip-title {
  order: 2;
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-base);
  color: var(--color-ink);
  margin: var(--space-3) 0 var(--space-1);
}
.benefit-strip-text {
  order: 3;
  font-family: var(--font-body);
  font-size: var(--text-sm);
  line-height: 1.4;
  color: var(--color-gray-800);
  margin: 0;
}

@media (min-width: 768px) {
  .benefit-strip-list { grid-template-columns: repeat(3, 1fr); }
}
@media (min-width: 1024px) {
  .benefit-strip-list {
    grid-template-columns: repeat(5, 1fr);
    gap: 0;
  }
  .benefit-strip-item {
    padding-inline: var(--space-4);
    position: relative;
  }
  /* Hairline dividers between items — same treatment as the hero
     proof row's vertical separators, not a card border. */
  .benefit-strip-item + .benefit-strip-item {
    border-left: 1px solid rgba(11, 9, 6, 0.14);
  }
}

/* ---------------------------------------------------------------------
   "THE SCIENCE BEHIND MINDOFF": full-viewport-width editorial section —
   massive "SCIENCE" title, then the supplied transparent artwork
   full-bleed like the Hero, then a paragraph + four-item layout. See
   the doc-comment at the top of template-parts/science-behind-calm.php
   for the full brief history.

   REDESIGNED AGAIN (this round, background/layout only — see this
   section's own doc-comment in template-parts/science-behind-calm.php
   for the full disclosure). Per direct instruction, working from ONLY
   a new brief + reference image:
     - The old full-bleed photographic artwork is gone. In its place,
       an inline-SVG wave background (.science-mindoff-waves) sits
       behind the whole section, built only from this theme's existing
       orange/cream tokens — no new hues, no raster image.
     - The heading moved from its own centered, oversized editorial
       treatment into the LEFT column, as one plain line directly above
       the intro paragraphs — matching the reference image, and now
       identical everywhere this section is reused (no more Science-
       page-only image swap for the heading word).
     - The two-column split (copy left / four cards right) and the
       cards themselves are UNCHANGED from before this round — see
       .science-mindoff-cards / .science-mindoff-card further below.
--------------------------------------------------------------------- */
.science-mindoff {
  position: relative;
  background: linear-gradient(160deg, var(--color-white) 0%, var(--color-cream-soft) 55%, var(--color-cream) 100%);
  padding-block: var(--space-9) var(--space-8);
  overflow: hidden;
}

/* --- Wave background (NEW, this round) -----------------------------
   Absolutely positioned behind the content, full section size,
   decorative only. `.science-mindoff-content` gets z-index:1 below so
   the heading/copy/cards all sit visibly above it — the four cards'
   own solid white background (unchanged) is what keeps the waves from
   showing through them, exactly like the reference image. */
.science-mindoff-waves {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
}
.science-mindoff-content {
  position: relative;
  z-index: 1;
}

/* --- Heading + intro copy (left column) -----------------------------
   One plain heading line, same weight/family as every other section
   heading on the site (h2 default from the base stylesheet), just
   sized up slightly to match the reference composition — no more giant
   single-word treatment. */
.science-mindoff-title {
  font-size: clamp(1.75rem, 2.4vw + 1rem, 2.25rem);
  font-weight: 500;
  color: var(--color-ink);
  margin: 0 0 var(--space-5);
}

/* --- Two-column content: copy left, cards right -------------------- */
.science-mindoff-content {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
}
.science-mindoff-paragraph {
  font-size: var(--text-base);
  line-height: 1.7;
  color: var(--color-gray-800);
  margin: 0 0 var(--space-4);
}
.science-mindoff-paragraph:last-child { margin-bottom: 0; }

/* Large, vertical, white rounded cards — reuses this theme's existing
   --shadow-soft token (the same subtle shadow other white cards on the
   site already use, e.g. .benefit-card) rather than inventing a new
   shadow value. All four sit in ONE row; grid's default
   align-items:stretch (unset here, so it applies) makes every card the
   same height as the tallest one in the row and keeps their tops
   aligned automatically. Mobile: the row becomes a contained horizontal
   scroll strip (overflow-x on this element only, not the page) rather
   than stacking or shrinking the cards unreadably. */
.science-mindoff-cards {
  display: flex;
  flex-wrap: nowrap;
  gap: var(--space-4);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  padding-bottom: var(--space-2);
}
.science-mindoff-card {
  flex: 0 0 auto;
  width: 220px;
  min-height: 250px;
  display: flex;
  flex-direction: column;
  background: var(--color-white);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-soft);
  padding: var(--space-5);
}
.science-mindoff-card-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--space-5);
}
.science-mindoff-card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: var(--radius-sm);
  background: var(--color-cream);
  color: var(--color-orange);
  flex-shrink: 0;
}
.science-mindoff-card-number {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--color-gray-400);
  letter-spacing: 0.02em;
}
.science-mindoff-card-label {
  margin: 0 0 var(--space-2);
  font-size: var(--text-lg);
}
.science-mindoff-card-line {
  margin: 0;
  font-size: var(--text-sm);
  line-height: 1.5;
  color: var(--color-gray-600);
}

/* ≥600px: enough width for the row to lay out as a real 4-column grid
   (no scrolling) while staying full-size cards — only the desktop tier
   below adds the reference's more generous gap. */
@media (min-width: 600px) {
  .science-mindoff-cards {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    overflow-x: visible;
    padding-bottom: 0;
  }
  .science-mindoff-card { width: auto; }
}
/* Desktop: ~40%/60% split (5fr:7fr) matching the reference's
   proportions, generous gap between the four large cards, taller
   min-height so they read as substantial vertical cards, not compact
   tiles. */
@media (min-width: 1024px) {
  .science-mindoff-content { grid-template-columns: 5fr 7fr; align-items: start; }
  .science-mindoff-cards { gap: var(--space-6); }
  .science-mindoff-card { min-height: 300px; padding: var(--space-6) var(--space-5); }
}

/* ---------------------------------------------------------------------
   "HOW MINDOFF FITS INTO YOUR DAY" (card-grid version). A second,
   separate section from the existing .day-journey (sun-to-moon scroll
   wave) — see the doc-comment at the top of
   template-parts/day-fit-cards.php for the full disclosure on why two
   sections share this heading, the per-period color sourcing, and the
   Headline/Body → slot mapping used for Afternoon/Evening/Night.

   REVISED AGAIN (this pass) per the "Apollo reference" follow-up
   brief — same grid/card architecture and same asset files as before,
   still no Swiper (never part of this section). Changes this time:
   the left photo grows to 750px+ tall on large desktop only; every
   period's stat card now shows a ring + 2-line supporting text (not
   just Morning); the gradient formula gained one soft upper-left
   highlight layered over the same required hex pairs (mirrored in
   template-parts/day-fit-cards.php's mindoff_dfc_gradient_css()); the
   message card's wave art got a translucent wash to read as
   background texture rather than a dominant illustration; and tab
   switching now crossfades the content area instead of snapping.
   Visual language still reused from the rest of the theme: --radius-md
   cards, --color-white/--color-gray-200 borders, --font-display
   headings — no new visual system.
--------------------------------------------------------------------- */
.day-fit-cards { padding-block: var(--space-8); }

.day-fit-cards-heading-block { margin-bottom: var(--space-5); }
.day-fit-cards-heading-block h2 { margin: 0; }

.day-fit-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-bottom: var(--space-6);
}
/* Explicit instruction: all 4 tabs share one consistent, understated
   dark-grey background (not black, not per-period color) so they never
   compete with the content — only the active tab is distinguished, via
   a lighter shade of the same grey plus bolder text, not a new hue. */
.day-fit-tab {
  position: relative;
  flex: 0 0 auto;
  min-width: 96px;
  padding: 0.7rem 1.25rem;
  border: 1.5px solid transparent;
  border-radius: var(--radius-pill);
  background-color: #4A4742;
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: 500;
  color: rgba(255, 255, 255, 0.75);
  cursor: pointer;
  transition: background-color var(--duration) var(--ease), color var(--duration) var(--ease);
}
.day-fit-tab.is-active {
  background-color: #6B6660;
  color: var(--color-white);
  font-weight: 600;
}
.day-fit-tab:hover { background-color: #5A564F; }
.day-fit-tab:focus-visible { outline: 2px solid var(--color-orange); outline-offset: 2px; }

.day-fit-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  transition: opacity 0.2s ease;
}
.day-fit-side {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
}

.day-fit-card {
  border-radius: var(--radius-md);
  border: 1px solid var(--color-gray-200);
  overflow: hidden;
}

/* --- Card 1: large lifestyle photo (60% on desktop) ---------------- */
.day-fit-card-photo {
  position: relative;
  min-height: 420px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
}
.day-fit-card-photo-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.day-fit-card-photo-scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(11, 9, 6, 0) 45%, rgba(11, 9, 6, 0.55) 100%);
}
/* Night only: a handful of small, low-opacity dots standing in for
   "very restrained stars" from the brief — CSS only, no new image. */
.day-fit-stars {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
}
.day-fit-stars[hidden] { display: none; }
.day-fit-stars span {
  position: absolute;
  width: 2px;
  height: 2px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.8);
}
.day-fit-stars span:nth-child(1) { top: 12%; left: 20%; }
.day-fit-stars span:nth-child(2) { top: 18%; left: 45%; width: 3px; height: 3px; }
.day-fit-stars span:nth-child(3) { top: 9%;  left: 65%; }
.day-fit-stars span:nth-child(4) { top: 24%; left: 80%; }
.day-fit-stars span:nth-child(5) { top: 30%; left: 30%; width: 3px; height: 3px; }
.day-fit-stars span:nth-child(6) { top: 15%; left: 90%; }

/* Compact pill (icon + label), per the brief: charcoal-translucent
   background (not pure black), subtle translucent white border, small
   and refined rather than a full-width overlay bar. */
.day-fit-pill {
  position: relative;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  gap: 12px;
  margin: var(--space-5) var(--space-5) 0;
  padding: 0.4rem 0.75rem;
  background: rgba(20, 18, 15, 0.55);
  border: 1px solid rgba(255, 255, 255, 0.28);
  border-radius: var(--radius-pill);
  align-self: flex-start;
}
/* This theme's global `svg { display: block; }` (an author-origin
   rule) otherwise beats the browser's own `[hidden]` rule regardless
   of specificity, since author styles always win over user-agent
   styles — so the sun icon needs its own explicit override here to
   actually hide on the 3 periods that don't use it. Icon sized ~40%
   smaller than before per the brief (22px → 13px). */
.day-fit-sun-icon { flex-shrink: 0; }
.day-fit-sun-icon[hidden] { display: none; }
.day-fit-pill-text {
  font-family: var(--font-display);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.03em;
  line-height: 1.35;
  color: var(--color-white);
}
/* Caption shrunk from the previous build and kept to one line wherever
   the card is wide enough — allowed to wrap only if it doesn't fit
   (e.g. narrow mobile), per "do not force one line if it causes
   overflow" logic used elsewhere in this theme. */
.day-fit-card-photo-caption {
  position: relative;
  z-index: 1;
  margin: 0;
  padding: var(--space-5) var(--space-5) var(--space-6);
  font-family: var(--font-display);
  font-size: var(--text-lg);
  font-weight: 500;
  line-height: 1.3;
  color: var(--color-white);
  text-shadow: 0 1px 8px rgba(11, 9, 6, 0.35);
  white-space: nowrap;
}
@media (max-width: 480px) {
  .day-fit-card-photo-caption { white-space: normal; }
}

/* --- Card 2: gradient/stat card -------------------------------------
   Background gradient is set inline (PHP on load, JS on tab switch)
   using the exact 2-stop hex pairs from the brief — see the
   doc-comment in day-fit-cards.php. Morning shows a "90%" ring + one
   supporting line; the other 3 periods (no stat supplied) show the
   gradient alone. */
.day-fit-card-stat {
  padding: var(--space-5);
  color: var(--color-white);
  min-height: 220px;
  display: flex;
  align-items: center;
}
.day-fit-card-stat-body {
  display: flex;
  align-items: center;
  gap: var(--space-4);
}
.day-fit-card-stat-body[hidden] { display: none; }
/* Ring ~40% smaller (96px → 58px) with a ~40% thinner stroke (10px →
   6px) than the previous build, per the brief — showing only the
   percentage now, nothing else inside it. */
.day-fit-ring {
  position: relative;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
}
.day-fit-ring-text {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-display);
  font-size: var(--text-lg);
  font-weight: 700;
  color: var(--color-white);
}
/* The one remaining supporting line, beside the ring — bigger than the
   old paragraph text and meant to read as a single line at typical
   card widths, per "keep it bigger... on a single line." */
.day-fit-stat-side {
  margin: 0;
  font-family: var(--font-display);
  font-size: var(--text-lg);
  line-height: 1.35;
  color: var(--color-white);
}

/* --- Card 3: message card (existing wave background, kept) ---------
   The wave-*.jpg asset itself is unchanged; a translucent white wash
   (::before) mutes it per "make it subtle... a lightweight editorial
   background graphic rather than a dominant illustration." */
.day-fit-card-message {
  position: relative;
  padding: var(--space-5);
  background-color: var(--color-white);
  background-size: cover;
  background-position: bottom right;
  background-repeat: no-repeat;
  display: flex;
  align-items: center;
}
.day-fit-card-message::before {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(255, 255, 255, 0.6);
  pointer-events: none;
}
.day-fit-card-message-copy {
  position: relative;
  z-index: 1;
  margin: 0;
  font-size: var(--text-sm);
  line-height: 1.6;
  color: var(--color-gray-800);
  max-width: 46ch;
}

@media (min-width: 1024px) {
  .day-fit-grid { grid-template-columns: 3fr 2fr; align-items: stretch; }
  .day-fit-card-photo { min-height: 100%; }
  .day-fit-side { grid-template-rows: auto 1fr; gap: var(--space-6); }
}
/* Brief: left lifestyle image should feel "large, immersive and
   editorial" — 750px+ tall on large desktop specifically (not on the
   1024–1279px tablet/small-laptop range, which keeps the existing
   min-height:100%/stretch behavior above). The .day-fit-side row
   (auto stat card + 1fr message card) stretches to match, which also
   satisfies the brief's "generous spacing... enough room for
   typography and graphics" on the right column. */
@media (min-width: 1280px) {
  .day-fit-card-photo { min-height: 760px; }
}
@media (max-width: 600px) {
  /* The stat-side text and the ring can get tight on very narrow
     phones — let it shrink slightly rather than overflow. */
  .day-fit-stat-side { font-size: var(--text-base); }
}

/* ---------------------------------------------------------------------
   NEW — "WEAR · BREATHE · RESET" CONTINUOUS MARQUEE (preview only)
   Two background variants for comparison (.is-cream / .is-orange) —
   everything else (scroll speed, typography, spacing, height, layout)
   is identical between them; only background/text color changes.
   Full-width, no container max-width — a marquee bleeds edge to edge.

   SPACING FIX (this revision): "Wear · Breathe · Reset" reads as one
   grouped unit (.marquee-phrase) — small, normal gaps between its own
   words/dots (.marquee-phrase gap) — with the large ~5rem breathing
   room living BETWEEN phrases instead (.marquee-group gap), so
   complete phrases are clearly separated rather than every word
   getting the same spacing (which read as one continuous text wall).
   Strip height/padding, typography and background are unchanged.
   Scroll pace slowed (24s → 42s) for a calmer, more legible motion.
--------------------------------------------------------------------- */
.marquee-strip {
  overflow: hidden;
  padding-block: var(--space-4);
}
.marquee-strip.is-cream {
  background: var(--color-cream);
}
.marquee-strip.is-orange {
  background: var(--color-orange);
}
.marquee-track {
  display: flex;
  width: max-content;
  animation: marquee-scroll 42s linear infinite;
}
.marquee-group {
  display: flex;
  align-items: center;
  flex-shrink: 0;
}
.marquee-phrase {
  display: flex;
  align-items: center;
  flex-shrink: 0;
  white-space: nowrap;
  /* Small, normal spacing between Wear / · / Breathe / · / Reset —
     the three words always stay visually together as one group. */
  gap: 0.5rem;
  /* BUG FIX (disclosed): the ~5rem breathing room between complete
     phrases used to be a flex `gap` on .marquee-group, which only
     applies BETWEEN a group's own children — never after the last
     one. Since .marquee-track holds two back-to-back .marquee-group
     copies (the standard seamless-loop technique) with no gap of its
     own between them, the last phrase of the first copy butted
     directly against the first phrase of the second copy with zero
     space, reading as one run-on word ("...ResetWear..."). Moving the
     5rem gap to a trailing margin on every .marquee-phrase instead
     gives each phrase (including a group's last one) its own trailing
     space, so the seam between the two copies now gets the same
     breathing room as every other phrase gap — and since both
     back-to-back copies are structurally identical, the seamless
     translateX(-50%) loop math is unaffected. */
  margin-right: 5rem;
}
.marquee-word {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-xl);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-ink);
  white-space: nowrap;
}
.marquee-dot {
  font-size: var(--text-xl);
  color: var(--color-ink);
  opacity: 0.5;
}
@keyframes marquee-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .marquee-track { animation: none; }
}

/* ---------------------------------------------------------------------
   19. "HOW MINDOFF FITS INTO YOUR DAY" — DAY/NIGHT JOURNEY
   Rebuilt per direct brief around the exact assets supplied for this
   task (girl-hero.png + 4 circular thumbnails). The background
   gradient and sun/moon icon colors were sampled directly from the
   user's supplied reference image, not invented. Reuses existing
   tokens (--space-*, --text-*, --font-*, --color-ink, --shadow-soft)
   everywhere else.
--------------------------------------------------------------------- */
.day-journey {
  padding-block: var(--space-9);
  background: linear-gradient(120deg, #FDE3C4 0%, #FEF6EC 30%, #FBF9FB 55%, #F1EEFC 78%, #E6E3F8 100%);
  overflow: hidden;
}
/* Merged with science-research-breathing.php above, this round
   (disclosed) — that section already ends with its own bottom padding,
   so this section's own top padding is trimmed a little to read as one
   continuous unit rather than two full-size gaps stacked back to back.
   The heading-block rules above are no longer used by this file (its
   heading was removed — see this file's own doc-comment) but are left
   in place since nothing else references them for deletion. */
.day-journey--merged { padding-top: var(--space-6); }

.day-journey-stage {
  position: relative;
  width: 100%;
  max-width: 1360px;
  margin-inline: auto;
  padding-inline: var(--space-5);
  aspect-ratio: 1600 / 600;
}

.day-journey-wave { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; }
.day-journey-wave--mobile { display: none; }
.day-journey-path {
  fill: none;
  stroke-width: 3;
  stroke-linecap: round;
  opacity: 0.85;
  /* The wave only ever draws within [--inset-start, --inset-start +
     --revealed-len] of the path's real length — both set by JS. JS keeps
     --inset-start (and its matching end inset baked into how far
     --revealed-len can grow) at least 20 real screen pixels away from the
     sun/moon icons on either side, measured directly against their actual
     on-screen position, so the wave never draws under or touches them.
     --revealed-len itself then grows from 0 with scroll progress, which is
     what makes the arc "draw on" as you scroll (99999 as the second
     dasharray value is just a gap long enough to never repeat the dash). */
  stroke-dasharray: var(--revealed-len, 0) 99999;
  stroke-dashoffset: calc(-1 * var(--inset-start, 0));
  transition: stroke-dasharray 0.4s cubic-bezier(.22,.61,.36,1);
}
.day-journey-wave--desktop .day-journey-path { stroke: url(#djWaveGradientD); }
.day-journey-wave--mobile .day-journey-path { stroke: url(#djWaveGradientM); }

.day-journey-point {
  position: absolute;
  left: var(--x);
  top: var(--y);
  transform: translate(-50%, -50%);
  width: 40px;
  z-index: 2;
  /* Sun and moon sit at the two ends of the arc; each eases in as the
     scroll-linked wave reaches its end of the path (see --reveal, set by
     JS from data-reveal-t), so they read as calm endpoint markers rather
     than being on from the very start or popping in on a fixed delay. */
  opacity: var(--reveal, 0);
  transition: opacity 0.4s ease-out;
}
.day-journey-point svg { width: 100%; height: 100%; display: block; }

.day-journey-girl {
  position: absolute;
  left: 50%;
  bottom: 3%;
  transform: translateX(-50%);
  width: 38%;
  min-width: 300px;
  /* Crops in on just the girl + her immediate halo, presentationally
     excluding the small sun/moon glyphs baked into the far left/right
     edges of the original supplied file (they would otherwise
     duplicate the sun/moon icons this section draws in code). This is
     a display-only crop via object-fit — the source file itself is
     never touched, resized, or redrawn. */
  aspect-ratio: 1004 / 941;
  overflow: hidden;
  z-index: 1;
  opacity: 0;
  transition: opacity 1.6s ease-out 0.6s;
  pointer-events: none;
}
.day-journey-stage.is-visible .day-journey-girl { opacity: 1; }
.day-journey-girl img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
}

.day-journey-thumb {
  position: absolute;
  left: var(--x);
  top: var(--y);
  transform: translate(-50%, -50%);
  z-index: 3;
  background: none;
  border: 0;
  padding: 0;
  margin: 0;
  cursor: pointer;
  font-family: inherit;
  width: 116px;
  /* Progressive scroll-linked reveal: each thumbnail is dim/small until
     the wave (--dj-progress) reaches its position along the arc, then
     eases up to fully visible/full-size — see --reveal, set by JS from
     each button's data-reveal-t. Growth is kept subtle (not a dramatic
     zoom): only a ~22% size difference between rest and revealed. */
  opacity: calc(0.18 + 0.82 * var(--reveal, 0));
  transition: opacity 0.35s ease-out;
}
.day-journey-thumb-img {
  display: block;
  width: 100%;
  aspect-ratio: 1 / 1;
  transform: scale(calc(0.82 + 0.18 * var(--reveal, 0)));
  transform-origin: center;
  transition: transform 0.35s ease-out;
}
.day-journey-thumb-img img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}

.day-journey-info {
  position: absolute;
  top: calc(100% + var(--space-2));
  left: 50%;
  transform: translate(-50%, -6px);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-md);
  background: var(--color-white);
  box-shadow: var(--shadow-soft);
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.25s ease, transform 0.25s ease;
}
.day-journey-thumb:hover .day-journey-info,
.day-journey-thumb:focus-visible .day-journey-info,
.day-journey-thumb.is-open .day-journey-info {
  opacity: 1;
  transform: translate(-50%, 0);
  pointer-events: auto;
}
.day-journey-label {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 600;
  letter-spacing: 0.04em;
  padding: 2px var(--space-3);
  border-radius: var(--radius-pill);
  color: var(--color-ink);
}
.day-journey-info[data-moment-tint="morning"] .day-journey-label { background: #FDCEA4; }
.day-journey-info[data-moment-tint="midday"]  .day-journey-label { background: #D8F0D4; }
.day-journey-info[data-moment-tint="evening"] .day-journey-label { background: #F7ADF9; }
.day-journey-info[data-moment-tint="night"]   .day-journey-label { background: #ABABF7; }
.day-journey-line {
  font-size: var(--text-sm);
  color: var(--color-gray-800);
}

@media (max-width: 900px) {
  .day-journey-wave--desktop { display: none; }
  .day-journey-wave--mobile { display: block; }

  .day-journey-stage {
    aspect-ratio: auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-7);
    padding-block: var(--space-6);
  }
  .day-journey-point,
  .day-journey-girl,
  .day-journey-thumb {
    position: static;
    transform: none;
    order: var(--order);
  }
  .day-journey-girl {
    width: 62%;
    min-width: 0;
    max-width: 280px;
  }
  .day-journey-thumb { width: 128px; }
  .day-journey-info { white-space: normal; text-align: center; width: max-content; max-width: 220px; }
}

@media (prefers-reduced-motion: reduce) {
  /* Note: no hardcoded stroke-dashoffset/dasharray override here — JS still
     runs under reduced motion (it just skips the scroll listener), and
     sets --inset-start/--revealed-len itself so the wave keeps its 20px
     clearance from the sun/moon icons instead of jumping back to touching
     them. */
  .day-journey-path { transition: none; }
  .day-journey-point,
  .day-journey-girl,
  .day-journey-thumb,
  .day-journey-thumb-img { transition: none; }
  .day-journey-point,
  .day-journey-girl { opacity: 1; }
  .day-journey-thumb { opacity: 1; }
  .day-journey-thumb-img { transform: none; }
}
/* JS sets these directly too (belt-and-braces for browsers that evaluate
   the media query before JS runs). */
.day-journey-stage.no-anim .day-journey-point,
.day-journey-stage.no-anim .day-journey-girl { opacity: 1; }
.day-journey-stage.no-anim .day-journey-thumb { opacity: 1; }
.day-journey-stage.no-anim .day-journey-thumb-img { transform: none; }

/* ---------------------------------------------------------------------
   "CONNECT WITH US" — new closing social gallery section
   Warm neutral background (--color-cream-soft, already used elsewhere
   for alternating sections — no new global token). Desktop: heading
   block on the left, four photo cards on the right in one row. Mobile:
   heading stacks above a seamless auto-scrolling marquee of the same
   four photos (see doc comment in template-parts/connect-with-us.php
   for why a marquee rather than a wrapped grid, and for the one
   disclosed crop judgment call on the 4th, landscape-shot photo).
--------------------------------------------------------------------- */
.connect-with-us {
  background: var(--color-cream-soft);
}
.connect-with-us-inner {
  display: flex;
  align-items: center;
  gap: var(--space-8);
}
.connect-with-us-content {
  flex: 0 0 auto;
  width: 100%;
  max-width: 320px;
}
.connect-with-us-heading {
  font-family: var(--font-display);
  font-size: var(--text-4xl);
  line-height: 1.1;
  color: var(--color-ink);
  margin: 0 0 var(--space-3);
}
.connect-with-us-handle {
  display: inline-block;
  font-family: var(--font-body);
  font-size: var(--text-base);
  color: var(--color-gray-600);
  text-decoration: none;
  margin: 0;
}
/* Only actual <a> handles (a real Instagram URL supplied) get a hover/
   focus treatment — the plain-text pending state isn't interactive. */
a.connect-with-us-handle:hover,
a.connect-with-us-handle:focus-visible {
  color: var(--color-orange-dark);
  text-decoration: underline;
}
a.connect-with-us-handle:focus-visible {
  outline: 2px solid var(--color-orange-dark);
  outline-offset: 3px;
  border-radius: var(--radius-sm);
}

.connect-gallery { flex: 1 1 auto; min-width: 0; }

/* Desktop: static row of 4 cards, equal width, height-matched via a
   shared aspect-ratio (taken from the 3 native-portrait photos, so
   those three are shown completely uncropped — see PHP doc comment). */
.connect-gallery-grid {
  display: flex;
  gap: var(--space-5);
  margin: 0;
  padding: 0;
  list-style: none;
}
.connect-gallery-item {
  position: relative;
  flex: 1 1 0;
  min-width: 0;
  border-radius: var(--radius-md);
  overflow: hidden;
}
.connect-gallery-item img {
  display: block;
  width: 100%;
  aspect-ratio: 941 / 1672;
  object-fit: cover;
  border-radius: inherit;
}

/* Circular "watch the Reel" arrow button — bottom-right of every card,
   matching this section's own supplied reference image (thin white
   outlined circle, diagonal up-right arrow). The semi-transparent dark
   backdrop is one disclosed refinement beyond that reference: the 4
   actual photos range from quite dark to quite bright at the
   bottom-right corner, and a plain white ring alone would lose
   contrast on the brighter ones. */
.connect-card-arrow {
  position: absolute;
  right: var(--space-3);
  bottom: var(--space-3);
  width: 34px;
  height: 34px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: rgba(11, 9, 6, 0.32);
  border: 1.5px solid rgba(255, 255, 255, 0.92);
  color: var(--color-white);
  transition: transform var(--duration) var(--ease), background var(--duration) var(--ease);
}
.connect-card-arrow:hover,
.connect-card-arrow:focus-visible {
  background: rgba(11, 9, 6, 0.5);
  transform: scale(1.08);
}
.connect-card-arrow:focus-visible {
  outline: 2px solid var(--color-white);
  outline-offset: 2px;
}

/* Mobile marquee — hidden on desktop */
.connect-gallery-marquee { display: none; }

@media (max-width: 900px) {
  .connect-with-us-inner {
    flex-direction: column;
    /* Stretch (the flex default), not flex-start: this section's
       gallery must be allowed to size to the full row width so its
       own overflow:hidden can clip the marquee track — flex-start
       would let it shrink-to-fit the track's full max-content width
       instead and push the page into horizontal scroll. */
    align-items: stretch;
    gap: var(--space-6);
  }
  .connect-with-us-content { max-width: none; }

  .connect-gallery-grid { display: none; }
  .connect-gallery-marquee {
    display: block;
    width: 100%;
    overflow: hidden;
  }
  .connect-gallery-track {
    display: flex;
    width: max-content;
    /* Slow, calm, continuous — per direct instruction ("no bounce,
       no sudden jumps"). Same seamless two-groups technique as the
       Featured By section's mobile marquee and the sitewide
       "Wear · Breathe · Reset" marquee. */
    animation: connect-gallery-scroll 32s linear infinite;
  }
  .connect-gallery-marquee-group {
    display: flex;
    flex-shrink: 0;
    gap: var(--space-5);
    padding-right: var(--space-5);
  }
  .connect-gallery-marquee-item {
    position: relative;
    display: block;
    flex-shrink: 0;
  }
  .connect-gallery-marquee-item img {
    display: block;
    width: 220px;
    aspect-ratio: 941 / 1672;
    object-fit: cover;
    border-radius: var(--radius-md);
  }
}
@keyframes connect-gallery-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
@media (max-width: 900px) and (prefers-reduced-motion: reduce) {
  .connect-gallery-track { animation: none; }
}

/* ==========================================================================
   SCIENCE PAGE — 9-section rebuild (NEW)
   Per the "MINDOFF™ — SCIENCE PAGE IMPLEMENTATION PROMPT" brief: the
   homepage is the enforced visual/design-system source of truth, so
   every rule below reuses the SAME shared primitives already defined
   above (.section / .section-alt / .section-narrow / .eyebrow /
   .section-heading-block / .btn* / .text-link / the --color-, --space-,
   --text- and --radius- custom-property tokens) rather than introducing
   a parallel visual language. Only section-scoped classes are new,
   prefixed .sci-* so they can never collide with any existing selector.
   Mobile breakpoint is 900px, matching the theme's own newest sections
   (science-calm, featured-by, connect-with-us).

   BUG FIX (disclosed, found and fixed this update): this comment block
   used to abbreviate those token-prefix names using a wildcard-plus-
   slash shorthand between each one. A CSS comment ends at the very
   first star-then-slash character pair it finds, with no awareness
   that it's inside a comment's own prose — so that shorthand punctuation
   closed this comment far earlier than intended, and every ordinary CSS
   rule below it, starting with .sci-hero itself (position: relative;
   overflow: hidden — its containing-block role for the full-bleed
   photo), got swallowed into one giant invalid selector and silently
   dropped by the browser. Concretely, this meant .sci-hero-media's
   absolute positioning had no positioned ancestor to size against, so
   it escaped to the viewport's top-left corner, covering the sitewide
   announcement bar and nav with the hero photo — seen as a blank,
   missing announcement bar on the Science page. The token-prefix list
   above is now written as plain comma-separated names with no
   punctuation that could be mistaken for a comment terminator, and this
   was verified two ways: a standalone strict CSS parse confirms
   .sci-hero now parses as its own real rule, and a rendered-page check
   confirms the announcement bar is visible again.
   ========================================================================== */

/* ---- 01. Hero -------------------------------------------------------- */
.sci-hero {
  position: relative;
  overflow: hidden;
  padding: 0;
  min-height: 520px;
}
.sci-hero-media { position: absolute; inset: 0; }
.sci-hero-photo { width: 100%; height: 100%; object-fit: cover; object-position: 65% center; }
.sci-hero-inner {
  position: relative;
  z-index: 1;
  min-height: 520px;
  display: flex;
  align-items: center;
}
.sci-hero-content {
  max-width: 460px;
  padding: var(--space-8) var(--space-6) var(--space-8) 0;
}
/* BACKGROUND REMOVED (disclosed): the soft white wash that used to sit
   behind this text is removed per direct instruction; a text-shadow is
   used instead purely for legibility against the photo.
   COLOR UPDATED (disclosed, this update): the previous photo here was
   light/warm-toned, so dark ink text with a soft white glow read
   clearly. The new hero photo supplied this update is a predominantly
   black background with an orange wave — dark text would no longer be
   legible against it, so the heading is now white with a dark shadow
   instead. This rule only ever serves this one hero photo (there is no
   other caller of .sci-hero-content), so updating it in place — rather
   than adding a new class — doesn't affect anything else. */
.sci-hero-content h1 {
  font-size: var(--text-3xl);
  margin: 0 0 var(--space-4);
  color: var(--color-white);
  text-shadow: 0 1px 24px rgba(0, 0, 0, 0.55), 0 1px 3px rgba(0, 0, 0, 0.4);
}

/* ---- 02. The Principle ------------------------------------------------ */
.sci-principle-grid {
  display: grid;
  gap: var(--space-7);
  align-items: center;
}
.sci-principle-visual { position: relative; }
.sci-principle-visual img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  object-position: 60% 30%;
  border-radius: var(--radius-md);
}
.sci-breath-wave {
  position: absolute;
  right: var(--space-4);
  bottom: var(--space-4);
  background: rgba(11,9,6,0.32);
  border-radius: var(--radius-sm);
  padding: 6px 10px;
}
.sci-principle-text h2 { font-size: var(--text-2xl); margin: 0 0 var(--space-4); }
.sci-principle-text p { color: var(--color-gray-800); line-height: 1.6; max-width: 48ch; }

/* ---- 03. How MindOFF Works (mechanism flow) --------------------------- */
.sci-mechanism-flow { position: relative; padding-top: var(--space-6); }
.sci-mechanism-wave { display: block; width: 100%; height: 40px; margin-bottom: var(--space-3); }
.sci-mechanism-stages {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-6) var(--space-5);
  margin: 0 0 var(--space-7);
}
.sci-mechanism-stage { display: flex; flex-direction: column; gap: 2px; }
.sci-mechanism-dot {
  width: 10px; height: 10px; border-radius: 50%;
  background: var(--color-orange);
  margin-bottom: var(--space-2);
}
.sci-mechanism-number {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  letter-spacing: 0.04em;
}
.sci-mechanism-label {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--text-lg);
  color: var(--color-ink);
}
.sci-mechanism-desc { color: var(--color-gray-800); font-size: var(--text-sm); line-height: 1.5; }
.sci-mechanism-device {
  display: block;
  margin-inline: auto;
  width: 100%;
  max-width: 360px;
  border-radius: var(--radius-md);
}

/* ---- 04. Why Breathing? ------------------------------------------------ */
.sci-why-grid {
  display: grid;
  gap: var(--space-7);
  align-items: center;
}
.sci-why-text h2 { font-size: var(--text-2xl); margin: 0 0 var(--space-4); }
.sci-why-text p { color: var(--color-gray-800); line-height: 1.6; max-width: 48ch; }
.sci-disclaimer { font-size: var(--text-sm); color: var(--color-gray-600); }
.sci-why-visual { position: relative; }
.sci-why-visual img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  border-radius: var(--radius-md);
}
.sci-breath-wave--corner { position: absolute; left: var(--space-4); top: var(--space-4); background: none; padding: 0; }

/* ---- 05. Real People. Real Experiences. -------------------------------- */
.sci-real-groups {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--space-6);
  margin: 0 0 var(--space-6);
}
.sci-real-group {
  background: var(--color-white);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  overflow: hidden;
  padding-bottom: var(--space-5);
}
.sci-real-group-photo { aspect-ratio: 4 / 3; overflow: hidden; }
.sci-real-group-photo img { width: 100%; height: 100%; object-fit: cover; }
.sci-real-group h3 { margin: var(--space-4) var(--space-4) var(--space-2); font-size: var(--text-lg); }
.sci-real-group-note { margin: 0 var(--space-4); color: var(--color-gray-600); font-size: var(--text-sm); font-style: italic; }
.sci-real-disclaimer { color: var(--color-gray-600); font-size: var(--text-sm); max-width: 60ch; }

/* ---- 06. The Research --------------------------------------------------- */
.sci-research-list { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--color-gray-200); }
.sci-research-row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-3);
  padding: var(--space-5) 0;
  border-bottom: 1px solid var(--color-gray-200);
}
.sci-research-row-text { display: flex; flex-direction: column; gap: 4px; max-width: 46ch; }
.sci-research-topic { font-family: var(--font-display); font-weight: 600; color: var(--color-ink); }
.sci-research-title { color: var(--color-gray-600); font-size: var(--text-sm); font-style: italic; }
.sci-research-note { color: var(--color-gray-800); font-size: var(--text-sm); }
.sci-research-source { color: var(--color-gray-600); font-size: 0.8rem; }
.sci-research-link { margin-top: 0; flex-shrink: 0; }
.sci-research-link[data-pending-research-link] { opacity: 0.55; cursor: default; pointer-events: none; }

/* ---- 07. Technology + Patent/IP ------------------------------------------ */
.sci-tech-grid { display: grid; gap: var(--space-7); align-items: center; }
.sci-tech-visual { position: relative; }
.sci-tech-visual img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; border-radius: var(--radius-md); }
.sci-tech-corner { position: absolute; width: 28px; height: 28px; border: 1.5px solid rgba(255,255,255,0.6); opacity: 0.8; }
.sci-tech-corner--tl { top: var(--space-4); left: var(--space-4); border-right: none; border-bottom: none; }
.sci-tech-corner--br { bottom: var(--space-4); right: var(--space-4); border-left: none; border-top: none; }
.sci-tech-text h2 { font-size: var(--text-2xl); margin: 0 0 var(--space-4); }
.sci-tech-flow {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  list-style: none;
  margin: 0 0 var(--space-6);
  padding: 0;
}
.sci-tech-flow li {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  background: var(--color-white);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-pill);
  padding: 0.4rem 0.9rem;
}
.sci-tech-flow li:not(:last-child)::after { content: '→'; margin-left: var(--space-2); color: var(--color-gray-400); }
.sci-tech-patent-block { border-top: 1px solid var(--color-gray-200); padding-top: var(--space-5); }
.sci-tech-patent-block h3 { font-size: var(--text-base); margin: 0 0 var(--space-2); color: var(--color-orange-dark); }
.sci-tech-patent-block p { color: var(--color-gray-800); line-height: 1.6; max-width: 48ch; margin: 0 0 var(--space-2); }
.sci-tech-patent-number { color: var(--color-gray-600); font-size: var(--text-sm); font-style: italic; }

/* ---- 08. Final Trust Strip ------------------------------------------------ */
.sci-trust-strip-row {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-6);
  list-style: none;
  margin: 0;
  padding: var(--space-6) 0 0;
  border-top: 1px solid var(--color-gray-200);
}
.sci-trust-strip-item { display: flex; flex-direction: column; gap: 4px; }
.sci-trust-strip-label {
  font-family: var(--font-display);
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  font-size: var(--text-sm);
  color: var(--color-orange-dark);
}
.sci-trust-strip-desc { color: var(--color-gray-800); font-size: var(--text-sm); line-height: 1.5; }

/* ---- 09. Final CTA ---------------------------------------------------------- */
.sci-final-cta-grid { display: grid; gap: var(--space-7); align-items: center; }
.sci-final-cta-text h2 { font-size: var(--text-2xl); margin: 0 0 var(--space-4); }
.sci-final-cta-text p { color: var(--color-gray-800); line-height: 1.6; max-width: 42ch; margin: 0 0 var(--space-6); }
.sci-final-cta-buttons { display: flex; flex-wrap: wrap; gap: var(--space-3); }
.sci-final-cta-visual img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; border-radius: var(--radius-md); }

/* =========================================================================
   SCIENCE PAGE REBUILD (NEW 6-section brief) — sections 02, 03, 04, 05, 06
   below. Sections "05. Real People" through "09. Final CTA" above are
   retired under this rebuild (superseded, not deleted — see
   page-science.php's doc-comment); their CSS is left in place untouched,
   per this project's standing practice.
   ========================================================================= */

/* ---- 03. Take Your Mind Check Test (was 02 — see page-science.php) ------- */
.sci-mindcheck-test { background: var(--color-gray-50); }
.sci-mindcheck-test-grid { display: grid; gap: var(--space-7); align-items: center; }
.sci-mindcheck-test-text p { color: var(--color-gray-800); line-height: 1.6; max-width: 46ch; }
.sci-mindcheck-test-buttons { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-top: var(--space-5); }
.sci-mindcheck-test-visual img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  border-radius: var(--radius-md);
}
/* "Curious about your mind?" merged in below the grid above (disclosed,
   this round — see science-mindcheck-test.php's doc-comment). Centered,
   light-background treatment (this section's own --color-gray-50, not
   mind-check-cta.php's dark forest-green band) with a thin top divider
   to separate it from the grid without a hard section break. New,
   page-scoped classes throughout — .mind-check-entry/.mind-check-badge
   (used on the Homepage) are untouched. */
.sci-mindcheck-curious {
  text-align: center;
  max-width: 640px;
  margin-inline: auto;
  padding-top: var(--space-7);
  margin-top: var(--space-7);
  border-top: 1px solid var(--color-gray-200);
}
.sci-mindcheck-curious-heading { margin: 0 0 var(--space-2); }
.sci-mindcheck-curious-text {
  color: var(--color-gray-800);
  margin: 0 0 var(--space-5);
}
.sci-mindcheck-curious-badges {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-5);
  list-style: none;
  margin: var(--space-5) 0 0;
  padding: 0;
}
.sci-mindcheck-curious-badge {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-gray-600);
}
.sci-mindcheck-curious-badge svg { width: 18px; height: 18px; color: var(--color-orange); flex-shrink: 0; }

/* ---- 03. MindOFF & Your Breathing ---------------------------------------- */
/* Reuses .section / .section-narrow / .section-heading-block / .eyebrow /
   .section-lede as-is — no new heading/copy treatment needed. */

/* ---- 04. Real People. Real Experiences. (Swiper reuse) ------------------- */
/* Reuses .social-proof-videos / .social-proof-swiper / .social-proof-video-*
   / .social-proof-nav* as-is (see template-parts/science-social-proof.php).
   Only the heading-block spacing is nudged to match the Homepage version's
   larger gap above the video row. */
.sci-social-proof-heading-block { margin-bottom: var(--space-8); max-width: 640px; }

/* ---- 05. The Research Behind The Idea (merged with the day-journey visual below, this round) ------------------------------------ */
.sci-research-flow {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--color-gray-600);
  letter-spacing: 0.01em;
}
.sci-research-emphasis {
  font-family: var(--font-display);
  font-size: var(--text-xl);
  color: var(--color-ink);
  margin-top: var(--space-6);
}
.sci-state-words {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-5);
  list-style: none;
  margin: var(--space-5) 0;
  padding: var(--space-4) 0;
  border-top: 1px solid var(--color-gray-200);
  border-bottom: 1px solid var(--color-gray-200);
}
.sci-state-words li {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-orange-dark);
}

/* ---- 06. Final CTA strip -------------------------------------------------- */
/* "Soft beige gradient" per direct instruction: same gradient FORMULA as
   mindoff_dfc_gradient_css() in template-parts/day-fit-cards.php (a soft
   radial highlight + diagonal linear gradient), built from this theme's
   own existing cream tokens instead of that section's orange preset. */
.sci-cta-strip {
  background:
    radial-gradient(135% 135% at 18% 12%, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 55%),
    linear-gradient(160deg, var(--color-cream) 0%, var(--color-cream-soft) 100%);
  text-align: center;
}
.sci-cta-strip-inner { max-width: 640px; margin-inline: auto; }
.sci-cta-strip-buttons {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-3);
  margin-top: var(--space-5);
}

/* ---- Responsive (shared, 900px) -------------------------------------------- */
@media (min-width: 900px) {
  .sci-mindcheck-test-grid { grid-template-columns: 1fr 1fr; }
  .sci-principle-grid { grid-template-columns: 1fr 1.1fr; }
  .sci-why-grid { grid-template-columns: 1.1fr 1fr; }
  .sci-why-grid .sci-why-visual { order: 2; }
  .sci-tech-grid { grid-template-columns: 1fr 1fr; }
  .sci-final-cta-grid { grid-template-columns: 1.1fr 1fr; }
  .sci-mechanism-stages { grid-template-columns: repeat(6, 1fr); }
  .sci-trust-strip-row { grid-template-columns: repeat(4, 1fr); }
}
@media (max-width: 899px) {
  .sci-hero { min-height: 0; }
  .sci-hero-media { position: relative; height: 340px; }
  .sci-hero-inner { min-height: 0; }
  .sci-hero-content { max-width: none; padding: var(--space-6) 0 0; background: none; }
  .sci-principle-grid, .sci-why-grid, .sci-tech-grid, .sci-final-cta-grid { grid-template-columns: 1fr; }
}

/* ---------------------------------------------------------------------
   "EXPERIENCE MINDOFF" — NEW homepage icon strip, inserted between the
   card-grid "How MindOFF Fits Into Your Day" section and "Featured By".
   See the doc-comment at the top of
   template-parts/experience-mindoff-strip.php for the full brief.

   Warm-neutral background reuses the theme's existing .section-alt
   (--color-cream-soft) rather than a new background treatment. No
   cards, no gradients: items sit directly on the background, separated
   by a thin hairline divider (left border on every item but the first)
   — the same divider convention already used elsewhere in this theme
   (e.g. the hero proof row / template-parts/benefit-strip.php), not a
   new visual language. Mobile: the row becomes a contained horizontal
   scroll strip (overflow-x on the list only, not the page) once six
   items no longer fit; ≥768px it lays out as one real row.
--------------------------------------------------------------------- */
.experience-mindoff-strip { padding-block: var(--space-8); }

.experience-mindoff-strip-heading-block {
  text-align: center;
  margin-bottom: var(--space-6);
}
.experience-mindoff-strip-heading-block h2 { margin: 0; }

.experience-mindoff-strip-list {
  display: flex;
  flex-wrap: nowrap;
  gap: var(--space-5);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  padding: 0 0 var(--space-2);
  margin: 0;
  list-style: none;
}
.experience-mindoff-strip-item {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: var(--space-3);
  min-width: 140px;
  padding-left: var(--space-4);
  border-left: 1px solid var(--color-gray-200);
}
.experience-mindoff-strip-item:first-child {
  padding-left: 0;
  border-left: none;
}
.experience-mindoff-strip-icon {
  width: 40px;
  height: 40px;
  object-fit: contain;
  flex-shrink: 0;
}
.experience-mindoff-strip-label {
  margin: 0;
  font-size: var(--text-sm);
  line-height: 1.4;
  color: var(--color-gray-800);
}
.experience-mindoff-strip-num {
  font-family: var(--font-display);
  font-weight: 600;
  color: var(--color-gray-600);
}
.experience-mindoff-strip-dash { color: var(--color-gray-400); }

/* ≥768px: enough width for all six items to lay out as one real row,
   no scrolling. */
@media (min-width: 768px) {
  .experience-mindoff-strip-list {
    flex-wrap: wrap;
    justify-content: center;
    overflow-x: visible;
    padding-bottom: 0;
  }
  .experience-mindoff-strip-item { min-width: 0; flex: 1 1 0; }
}
@media (min-width: 1024px) {
  .experience-mindoff-strip-list { gap: var(--space-6); }
}

/* ---------------------------------------------------------------------
   "FOR BUSINESS" NAV DROPDOWN — NEW
   Replaces "Blog" in the primary nav with a "For Business" trigger and
   a two-item dropdown (Business / Healthcare & Wellness), per direct
   instruction that the two options stay "horizontal" at every width.
   The trigger is a <button> (see functions.php mindoff_fallback_menu()
   and the matching JS in main.js) so opening it never fires the
   existing "close mobile nav on link click" handler. Mobile: an
   inline accordion-style reveal directly under the button, no new
   visual language (border/radius/hover reuse this theme's existing
   card and button conventions). Desktop: a small anchored panel below
   the trigger, opened by click (via .is-open, same JS) or by hover/
   keyboard-focus (CSS-only, for visitors who expect a hover menu) —
   whichever happens first.
--------------------------------------------------------------------- */
.nav-has-dropdown { position: relative; }

.nav-dropdown-trigger {
  display: block;
  width: 100%;
  text-align: left;
  background: transparent;
  border: none;
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 500;
  font-size: var(--text-xl);
  padding: var(--space-3) 0;
  border-bottom: 1px solid var(--color-gray-200);
  color: var(--color-ink);
}
.nav-has-dropdown.current-menu-item .nav-dropdown-trigger {
  border-bottom-color: var(--color-orange);
}

.nav-dropdown {
  display: none;
  flex-direction: row; /* kept horizontal at every width, per direct instruction */
  gap: var(--space-3);
  padding: var(--space-3) 0 var(--space-4);
}
.nav-has-dropdown.is-open .nav-dropdown { display: flex; }

.nav-dropdown-card {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  text-align: center;
  padding: var(--space-4) var(--space-3);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
  font-weight: 500;
  transition: border-color var(--duration) var(--ease), color var(--duration) var(--ease);
}
.nav-dropdown-card:hover,
.nav-dropdown-card.is-active {
  border-color: var(--color-orange);
  color: var(--color-orange-dark);
}
.nav-dropdown-card img {
  width: 100%;
  border-radius: var(--radius-sm);
  margin-bottom: var(--space-2);
}

@media (min-width: 1024px) {
  .nav-dropdown-trigger {
    width: auto;
    border-bottom: none;
    padding: 0 0 4px;
    font-size: var(--text-sm);
  }
  .nav-has-dropdown.current-menu-item .nav-dropdown-trigger,
  .nav-has-dropdown:hover .nav-dropdown-trigger {
    border-bottom: 2px solid var(--color-orange);
  }
  .nav-dropdown {
    display: flex; /* always in the layout on desktop — opacity/visibility drive the reveal, not display, so the fade transition works */
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translateX(-50%) translateY(4px);
    background: var(--color-white);
    border: 1px solid var(--color-gray-200);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-soft);
    padding: var(--space-4);
    margin-top: var(--space-3);
    min-width: 380px;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity var(--duration) var(--ease), transform var(--duration) var(--ease);
  }
  .nav-has-dropdown.is-open .nav-dropdown,
  .nav-has-dropdown:hover .nav-dropdown,
  .nav-has-dropdown:focus-within .nav-dropdown {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transform: translateX(-50%) translateY(0);
  }
  .nav-dropdown-card { min-width: 160px; }
}

/* ---------------------------------------------------------------------
   BUTTON — .btn-outline-accent (NEW)
   Business/Healthcare "Call Now →". Follows .btn-secondary's exact
   visual grammar (transparent + bordered + inverts to a filled surface
   on hover) in orange instead of ink — no orange-outline button
   variant existed anywhere in this theme before this task. Uses
   --color-orange-dark (not the base --color-orange) for the resting
   text/border color, matching this project's own established
   AA-contrast rationale already documented above on .eyebrow. Not a
   new button system — same .btn base, same radius/padding/typography/
   hover-lift as every other button site-wide.
--------------------------------------------------------------------- */
.btn-outline-accent { background: transparent; color: var(--color-orange-dark); border-color: var(--color-orange-dark); }
.btn-outline-accent:hover { background: var(--color-orange-dark); color: var(--color-white); }

/* ---------------------------------------------------------------------
   BUSINESS / HEALTHCARE & WELLNESS — shared page components
   Every content section on both new pages is one of these alternating
   image/content rows, rendered by mindoff_biz_row() in
   inc/biz-pages.php from a small args array — one visual pattern
   reused 14+ times rather than 14 bespoke section designs. Mobile: the
   image always stacks above the content regardless of which side it's
   on at desktop width, since "left/right" isn't meaningful in a single
   column. ≥900px: becomes a real two-column row; .biz-row--image-right
   reverses which side the image sits on.
--------------------------------------------------------------------- */
.biz-row-grid {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
}
.biz-row-media { width: 100%; }
.biz-row-media img {
  width: 100%;
  height: auto;
  border-radius: var(--radius-md);
  aspect-ratio: 4 / 3;
  object-fit: cover;
}
.biz-row-content { width: 100%; }
.biz-row-buttons {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-5);
}

@media (min-width: 900px) {
  .biz-row-grid {
    flex-direction: row;
    align-items: center;
    gap: var(--space-8);
  }
  .biz-row-grid > * { flex: 1 1 0; min-width: 0; }
  .biz-row--image-right .biz-row-grid { flex-direction: row-reverse; }
}

/* Disclosed placeholder — appears only where a real supplied photo for
   that section hasn't arrived yet (see mindoff_biz_image() in
   inc/biz-pages.php). Deliberately non-photographic — a plain dashed
   box naming exactly what's needed — so it can never be mistaken for a
   real photo. The moment the real file exists at its expected path,
   this placeholder is replaced automatically with zero code changes. */
.biz-image-pending {
  width: 100%;
  aspect-ratio: 4 / 3;
  border-radius: var(--radius-md);
  border: 2px dashed var(--color-gray-400);
  background: var(--color-gray-50);
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: var(--space-5);
}
.biz-image-pending span {
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  max-width: 30ch;
}

/* Disclosed copy placeholder — marks a section's body paragraph as not
   yet the approved final wording (see mindoff_biz_row()'s 'copy_pending'
   arg), the same disclosure principle as .biz-image-pending above, just
   for text instead of a photo. Purely visual (italic + muted) — no
   layout change — so it's obvious in preview but doesn't distort the
   page. */
.biz-copy-pending {
  font-style: italic;
  color: var(--color-gray-600);
}

/* Business + Healthcare & Wellness final "Partner with MindOFF" CTA —
   plain centered pattern, no image/card/split layout, per direct
   instruction ("No image... No cards... No split layout... Everything
   must be CENTER ALIGNED"). UPDATE (3rd content update): given a soft
   cream-soft background + extra vertical padding for a more spacious,
   premium closing moment ("generous vertical whitespace... soft,
   premium background") — reuses this project's EXISTING alternating-
   section background token (--color-cream-soft, already used by
   .section-alt elsewhere) and existing --space-9 spacing token, not a
   new color or a new visual system. No decorative graphics/waves/icons
   added, per direct instruction. */
.biz-final-cta {
  text-align: center;
  background: var(--color-cream-soft);
  padding-block: var(--space-9);
}
.biz-final-cta .biz-row-buttons { justify-content: center; }

/* 3-step numbered list (Business Section 06 only) — same "numbered
   label, no icon" philosophy as .experience-mindoff-strip-num/-dash
   above, just laid out as a vertical list instead of a horizontal
   strip since it sits inside a text column here. */
.biz-steps-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin: var(--space-5) 0;
}
.biz-steps-item {
  display: flex;
  align-items: baseline;
  gap: var(--space-3);
}
.biz-steps-num {
  font-family: var(--font-display);
  font-weight: 600;
  color: var(--color-orange-dark);
  flex-shrink: 0;
}
.biz-steps-label { color: var(--color-gray-800); }
/* NOTE: Business Section 06 ("From One Session to a Program"), the only
   section that used this 3-step list, was retired in the content-update
   pass that replaced all section copy with the approved final wording —
   the new content has no step-list section. Left in place, unused,
   per this project's standing rule of never deleting superseded code;
   costs nothing since unused CSS rules don't render anything. */

/* Scannable "pill" tag list — used under a section's paragraph to list
   the specific use cases/programs/audiences that paragraph covers
   (e.g. "Employee Wellness Programs", "Schools", "Yoga Sessions").
   Added for the approved final-content pass: the supplied copy explicitly
   separates each section's paragraph from a list of short scannable
   items, instructing they render as "a scannable list/pills" rather than
   as additional headings or sub-copy. Plain text chips only — no icons,
   no extra wording added beyond the exact item text supplied. */
.biz-pill-list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin: var(--space-4) 0 0;
  padding: 0;
  list-style: none;
}
.biz-pill {
  display: inline-block;
  font-size: var(--text-sm);
  color: var(--color-gray-800);
  background: var(--color-gray-50);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-pill);
  padding: var(--space-1) var(--space-4);
  white-space: nowrap;
}

/* Standalone emphasis line that closes out a section (e.g. "Together,
   we can make a pause part of everyday life.") — supplied as its own
   short sentence separate from the main paragraph, so it gets a touch
   of visual weight rather than blending into body copy. No new color/
   type system: reuses the existing display font + ink color already
   used for headings elsewhere on this page. */
.biz-closing-line {
  font-family: var(--font-display);
  font-weight: 500;
  color: var(--color-ink);
  margin-top: var(--space-5);
}

/* ---------------------------------------------------------------------
   CONTENT-PAGE HERO (Business / Healthcare & Wellness)
   Headline-only hero (no supporting line, per direct instruction),
   reusing this theme's existing full-bleed photo-hero technique
   (.hero-photo-inner / .hero-photo-content / .hero-actions, all
   defined above under "6. HERO") with one addition: the background is
   2–3 rotating photos (a calm, slow crossfade — see
   assets/js/content-hero-swiper.js) instead of one static image.
   .content-hero-swiper reuses the already-vendored Swiper library
   (assets/vendor/swiper/) — its own bundled CSS handles slide
   positioning/fade, so only sizing/object-fit is added here. If fewer
   than two real photos exist yet, the template renders a single plain
   image (or, if none exist yet, a disclosed placeholder box) instead
   of a Swiper — see mindoff_biz_hero_media() in inc/biz-pages.php. */
.hero--content-photo { position: relative; overflow: hidden; padding: 0; min-height: 480px; }
.hero--content-photo .hero-photo-inner { min-height: 480px; }

.hero--content-photo .content-hero-swiper,
.hero--content-photo .hero-media-pending {
  /* Scoped under .hero--content-photo (two-class selector) rather than
     bare .content-hero-swiper — this element also carries Swiper's own
     "swiper" class, and swiper-bundle.min.css's bare ".swiper { position:
     relative }" rule has the same specificity as a bare
     ".content-hero-swiper" rule, so whichever stylesheet happened to be
     enqueued later would win the cascade and collapse this hero to 0
     height. The extra ancestor class guarantees this rule always wins,
     regardless of enqueue order. */
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}
.hero--content-photo .content-hero-swiper .swiper-wrapper,
.hero--content-photo .content-hero-swiper .swiper-slide {
  width: 100%;
  height: 100%;
}
.hero--content-photo .content-hero-swiper .hero-bg-photo {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.hero--content-photo .content-hero-swiper,
.hero--content-photo .hero-media-pending {
  z-index: 0;
}

/* Soft text-legibility scrim (left-to-right fade, text side only) —
   same technique and gradient values already used for the "How MindOFF
   Fits Into Your Day" day-journey photo slides (see .how-fits-slide::after
   above) — not a new visual language. Needed here because these
   supplied photos (unlike the Homepage's own hero photo, shot/cropped
   specifically for its overlaid text) don't have a naturally darker
   region behind the headline. */
.hero--content-photo::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  /* Slightly stronger/wider than .how-fits-slide's version (which sits
     behind short single-line captions) — this scrim needs to stay
     legible under a 3–4 line headline plus two buttons, across
     whichever of the rotating photos is showing, without knowing in
     advance what's behind them. */
  background: linear-gradient(100deg, rgba(11, 9, 6, 0.70) 0%, rgba(11, 9, 6, 0.42) 48%, rgba(11, 9, 6, 0) 75%);
  pointer-events: none;
}
.hero--content-photo > .container { position: relative; z-index: 2; }

/* White text over the scrim (same "dark scrim -> white text" pairing
   as .how-fits-slide-tagline/-copy) instead of the Homepage hero's
   ink-text-with-white-glow treatment, which assumes a bright photo. */
.hero--content-photo .hero-photo-content h1 {
  color: var(--color-white);
  text-shadow: none;
}

.hero-media-pending {
  background: var(--color-gray-50);
  border: 2px dashed var(--color-gray-400);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-6);
}
.hero-media-pending span {
  font-size: var(--text-base);
  color: var(--color-gray-600);
  max-width: 36ch;
  text-align: center;
}

@media (min-width: 768px) {
  .hero--content-photo { min-height: 620px; }
  .hero--content-photo .hero-photo-inner { min-height: 620px; }
}

/* Buttons directly inside this hero (no separate .hero-actions wrapper
   needed — mindoff_biz_buttons() already renders its own .biz-row-buttons
   flex row) get the same white resting-state accent-button text as the
   Homepage's photo hero (.hero-actions .btn-accent, defined above under
   "6. HERO") since both sit on a photo background. */
.hero--content-photo .biz-row-buttons { margin-top: var(--space-6); }
.hero--content-photo .btn-accent { color: var(--color-white); }
.hero--content-photo .btn-accent:hover { color: var(--color-white); }

/* ---------------------------------------------------------------------
   ABOUT PAGE (complete rebuild) — two scoped, page-specific additions
   only; every other class used on this page (hero--content-photo,
   featured-by-*, awarded-by-*, benefit-grid/benefit-card, image
   placeholders, section/eyebrow/section-lede/section-narrow) is
   existing, unmodified, shared design-system CSS.
--------------------------------------------------------------------- */

/* Hero mobile-layout fix (real bug found during verification): this
   page's hero is the first place mindoff_biz_hero_media() is called
   with only ONE photo, which makes it output a bare
   <img class="hero-bg-photo"> with no wrapper (Business/Healthcare
   always supply 3 photos, so they always take that function's OTHER
   branch — the .content-hero-swiper-wrapped path — and never hit this).
   The sitewide mobile rule under "6. HERO" (@media max-width:767px,
   bare ".hero-bg-photo") was written only for the Homepage's own
   .hero--photo mobile redesign (photo moves below the text as a static
   in-flow block). Because it targets the bare class rather than
   ".hero--photo .hero-bg-photo", it was also silently catching this
   page's unwrapped hero image at mobile widths, knocking it out of its
   full-bleed absolutely-positioned background role — the photo shrank
   to a small static block and the headline was left sitting on blank
   white space under the scrim instead of on the photo. This restores
   the full-bleed background behavior specifically within
   .hero--content-photo (a direct-child selector, so it only ever
   matches this unwrapped-single-photo case, not the swiper-wrapped
   case those rules already handle) — Homepage/.hero--photo and the
   Business/Healthcare swiper heroes are completely unaffected either
   way. object-position is also tuned for this specific photo (the
   sitewide default of 70% center, meant for the Homepage's own photo,
   put the headline over this photo's brightest area at mobile's much
   narrower crop) so the calmer left side of the photo stays behind the
   text; desktop has zero horizontal crop headroom for this photo either
   way, so this has no visible effect there. */
.about-hero .hero-bg-photo { object-position: 35% center; }
@media (max-width: 767px) {
  .hero--content-photo > .hero-bg-photo {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    aspect-ratio: auto;
    object-fit: cover;
  }
}

/* One very large, full-width, single-photo frame — used twice on this
   page (section 04's founder photo, section 07's closing device photo).
   Reuses mindoff_biz_image()'s existing output (a bare <img>, or the
   sitewide .biz-image-pending placeholder when no file exists yet —
   see inc/biz-pages.php) but gives it real sizing here, since outside
   its usual .biz-row-media wrapper a bare <img> has none. A 16:9 frame
   reads as "very large/cinematic," wider than the 4:3 crop used
   throughout the Business/Healthcare rows, without introducing a new
   placeholder visual language — .biz-image-pending's own dashed-box
   styling is kept, just reframed taller via this wrapper. */
.about-large-photo { width: 100%; }
.about-large-photo img {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border-radius: var(--radius-md);
  display: block;
}
.about-large-photo .biz-image-pending { aspect-ratio: 16 / 9; }

/* Section 06 ("What We're Giving You") reuses the existing
   .benefit-grid/.benefit-card component as-is, but these cards carry a
   heading AND a supporting paragraph (the Homepage's own use of this
   component, template-parts/benefits.php, only ever has a heading) so
   they need heading-to-paragraph spacing. Scoped to .about-giving-cards
   specifically — the shared .benefit-card h3 rule itself is left at
   margin:0, so template-parts/benefits.php and every other page using
   .benefit-card are completely unaffected. */
.about-giving-cards .benefit-card h3 { margin-bottom: var(--space-3); }
.about-giving-cards .benefit-card p:last-child { margin-bottom: 0; }

/* Featured By — About page static row (disclosed, this update): a
   parallel set of classes to .awarded-by-row/-heading/-logos/-item/-logo
   above, with the same values (96px logos, no grayscale, same gap
   tokens), per direct instruction that this section "should look like
   awarded by only." Kept as its own .featured-by-static-* set rather
   than reusing .awarded-by-* (so Awarded By's CSS is never touched) or
   the marquee's .featured-by-row/.featured-by-logo (so the Homepage
   marquee, defined above under "Featured By — static logo strip", is
   completely unaffected — it still gets its own 110px/grayscale/marquee
   treatment everywhere except the About page). */
.featured-by-static-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  column-gap: var(--space-9);
  row-gap: var(--space-6);
}
.featured-by-static-heading {
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 500;
  font-size: var(--text-lg);
  letter-spacing: 0.02em;
  color: var(--color-ink);
  margin: 0;
  white-space: nowrap;
}
.featured-by-static-logos {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-9);
  margin: 0;
  padding: 0;
  list-style: none;
}
.featured-by-static-item { display: flex; align-items: center; }
.featured-by-static-logo {
  height: 96px;
  width: auto;
  max-width: 260px;
  object-fit: contain;
}
@media (max-width: 767px) {
  .featured-by-static-row { flex-direction: column; gap: var(--space-5); }
  .featured-by-static-logos { gap: var(--space-6); }
  .featured-by-static-logo { height: 76px; }
}

/* Meet the Founder — boxed pull-quote (disclosed, this update). See the
   judgment-call notes on page-about.php's section 03 for the color and
   attribution-spelling decisions. */
.about-founder-quote-box {
  position: relative;
  overflow: hidden;
  background: var(--color-orange-dark);
  border-radius: var(--radius-lg);
  padding: var(--space-7) var(--space-6);
  margin-top: var(--space-6);
  text-align: left;
}
.about-founder-quote-mark {
  position: absolute;
  top: -0.35em;
  left: var(--space-5);
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 7rem;
  line-height: 1;
  color: var(--color-white);
  opacity: 0.18;
  pointer-events: none;
  user-select: none;
}
.about-founder-quote-text {
  position: relative;
  color: var(--color-white);
  font-size: var(--text-xl);
  margin: 0 0 var(--space-4);
}
.about-founder-quote-attribution {
  position: relative;
  color: var(--color-cream);
  font-weight: 500;
  margin: 0;
}
@media (max-width: 767px) {
  .about-founder-quote-box { padding: var(--space-6) var(--space-5); text-align: center; }
  .about-founder-quote-mark { left: 50%; transform: translateX(-50%); font-size: 5.5rem; }
}

/* "What We're Giving You" cards — gradient background + icon badge
   (disclosed, this update). Scoped entirely to .about-giving-cards, so
   the shared .benefit-card/.benefit-icon rules (used by the orphaned
   template-parts/benefits.php) are untouched. Structure (icon circle,
   then heading, then paragraph) follows the reference screenshot's
   layout, adapted to this page's light beige/white palette rather than
   the reference's purple, per direct instruction. */
.about-giving-cards.benefit-grid { gap: var(--space-5); }
.about-giving-cards .benefit-card {
  background: linear-gradient(180deg, var(--color-blush) 0%, var(--color-cream-soft) 100%);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-lg);
  padding: var(--space-6) var(--space-5);
}
.about-giving-cards .benefit-icon {
  width: 64px;
  height: 64px;
  border-radius: var(--radius-pill);
  background: var(--color-white);
  color: var(--color-orange);
  box-shadow: var(--shadow-soft);
  margin-bottom: var(--space-5);
}
.about-giving-cards .benefit-icon svg { width: 28px; height: 28px; }

/* ==========================================================================
   PRIVACY POLICY PAGE (NEW)
   Deliberately minimal — reuses existing primitives only (.section /
   .section-alt / .section-narrow / .container / .section-lede / the
   base h1/h2/p / the existing .faq-list bullet style / .btn.btn-primary)
   per direct instruction not to introduce a new visual style, cards,
   gradients or illustrations for this page. The two rules below are
   the only new CSS this page needed: a small dated line under the
   intro, and vertical rhythm between the page's stacked h2 sections
   (which the shared .section-narrow container doesn't provide on its
   own, since every other page using it has just one or two blocks,
   not nine in a row).
   ========================================================================== */
.privacy-updated {
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  margin-top: calc(-1 * var(--space-2));
}
.privacy-block { margin-bottom: var(--space-8); }
/* MOBILE FIX (this round, disclosed): the Replacement Policy page's
   closing CTA ("Request a Replacement on WhatsApp →") is longer than
   the Privacy Policy page's own CTA ("Contact MindOFF on WhatsApp →")
   and, combined with the base .btn rule's site-wide `white-space:
   nowrap`, was overflowing the 390px mobile viewport (verified via a
   horizontal-overflow check after this round's content change).
   Scoped to .privacy-block .btn only — shared by both the Privacy and
   Replacement Policy pages' closing CTAs — so no other button anywhere
   else on the site is affected, and the desktop appearance of these
   two buttons is unchanged (this rule only applies under 480px). */
@media (max-width: 480px) {
  .privacy-block .btn {
    white-space: normal;
    text-align: center;
  }
}

/* ==========================================================================
   PRESS PAGE (NEW)
   Every rule below is scoped to a new .press-* class, so nothing here
   touches any shared component (.benefit-grid, .biz-image-pending,
   .mind-check-entry, etc. are all referenced elsewhere but never
   modified). Colors, radii, shadows, spacing tokens and the button
   system are all reused as-is from :root above — no new design tokens
   were added for this page.
   ========================================================================== */

/* Featured Media grid (Section 05) — 3-up on desktop, matching the
   existing .benefit-grid breakpoint rhythm (1-col mobile → 3-col
   desktop) rather than inventing a new grid system. */
.press-media-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
}

/* One clickable card — whole element is the link (mindoff_press_media_card()
   renders an <a> when a URL exists, a <div> when it doesn't). Same
   white/border/radius/shadow-on-hover language as .benefit-card. */
.press-media-card {
  display: flex;
  flex-direction: column;
  background: var(--color-white);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  transition: box-shadow var(--duration) var(--ease), transform var(--duration) var(--ease);
}
a.press-media-card:hover {
  box-shadow: var(--shadow-soft);
  transform: translateY(-2px);
}
.press-media-card[aria-disabled="true"] {
  cursor: default;
  opacity: 0.72;
}
.press-media-card-thumb {
  display: block;
  aspect-ratio: 4 / 3;
  background: var(--color-gray-50);
  overflow: hidden;
}
.press-media-card-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.press-media-card-thumb .biz-image-pending { border-radius: 0; border-width: 0 0 1px 0; aspect-ratio: auto; height: 100%; }
.press-media-card-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding: var(--space-4) var(--space-5) var(--space-5);
}
.press-media-card-label {
  font-family: 'Inter', system-ui, sans-serif;
  font-size: var(--text-sm);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-gray-600);
}
.press-media-card-title {
  font-family: var(--font-display);
  font-size: var(--text-lg);
  color: var(--color-ink);
}
.press-media-card-cta {
  margin-top: var(--space-2);
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 500;
  color: var(--color-orange);
}
.press-media-card[aria-disabled="true"] .press-media-card-cta { color: var(--color-gray-400); }

/* Single podcast card (Section 07–08) — same card, just centered and
   capped to a comfortable reading width rather than stretched full-row. */
.press-single-media-wrap { max-width: 420px; }
.press-media-card--single { margin-inline: auto; }

/* Live Events (Section 09) — exactly 3 cards, one row on desktop, per
   direct instruction. Image + label only, no card chrome (no border/
   shadow/background) since the brief asks for image + small label
   only, nothing else. */
.press-events-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  list-style: none;
  padding: 0;
  margin: 0;
}
.press-event-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  text-align: center;
}
.press-event-card-image {
  display: block;
  aspect-ratio: 4 / 5;
  border-radius: var(--radius-md);
  overflow: hidden;
}
.press-event-card-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.press-event-card-image .biz-image-pending { height: 100%; aspect-ratio: auto; }
.press-event-card-label {
  font-family: 'Inter', system-ui, sans-serif;
  font-size: var(--text-sm);
  color: var(--color-gray-600);
}

/* Speaking Opportunity CTA (Section 10) — full-width black section, per
   direct instruction. --color-ink is this theme's existing near-black
   brand token (already used for body text/logo — not a new color).
   .btn-accent (existing sitewide orange button) already has sufficient
   contrast on this dark background without any button-specific override. */
.press-speaking-cta {
  background: var(--color-ink);
  color: var(--color-white);
}
.press-speaking-cta h2 { color: var(--color-white); }
.press-speaking-cta p { color: var(--color-gray-200); margin-bottom: var(--space-5); }

@media (min-width: 900px) {
  .press-media-grid { grid-template-columns: repeat(3, 1fr); }
  .press-events-grid { grid-template-columns: repeat(3, 1fr); }
}
.privacy-block:last-child { margin-bottom: 0; }

/* ---------------------------------------------------------------------
   HOMEPAGE "MINDOFF™" PRODUCT PURCHASE SECTION (NEW — this task)
   ---------------------------------------------------------------------
   Homepage only (see template-parts/homepage-buy-mindoff.php). Built
   entirely from this theme's existing tokens (--color-orange/--color-
   ink/--color-cream/--color-white/--color-gray-*, --space-*, --radius-*,
   --shadow-soft) and existing type system (h2 default for the product
   name, --font-body for description/detail text, 'Inter' for the CTA
   via the existing .btn class) — no new colors, fonts, or shadow values
   introduced. Structural reference only was a supplied Apollo/
   Apolloneura product-page screenshot (left image gallery, right name/
   price/CTA/details) — no Apollo branding, colors or copy used.
--------------------------------------------------------------------- */
.buy-mindoff {
  background: var(--color-white);
  padding-block: var(--space-8);
}
.buy-mindoff-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
}

/* --- Gallery (left) --------------------------------------------- */
.buy-mindoff-gallery {
  position: relative;
  /* ROOT-CAUSE FIX (disclosed, caught in render-verification): the real
     cause of the runaway sizing bug below was this element's default
     grid-item `min-width: auto`, which factors in a child's own
     intrinsic size — including .buy-mindoff-gallery-main-frame's
     percentage-based padding-bottom aspect-ratio box, which itself
     depends on THIS element's width. That is a genuine circular
     dependency, and this specific browser/engine resolved it by
     inflating both to a huge degenerate value instead of erroring out.
     `min-width: 0` is the standard, well-documented fix for exactly
     this class of "aspect-ratio box inside a grid/flex item" issue —
     it removes the content-based floor so the grid's own 5fr/6fr track
     sizing governs this column's width instead. */
  min-width: 0;
}
/* BUG FIX (disclosed, caught in render-verification): the CSS
   `aspect-ratio` property on the Swiper container itself triggered a
   circular-sizing bug in testing (Swiper measured a runaway width for
   its own container during init and propagated it into an inline slide
   width — the whole gallery rendered as an invisible ~33-million-pixel
   box). Replaced with the classic, non-circular "aspect-ratio box"
   technique: .buy-mindoff-gallery-main-frame's height comes purely from
   ITS OWN width via `padding-bottom: 100%` (always resolved against the
   parent's already-known width, never against an indefinite Swiper/flex
   descendant), and the actual Swiper container is absolutely positioned
   to fill that frame. */
.buy-mindoff-gallery-main-frame {
  position: relative;
  width: 100%;
  padding-bottom: 100%; /* 1:1 aspect ratio */
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--color-cream-soft);
}
/* SECOND BUG FIX (disclosed, caught in render-verification): the
   vendored Swiper stylesheet's own `.swiper { position: relative }`
   base rule has the exact same specificity (one class) as the rule
   below, and — because it's enqueued after this theme's stylesheet —
   wins the cascade tie, silently turning this element back into a
   normal in-flow box. That put its own 480px height back into the
   document flow on top of the frame's 480px padding-bottom, doubling
   the frame's total height and leaving a visible blank gap under the
   product photo (exactly what showed up in the screenshot). The
   selector below is written as two classes (`.buy-mindoff-gallery-
   main.swiper`) purely to outrank `.swiper` on specificity, so this
   positioning holds regardless of stylesheet load order. */
.buy-mindoff-gallery-main.swiper {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}
.buy-mindoff-gallery-main .swiper-slide img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.buy-mindoff-gallery-nav {
  position: absolute;
  top: calc(50% - 20px);
  z-index: 2;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--color-gray-200);
  background: var(--color-white);
  color: var(--color-ink);
  box-shadow: var(--shadow-soft);
  transition: background var(--duration) var(--ease), transform var(--duration) var(--ease);
}
.buy-mindoff-gallery-nav:hover { background: var(--color-cream); }
.buy-mindoff-gallery-nav:active { transform: scale(0.94); }
.buy-mindoff-gallery-nav.swiper-button-disabled { opacity: 0.35; pointer-events: none; }
.buy-mindoff-gallery-prev { left: var(--space-3); }
.buy-mindoff-gallery-next { right: var(--space-3); }

/* Same fix as .buy-mindoff-gallery-main above: a definite height lives
   on the Swiper container itself (a plain fixed height here, since this
   row's width is intentionally fluid via slidesPerView) rather than on
   the deeply-nested <img> via aspect-ratio, so there is no percentage-
   height-vs-flex circularity. */
.buy-mindoff-gallery-thumbs {
  margin-top: var(--space-4);
  height: 84px;
}
.buy-mindoff-gallery-thumbs .swiper-slide {
  cursor: pointer;
  border-radius: var(--radius-sm);
  overflow: hidden;
  border: 2px solid transparent;
  opacity: 0.7;
  transition: opacity var(--duration) var(--ease), border-color var(--duration) var(--ease);
}
.buy-mindoff-gallery-thumbs .swiper-slide img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.buy-mindoff-gallery-thumbs .swiper-slide:hover { opacity: 1; }
.buy-mindoff-gallery-thumbs .swiper-slide-thumb-active {
  opacity: 1;
  border-color: var(--color-orange);
}

/* --- Product info (right) ---------------------------------------- */
.buy-mindoff-info {
  display: flex;
  flex-direction: column;
  min-width: 0; /* same standard grid-item safety fix as .buy-mindoff-gallery above */
}
.buy-mindoff-name {
  margin-bottom: var(--space-2);
}
.buy-mindoff-price {
  font-family: var(--font-display);
  font-size: var(--text-2xl);
  color: var(--color-ink);
  margin: 0 0 var(--space-5);
}
.buy-mindoff-cta {
  align-self: flex-start;
  margin-bottom: var(--space-4);
}
.buy-mindoff-shipping-line {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--color-gray-800);
  margin: 0 0 var(--space-6);
}
.buy-mindoff-shipping-line svg { color: var(--color-orange); flex-shrink: 0; }

.buy-mindoff-description {
  font-size: var(--text-base);
  line-height: 1.7;
  color: var(--color-gray-800);
  margin: 0 0 var(--space-6);
  max-width: 56ch;
}
/* Two verbatim-supplied paragraphs (this update) — see the template
   part's own doc-comment. Tighter gap between them than the block's
   own trailing margin before the details list below. */
.buy-mindoff-description p { margin: 0 0 var(--space-3); }
.buy-mindoff-description p:last-child { margin-bottom: 0; }

/* THIS UPDATE (disclosed): per direct instruction ("remove icons from
   product description, keep simple bullet points"), this list dropped
   its icon+text grid layout for a plain single-column bulleted list.
   A small solid-circle bullet (::before, drawn in the existing orange
   accent) is used instead of the browser's default disc marker — same
   "simple bullet point" idea as .faq-list's `list-style: disc`
   elsewhere in this theme, just drawn to match this section's own
   orange/white palette rather than an unstyled black dot. */
.buy-mindoff-details {
  list-style: none;
  margin: 0 0 var(--space-6);
  padding: 0;
}
.buy-mindoff-detail {
  position: relative;
  padding-left: var(--space-4);
  font-size: var(--text-sm);
  color: var(--color-gray-800);
  margin-bottom: var(--space-2);
}
.buy-mindoff-detail:last-child { margin-bottom: 0; }
.buy-mindoff-detail::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.55em;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--color-orange);
}

@media (min-width: 1024px) {
  .buy-mindoff-grid {
    grid-template-columns: 5fr 6fr;
    gap: var(--space-9);
    align-items: start;
  }
  .buy-mindoff-gallery-thumbs { height: 96px; }
}

/* =========================================================================
   SCIENCE PAGE REDESIGN (this task) — Sections 02–09
   "SCIENCE PAGE — FINAL IMPLEMENTATION BLUEPRINT". Section 01 (hero)
   reuses the existing .sci-hero-* rules already defined above (photo
   hero pattern) — only its copy/photo changed, not its CSS. Everything
   below is new, scoped to its own section prefix, and does not modify
   any existing rule.
========================================================================= */

/* Small accessibility utility (standard WP-style hidden-but-readable
   text) — added here since this is the first place in the theme that
   needed a visually-hidden heading (the sequence section below has no
   visible "The MindOFF Experience" heading per the brief, but still
   needs one for screen readers/document outline). */
.screen-reader-text {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* -------------------------------------------------------------------
   Section 02 — "Breathing / Inner Rhythm"
   REBUILT (correction pass): continuously moving semicircular arc
   marquee, replacing the previous static circular arrangement. See
   template-parts/science-inner-rhythm.php's own doc-comment for the
   full explanation of how the rotating-ring + counter-rotating-photo
   technique works and why it needs no JS and no duplicated photos to
   loop seamlessly.
------------------------------------------------------------------- */
.sci-rhythm-inner {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
}

/* The "porthole": fixed height, clips the ring so only its top arc is
   ever visible. Sizes scale continuously with clamp() rather than
   switching per breakpoint, so tablet/mobile keep the same arc concept
   at a smaller scale instead of being restructured. */
.sci-rhythm-arc {
  position: relative;
  width: 100%;
  height: clamp(180px, 26vw, 360px);
  overflow: hidden;
  --sci-radius: clamp(150px, 30vw, 560px);
  --sci-top-pad: clamp(24px, 4vw, 60px);
}

.sci-rhythm-ring {
  position: absolute;
  left: 50%;
  width: calc(var(--sci-radius) * 2);
  height: calc(var(--sci-radius) * 2);
  margin-left: calc(var(--sci-radius) * -1);
  /* Ring box top = --sci-top-pad puts the ring's CENTER at
     (top-pad + radius), so the topmost point of the circle (angle 0,
     used by one photo) lands just inside the porthole at y=top-pad —
     the rest of the circle (and most of its lower half) falls below
     the porthole's fixed height and is clipped by .sci-rhythm-arc's
     overflow:hidden, which is what creates the "arc of photos over the
     top, rest hidden" look. */
  top: var(--sci-top-pad);
  transform: rotate(0deg);
  animation: sci-rhythm-ring-spin 90s linear infinite;
}

@keyframes sci-rhythm-ring-spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

.sci-rhythm-spoke {
  position: absolute;
  top: 50%;
  left: 50%;
  /* Base rotate()+translate() placement is set inline per photo (its
     fixed angle on the ring) — this rule only sizes/centers it. Height
     is derived from a 4:5 portrait ratio via the shared --sci-spoke-w
     custom property so the margin-based centering stays exact (a plain
     `aspect-ratio` shorthand can't be referenced back inside a
     calc()-based margin). */
  --sci-spoke-w: clamp(70px, 11vw, 165px);
  width: var(--sci-spoke-w);
  height: calc(var(--sci-spoke-w) * 1.25);
  margin-top: calc(var(--sci-spoke-w) * -0.625);
  margin-left: calc(var(--sci-spoke-w) * -0.5);
}
.sci-rhythm-spoke--s { --sci-spoke-w: clamp(56px, 8.5vw, 128px); }
.sci-rhythm-spoke--m { --sci-spoke-w: clamp(70px, 11vw, 165px); }
.sci-rhythm-spoke--l { --sci-spoke-w: clamp(84px, 13vw, 195px); }

.sci-rhythm-photo-inner {
  display: block;
  width: 100%;
  height: 100%;
  animation: sci-rhythm-counter-spin 90s linear infinite;
}
@keyframes sci-rhythm-counter-spin {
  from { transform: rotate(var(--start, 0deg)); }
  to   { transform: rotate(calc(var(--start, 0deg) - 360deg)); }
}

.sci-rhythm-photo-inner img {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: clamp(10px, 1.6vw, 20px);
  object-fit: cover;
  box-shadow: var(--shadow-soft);
}

@media (prefers-reduced-motion: reduce) {
  .sci-rhythm-ring { animation: none; }
  .sci-rhythm-photo-inner { animation: none; }
}

.sci-rhythm-content { text-align: center; }
.sci-rhythm-content h2 { font-size: var(--text-2xl); }
.sci-rhythm-subheading {
  margin-top: var(--space-6);
  color: var(--color-orange-dark);
  font-size: var(--text-lg);
  font-weight: 600;
}
.sci-rhythm-content .hero-actions { justify-content: center; margin-top: var(--space-5); }

.sci-rhythm-stats {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-6);
  max-width: 480px;
  margin-inline: auto;
  padding-top: var(--space-6);
  border-top: 1px solid var(--color-gray-200);
}
.sci-rhythm-stat { text-align: center; }
.sci-rhythm-stat-value {
  display: block;
  font-family: var(--font-display);
  font-size: var(--text-3xl);
  color: var(--color-orange);
  line-height: 1;
  margin-bottom: var(--space-1);
}
.sci-rhythm-stat-label {
  display: block;
  font-size: var(--text-sm);
  color: var(--color-gray-600);
}

@media (min-width: 980px) {
  .sci-rhythm-stats { grid-template-columns: repeat(4, 1fr); max-width: none; margin-inline: 0; }
}

/* -------------------------------------------------------------------
   Section 03 — "Emotional Check-In"
------------------------------------------------------------------- */
.sci-checkin-inner { text-align: center; }
.sci-checkin-inner .section-lede { margin-inline: auto; }

.sci-checkin-chips {
  list-style: none;
  margin: var(--space-7) 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-3);
}
.sci-checkin-chip {
  padding: var(--space-2) var(--space-5);
  border-radius: var(--radius-pill);
  background: var(--color-white);
  border: 1px solid var(--color-gray-200);
  font-family: var(--font-display);
  font-size: var(--text-sm);
  color: var(--color-ink);
}

/* -------------------------------------------------------------------
   Section 04 — "Where You Are / Where You Could Be"
------------------------------------------------------------------- */
.sci-transform {
  position: relative;
  background: var(--color-ink);
  color: var(--color-cream);
  overflow: hidden;
}
/* CORRECTED (this round): background glow toned down considerably
   ("keep the design minimal and flat" / "no dramatic glow") — the
   radial accent's opacity and spread are both reduced from the previous
   round. The dark base itself is unchanged. */
.sci-transform-glow {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(45% 40% at 50% 50%, rgba(233, 78, 12, 0.16) 0%, rgba(233, 78, 12, 0) 70%),
    linear-gradient(180deg, #14100C 0%, #0B0906 100%);
  pointer-events: none;
}
.sci-transform-inner { position: relative; padding-block: var(--space-4); }

/* REMOVED (an earlier round): .sci-transform-side h3 (column
   sub-headings), .sci-transform-line (the vertical divider through the
   centre), .sci-transform-pause / .sci-transform-listen (centre
   caption) and .sci-transform-bottom (bottom caption) — all removed
   along with their markup, since every one of them contained a
   then-banned word ("Pause"/"Breath"/"Listen"/"Return") with no
   replacement copy supplied at that time. See this section's own
   template-part doc-comment for the full disclosure.

   RESTORED (this round): the visible top heading is back, per direct
   instruction, reusing this project's standard centered light-on-dark
   heading treatment. */
.sci-transform-heading {
  text-align: center;
  max-width: 46rem;
  margin: 0 auto var(--space-7);
  color: var(--color-cream);
}

.sci-transform-split {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-7);
  align-items: center;
}

.sci-transform-chips {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-2);
}
.sci-transform-chips li {
  padding: var(--space-2) var(--space-4);
  border-radius: var(--radius-pill);
  font-size: var(--text-sm);
}
.sci-transform-before li {
  border: 1px solid rgba(184, 179, 166, 0.35);
  color: var(--color-gray-400);
  background: rgba(255, 255, 255, 0.03);
}
.sci-transform-after li {
  border: 1px solid rgba(233, 78, 12, 0.5);
  color: var(--color-cream);
  background: rgba(233, 78, 12, 0.12);
}

.sci-transform-center {
  display: flex;
  justify-content: center;
  padding-block: var(--space-3);
}
/* Subtle shadow only, per direct instruction — no glow/blur spread. */
.sci-transform-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background: var(--color-orange);
  color: var(--color-ink);
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.35);
}

@media (min-width: 900px) {
  .sci-transform-split {
    grid-template-columns: 1fr auto 1fr;
    gap: var(--space-8);
  }
  .sci-transform-before .sci-transform-chips { justify-content: flex-end; }
  .sci-transform-after .sci-transform-chips { justify-content: flex-start; }
  .sci-transform-center { padding-inline: var(--space-7); }
}

/* -------------------------------------------------------------------
   Section 05 — "The Core MindOFF Idea"
------------------------------------------------------------------- */
.sci-idea-inner { text-align: center; }
.sci-idea-inner h2 { font-size: var(--text-2xl); }

.sci-idea-statements {
  margin-top: var(--space-7);
  padding-top: var(--space-7);
  border-top: 1px solid var(--color-gray-200);
}
.sci-idea-statement {
  font-family: var(--font-display);
  font-size: var(--text-xl);
  color: var(--color-ink);
  margin: 0 0 var(--space-3);
}
.sci-idea-statement--accent { color: var(--color-orange-dark); margin-bottom: 0; }

/* -------------------------------------------------------------------
   Section 06 — "The MindOFF Experience" (7-step sequence)
------------------------------------------------------------------- */
.sci-sequence-list {
  list-style: none;
  margin: 0 0 var(--space-7);
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
}
.sci-sequence-step {
  display: flex;
  align-items: baseline;
  gap: var(--space-4);
  padding-bottom: var(--space-4);
  border-bottom: 1px solid var(--color-gray-200);
}
.sci-sequence-step:last-child { border-bottom: 0; padding-bottom: 0; }
.sci-sequence-number {
  font-family: var(--font-display);
  font-size: var(--text-lg);
  color: var(--color-orange);
  flex: 0 0 auto;
  min-width: 2.2em;
}
.sci-sequence-label {
  font-family: var(--font-display);
  font-size: var(--text-lg);
  color: var(--color-ink);
}
.sci-sequence-paragraph {
  max-width: 640px;
  margin: 0;
  color: var(--color-gray-800);
}

@media (min-width: 980px) {
  .sci-sequence-list {
    flex-direction: row;
    align-items: stretch;
    gap: var(--space-3);
  }
  .sci-sequence-step {
    flex: 1;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-2);
    border-bottom: 0;
    border-left: 1px solid var(--color-gray-200);
    padding: 0 var(--space-3);
  }
  .sci-sequence-step:first-child { border-left: 0; padding-left: 0; }
  .sci-sequence-label { font-size: var(--text-base); }
}

/* -------------------------------------------------------------------
   Section 07 — "What a Pause Can Create Space For"
------------------------------------------------------------------- */
.sci-pause-heading {
  text-align: center;
  font-size: var(--text-2xl);
  max-width: 560px;
  margin-inline: auto;
  margin-bottom: var(--space-7);
}
.sci-pause-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
}
.sci-pause-item {
  position: relative;
  text-align: center;
  padding: var(--space-5) var(--space-3);
}
.sci-pause-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  border: 1.5px solid var(--color-orange);
  color: var(--color-orange);
  margin-bottom: var(--space-3);
}
.sci-pause-number {
  display: block;
  font-family: var(--font-display);
  font-size: var(--text-sm);
  color: var(--color-gray-400);
  margin-bottom: var(--space-1);
}
.sci-pause-label { font-size: var(--text-lg); margin-bottom: var(--space-2); }
.sci-pause-line { font-size: var(--text-sm); color: var(--color-gray-600); margin: 0; }

@media (min-width: 700px) {
  .sci-pause-grid { grid-template-columns: repeat(2, 1fr); }
  .sci-pause-item:not(:nth-child(2n)) { border-right: 1px solid var(--color-gray-200); }
}
@media (min-width: 980px) {
  .sci-pause-grid { grid-template-columns: repeat(3, 1fr); }
  .sci-pause-item:not(:nth-child(2n)) { border-right: 0; }
  .sci-pause-item:not(:nth-child(3n)) { border-right: 1px solid var(--color-gray-200); }
}

/* -------------------------------------------------------------------
   Section 09 — "Research"
------------------------------------------------------------------- */
.sci-research-inner { text-align: center; }
.sci-research-subheading {
  font-family: var(--font-display);
  color: var(--color-orange-dark);
  font-size: var(--text-base);
  letter-spacing: 0.03em;
}
.sci-research-inner .hero-actions { justify-content: center; margin: var(--space-5) 0; }
.sci-research-disclaimer {
  font-size: var(--text-sm);
  color: var(--color-gray-600);
  font-style: italic;
  margin-top: var(--space-6);
  padding-top: var(--space-5);
  border-top: 1px solid var(--color-gray-200);
}
