/* Página de inicio. Se carga después de base.css y solo añade lo propio de esta página:
   portada con el carrusel · rejilla de siete tarjetas de materiales · reproductor de muestras con ficha · campus ·
   sobre mí. Usa los tokens de base.css, así que sigue el tema claro u oscuro sin reglas propias. */

/* ---- Portada (2 de noviembre de 2026): el título a la izquierda y, desde 980 px, el carrusel de trabajos a la
   derecha, sobre un bloque de arte que llega al borde de la ventana y va de la cabecera al filete de abajo, como la
   portada de particle.ai. En pantallas menores el arte es una banda a sangre debajo del texto. El arte lleva el grano
   de risografía de los videos (grano-tinta.webp): es el toque propio sobre la idea de particle.ai.
   La portada es un contenedor (cqw): así el arte calcula cuánto le falta hasta el borde sin contar la barra de
   desplazamiento, que 100vw sí cuenta. ---- */
.portada-inicio { padding-block: 0; overflow-x: clip; border-bottom: 1px solid var(--ink); container-type: inline-size; }
.portada-rejilla { display: grid; grid-template-columns: minmax(0, 1fr); }
.portada-texto { display: grid; gap: clamp(18px, 2.4vw, 26px); align-content: center; padding-block: clamp(40px, 8vw, 64px) clamp(36px, 7vw, 52px); }
/* Fraunces con el tamaño óptico de 72: trazos más parejos y menos de revista que con el de 144 */
.portada-inicio .titular { font-size: clamp(2.5rem, 1.5rem + 3.4vw, 4.3rem); line-height: 1; letter-spacing: -.035em; font-variation-settings: "opsz" 72, "SOFT" 0, "WONK" 0; max-width: 15ch; }
.portada-inicio .entradilla { max-width: 30rem; color: var(--ink); }
.portada-inicio .antetitulo::before { background: radial-gradient(circle at 72% 30%, var(--bg) 0 46%, transparent 48%), var(--disco-a); box-shadow: none; }
/* En el móvil el antetítulo no cabe en una línea: pasa a dos */
.sin-corte { white-space: nowrap; }
@media (max-width: 459px) {
  .antetitulo-separador { display: block; width: 0; height: 0; overflow: hidden; }
}

.portada-arte {
  --fuera: max(var(--margen), (100cqw - var(--ancho)) / 2);
  position: relative; isolation: isolate; display: grid; align-content: center; min-width: 0;
  margin-inline: calc(-1 * var(--margen)); padding: clamp(28px, 7vw, 48px) var(--margen);
}
.portada-arte-fondo {
  position: absolute; inset: 0; z-index: -1; border-top: 1px solid var(--ink);
  background: url("../img/grano-tinta.webp?v=b42be2f6") 0 0 / 256px 256px, url("../img/arte-portada.svg?v=f89c224c") center / cover no-repeat, var(--tinta-naranja);
}
/* Al cargar, el papel se retira hacia la derecha y deja ver el arte, como al pasar el rodillo de la risografía:
   transform (sin repintar), 620 ms con ease-out, así que casi todo se ve en los primeros 200 ms. */
.portada-arte-fondo::after {
  content: ""; position: absolute; inset: 0; background: var(--grano) 0 0 / 512px 512px, var(--bg);
  transform-origin: 100% 50%; transform: scaleX(0); animation: retira 620ms var(--ease-out) 60ms backwards;
}
@keyframes retira { from { transform: scaleX(1); } }
@media (min-width: 980px) {
  .portada-rejilla { grid-template-columns: minmax(0, 1fr) minmax(0, 1.12fr); min-height: clamp(540px, calc(100svh - var(--cabecera-alto) - 56px), 720px); }
  .portada-texto { padding: 56px clamp(36px, 4.4vw, 64px) 64px 0; }
  .portada-arte { margin: 0 calc(-1 * var(--fuera)) 0 0; padding: clamp(36px, 4vw, 56px) var(--fuera) clamp(36px, 4vw, 56px) clamp(28px, 3.2vw, 48px); }
  .portada-arte-fondo { border-top: 0; border-left: 1px solid var(--ink); }
}

/* Carrusel de trabajos: una pieza sola, como una pantalla con su rótulo. Arriba la imagen 16:9; debajo, la ficha
   (rótulo, título y una flecha); abajo del todo, la barra de controles: flechas, contador, línea de tiempo y
   «Pausar». Todo separado por filetes de tinta, sobre el papel con grano. */
