/* ==========================================================================
   WORK — plantilla de case study, reutilizada por los 5 proyectos
   ========================================================================== */

/* ---------- Intro ---------- */
.case-hero {
  padding-top: clamp(7rem, 5.5rem + 6vw, 10rem);
  padding-bottom: var(--space-lg);
}
.case-hero__kicker {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
}
.case-hero__title {
  margin-top: var(--space-sm);
  font-family: var(--font-display);
  font-weight: 500;
  font-size: clamp(3rem, 1.8rem + 8vw, 9rem);
  line-height: var(--lh-tight);
  letter-spacing: var(--tracking-tight);
  text-transform: uppercase;
  text-wrap: balance;
}
.case-hero__lede {
  margin-top: var(--space-md);
  max-width: 56ch;
  font-size: var(--fs-md);
  color: var(--color-ink-soft);
}

.case-meta {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-md);
  margin-top: var(--space-xl);
  padding-top: var(--space-sm);
  border-top: 1px solid var(--color-line);
}
@media (min-width: 720px) {
  .case-meta { grid-template-columns: repeat(4, 1fr); }
}
.case-meta dt {
  font-family: var(--font-mono);
  font-size: var(--fs-xs);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  color: var(--color-muted);
}
.case-meta dd {
  margin-top: var(--space-2xs);
  font-family: var(--font-display);
  font-size: var(--fs-lg);
}

.case-hero__cover {
  position: relative;
  overflow: hidden;
  margin-top: var(--space-xl);
  /* var(--ph-ratio, 16/9), no un 16/9 fijo: mientras convive con la clase
     .media-ph (placeholder), components.css ya define aspect-ratio con esa
     misma variable — pero .media-ph se saca del HTML en cuanto entra el
     asset real, y en ese momento esta regla (que carga DESPUÉS en el
     <head>, mismo peso de especificidad) pasaba a mandar con un 16/9 fijo,
     ignorando el --ph-ratio inline. Bug real, encontrado con Playwright:
     la portada del Showreel pide 21/9 (--ph-ratio:21/9 en el HTML) y
     renderizaba en 16/9 (1319×741 medido, ratio 1.78 en vez de 2.33) aun
     con el placeholder puesto. Con var(...) acá, el override inline sigue
     funcionando con o sin .media-ph — y las otras 4 portadas (Corporate,
     Mono Verse, Artwork, School), que no pisan --ph-ratio, siguen viendo
     exactamente el mismo 16/9 de siempre. */
  aspect-ratio: var(--ph-ratio, 16/9);
}
.case-hero__cover img,
.case-hero__cover video { width: 100%; height: 100%; object-fit: cover; }

/* El video con play explícito (portada del Showreel, animatic, campaign
   video de Mono Verse — ver [data-video-trigger] / case-video.js) nunca
   compite con prefers-reduced-motion: no arranca solo, lo elige quien hace
   click. La insignia de "play" (círculo + triángulo) y su estado
   .is-playing viven en components.css, junto a los otros badges de la
   misma familia. El tamaño del <video> dentro de .media-grid__item lo cubre
   la regla de más abajo (se le suma `video` ahí, junto a `img`/`.media-ph`). */

/* ---------- Narrative blocks (The Idea, etc.) ---------- */
.case-block {
  padding-block: var(--space-2xl);
}
.case-block--dark {
  background: var(--color-inverse-bg);
  color: var(--color-inverse-ink);
  --color-ink: var(--color-inverse-ink);
  --color-bg-alt: #ecdba8;
  --color-ink-soft: #4a3a63;
  --color-muted: #6c5c85;
  --overlay-rgb: 23, 11, 41;
  --color-emphasis: var(--color-accent-text);
  --color-mask: var(--color-inverse-bg);
  --color-focus: var(--color-accent-text);
}
.case-block__head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-md);
  margin-bottom: var(--space-lg);
  padding-bottom: var(--space-sm);
  border-bottom: 1px solid var(--color-line);
}
.case-block--dark .case-block__head { border-color: rgba(var(--overlay-rgb),0.16); }
@media (min-width: 1080px) {
  .case-block__head { grid-template-columns: 1fr 2fr; align-items: end; }
}
.case-block__title {
  font-size: var(--fs-xxl);
  text-transform: uppercase;
}
.case-block__text {
  font-size: var(--fs-md);
  max-width: 60ch;
  color: var(--color-ink-soft);
}
.case-block--dark .case-block__text { color: rgba(var(--overlay-rgb),0.75); }
.case-block__text + .case-block__text { margin-top: var(--space-sm); }

