/* ============================================================================
   Mirelis Food Systems — Brand Tokens
   ----------------------------------------------------------------------------
   Single source of truth for palette, typography, spacing, and component rules
   across mirelisfood.com. Grounded in:
     - 10_Entity/14_Brand/Brand_Standards.md  (palette §8, typography §9)
     - 10_Entity/14_Brand/Design_Standards.md (layout §3, motion §7,
                                               buttons/cards §9, icons §6,
                                               focus rings §12, anti-patterns §13)
   Loaded from every page's <head> as:
     <link rel="stylesheet" href="assets/brand-tokens.css">
   Updated: 2026-04-18  (v2 — A10 redesign: navy+slate palette, bento grid,
                         subtle editorial shadow allowance, layered-offset
                         hero-image pattern, grain texture utility)
   ========================================================================== */


/* ----------------------------------------------------------------------------
   1. Design tokens — CSS custom properties
   -------------------------------------------------------------------------- */

:root {
  /* === Palette (Brand_Standards §8, Stitch-locked 2026-04-18 pm) ==
     The warm cream/espresso/bark palette was retired in favor of a
     cooler technical-infrastructure palette: off-white + deep navy +
     gold + white cards. Variable names retained so existing markup
     continues to resolve correctly; token *values* updated.
     See Brand_Standards §8 for palette narrative. */

  /* Primary surfaces */
  --brand-cream:          #FAFAFA;  /* primary page background (off-white) */
  --brand-cream-warm:     #F1F5F9;  /* subtle darker surface, hairlines (slate-100) */
  --brand-white:          #FFFFFF;  /* pure white — card pop on off-white pages */
  --brand-slate-50:       #F8FAFC;  /* flagship-card contrast (between white and slate-100) */

  /* Text / dark anchor */
  --brand-espresso:       #0F172A;  /* primary body text + dark sections (deep navy) */
  --brand-bark:           #475569;  /* secondary text (slate-600) */
  --brand-gray-soft:      #64748B;  /* tertiary/meta text (slate-500) — 2026-05-30 audit M3: bumped from slate-400 #94A3B8 to pass WCAG AA on light surfaces (~4.6:1). Navy surfaces keep slate-400 via explicit overrides below. */

  /* Navy dark-section palette (converged with espresso — same #0F172A now) */
  --brand-navy:           #0F172A;  /* dark sections (Stats, Final CTA, feature blocks) */
  --brand-navy-soft:      #1E293B;  /* navy secondary / hover within navy (slate-800) */
  --brand-slate:          #64748B;  /* secondary accent (slate-500) */
  --brand-slate-light:    #E2E8F0;  /* outline-variant / subtle divider surfaces (slate-200) */

  /* Gold accent (unchanged) */
  --brand-gold:           #B4975A;
  --brand-gold-deep:      #8F7644;
  --brand-gold-light:     #D9C08A;
  --brand-gold-logo:      #C9A961;  /* LOGO FILES ONLY */

  /* UI-only signal colors (never marketing) */
  --brand-alert:          #B4482F;
  --brand-forest:         #3F5E3B;

  /* Alpha-safe mixes (recomputed for new palette) */
  --espresso-04:  rgba(15, 23, 42, 0.04);
  --espresso-08:  rgba(15, 23, 42, 0.08);
  --navy-04:      rgba(15, 23, 42, 0.04);
  --navy-08:      rgba(15, 23, 42, 0.08);
  --navy-20:      rgba(15, 23, 42, 0.20);
  --cream-80:     rgba(250, 250, 250, 0.95);  /* off-white 95% for glass nav */
  --gold-20:      rgba(180, 151, 90, 0.20);
  --gold-40:      rgba(180, 151, 90, 0.40);

  /* === Fluid type scale — Stitch-rebalance 2026-04-19 late pm =====
     Prior pass (2026-04-18/19 am) pushed the ceilings too high: at wide
     viewports card titles were rendering at 64px and the About hero
     `hero-display` at 108px, which dwarfed section h2s and broke visual
     hierarchy. New ladder preserves Stitch weight but restores
     h1 > h2 > card-title > sub-heading ordering at every breakpoint.
     Targets at 1280px CSS viewport:
       hero-display 65 > h1 51 > h2 45 > card-title 37 > sub 26
     Targets at 375px CSS viewport:
       hero-display 48 > h1 40 > h2 36 > card-title 30 > sub 22 */
  --step--1:  clamp(0.875rem, 0.85rem + 0.125vw, 0.9375rem);
  --step-0:   clamp(1rem, 0.96rem + 0.2vw, 1.125rem);
  --step-1:   clamp(1.125rem, 1.05rem + 0.375vw, 1.25rem);
  --step-2:   clamp(1.25rem, 1.15rem + 0.5vw, 1.5rem);
  --step-3:   clamp(1.375rem, 1.2rem + 0.55vw, 1.875rem);   /* h4, sub-card h3, 22-30px */
  --step-4:   clamp(1.875rem, 1.55rem + 0.95vw, 2.75rem);    /* card-title scale, 30-44px */
  --step-5:   clamp(2.25rem, 1.85rem + 1.2vw, 3.25rem);      /* h2 — section headlines, 36-52px */
  --step-6:   clamp(2.5rem, 2rem + 1.5vw, 3.75rem);          /* h1 — page titles, 40-60px */
  --step-7:   clamp(3rem, 2.25rem + 2.25vw, 4.5rem);         /* hero-display peak, 48-72px */

  /* === Spacing scale (Design_Standards §3 — 8px base) ============ */
  --space-1: 0.5rem;
  --space-2: 1rem;
  --space-3: 1.5rem;
  --space-4: 2rem;
  --space-5: 3rem;
  --space-6: 4rem;
  --space-7: 5rem;
  --space-8: 6rem;

  /* === Radii ===================================================== */
  --radius-sm:  4px;
  --radius:     6px;   /* buttons */
  --radius-lg:  8px;   /* cards */

  /* === Shadows (Design_Standards §9 — subtle editorial only) ===== */
  --shadow-rest:      0 1px 2px rgba(15, 23, 42, 0.04);
  --shadow-hover:     0 20px 40px -10px rgba(15, 23, 42, 0.08);
  --shadow-editorial: 0 32px 64px -12px rgba(15, 23, 42, 0.20);
  --shadow-ink:       0 4px 24px -2px rgba(15, 23, 42, 0.04);

  /* === Typography families (Brand_Standards §9, Stitch-locked 2026-04-18 pm) ==
     Display face updated from Newsreader to Noto Serif to match Stitch reference
     aesthetic — Alex explicit preference. Noto Serif is slightly larger-set and
     more newspaper-weight than Newsreader at the same pt size, which is what
     gives the Stitch design its visual impact. */
  --font-display: 'Noto Serif', Georgia, 'Times New Roman', serif;
  --font-body:    'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
  --font-mono:    'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;

  /* === Motion (Design_Standards §7) ============================== */
  --ease-premium:     cubic-bezier(0.16, 1, 0.3, 1);
  --transition-hover: 150ms ease-out;
  --transition-card:  500ms var(--ease-premium);
  --transition-image: 700ms var(--ease-premium);

  /* === Layout constraints ======================================== */
  --content-max:   75rem;   /* 1200px */
  --content-wide:  90rem;   /* 1440px — for wide bento-grid layouts */
  --prose-max:     72ch;
}


