/* ============================================================
   Influeri — Customer Cases · Card component + showcase chrome
   Additive layer. Reuses tokens (--grad, --font-display, --font-body,
   --primary, --text, --line, --white) from styles.css.
   - Showcase chrome (tcm-*) is REPLICATED here (this page loads only
     styles.css + this file, mirroring how other showcases self-contain
     their chrome).
   - Component classes are prefixed cc- (case-cards).
   EMIL principles applied:
   - Hover-lift translateY(-4px) + inner image scale(1.04), strong
     ease-out, gated behind @media (hover:hover) and (pointer:fine).
   - Scroll-reveal via clip-path inset(0 0 100% 0) -> inset(0 0 0 0),
     once, staggered (JS sets transition-delay). Reduced-motion: shown
     immediately, no transitions.
   - Animate transform / opacity / clip-path only (GPU). No transition:all.
   - Pink->gold is an ACCENT only; white-mode discipline.
   ============================================================ */

/* ============================================================
   SHOWCASE CHROME (tcm-*) — replicated from trending-creators.css
   ============================================================ */
.tcm {
  position: relative;
  min-height: 100vh;
  padding: 0 0 110px;
  overflow: hidden;
  background:
    radial-gradient(1100px 520px at 50% -160px, rgba(11, 11, 11, 0.035), transparent 70%),
    radial-gradient(900px 460px at 92% 4%, rgba(130, 130, 130, 0.12), transparent 70%),
    #fbfbfc;
}
.tcm::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(11, 11, 11, 0.022) 1px, transparent 1px),
    linear-gradient(90deg, rgba(11, 11, 11, 0.022) 1px, transparent 1px);
  background-size: 46px 46px;
  -webkit-mask-image: radial-gradient(1200px 700px at 50% 0, #000, transparent 78%);
  mask-image: radial-gradient(1200px 700px at 50% 0, #000, transparent 78%);
  pointer-events: none;
}
.tcm__wrap {
  position: relative;
  max-width: 1240px;
  margin: 0 auto;
  padding: 0 40px;
}
.tcm__head {
  text-align: center;
  padding: 84px 0 18px;
}
.tcm__title {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(34px, 5vw, 58px);
  line-height: 1.04;
  letter-spacing: -0.025em;
  margin: 20px 0 0;
}
.tcm__title em {
  font-style: normal;
  background: #0b0b0b;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
.tcm__sub {
  max-width: 640px;
  margin: 16px auto 0;
  color: var(--text);
  font-size: 17px;
  line-height: 1.6;
}
.tcm__rule {
  width: 64px;
  height: 3px;
  margin: 30px auto 0;
  border-radius: 3px;
  background: #0b0b0b;
}

.tcm-sec { padding: 56px 0 0; }
.tcm-eyebrow {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 20px;
  margin: 0 0 26px;
  flex-wrap: wrap;
}
.tcm-eyebrow__main { display: flex; align-items: baseline; gap: 14px; min-width: 0; }
.tcm-eyebrow__no {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 15px;
  letter-spacing: 0.04em;
  background: #0b0b0b;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
.tcm-eyebrow__txt h2 {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(20px, 2.5vw, 26px);
  letter-spacing: -0.015em;
  margin: 0;
  line-height: 1.2;
}
.tcm-eyebrow__txt p {
  margin: 4px 0 0;
  font-size: 13.5px;
  color: var(--text);
}
.tcm-tag {
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 7px 13px;
  border-radius: 999px;
  background: var(--white);
  border: 1px solid var(--line);
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
  font-family: ui-monospace, "SFMono-Regular", "Cascadia Code", Menlo, monospace;
  font-size: 11.5px;
  letter-spacing: 0.02em;
  color: var(--primary);
  white-space: nowrap;
}
.tcm-tag b { font-weight: 600; color: var(--text); }
.tcm-tag .arrow { font-size: 13px; color: #0b0b0b; }

.tcm-hint {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-top: 16px;
  font-size: 12.5px;
  color: #8a8a8a;
}
.tcm-hint::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #0b0b0b;
}
.tcm-foot {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
  margin-top: 84px;
  flex-wrap: wrap;
}

/* ============================================================
   SHARED CARD PRIMITIVES (cc-*)
   ============================================================ */
.cc {
  --cc-radius: 18px;
  --cc-ease: cubic-bezier(0.23, 1, 0.32, 1);   /* strong ease-out */
}

/* the reveal wrapper (clip-path) — every card carries .cc-reveal */
.cc-reveal {
  clip-path: inset(0 0 100% 0);
  opacity: 0;
  transition: clip-path 0.7s var(--cc-ease), opacity 0.55s var(--cc-ease);
  will-change: clip-path, opacity;
}
.cc-reveal.is-in {
  clip-path: inset(0 0 0 0);
  opacity: 1;
}

.cc-card {
  position: relative;
  display: block;
  text-decoration: none;
  color: inherit;
}

.cc-media {
  position: relative;
  display: block;
  border-radius: var(--cc-radius);
  overflow: hidden;
  aspect-ratio: 16 / 10;
  background: #f1f1f3;
}
.cc-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  /* exit/settle faster than enter is handled by hover ease; image scale eased */
  transition: transform 0.55s var(--cc-ease);
  will-change: transform;
}
.cc-media--fill { aspect-ratio: 4 / 5; height: 100%; }

.cc-brand {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 22px;
  color: var(--primary);
  margin: 18px 0 8px;
}
.cc-brand--light { color: var(--white); margin: 0; }

.cc-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-weight: 600;
  font-size: 15px;
  color: var(--primary);
}
.cc-link--light { color: var(--white); }
.cc-link .arrow { transition: transform 0.2s var(--cc-ease); }

/* ---- Hover-lift — gated to true hover/fine-pointer only ---- */
@media (hover: hover) and (pointer: fine) {
  .cc-card {
    transition: transform 0.2s var(--cc-ease), box-shadow 0.2s var(--cc-ease);
  }
  .cc-card:hover { transform: translateY(-4px) scale(1); }
  .cc-card:hover .cc-media img { transform: scale(1.04); }
  .cc-card:hover .cc-link .arrow { transform: translateX(4px); }
}

/* ============================================================
   01 · CLASSIC grid
   ============================================================ */
.cc-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 26px;
}
.cc-classic .cc-media { aspect-ratio: 16 / 10; }