.carrusel {
  display: grid; grid-template-columns: minmax(0, 1fr); width: 100%; max-width: 40rem; margin-inline: auto; min-width: 0;
  border: 1px solid var(--tinta); background: var(--grano) 0 0 / 512px 512px, var(--papel-claro);
}
@media (min-width: 980px) { .carrusel { max-width: none; } }
.carrusel-ventana { min-width: 0; }
.carrusel-pista {
  list-style: none; margin: 0; padding: 0; display: grid; grid-auto-flow: column; grid-auto-columns: 100%;
  overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scrollbar-width: none;
}
.carrusel-pista::-webkit-scrollbar { display: none; }
/* Las diapositivas comparten fila, así que miden lo que la más alta: la ficha ocupa lo que sobra y no queda hueco */
.carrusel-diapo { scroll-snap-align: start; scroll-snap-stop: always; display: grid; grid-template-rows: auto 1fr; min-width: 0; }
.carrusel-pantalla { position: relative; display: block; aspect-ratio: 16 / 9; overflow: hidden; background: var(--surface-2); border-bottom: 1px solid var(--ink); }
.carrusel-pantalla img, .carrusel-pantalla video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: top center; display: block; }
/* El video aparece sobre el cartel cuando ya anda, con un fundido corto: sin salto si tarda en cargar */
.carrusel-pantalla video { opacity: 0; transition: opacity 240ms var(--ease-out); }
.carrusel-pantalla video.andando { opacity: 1; }
.carrusel-ficha { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-content: center; column-gap: 16px; row-gap: 3px; padding: 14px 14px 15px 18px; }
.carrusel-ficha .etiqueta { grid-column: 1; color: var(--ink-2); }
.carrusel-titulo { grid-column: 1; font: 600 1.2rem/1.25 var(--font-titular); font-variation-settings: "opsz" 72, "SOFT" 0, "WONK" 0; letter-spacing: -.01em; }
.carrusel-titulo a { color: var(--ink); text-decoration: none; }
/* El título es el enlace y cubre toda la ficha */
.carrusel-titulo a::after { content: ""; position: absolute; inset: 0; }
.carrusel-ir {
  grid-column: 2; grid-row: 1 / span 2; align-self: center; display: inline-grid; place-items: center; width: 40px; height: 40px;
  border: 1px solid var(--ink); color: var(--ink); transition: background-color var(--dur-hover) ease;
}
.carrusel-ir .carrusel-flecha { transition: transform var(--dur-entrar) var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .carrusel-ficha:hover .carrusel-ir { color: var(--tinta); background: var(--disco-a); }
  .carrusel-ficha:hover .carrusel-ir .carrusel-flecha { transform: translateX(1px) rotate(45deg); }
  .carrusel-ficha:hover .carrusel-titulo a { text-decoration: underline; text-decoration-color: var(--subraya); text-decoration-thickness: 2px; text-underline-offset: .14em; }
}