/* ----------------------------------------------------------------------------
   2. Base — html/body reset + typographic defaults
   -------------------------------------------------------------------------- */

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

html {
  color-scheme: light;
  font-size: 16px;
  -webkit-text-size-adjust: 100%;
  text-rendering: optimizeLegibility;
  scroll-behavior: smooth;
}

body {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--step-0);
  line-height: 1.6;
  color: var(--brand-espresso);
  background: var(--brand-cream);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-wrap: pretty;
}

::selection {
  background: var(--brand-gold);
  color: var(--brand-espresso);
}

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


/* ----------------------------------------------------------------------------
   3. Typography (Brand_Standards §9)
   -------------------------------------------------------------------------- */

h1, h2, h3, h4, h5, h6 {
  margin: 0 0 var(--space-3);
  font-family: var(--font-display);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--brand-espresso);
  text-wrap: balance;
  hanging-punctuation: first last;
  font-feature-settings: "ss01", "onum", "calt";
}

/* Specificity bump — 2026-04-19 late pm.
   brand-tokens.css loads via <link> BEFORE the Tailwind Play CDN <script>,
   so Tailwind's injected preflight CSS was winning against these base rules
   at equal specificity (0,0,1) and silently resetting h1/h2/h3 font-sizes
   to Tailwind's defaults (1em / inherit / inherit). That's why section h2s
   rendered smaller than bento card h3s (which have scoped rules at 0,1,1
   that beat preflight). Prefixing with `body` bumps these to (0,0,2) so
   they outrank preflight without needing !important. */