/* ============================================================
   02 · OVERLAY CAPTION
   ============================================================ */
.cc-overlay {
  border-radius: var(--cc-radius);
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(11, 11, 11, 0.06), 0 18px 36px -20px rgba(11, 11, 11, 0.30);
}
.cc-overlay .cc-media {
  border-radius: 0;
  height: 100%;
}
.cc-scrim {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(to top, rgba(11, 11, 11, 0.78) 0%, rgba(11, 11, 11, 0.30) 38%, transparent 66%);
}
.cc-cap {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 22px 22px 24px;
  color: var(--white);
}
.cc-cap__result {
  display: inline-block;
  margin: 0 0 8px;
  padding: 4px 11px;
  border-radius: 999px;
  font-weight: 700;
  font-size: 12.5px;
  letter-spacing: 0.01em;
  color: var(--white);
  background: #0b0b0b;
}
.cc-cap__brand {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 24px;
  margin: 0;
  line-height: 1.1;
}
.cc-cap__brand--lg { font-size: clamp(28px, 3.4vw, 40px); }
.cc-cap__blurb {
  margin: 8px 0 0;
  font-size: 14px;
  line-height: 1.5;
  color: rgba(255, 255, 255, 0.86);
  max-width: 42ch;
  /* hover-reveal: collapse by default, expand on hover */
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  transform: translateY(6px);
  transition: max-height 0.4s var(--cc-ease), opacity 0.35s var(--cc-ease), transform 0.35s var(--cc-ease);
}
.cc-overlay { --cc-r: 12em; }
@media (hover: hover) and (pointer: fine) {
  .cc-overlay:hover .cc-cap__blurb {
    max-height: var(--cc-r);
    opacity: 1;
    transform: translateY(0);
  }
}

/* ============================================================
   03 · METRIC OVERLAY — floating gradient chip
   ============================================================ */