.carrusel-controles { display: flex; align-items: stretch; min-height: 48px; border-top: 1px solid var(--ink); }
.carrusel-boton, .carrusel-pausa {
  flex: none; margin: 0; padding: 0; cursor: pointer; color: var(--ink); background: transparent; border: 0; border-radius: 0;
  transition: background-color var(--dur-hover) ease;
}
.carrusel-boton { display: inline-grid; place-items: center; width: 48px; border-right: 1px solid var(--ink); }
.carrusel-pausa { min-width: 7.6em; padding-inline: 16px; border-left: 1px solid var(--ink); font: 400 .74rem/1 var(--font-rotulo); letter-spacing: .06em; text-transform: uppercase; }
@media (hover: hover) and (pointer: fine) { .carrusel-boton:hover, .carrusel-pausa:hover { background: var(--surface); } }
.carrusel-boton:active, .carrusel-pausa:active { background: var(--surface); }
/* Al pulsar, la flecha cede un poco (no la celda: la barra no se mueve) */
.carrusel-flecha { display: block; width: 8px; height: 8px; border-top: 2px solid currentColor; border-right: 2px solid currentColor; transform: translateX(-2px) rotate(45deg); transition: transform var(--dur-pulsar) var(--ease-out); }
.carrusel-flecha-izq { transform: translateX(2px) rotate(-135deg); }
.carrusel-boton:active .carrusel-flecha { transform: translateX(-2px) rotate(45deg) scale(.82); }
.carrusel-boton:active .carrusel-flecha-izq { transform: translateX(2px) rotate(-135deg) scale(.82); }
.carrusel-contador { display: flex; align-items: center; gap: .5ch; padding: 0 14px 0 16px; font: 400 .8rem/1 var(--font-rotulo); letter-spacing: .06em; color: var(--ink-2); font-variant-numeric: tabular-nums; white-space: nowrap; }
.carrusel-contador span { display: inline-block; color: var(--ink); }
/* El número nuevo sube 4 px al cambiar (180 ms) */
.carrusel-contador span.rueda { animation: rueda 180ms var(--ease-out); }
@keyframes rueda { from { opacity: 0; transform: translateY(4px); } }
/* La línea de tiempo: se llena de izquierda a derecha en lo que tarda en pasar (inicio.js pone la duración) */
.carrusel-progreso { position: relative; flex: 1; align-self: center; height: 2px; min-width: 24px; margin-right: 16px; background: var(--rule); overflow: hidden; }
.carrusel-progreso span { position: absolute; inset: 0; background: var(--ink); transform: scaleX(0); transform-origin: 0 50%; }
.carrusel-progreso span.llena { transform: scaleX(1); transition: transform var(--espera, 7000ms) linear; }
/* De la última a la primera no se rebobina la tira: funde y aparece la primera (inicio.js) */
.carrusel-pista { transition: opacity 160ms var(--ease-out); }
.carrusel-pista.fundida { opacity: 0; }
@media (prefers-reduced-motion: reduce) {
  .portada-arte-fondo::after { animation: none; transform: scaleX(0); }
  .carrusel-contador span.rueda { animation: none; }
}
@media (forced-colors: active) {
  .portada-arte-fondo { display: none; }
  .carrusel-progreso span { background: Highlight; }
}

/* ---- Franja de normas y herramientas, debajo de la portada: celdas separadas por filetes, en la letra de los
   rótulos, cada una con un cuadrado de una tinta. Dos columnas en el móvil, tres en tableta y seis en escritorio. ---- */
.franja-tecnica { border-bottom: 1px solid var(--ink); background: var(--grano) 0 0 / 512px 512px, var(--papel-claro); }
.franja-lista {
  list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  overflow: hidden; border-left: 1px solid var(--ink); border-right: 1px solid var(--ink);
}
.franja-lista li {
  display: flex; align-items: center; gap: 10px; min-height: 52px; padding: 12px 14px;
  box-shadow: 1px 0 0 var(--ink), 0 1px 0 var(--ink);
  font: 400 .74rem/1.3 var(--font-rotulo); letter-spacing: .05em; text-transform: uppercase; color: var(--ink);
}
.franja-lista li::before { content: ""; flex: none; width: 10px; height: 10px; border: 1px solid var(--tinta); background: var(--disco-a); }
.franja-lista li:nth-child(6n + 2)::before { background: var(--disco-b); }
.franja-lista li:nth-child(6n + 3)::before { background: var(--tinta-naranja); }
.franja-lista li:nth-child(6n + 4)::before { background: var(--cruce); }
.franja-lista li:nth-child(6n + 5)::before { background: var(--tinta-azul); }
.franja-lista li:nth-child(6n + 6)::before { background: repeating-linear-gradient(-45deg, var(--tinta) 0 1.5px, transparent 1.5px 3.5px), var(--papel-claro); }
/* La última fila no lleva filete abajo: lo pone el borde de la franja */
.franja-lista { margin-bottom: -1px; }
@media (min-width: 640px) { .franja-lista { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 1100px) { .franja-lista { grid-template-columns: repeat(6, minmax(0, 1fr)); } .franja-lista li { padding-inline: 16px; } }
@media (forced-colors: active) { .franja-lista li::before { border-color: CanvasText; } }

/* Qué hago: cuatro celdas con filetes, el enlace al pie */
.servicios h3 { font-size: 1.4rem; }

/* ---- Materiales de formación ---- */
.servicio-materiales { display: grid; gap: clamp(18px, 2.4vw, 24px); }
.servicio-materiales > .seccion-cabecera { margin-bottom: clamp(4px, 1.6vw, 20px); }

/* Índice con filetes: miniatura, nombre, qué es y una flecha. En el móvil, la miniatura a la izquierda y el texto a
   su lado; desde 760 px, cuatro columnas. Toda la fila es el enlace (indice-enlace::after la cubre). Al pasar el puntero,
   la flecha se pone amarilla y avanza 2 px, y el nombre se subraya (150 ms, solo con ratón). */
.indice { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--ink); }
.indice-fila {
  position: relative; display: grid; grid-template-columns: 112px minmax(0, 1fr); column-gap: 16px; row-gap: 4px;
  align-items: start; padding: 16px 0; border-bottom: 1px solid var(--ink);
}
.indice-cartel { grid-row: 1 / span 2; aspect-ratio: 16 / 9; overflow: hidden; border: 1px solid var(--ink); background: var(--surface-2); }
.indice-cartel img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center 30%; }
.indice-lamina img { object-position: top; }
.indice-fila h3 { font: 600 1.14rem/1.25 var(--font-titular); font-variation-settings: "opsz" 72, "SOFT" 0, "WONK" 0; letter-spacing: -.01em; }
.indice-enlace { color: var(--ink); text-decoration: none; }
.indice-enlace::after { content: ""; position: absolute; inset: 0; }
.indice-fila p { color: var(--ink-2); font-size: .97rem; line-height: 1.5; max-width: 38rem; }
.indice-ir { display: none; }
@media (min-width: 760px) {
  .indice-fila { grid-template-columns: 176px minmax(0, 14rem) minmax(0, 1fr) 40px; column-gap: clamp(20px, 3vw, 40px); align-items: center; padding: 18px 0; }
  .indice-cartel { grid-row: auto; }
  .indice-fila h3 { font-size: 1.3rem; }
  .indice-ir { display: inline-grid; place-items: center; width: 40px; height: 40px; border: 1px solid var(--ink); color: var(--ink); transition: background-color var(--dur-hover) ease; }
  .indice-ir .carrusel-flecha { transition: transform var(--dur-entrar) var(--ease-out); }
}
@media (hover: hover) and (pointer: fine) {
  .indice-fila:hover .indice-ir { color: var(--tinta); background: var(--disco-a); }
  .indice-fila:hover .indice-ir .carrusel-flecha { transform: translateX(0) rotate(45deg); }
  .indice-fila:hover .indice-enlace { text-decoration: underline; text-decoration-color: var(--subraya); text-decoration-thickness: 2px; text-underline-offset: .14em; }
}
.servicio-materiales > .acciones { margin-top: 4px; }