body h1 { font-size: var(--step-6); font-weight: 700; letter-spacing: -0.035em; line-height: 0.95; }
body h2 { font-size: var(--step-5); font-weight: 700; letter-spacing: -0.03em; line-height: 1.05; }
body h3 { font-size: var(--step-3); font-weight: 700; letter-spacing: -0.025em; line-height: 1.15; }

/* Stitch-scale card titles — Scoped to bento flagship + feature + wide cards
   where the h3 IS the visual anchor of the card (40-64px, weight 700, tight
   letter-spacing). General h3 tags remain at step-3 (28-36px) so section
   sub-headings and sub-card titles don't compete with section h2s.
   Added 2026-04-19 pm. */
.bento-item--flagship h3,
.bento-item--feature h3,
.bento-item--wide h3,
.card--flagship h3,
.card-title--xl {
  font-size: var(--step-4);
  font-weight: 700;
  letter-spacing: -0.028em;
  line-height: 1.08;
}
body h4 { font-size: var(--step-3); font-weight: 600; }
body h5 { font-size: var(--step-2); font-weight: 600; }
body h6 { font-size: var(--step-1); font-weight: 600; }

/* Legal-page overrides — 2026-04-19 late pm.
   Privacy + Terms are document-style reading surfaces, not editorial marketing
   pages. They shouldn't render with the hero-scale h1/h2 ladder (40-60px /
   36-52px). Toned down to document weight so the page reads as a compliance
   artifact rather than a pitch. Scoped via `body.legal-page` so it only
   affects the two pages that opt in (privacy.html, terms.html). Selectors
   match the specificity of the base `body h1/h2/...` rules above so they
   simply replace the values when the class is present. */
body.legal-page h1 {
  font-size: var(--step-4);          /* 30-44px — page title, document-weight */
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.15;
}
body.legal-page h2 {
  font-size: var(--step-2);          /* 20-24px — section heading */
  font-weight: 600;
  letter-spacing: -0.01em;
  line-height: 1.3;
}
body.legal-page h3 {
  font-size: var(--step-1);          /* 18-20px — sub-section */
  font-weight: 600;
  letter-spacing: -0.005em;
  line-height: 1.35;
}
body.legal-page .lead {
  font-size: var(--step-0);          /* 16-18px — minimal lead promotion */
  line-height: 1.65;
  color: var(--brand-bark);
}
body.legal-page .eyebrow {
  font-size: 0.8125rem;              /* 13px — quieter than 15px marketing eyebrow */
  letter-spacing: 0.16em;
}

.hero-display {
  font-size: var(--step-7);
  font-weight: 700;
  line-height: 0.92;
  letter-spacing: -0.04em;
  text-wrap: balance;
  hanging-punctuation: first last;
}