/* ---------- Media grid (visual direction / application) ---------- */
.media-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--grid-gap);
}
@media (min-width: 1080px) {
  .media-grid { grid-template-columns: repeat(12, 1fr); }
}
.media-grid__item { position: relative; overflow: hidden; }
.media-grid__item img,
.media-grid__item video,
.media-grid__item .media-ph { width: 100%; height: 100%; object-fit: cover; }
.media-grid__item[data-span="full"]  { grid-column: 1 / -1; aspect-ratio: 16/9; }
.media-grid__item[data-span="half"]  { grid-column: span 4; aspect-ratio: 4/5; }
@media (min-width: 1080px) {
  .media-grid__item[data-span="half"] { grid-column: span 6; }
}
.media-grid__item[data-span="third"] { grid-column: span 4; aspect-ratio: 3/4; }
.media-grid__item[data-span="quarter"] { grid-column: span 2; aspect-ratio: 1/1; }
@media (min-width: 1080px) {
  .media-grid__item[data-span="quarter"] { grid-column: span 3; }
}
.media-grid__caption {
  margin-top: var(--space-2xs);
  font-family: var(--font-mono);
  font-size: var(--fs-xs);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  color: var(--color-muted);
}

/* ---------- Numbered process list ---------- */
.process-list {
  display: grid;
  gap: var(--space-2xs);
}
.process-row {
  display: grid;
  grid-template-columns: 3rem 1fr;
  gap: var(--space-sm);
  padding: var(--space-xs) 0;
  border-top: 1px solid rgba(var(--overlay-rgb),0.14);
  align-items: baseline;
}
.process-row__index {
  font-family: var(--font-mono);
  font-size: var(--fs-sm);
  color: rgba(var(--overlay-rgb),0.45);
}
.process-row__text {
  font-size: var(--fs-body);
  color: rgba(var(--overlay-rgb),0.85);
}

/* ---------- Process screenshots (mosaico chico, 25 pasos) ---------- */
/* Mismo lenguaje que .frames__slot (Hall of Frames, home.css) — piezas
   chicas y densas en vez de la grilla grande de .media-grid, porque acá
   van 25 capturas del timeline de edición, no 4-6 piezas grandes. */
.process-shots {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-flow: dense;
  gap: 3px;
  margin-top: var(--space-md);
}
@media (min-width: 720px) {
  .process-shots { grid-template-columns: repeat(5, 1fr); gap: 5px; }
}
.process-shots .media-ph {
  aspect-ratio: 16 / 10;
  padding: var(--space-2xs);
}
.process-shots .media-ph__label { font-size: 9px; letter-spacing: 0; }
/* Capturas reales: mismo molde de 16/10 que el placeholder, recortadas con
   cover — llegaron en relaciones de aspecto ligeramente distintas (algunas
   más cuadradas, otras más panorámicas, según cada pantalla capturada), así
   que cover + object-position:top evita que el recorte se coma justo la
   barra de herramientas/timeline de arriba, que es la parte que suele
   identificar cada paso. */
.process-shots img {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  object-position: top;
}

/* ---------- Next project ---------- */
.next-project {
  display: block;
  padding-block: var(--space-2xl);
  overflow: hidden;
}
.next-project__label {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding-bottom: var(--space-sm);
  border-bottom: 1px solid var(--color-line);
}
.next-project__title {
  margin-top: var(--space-sm);
  font-family: var(--font-display);
  font-size: clamp(3rem, 1.5rem + 9vw, 10rem);
  text-transform: uppercase;
  letter-spacing: var(--tracking-tight);
  transition: transform var(--dur-slow) var(--ease-out);
}
.next-project:hover .next-project__title,
.next-project:focus-visible .next-project__title {
  transform: translateX(clamp(0.5rem, 1.5vw, 2rem));
}