.cc-metric {
  border-radius: var(--cc-radius);
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(11, 11, 11, 0.06), 0 18px 36px -20px rgba(11, 11, 11, 0.30);
}
.cc-metric .cc-media { border-radius: 0; aspect-ratio: 4 / 5; }
.cc-metric::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(to top, rgba(11, 11, 11, 0.62), transparent 52%);
}
.cc-chip {
  position: absolute;
  top: 16px;
  left: 16px;
  z-index: 2;
  display: inline-flex;
  align-items: center;
  padding: 8px 14px;
  border-radius: 999px;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 14px;
  letter-spacing: 0.01em;
  color: var(--white);
  background: #0b0b0b;
  box-shadow: 0 8px 20px rgba(11, 11, 11, 0.34);
  transition: transform 0.2s var(--cc-ease);
}
@media (hover: hover) and (pointer: fine) {
  .cc-metric:hover .cc-chip { transform: translateY(-2px) scale(1.04); }
}
.cc-metric__foot {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 2;
  padding: 18px 18px 20px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

/* ============================================================
   04 · EDITORIAL SPLIT
   ============================================================ */
.cc-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: stretch;
  border-radius: var(--cc-radius);
  overflow: hidden;
  border: 1px solid var(--line);
  background: var(--white);
  box-shadow: 0 1px 2px rgba(11, 11, 11, 0.05), 0 16px 32px -22px rgba(11, 11, 11, 0.24);
}
.cc-split .cc-media--side {
  border-radius: 0;
  aspect-ratio: auto;
  min-height: 260px;
}
.cc-split--rev .cc-media--side { order: 2; }
.cc-split__body {
  padding: 34px 34px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.cc-split__result {
  margin: 0 0 14px;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 15px;
  letter-spacing: 0.02em;
  background: #0b0b0b;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  align-self: flex-start;
}
.cc-split__quote {
  margin: 0 0 22px;
  font-size: 16px;
  line-height: 1.6;
  color: var(--text);
}
.cc-split .cc-brand { margin: 0 0 10px; font-size: 24px; }

/* ============================================================
   05 · FEATURED BENTO
   ============================================================ */
.cc-bento {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 200px;
  gap: 20px;
}
.cc-bento__feat {
  grid-column: span 2;
  grid-row: span 2;
}
.cc-bento__cell {
  grid-column: span 1;
  grid-row: span 1;
}
.cc-bento .cc-media { aspect-ratio: auto; height: 100%; }
.cc-cap--sm { padding: 14px 16px 16px; }
.cc-cap--sm .cc-cap__brand { font-size: 18px; }
.cc-cap--sm .cc-cap__result { font-size: 11px; padding: 3px 9px; margin-bottom: 6px; }

/* ============================================================
   06 · LOGO-ON-IMAGE
   ============================================================ */
.cc-logo {
  border-radius: var(--cc-radius);
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(11, 11, 11, 0.06), 0 14px 28px -18px rgba(11, 11, 11, 0.26);
}
.cc-logo .cc-media { border-radius: 0; aspect-ratio: 1 / 1; }
.cc-badge {
  position: absolute;
  top: 14px;
  left: 14px;
  z-index: 2;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 13px 8px 11px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.92);
  backdrop-filter: saturate(150%) blur(6px);
  border: 1px solid rgba(0, 0, 0, 0.06);
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.10);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 14px;
  color: var(--primary);
}
.cc-badge__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #0b0b0b;
  box-shadow: 0 0 0 4px rgba(11, 11, 11, 0.12);
}

/* ============================================================
   07 · CAROUSEL — one centred card, neighbours hinted; auto-advance
   with a dwell, prev/next arrows, dots, subtle dwell progress bar.
   ============================================================ */