/* Italic emphasis for 2-4 word phrase in a headline — per Brand_Standards §9 */
.hero-display em,
h1 em, h2 em, h3 em {
  font-style: italic;
  font-weight: 500;
  color: var(--brand-slate);
}

body p {
  margin: 0 0 var(--space-2);
  font-size: var(--step-0);
  line-height: 1.6;
  max-width: var(--prose-max);
}

.lead {
  font-size: var(--step-1);
  line-height: 1.45;
}

.tabular, table, .stats {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum", "lnum", "ss01";
}

.meta, .caption, .eyebrow {
  font-size: var(--step--1);
  color: var(--brand-gray-soft);
  line-height: 1.4;
}

.eyebrow {
  text-transform: uppercase;
  letter-spacing: 0.18em;
  font-weight: 700;
  font-size: 0.9375rem;
  color: var(--brand-espresso); /* 2026-05-30 audit H3: espresso on light surfaces (gold #B4975A failed AA at ~2.7:1); gold reserved for .section--navy .eyebrow below */
  line-height: 1.25;
}

/* 2026-05-30 audit M8: form controls meet the 44px touch-target (Design_Standards §9/§12)
   + 16px font on mobile to prevent iOS focus auto-zoom. */
input:not([type='checkbox']):not([type='radio']):not([type='hidden']),
select,
textarea {
  min-height: 44px;
}
textarea {
  min-height: 96px;
}
@media (max-width: 640px) {
  input:not([type='checkbox']):not([type='radio']):not([type='hidden']),
  select,
  textarea {
    font-size: 16px;
  }
}

/* 2026-04-19 pm — eyebrow bumped from 14px → 15px + tracking 0.16→0.18em and
   section-anchor gold bar thickened from 1.5px → 2px and extended 2rem → 2.5rem
   to give section eyebrows ("Four programs", "Advisory", "Background") the
   weight they carry in the Stitch reference. */

/* Section-anchor eyebrow. When the eyebrow is set to block (Tailwind `.block`
   on a <span>, typically the first node of a section), prepend a short gold
   bar so the label reads as a deliberate section start rather than a stray
   caption. Scoped so chip-style eyebrows (div.eyebrow), footer <h5.eyebrow>,
   and inline <p.eyebrow> labels are unaffected. */
.eyebrow.block::before {
  content: '';
  display: block;
  width: 2.5rem;
  height: 2px;
  background: currentColor;
  opacity: 0.75;
  margin-bottom: 1rem;
}

/* Tighter eyebrow → section-headline rhythm. Tailwind mb-* on the eyebrow
   still overrides, but the default becomes a breathable 1rem rather than
   flush-to-heading. */
.eyebrow.block {
  margin-bottom: var(--space-2);
}


/* ----------------------------------------------------------------------------
   4. Links
   -------------------------------------------------------------------------- */

a {
  color: var(--brand-espresso);
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  transition: color var(--transition-hover);
}

a:hover {
  color: var(--brand-gold-deep);
}

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

/* Nav-link underline-reveal (premium microinteraction) */
.nav-link {
  position: relative;
  text-decoration: none;
}
.nav-link::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: -4px;
  width: 0;
  height: 1px;
  background: var(--brand-gold);
  transition: width 300ms var(--ease-premium);
}
.nav-link:hover::after,
.nav-link[aria-current="page"]::after { width: 100%; }


/* ----------------------------------------------------------------------------
   5. Focus rings (Design_Standards §12)
   -------------------------------------------------------------------------- */

:focus-visible {
  outline: 2px solid var(--brand-gold);
  outline-offset: 2px;
  border-radius: 4px;
}
:focus:not(:focus-visible) { outline: none; }