/* ---- Muestras: arriba, los estilos en pestañas con filetes (la elegida en negro con la letra amarilla, como las
   barras de los gráficos de particle.ai); en medio, el video y su ficha en dos celdas (lado a lado desde 1024 px);
   abajo, la versión de los videos y la nota del logo. ---- */
.muestras-modulo { gap: 0; padding: 0; background: var(--grano) 0 0 / 512px 512px, var(--papel-claro); }
.muestras-modulo .fila-control { display: block; border-bottom: 1px solid var(--ink); overflow: hidden; }
.muestras-modulo [data-selector-muestras] {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; max-width: none; gap: 0; padding: 0;
  border: 0; border-radius: 0; background: transparent; margin-bottom: -1px;
}
.muestras-modulo [data-selector-muestras] button {
  min-height: 52px; padding: 10px 12px; border-radius: 0; text-align: center; color: var(--ink);
  box-shadow: 1px 0 0 var(--ink), 0 1px 0 var(--ink); transition: background-color var(--dur-hover) ease, color var(--dur-hover) ease;
}
.muestras-modulo [data-selector-muestras] button:last-child:nth-child(odd) { grid-column: 1 / -1; }
@media (hover: hover) and (pointer: fine) { .muestras-modulo [data-selector-muestras] button:hover { background: var(--surface); } }
.muestras-modulo [data-selector-muestras] button[aria-checked="true"] { color: var(--disco-a); background: var(--negro); }
@media (min-width: 760px) {
  .muestras-modulo [data-selector-muestras] { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  .muestras-modulo [data-selector-muestras] button:last-child:nth-child(odd) { grid-column: auto; }
}
.muestras-escenario { display: grid; grid-template-columns: minmax(0, 1fr); align-items: stretch; }
.muestras-escenario > .pantalla { margin: clamp(14px, 2.4vw, 24px); }
.muestras-modulo .pantalla { box-shadow: var(--shadow-sm); }
.muestras-escenario > .ficha { padding: clamp(18px, 2.6vw, 28px); border-top: 1px solid var(--ink); }
@media (min-width: 1024px) {
  .muestras-escenario { grid-template-columns: minmax(0, 1.85fr) minmax(0, 1fr); }
  .muestras-escenario > .ficha { border-top: 0; border-left: 1px solid var(--ink); }
}
.ficha { display: grid; gap: 10px; align-content: start; min-width: 0; }
.ficha h3 { font-size: clamp(1.2rem, 1.1rem + .4vw, 1.4rem); line-height: 1.25; }
.ficha .ficha-texto { font-size: 1rem; line-height: 1.6; color: var(--ink-2); max-width: 40rem; }
.ficha .ficha-uso { margin-top: 4px; padding-top: 12px; border-top: 1px solid var(--rule); font: 500 .92rem/1.5 var(--font-display); color: var(--ink-2); max-width: 40rem; }
.ficha .ficha-uso b { font-weight: 700; color: var(--ink); }
.muestras-pie { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 24px; padding: 12px clamp(14px, 2.4vw, 24px); border-top: 1px solid var(--ink); }
.muestras-pie .pie-figura { margin: 0; }
.muestras-pie [data-version-videos][hidden] + .pie-figura { margin-left: auto; }

/* Sin JavaScript (dentro de un <noscript>): los otros cuatro videos, cada uno con su ficha, en dos columnas desde 760 px */
.muestras-otras { list-style: none; margin: 0; padding: clamp(14px, 2.4vw, 24px); display: grid; gap: clamp(24px, 3vw, 32px); grid-template-columns: minmax(0, 1fr); }
@media (min-width: 760px) { .muestras-otras { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.muestras-otras > li { display: grid; gap: 14px; align-content: start; min-width: 0; }
.muestras-acciones { margin-top: clamp(20px, 3vw, 28px); }

/* ---- Campus: el segundo servicio, en un recuadro después de las muestras; texto y cartel de la maqueta lado a lado
   desde 760 px ---- */
.servicio-campus { gap: clamp(20px, 3vw, 40px); align-items: center; }
.servicio-campus-texto { display: grid; gap: 14px; align-content: start; min-width: 0; }
.servicio-campus-texto h2 { font-size: clamp(1.4rem, 1.2rem + .8vw, 1.75rem); }
.servicio-campus-texto p { color: var(--ink-2); max-width: 34rem; }
.servicio-campus-texto .acciones { margin-top: 6px; }
@media (min-width: 760px) {
  .servicio-campus { grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); }
}

/* ---- Compromisos de calidad ---- */
.calidad .tarjeta h3 { font-size: 1.1rem; line-height: 1.3; }

/* ---- Sobre mí: separado de «Cómo trabajo» por una línea; título y texto lado a lado desde 900 px ---- */
.sobre-mi-interior {
  display: grid; gap: 16px 48px; grid-template-columns: minmax(0, 1fr);
  padding-top: clamp(40px, 5vw, 64px); border-top: 1px solid var(--rule);
}
@media (min-width: 900px) { .sobre-mi-interior { grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); } }
.sobre-mi-texto { display: grid; gap: 22px; align-content: start; min-width: 0; }
.sobre-mi-texto p { font-size: clamp(1.06rem, 1rem + .3vw, 1.18rem); line-height: 1.6; color: var(--ink-2); max-width: 40rem; text-wrap: pretty; }

/* ---- Impresión: sin video ni reproductor; quedan los textos y las fichas ---- */
@media print {
  .portada-arte, .muestras-modulo .pantalla, .muestras-modulo .fila-control { display: none !important; }
  .portada-rejilla { grid-template-columns: minmax(0, 1fr); grid-template-areas: "antetitulo" "titular" "entradilla" "acciones"; }
}

/* ---- Foco con el teclado en las piezas con filetes: el contorno va por dentro de la celda, porque la barra recorta lo
   que sobresale; en las filas y en la ficha, alrededor de toda la pieza que abre el enlace. Al pulsar una pestaña con
   filetes no se encoge (moverían los filetes): cambia el fondo. ---- */
.carrusel-boton:focus-visible, .carrusel-pausa:focus-visible, .muestras-modulo [data-selector-muestras] button:focus-visible { outline-offset: -4px; }
.carrusel-ficha:has(.carrusel-titulo a:focus-visible), .indice-fila:has(.indice-enlace:focus-visible) { outline: 2px solid var(--accent); outline-offset: -2px; }
.carrusel-titulo a:focus-visible, .indice-enlace:focus-visible { outline: none; text-decoration: underline; text-decoration-color: var(--accent); text-decoration-thickness: 2px; text-underline-offset: .14em; }
.muestras-modulo [data-selector-muestras] button:active:not(:focus-visible) { transform: none; }
.muestras-modulo [data-selector-muestras] button:active:not([aria-checked="true"]) { background: var(--surface); }