.cc-car {
  position: relative;
  /* Peek is the affordance that says "carousel", so the card width is capped
     against the rail rather than set in vw: `min()` keeps the 560px prominent
     card on desktop and guarantees a neighbour edge at every narrower size.
     A vw-based width could (and did, at 390px) come out wider than the rail,
     leaving a full-bleed card with nothing peeking either side. */
  --cc-car-w: min(560px, calc(100% - 96px));
  --cc-car-gap: 28px;
}
.cc-car__viewport {
  position: relative;
  overflow: hidden;
  /* vertical room so the slides' box-shadow + rounded corners aren't clipped by
     overflow:hidden (which is required horizontally for the peek). Card shadow is
     0 26px 50px -26px → needs ~28/46px of breathing room top/bottom. Horizontal
     padding stays 0: the carousel JS centers slides by measuring viewport width. */
  padding: 28px 0 46px;
  /* 4%, not 10%: at narrow widths a 10% fade swallowed the whole peek, so the
     neighbour hint disappeared exactly where it is needed most. */
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 4%, #000 96%, transparent 100%);
          mask-image: linear-gradient(to right, transparent 0, #000 4%, #000 96%, transparent 100%);
  /* horizontal drag is ours, vertical page scroll stays the browser's */
  touch-action: pan-y;
  cursor: grab;
}
.cc-car__viewport.is-dragging { cursor: grabbing; }
.cc-car__track {
  display: flex;
  gap: var(--cc-car-gap);
  align-items: stretch;
  will-change: transform;
}
.cc-car__slide {
  flex: 0 0 var(--cc-car-w);
  max-width: var(--cc-car-w);
  /* GSAP owns transform; only opacity/scale animate. No transition:all. */
}
.cc-car__card {
  position: relative;
  display: block;
  border-radius: var(--cc-radius);
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(11, 11, 11, 0.06), 0 26px 50px -26px rgba(11, 11, 11, 0.40);
}
.cc-car__card .cc-media {
  border-radius: 0;
  aspect-ratio: 16 / 11;
  height: 100%;
}
.cc-car__card .cc-scrim {
  background: linear-gradient(to top, rgba(11, 11, 11, 0.80) 0%, rgba(11, 11, 11, 0.30) 42%, transparent 70%);
}
.cc-car__card .cc-chip {
  top: 18px;
  left: 18px;
}
.cc-car__card .cc-cap { padding: 26px 28px 28px; }
.cc-car__blurb {
  /* visible only on the active slide; collapsed otherwise (transform/opacity).
     .cc-cap__blurb (treatment 02) collapses with `max-height: 0` for its
     hover-reveal — the active-slide rule below MUST release that too, or the
     blurb stays 0px tall no matter what opacity says. */
  margin: 10px 0 14px;
  max-width: 48ch;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;      /* long blurbs truncate instead of shoving the cap off the card */
  opacity: 0;
  transform: translateY(8px);
  transition: max-height 0.4s var(--cc-ease), opacity 0.4s var(--cc-ease), transform 0.4s var(--cc-ease);
}
.cc-car__slide.is-active .cc-car__blurb,
.cc-focus__slide.is-active .cc-car__blurb,
.cc-deck__card.is-front .cc-car__blurb {
  max-height: 4.6em;          /* 3 lines at line-height 1.5, plus a hair */
  opacity: 1;
  transform: translateY(0);
}

/* ---- controls row: arrows + dots + dwell bar ---- */
.cc-car__controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  margin-top: 26px;
}
.cc-car__arrow {
  flex: none;
  width: 46px;
  height: 46px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--white);
  border: 1px solid var(--line);
  color: var(--primary);
  cursor: pointer;
  box-shadow: 0 6px 16px rgba(11, 11, 11, 0.08);
  transition: transform 0.18s var(--cc-ease), box-shadow 0.18s var(--cc-ease), border-color 0.18s var(--cc-ease);
}
.cc-car__arrow svg { width: 16px; height: 16px; }
.cc-car__arrow--prev svg { transform: rotate(180deg); }
@media (hover: hover) and (pointer: fine) {
  .cc-car__arrow:hover { transform: translateY(-2px); box-shadow: 0 10px 22px rgba(11, 11, 11, 0.14); border-color: rgba(11, 11, 11, 0.35); }
}
.cc-car__arrow:active { transform: scale(0.97); }   /* instant feedback */
.cc-car__arrow:focus-visible { outline: 2px solid #0b0b0b; outline-offset: 2px; }

.cc-car__dots { display: inline-flex; align-items: center; gap: 10px; }
.cc-car__dot {
  width: 9px;
  height: 9px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: rgba(11, 11, 11, 0.18);
  cursor: pointer;
  transition: transform 0.2s var(--cc-ease), background 0.2s var(--cc-ease), width 0.2s var(--cc-ease);
}
.cc-car__dot:hover { background: rgba(11, 11, 11, 0.32); }
.cc-car__dot:active { transform: scale(0.9); }
.cc-car__dot:focus-visible { outline: 2px solid #0b0b0b; outline-offset: 2px; }
.cc-car__dot.is-on {
  width: 26px;
  border-radius: 999px;
  background: #0b0b0b;
}

/* live region: announces the case the carousel moved to, for user-driven
   navigation only (autoplay stays silent — it would be constant chatter) */
.cc-car__status {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}

/* subtle dwell progress bar (GSAP scales it 0->1 each dwell) */
.cc-car__progress {
  position: relative;
  flex: 0 0 120px;
  height: 3px;
  border-radius: 3px;
  overflow: hidden;
  background: rgba(11, 11, 11, 0.08);
}
.cc-car__bar {
  position: absolute;
  inset: 0;
  transform: scaleX(0);
  transform-origin: left center;
  background: #0b0b0b;
}

/* ---- static fallback: scroll-snap strip (reduced-motion / no GSAP) ---- */
.cc-car--static .cc-car__track {
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 6px;
}
.cc-car--static .cc-car__slide { scroll-snap-align: center; }
.cc-car--static .cc-car__progress { display: none; }
.cc-car--static .cc-car__blurb { opacity: 1 !important; transform: none !important; }

/* ============================================================
   08 · FOCUSED CAROUSEL — depth-of-field focus variant.
   Active card: sharp (GSAP sets filter:blur(0px) brightness(1)), scale 1.04.
   Neighbours: blur(6px) brightness(0.72), opacity 0.7. Track centered via
   the same geom()/stride approach as 07. Controls reuse .cc-car__* classes.
   ============================================================ */
.cc-focus {
  position: relative;
  --cc-focus-w: 560px;
  --cc-focus-gap: 28px;
}
.cc-focus__viewport {
  position: relative;
  overflow: hidden;
  padding: 14px 0 6px;
}
.cc-focus__track {
  display: flex;
  gap: var(--cc-focus-gap);
  align-items: stretch;
  will-change: transform;
}
.cc-focus__slide {
  flex: 0 0 var(--cc-focus-w);
  max-width: var(--cc-focus-w);
  /* GSAP owns filter/transform/opacity; no transition:all */
  will-change: transform, filter, opacity;
}

/* blurb visible only on active slide — the max-height release lives with the
   07 carousel rule above, which this variant shares. */

/* ---- static fallback: scroll-snap strip (reduced-motion / no GSAP) ---- */
.cc-focus--static .cc-focus__track {
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 6px;
}
.cc-focus--static .cc-focus__slide { scroll-snap-align: center; }
/* In static mode the progress bar is hidden (no autoplay means no bar) */
.cc-focus--static .cc-car__progress { display: none; }
.cc-focus--static .cc-car__blurb { opacity: 1 !important; transform: none !important; }

/* ============================================================
   09 · QUOTE-LED TESTIMONIAL
   White card: large gradient quotation glyph, blurb body copy, round
   brand portrait + result chip as attribution. Inherits .cc-card
   hover-lift and .cc-reveal scroll-reveal — do NOT redefine those.
   ============================================================ */
.cc-quote {
  padding: 28px 26px;
  border: 1px solid var(--line);
  border-radius: var(--cc-radius);
  background: var(--white);
  box-shadow: 0 1px 2px rgba(11, 11, 11, 0.05), 0 16px 32px -22px rgba(11, 11, 11, 0.24);
  display: flex;
  flex-direction: column;
  height: 100%;
}

.cc-quote__mark {
  font-family: var(--font-display);
  font-size: 48px;
  line-height: 0.8;
  background: #0b0b0b;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  display: block;
}

.cc-quote__text {
  font-size: 16px;
  line-height: 1.6;
  color: var(--text);
  margin: 10px 0 20px;
  flex: 1;
}

.cc-quote__foot {
  display: flex;
  align-items: center;
  gap: 13px;
  margin-top: auto;
}

.cc-quote__avatar {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  overflow: hidden;
  flex: none;
}

.cc-quote__avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.cc-quote__meta {
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.cc-quote .cc-brand {
  margin: 0;
  font-size: 18px;
}

.cc-quote .cc-cap__result {
  align-self: flex-start;
  margin: 0;
}

/* ============================================================
   10 · MASONRY MOSAIC — CSS multi-column; each tile is the overlay
   card shape (.cc-overlay). Height variation via aspect-ratio on the
   .cc-media (the overlay card fills its media). Hover-reveal blurb
   and reduced-motion rules are already handled by .cc-overlay and
   .cc-reveal — do NOT redefine them here.
   ============================================================ */
.cc-mosaic {
  column-count: 3;
  column-gap: 20px;
}

/* Multi-column children must avoid column breaks and use margin
   instead of gap (gap is not supported in multi-column flow). */
.cc-mosaic__tile {
  break-inside: avoid;
  margin: 0 0 20px;
  display: block;
  width: 100%;
}

/* Default (mid) aspect ratio — 4:5 portrait */
.cc-mosaic__tile .cc-media { aspect-ratio: 4 / 5; }
/* Tall modifier — 3:5 */
.cc-mosaic__tile--tall .cc-media { aspect-ratio: 3 / 5; }
/* Short modifier — 1:1 square */
.cc-mosaic__tile--short .cc-media { aspect-ratio: 1 / 1; }

/* ============================================================
   11 · BRAND LOGO MARQUEE — pure-CSS seamless horizontal scroll.
   .cc-marquee wraps a flex track animated by cc-marquee-scroll
   (translateX 0 -> -50% so the duplicated set loops gaplessly).
   Edge mask-fade keeps the strip from hard-cropping at the sides.
   Hover pauses the animation (fine-pointer only).
   .cc-marquee--static: no animation; track becomes a scrollable strip.
   ============================================================ */
.cc-marquee {
  position: relative;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}

.cc-marquee__track {
  display: flex;
  gap: 20px;
  width: max-content;
  animation: cc-marquee-scroll 36s linear infinite;
}

/* Fixed card width inside the marquee — media is already 1:1 via .cc-media--fill */
.cc-marquee__track .cc-logo {
  flex: 0 0 230px;
}

@keyframes cc-marquee-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

/* Pause on hover — fine pointer only */
@media (hover: hover) and (pointer: fine) {
  .cc-marquee:hover .cc-marquee__track {
    animation-play-state: paused;
  }
}

/* Static fallback for .cc-marquee--static (JS sets this under REDUCE) */
.cc-marquee--static .cc-marquee__track {
  animation: none;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  width: auto;
}

/* ============================================================
   12 + 13 · STACKED DECKS — autoplay (12) and tap/next (13).
   One .cc-deck* CSS block powers both; only JS opts differ.
   Cards are absolutely stacked inside .cc-deck__stack; JS sets
   their y/scale/opacity transforms per depth. The cc-car__card
   shape (radius/shadow) is reused on the inner <a>. The
   .cc-car__blurb is shown only on the front card via .is-front.
   Controls reuse .cc-car__arrow / .cc-car__dots / .cc-car__bar.
   .cc-deck--static: instant cycling, no tweens; bar hidden.
   ============================================================ */
.cc-deck {
  position: relative;
  max-width: 560px;
  margin: 0 auto;
}

/* The stack area: fixed aspect ratio. Cards are absolutely
   positioned inside it; the small downward peek of stacked cards
   is allowed to extend slightly past the bottom. */
.cc-deck__stack {
  position: relative;
  aspect-ratio: 16 / 11;
  /* Extra bottom padding so stacked peek is not clipped */
  padding-bottom: 56px;
  cursor: pointer;
}

/* Each card wrapper — fills the stack area absolutely */
.cc-deck__card {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  /* height driven by the inner cc-car__card which has aspect-ratio 16/11 */
  will-change: transform, opacity;
}

/* Inner anchor: reuse the cc-car__card shape (radius + shadow)
   via the class already defined in the 07 carousel block.
   The media aspect-ratio on .cc-car__card .cc-media is 16/11. */

/* Blurb shown only when the card is front (.is-front) */
.cc-deck__card .cc-car__blurb {
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 0.4s var(--cc-ease), transform 0.4s var(--cc-ease);
}
/* .cc-deck__card.is-front's reveal is in the shared rule beside 07's. */

/* Static fallback: no transitions anywhere on deck cards */
.cc-deck--static .cc-deck__card {
  transition: none;
}

/* Hide the progress bar in static mode (no autoplay) */
.cc-deck--static .cc-car__progress {
  display: none;
}

/* Tap-deck: cursor pointer on stack already set above; the
   autoplay deck keeps pointer too (Next button still there). */

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 980px) {
  .cc-grid { grid-template-columns: repeat(2, 1fr); }
  .cc-bento { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 180px; }
  .cc-bento__feat { grid-column: span 2; grid-row: span 1; min-height: 280px; }
  .cc-mosaic { column-count: 2; }
}
@media (max-width: 860px) {
  .tcm__wrap { padding: 0 22px; }
  .cc-car { --cc-car-gap: 18px; }
  .cc-focus { --cc-focus-w: 78vw; --cc-focus-gap: 18px; }
  .cc-deck { max-width: 100%; }
}
@media (max-width: 640px) {
  .cc-grid { grid-template-columns: 1fr; }
  .cc-bento { grid-template-columns: 1fr; }
  .cc-bento__feat { grid-column: span 1; }
  .cc-split { grid-template-columns: 1fr; }
  .cc-split .cc-media--side { order: 1 !important; min-height: 220px; }
  .cc-split__body { padding: 26px 24px 30px; }
  .cc-car { --cc-car-w: calc(100% - 64px); }
  .cc-car__progress { flex-basis: 80px; }
  /* the card is ~180px of media at this width — tighten the cap and clamp the
     blurb to two lines so the caption cannot outgrow the card it sits in */
  .cc-car__card .cc-cap { padding: 16px 18px 18px; }
  /* the scrim's stops are proportional to card height, so on a 180px card the
     42%/70% ramp leaves the brand line sitting on bare photo — pull the shade
     up to match the share of the card the caption now occupies */
  .cc-car__card .cc-scrim {
    background: linear-gradient(to top, rgba(11, 11, 11, 0.88) 0%, rgba(11, 11, 11, 0.60) 48%, rgba(11, 11, 11, 0.18) 76%, transparent 100%);
  }
  .cc-car__blurb { -webkit-line-clamp: 2; margin: 8px 0 10px; }
  .cc-car__slide.is-active .cc-car__blurb { max-height: 3.1em; }
  .cc-focus { --cc-focus-w: 84vw; }
  .cc-mosaic { column-count: 1; }
  .cc-deck { max-width: 100%; }
}

/* ============================================================
   REDUCED MOTION — no clip-path reveal, no hover scale/lift; show all.
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .cc-reveal {
    clip-path: none !important;
    opacity: 1 !important;
    transition: none !important;
  }
  .cc-media img,
  .cc-card,
  .cc-chip,
  .cc-link .arrow { transition: none !important; }
  .cc-card:hover { transform: none !important; }
  .cc-card:hover .cc-media img { transform: none !important; }
  /* show blurbs that would otherwise only appear on hover */
  .cc-cap__blurb {
    max-height: none !important;
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  /* 07 carousel: no autoplay (JS handles), no transitions; the static
     scroll-snap strip is applied in JS via .cc-car--static. */
  .cc-car__arrow,
  .cc-car__dot,
  .cc-car__blurb,
  .cc-car__bar { transition: none !important; }
  .cc-car__progress { display: none; }
  .cc-car__blurb { opacity: 1 !important; transform: none !important; }
  /* 08 focused carousel: no autoplay, no filter/blur transitions; the static
     scroll-snap strip is applied in JS via .cc-focus--static. */
  .cc-focus__slide { filter: none !important; transition: none !important; }
  .cc-focus .cc-car__progress { display: none; }
  /* 11 brand logo marquee: belt-and-braces freeze alongside the JS .cc-marquee--static class. */
  .cc-marquee__track { animation: none !important; }
  /* 12+13 stacked decks: no transitions, hide progress bar; the JS .cc-deck--static class
     is applied, instant cycling only. */
  .cc-deck__card { transition: none !important; }
  .cc-deck__card .cc-car__blurb { transition: none !important; opacity: 1 !important; transform: none !important; }
  .cc-deck .cc-car__progress { display: none; }
  .cc-car__viewport { -webkit-mask-image: none; mask-image: none; }
}