/* ----------------------------------------------------------------------------
   6. Buttons (Design_Standards §9)
   -------------------------------------------------------------------------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  min-height: 44px;
  padding: 0 var(--space-3);
  border: 1.5px solid transparent;
  border-radius: var(--radius);
  font-family: var(--font-body);
  font-weight: 500;
  font-size: var(--step-0);
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition:
    background var(--transition-hover),
    color var(--transition-hover),
    border-color var(--transition-hover),
    transform var(--transition-hover);
}

.btn:hover   { transform: scale(1.02); }
.btn:active  { transform: scale(0.99); }

.btn-primary          { background: var(--brand-gold); color: var(--brand-espresso); }
.btn-primary:hover    { background: var(--brand-gold-deep); color: var(--brand-cream); }

.btn-secondary        { background: transparent; color: var(--brand-espresso); border-color: var(--brand-espresso); }
.btn-secondary:hover  { background: var(--brand-espresso); color: var(--brand-cream); }

/* Navy-context variants (for sections on --brand-navy) */
.btn-on-navy          { background: var(--brand-gold); color: var(--brand-espresso); }
.btn-on-navy:hover    { background: var(--brand-gold-deep); color: var(--brand-cream); }

.btn-ghost-navy          { background: transparent; color: var(--brand-cream); border-color: var(--brand-cream); }
.btn-ghost-navy:hover    { background: var(--brand-cream); color: var(--brand-espresso); }

.btn-tertiary {
  min-height: auto;
  padding: 0;
  border: none;
  border-bottom: 1px solid transparent;
  border-radius: 0;
  background: transparent;
  color: var(--brand-espresso);
  font-weight: 500;
}
.btn-tertiary:hover {
  border-bottom-color: var(--brand-gold);
  transform: none;
}


/* ----------------------------------------------------------------------------
   7. Cards (Design_Standards §9)
   Subtle editorial shadow allowed; never glow, never >0.08 alpha, never >40px blur
   -------------------------------------------------------------------------- */

/* Cards default to subtle warm-cream tint — use .card--elevated (white) for primary
   cards that should pop against the cream page surface. Border alpha is deliberately
   low so cards read clean, not framed. */

.card {
  background: var(--brand-cream-warm);
  border: 1px solid rgba(139, 131, 120, 0.12);  /* outline @ 12% */
  border-radius: var(--radius-lg);
  padding: var(--space-3);
  box-shadow: var(--shadow-rest);
  transition:
    border-color var(--transition-hover),
    box-shadow var(--transition-card),
    transform var(--transition-card);
}

@media (min-width: 768px) {
  .card { padding: var(--space-4); }
}

.card:hover {
  border-color: var(--gold-40);
  box-shadow: var(--shadow-hover);
  transform: translateY(-4px);
}

/* White cards — primary pop against cream page */
.card--elevated {
  background: #FFFFFF;
  border-color: rgba(139, 131, 120, 0.10);
}

/* Card lead copy — the primary blurb paragraph that sits under a card-title
   h3 and serves as the offering's intro line. Bumped from body default to
   step-1 (18-20px) with tighter leading so it reads as a deliberate lead-in,
   matching Stitch card rhythm. Added 2026-04-19. */
.card-lead {
  font-size: var(--step-1);
  line-height: 1.55;
  color: var(--brand-bark);
}
.section--navy .card-lead {
  color: rgba(250, 250, 250, 0.82);
}

/* Flagship — subtly darker than page, lighter than slate-100 surfaces */
.card--flagship {
  background: var(--brand-slate-50);  /* #F8FAFC — between off-white and slate-100 */
  border-color: rgba(15, 23, 42, 0.08);
}

.card--on-navy {
  background: var(--brand-navy-soft);
  border-color: var(--navy-20);
  color: var(--brand-cream);
}
.card--on-navy:hover {
  border-color: var(--gold-40);
}


/* ----------------------------------------------------------------------------
   8. Bento grid (Design_Standards §3 — added 2026-04-18)
   Asymmetric showcase layout for Programs / multi-service sections.
   -------------------------------------------------------------------------- */

.bento {
  display: grid;
  grid-template-columns: repeat(1, 1fr);
  gap: var(--space-3);
}
@media (min-width: 768px) {
  .bento { grid-template-columns: repeat(3, 1fr); }
}
@media (min-width: 1024px) {
  .bento { grid-template-columns: repeat(4, 1fr); }
}

.bento-item--flagship { grid-column: span 1; }
.bento-item--feature  { grid-column: span 1; }
.bento-item--wide     { grid-column: span 1; }

@media (min-width: 768px) {
  .bento-item--flagship { grid-column: span 2; }
  .bento-item--wide     { grid-column: span 3; }
}
@media (min-width: 1024px) {
  .bento-item--flagship { grid-column: span 2; }
  .bento-item--wide     { grid-column: span 4; }
}


/* ----------------------------------------------------------------------------
   9. Layered-offset hero image (Design_Standards §9 — added 2026-04-18)
   Hero right-column image sits in a frame translated 4-8px on both axes,
   creating a "paper stacked behind" editorial depth. On hover the frame
   translates back toward 0. Used ONCE per site — the primary hero.
   -------------------------------------------------------------------------- */

.hero-image-frame {
  position: relative;
  border: 1px solid var(--brand-cream-warm);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-editorial);
  transform: translate(6px, 6px);
  transition: transform var(--transition-image);
}
.hero-image-frame:hover {
  transform: translate(2px, 2px);
}
.hero-image-frame img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1800ms var(--ease-premium);
}
.hero-image-frame:hover img {
  transform: scale(1.04);
}

@media (prefers-reduced-motion: reduce) {
  .hero-image-frame,
  .hero-image-frame:hover,
  .hero-image-frame img,
  .hero-image-frame:hover img { transform: none; }
}


/* ----------------------------------------------------------------------------
   10. Navy section + grain texture (Design_Standards §7 — added 2026-04-18)
   Dark-section blocks use navy background; optional grain overlay at ≤5% alpha
   for tactile weight. Max ONE grain-textured section per page.
   -------------------------------------------------------------------------- */

.section--navy {
  background: var(--brand-navy);
  color: var(--brand-cream);
  position: relative;
  overflow: hidden;
}
.section--navy h1,
.section--navy h2,
.section--navy h3,
.section--navy h4,
.section--navy h5,
.section--navy h6 {
  color: var(--brand-cream);
}
.section--navy p,
.section--navy .lead {
  color: rgba(250, 250, 250, 0.75);
}
.section--navy .eyebrow {
  color: var(--brand-gold);
}

/* Tailwind text-brand-* classes applied inside a navy section flip to light palette */
.section--navy .text-brand-bark,
.section--navy .text-brand-espresso { color: rgba(250, 250, 250, 0.75); }
.section--navy .text-meta,
.section--navy .text-brand-gray-soft { color: rgba(148, 163, 184, 1); }  /* slate-400 */
.section--navy .border-brand-cream-warm,
.section--navy .border-brand-cream-warm\/60 { border-color: rgba(250, 250, 250, 0.14); }
.section--navy .bg-surface { background: rgba(250, 250, 250, 0.08); }

.grain-overlay::before {
  content: '';
  position: absolute;
  inset: 0;
  opacity: 0.04;
  pointer-events: none;
  background-image: radial-gradient(circle at 2px 2px, var(--brand-cream) 1px, transparent 0);
  background-size: 60px 60px;
}


/* ----------------------------------------------------------------------------
   11. Glass-morphism nav (Design_Standards §9)
   -------------------------------------------------------------------------- */

.glass-nav {
  background: var(--cream-80);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  transition: padding var(--transition-hover), background var(--transition-hover);
}
.glass-nav.is-scrolled {
  padding-top: 0.5rem !important;
  padding-bottom: 0.5rem !important;
}


/* ----------------------------------------------------------------------------
   12. Icons (Design_Standards §6 — Lucide primary, Material fallback allowed
        for food-industry-specific icons Lucide lacks)
   -------------------------------------------------------------------------- */

.icon, [data-lucide] {
  width: 20px;
  height: 20px;
  stroke-width: 1.5;
  flex-shrink: 0;
  vertical-align: middle;
}
.icon--sm,     [data-lucide].icon--sm     { width: 16px; height: 16px; }
.icon--nav,    [data-lucide].icon--nav    { width: 24px; height: 24px; }
.icon--feature,[data-lucide].icon--feature{ width: 40px; height: 40px; }

/* Material Symbols fallback — only for icons Lucide lacks (e.g. conveyor_belt).
   Tune weight to 200 (light) + outlined to match Lucide's stroke aesthetic. */
.material-symbols-outlined {
  font-variation-settings: 'FILL' 0, 'wght' 250, 'GRAD' 0, 'opsz' 24;
  vertical-align: middle;
}


/* ----------------------------------------------------------------------------
   13. Reveal animations (Design_Standards §7 — subtle, capped, reduced-motion-safe)
   -------------------------------------------------------------------------- */

@keyframes mirelis-hero-in {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: translateY(0); }
}

.hero-animate {
  animation: mirelis-hero-in 600ms var(--ease-premium) both;
}
.hero-animate--delay-1 { animation-delay: 120ms; }
.hero-animate--delay-2 { animation-delay: 240ms; }
.hero-animate--delay-3 { animation-delay: 360ms; }

.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 700ms var(--ease-premium), transform 700ms var(--ease-premium);
}
.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}
.stagger-1 { transition-delay: 100ms; }
.stagger-2 { transition-delay: 200ms; }
.stagger-3 { transition-delay: 300ms; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  .hero-animate,
  .reveal {
    animation: none;
    opacity: 1;
    transform: none;
  }
}


/* ----------------------------------------------------------------------------
   14. Anti-pattern guards (Design_Standards §13)
   -------------------------------------------------------------------------- */

/* Kill any leftover gradient-text (e.g. .hero-headline on old index.html) */
.hero-headline,
.gradient-text {
  background: none !important;
  -webkit-background-clip: initial !important;
  -webkit-text-fill-color: currentColor !important;
  background-clip: initial !important;
  color: inherit;
}

/* Counter-stat legacy class — render static, no opacity loop */
.counter-stat {
  opacity: 1 !important;
  animation: none !important;
}


/* ----------------------------------------------------------------------------
   15. Utility classes
   -------------------------------------------------------------------------- */

.container {
  width: 100%;
  max-width: var(--content-max);
  margin-inline: auto;
  padding-inline: var(--space-3);
}
.container--wide {
  max-width: var(--content-wide);
}
@media (min-width: 768px) {
  .container,
  .container--wide { padding-inline: var(--space-5); }
}

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

.hairline {
  border: 0; height: 1px;
  background: var(--brand-cream-warm);
  margin: var(--space-5) 0;
}

.hairline--navy {
  background: var(--navy-20);
}

.text-meta      { color: var(--brand-gray-soft); font-size: var(--step--1); }
.text-secondary { color: var(--brand-bark); }
.text-muted     { color: var(--brand-gray-soft); }
.text-slate     { color: var(--brand-slate); }
.text-gold      { color: var(--brand-gold); }

/* Credential strip — horizontal row of credential labels separated by dots */
.credential-strip {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-4);
  padding: var(--space-3) 0;
}
.credential-strip > * {
  font-family: var(--font-body);
  font-size: 0.6875rem;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  font-weight: 600;
  color: var(--brand-slate);
}
.credential-strip > .credential--emphasis {
  color: var(--brand-espresso);
}

/* Credential strip on navy — flip colors for contrast */
.section--navy .credential-strip > * {
  color: rgba(250, 250, 250, 0.6);
}
.section--navy .credential-strip > .credential--emphasis {
  color: var(--brand-gold);
}

/* end */
