/* =====================================================================
   COCUYO APP — base (css/base.css)
   ---------------------------------------------------------------------
   TONOS: el dueño pidió un clon de DramaBox (mirar) y de Runway (crear)
   y cambiar las tonalidades después. Todos los colores viven en este
   bloque :root. Para pasar a los colores de Cocuyo basta con cambiar
   --db-acento / --db-grad / --rw-acento (p. ej. a --cocuyo-lima).
   IDIOMAS (ronda 3, 25-sep-2026): los márgenes, rellenos y posiciones van
   con propiedades lógicas (-inline-start/-end, inset-inline…) para que la
   app se voltee sola en árabe, hebreo, persa y urdu (<html dir="rtl">).
   Quedan físicos a propósito: los pares simétricos (left y right iguales),
   lo centrado con left: 50% + translateX(-50%), el ajuste óptico del
   triángulo de play (no se voltea) y lo del vídeo que va de izquierda a
   derecha (barras, tiempos y controles). Lo que no se puede decir con
   propiedades lógicas va en los bloques [dir="rtl"] al final de cada hoja.
   ===================================================================== */
@font-face {
  font-family: "Geist";
  src: url("../fonts/geist-latin.woff2") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}

@font-face {
  font-family: "Fraunces";
  src: url("../fonts/fraunces-latin.woff2") format("woff2");
  font-weight: 400 900;
  font-display: swap;
}

/* ---------- ESTILO COCUYO (tema Lime Frost de 21st.dev sobre negro) ----------
   Decisión del dueño (23-sep-2026): clon de DramaBox + Runway con el estilo
   de Cocuyo. Los tonos de las apps originales quedan anotados por si se
   quieren comparar: DramaBox #F8024C (rosa), Runway #3D3DF5 (azul). */
:root {
  --lima: #aff33e;                 /* Lime Frost primary / ring */
  --lima-clara: #d9ff8a;           /* hover y degradados */
  --verde-profundo: #14532d;       /* Lime Frost accent */
  --negro: #050505;                /* fondo Cocuyo (el dueño lo quiso negro, no azulado) */
  --sobre-acento: #050505;         /* texto encima de la lima */
  --glow: 0 0 22px rgba(175, 243, 62, .35), 0 0 6px rgba(175, 243, 62, .45);
  --escarcha: rgba(18, 18, 18, .72);
  --escarcha-borde: rgba(248, 250, 252, .12);

  /* --- Mirar (estructura DramaBox) --- */
  --db-fondo: var(--negro);
  --db-sup: #121212;
  --db-sup2: #1a1a1a;
  --db-sup3: #262626;
  --db-linea: rgba(255, 255, 255, .08);
  --db-texto: #f8fafc;
  --db-texto2: #cbd5e1;
  --db-texto3: #94a3b8;
  --db-acento: var(--lima);
  --db-grad: linear-gradient(90deg, var(--lima), var(--lima-clara));
  --db-vip-grad: linear-gradient(110deg, #1d6b3b, var(--verde-profundo) 55%, #0a2a16);
  --db-vip-texto: var(--lima-clara);
  --db-moneda: #ffc53d;
  --db-nav: rgba(5, 5, 5, .86);
  /* --- Crear (estructura Runway) --- */
  --rw-fondo: #000000;
  --rw-sup: #111211;
  --rw-sup2: #1a1c1a;
  --rw-sup3: #262826;
  --rw-linea: rgba(255, 255, 255, .1);
  --rw-texto: #f8fafc;
  --rw-texto2: rgba(248, 250, 252, .66);
  --rw-texto3: rgba(248, 250, 252, .42);
  --rw-acento: var(--lima);
  --rw-nav: rgba(0, 0, 0, .86);
  /* --- Marca --- */
  --cocuyo-lima: var(--lima);
  --cocuyo-negro: var(--negro);

  --nav-alto: 58px;
  --ancho: 480px;
  --radio: 12px;
  --seg-arriba: env(safe-area-inset-top, 0px);
  --seg-abajo: env(safe-area-inset-bottom, 0px);
}
body[data-tema="drama"] {
  --fondo: var(--db-fondo); --sup: var(--db-sup); --sup2: var(--db-sup2); --sup3: var(--db-sup3);
  --linea: var(--db-linea); --texto: var(--db-texto); --texto2: var(--db-texto2); --texto3: var(--db-texto3);
  --acento: var(--db-acento); --acento-suave: rgba(175, 243, 62, .14); --grad: var(--db-grad); --nav-fondo: var(--db-nav);
}
body[data-tema="crear"] {
  --fondo: var(--rw-fondo); --sup: var(--rw-sup); --sup2: var(--rw-sup2); --sup3: var(--rw-sup3);
  --linea: var(--rw-linea); --texto: var(--rw-texto); --texto2: var(--rw-texto2); --texto3: var(--rw-texto3);
  --acento: var(--rw-acento); --acento-suave: rgba(175, 243, 62, .14); --grad: var(--rw-acento); --nav-fondo: var(--rw-nav);
}

/* ---------- Reset ---------- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
[hidden] { display: none !important; }
html { -webkit-text-size-adjust: 100%; background: #000; }
/* App de móvil: sin barra de desplazamiento visible también en el ordenador
   (cocuyo.ai/app-prueba). Allí ocupaba 16 px y la barra de abajo, que es fija,
   quedaba debajo. Se sigue desplazando con el dedo, la rueda o el teclado. */
html { scrollbar-width: none; }
html::-webkit-scrollbar { display: none; }
body {
  min-height: 100dvh; background: var(--fondo); color: var(--texto);
  font: 14px/1.4 "Geist", Roboto, -apple-system, "Segoe UI", system-ui, sans-serif; letter-spacing: -0.01em;
  -webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent;
  overscroll-behavior-y: none; transition: background-color .2s;
}
img, video { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; text-align: inherit; }
input, textarea, select { font: inherit; color: inherit; }
ul { list-style: none; }
.ic { width: 24px; height: 24px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; border-radius: 6px; }

/* ---------- Estructura ---------- */
.app { position: relative; max-width: var(--ancho); margin: 0 auto; min-height: 100dvh; background: var(--fondo); }
.tab { min-height: 100dvh; padding-bottom: calc(var(--nav-alto) + var(--seg-abajo)); }
#paginas .pagina {
  position: fixed; inset: 0; z-index: 50; max-width: var(--ancho); margin: 0 auto;
  background: var(--fondo); overflow-y: auto; overscroll-behavior: contain;
  opacity: 0; transform: translateX(6%); transition: opacity .18s, transform .22s ease-out;
}
#paginas .pagina.visible { opacity: 1; transform: none; }
/* Con una página abierta, la pestaña de detrás no se desplaza: si no, en un
   navegador de ordenador (cocuyo.ai/app-prueba) su barra de desplazamiento
   restaba 16 px y la página quedaba cortada por la derecha. En el móvil la
   barra no ocupa sitio, pero así tampoco se mueve el fondo al deslizar. */
html:has(#paginas .pagina.visible) { overflow: hidden; }
.pagina-cuerpo { padding-bottom: calc(24px + var(--seg-abajo)); }

/* Cabecera de página: atrás · título · acción. Los lados miden al menos lo
   que su contenido (una acción de texto larga en alemán o finés ya no pisa el
   título) y se reparten igual el resto: el título sigue centrado si cabe. */
.cab {
  position: sticky; top: 0; z-index: 10; display: grid; align-items: center;
  grid-template-columns: minmax(max-content, 1fr) minmax(0, auto) minmax(max-content, 1fr);
  min-height: calc(48px + var(--seg-arriba)); padding: var(--seg-arriba) 4px 0; background: var(--fondo);
}
.cab > :not(h1) { min-width: 44px; }
.cab > :first-child { justify-self: start; }
.cab > :last-child:not(h1) { justify-self: end; }
.cab h1 { font-size: 17px; font-weight: 600; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cab .accion-texto { justify-self: end; padding: 0 12px; font-size: 14px; color: var(--texto2); white-space: nowrap; }
.btn-icono { width: 44px; height: 44px; display: grid; place-items: center; border-radius: 50%; }
.btn-icono .ic { width: 24px; height: 24px; }

/* ---------- Barra inferior ---------- */
.nav {
  position: fixed; z-index: 40; left: 0; right: 0; bottom: 0; max-width: var(--ancho); margin: 0 auto;
  display: grid; grid-template-columns: repeat(5, 1fr);
  height: calc(var(--nav-alto) + var(--seg-abajo)); padding-bottom: var(--seg-abajo);
  background: var(--nav-fondo); border-top: 1px solid var(--escarcha-borde);
  backdrop-filter: blur(18px) saturate(1.2); -webkit-backdrop-filter: blur(18px) saturate(1.2);
}
.nav a { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; font-size: 10.5px; color: var(--texto3); }
.nav a .ic { width: 25px; height: 25px; }
.nav a[aria-current] { color: var(--acento); }
body[data-tema="drama"] .nav a[aria-current] .ic { fill: var(--acento); stroke: var(--acento); }
body[data-tema="drama"] .nav a[aria-current] .ic path:last-child { stroke: var(--negro); }
.nav a[aria-current] .ic { filter: drop-shadow(0 0 6px rgba(175, 243, 62, .55)); }
body[data-tema="crear"] .nav a[aria-current] { color: var(--lima); }
body[data-tab="parati"] .nav { background: #000; border-top-color: transparent; }

/* ---------- Botones ---------- */
/* Textos largos (alemán, finés…): el botón no pasa del ancho de su caja y,
   si ni con todo ese ancho cabe en una línea, parte en dos (caben en su
   alto). Con flex-shrink: 0 no se estrecha antes que el texto de al lado. */
.btn-principal, .btn-suave, .btn-peligro, .btn-borde {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px; flex-shrink: 0; max-width: 100%;
  height: 44px; padding: 0 22px; border-radius: 999px; font-size: 15px; font-weight: 600; line-height: 1.15;
  text-align: center; overflow-wrap: break-word;
}
.btn-principal { background: var(--grad); color: var(--sobre-acento); box-shadow: var(--glow); }
.btn-principal:active { transform: scale(.98); }
.btn-principal:disabled { opacity: .4; box-shadow: none; }
.btn-suave { background: var(--sup3); color: var(--texto); }
.btn-peligro { background: #d62d3d; color: #fff; }
.btn-borde { border: 1px solid var(--linea); color: var(--texto); }
.btn-bloque { width: 100%; }
.btn-chico { height: 30px; padding: 0 14px; font-size: 13px; }
.btn-principal .ic, .btn-suave .ic { width: 18px; height: 18px; }

/* ---------- Capas: hojas inferiores y diálogos ---------- */
#capas .capa { position: fixed; inset: 0; z-index: 100; }
.capa-velo { position: absolute; inset: 0; background: rgba(0, 0, 0, .62); opacity: 0; transition: opacity .2s; }
.capa.abierta .capa-velo { opacity: 1; }
.capa.hoja .capa-caja, .capa.hoja-alta .capa-caja {
  position: absolute; left: 0; right: 0; bottom: 0; max-width: var(--ancho); margin: 0 auto;
  max-height: 86dvh; overflow-y: auto; overscroll-behavior: contain;
  padding-bottom: calc(16px + var(--seg-abajo)); border-radius: 16px 16px 0 0;
  background: var(--sup); color: var(--texto); border-top: 1px solid var(--escarcha-borde);
  transform: translateY(100%); transition: transform .24s cubic-bezier(.2, .8, .2, 1);
}
.capa.hoja-alta .capa-caja { height: 78dvh; }
.capa.abierta .capa-caja { transform: none; }
.hoja-asa { width: 36px; height: 4px; margin: 8px auto 4px; border-radius: 2px; background: rgba(255, 255, 255, .2); }
.hoja-titulo { padding: 10px 16px 12px; font-size: 16px; font-weight: 600; text-align: center; }
.hoja-cab { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; padding: 12px 14px; }
.hoja-cab h3 { font-size: 16px; font-weight: 600; }
.hoja-cab .btn-texto { justify-self: start; color: var(--texto2); font-size: 15px; }
.capa.dialogo .capa-caja {
  position: absolute; left: 50%; top: 50%; width: min(320px, 86vw);
  padding: 22px 20px 18px; border-radius: 14px; background: var(--sup2); text-align: center;
  transform: translate(-50%, -46%) scale(.96); opacity: 0; transition: transform .18s, opacity .18s;
}
.capa.dialogo.abierta .capa-caja { transform: translate(-50%, -50%); opacity: 1; }
.capa.dialogo h3 { font-size: 17px; font-weight: 600; }
.capa.dialogo p { margin-top: 8px; color: var(--texto2); font-size: 14px; }
.dialogo-botones { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 20px; }
.dialogo-botones button { height: auto; min-height: 42px; padding: 4px 12px; }   /* crece si el texto parte en líneas */
.capa.completa .capa-caja { position: absolute; inset: 0; max-width: var(--ancho); margin: 0 auto; background: #000; }

.opciones { padding: 0 8px 8px; }
.opciones button { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 52px; padding: 0 12px; border-radius: 10px; font-size: 15px; }
.opciones button small { display: block; font-size: 12px; color: var(--texto3); }
.opciones button .ic { width: 20px; height: 20px; color: var(--acento); visibility: hidden; }
.opciones button[aria-pressed="true"] { color: var(--acento); }
.opciones button[aria-pressed="true"] .ic { visibility: visible; }

/* ---------- Estados ---------- */
.estado-carga { display: grid; place-items: center; gap: 12px; padding: 80px 20px; color: var(--texto3); font-size: 13px; }
.giro { width: 28px; height: 28px; border-radius: 50%; border: 3px solid var(--sup3); border-top-color: var(--acento); animation: girar .8s linear infinite; }
@keyframes girar { to { transform: rotate(360deg); } }
.estado-vacio { padding: 72px 32px; text-align: center; color: var(--texto3); font-size: 14px; }
.estado-vacio strong { display: block; margin-bottom: 6px; color: var(--texto); font-size: 16px; font-weight: 600; }
.estado-vacio .btn-principal, .estado-vacio .btn-suave { margin-top: 18px; }

/* ---------- Aviso breve ---------- */
.aviso {
  position: fixed; z-index: 200; left: 50%; bottom: calc(var(--nav-alto) + var(--seg-abajo) + 80px); transform: translateX(-50%);
  width: max-content; max-width: calc(100% - 48px); padding: 11px 18px; border-radius: 10px;
  background: rgba(38, 38, 40, .96); color: #fff; font-size: 14px; text-align: center;
  box-shadow: 0 8px 30px rgba(0, 0, 0, .5);
}
.aviso.entra { animation: avisoEntra .2s ease-out; }
@keyframes avisoEntra { from { opacity: 0; transform: translate(-50%, 8px); } }

/* ---------- Sin servicio ---------- */
.sin-servicio { position: fixed; inset: 0; z-index: 300; display: grid; place-content: center; justify-items: center; gap: 12px; padding: 32px; background: #000; text-align: center; }
.sin-servicio h1 { font-size: 20px; }
.sin-servicio p { color: rgba(255, 255, 255, .6); max-width: 300px; }

/* ---------- Marca de modo demostración ---------- */
body.demo::after {
  content: "DEMO"; position: fixed; z-index: 400; top: calc(var(--seg-arriba) + 4px); left: 50%; transform: translateX(-50%);
  padding: 1px 7px; border-radius: 6px; background: rgba(255, 180, 0, .9); color: #000; font-size: 9px; font-weight: 800; letter-spacing: .08em;
  pointer-events: none;
}

/* Escritorio: la app se ve con ancho de móvil */
@media (min-width: 540px) {
  html { background: #0a0a0a; }
  .app { box-shadow: 0 0 0 1px rgba(255, 255, 255, .06); }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001s !important; transition-duration: .001s !important; }
}

/* ---- iQIYI: barra decidida por el servidor y pestaña Minidramas (24-sep-2026) ---- */
/* La barra puede traer otro número de pestañas (catalogo?accion=config): main.js pone --nav-n. */
.nav { grid-template-columns: repeat(var(--nav-n, 5), minmax(0, 1fr)); }
/* Nombres de pestaña largos (alemán, finés…): con puntos suspensivos, sin salirse. */
.nav a { min-width: 0; }
.nav a span { max-width: 100%; padding: 0 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body[data-tab="minidramas"] .nav { background: #000; border-top-color: transparent; }

/* Minidramas: cabecera propia con Inicio · Para ti · Mi lista */
.md-cab { position: sticky; top: 0; z-index: 20; display: grid; grid-template-columns: 44px 1fr 44px; align-items: center;
  min-height: calc(48px + var(--seg-arriba)); padding: var(--seg-arriba) 4px 0; background: #000; }
.md-subtabs { grid-column: 2; min-width: 0; display: flex; justify-content: center; gap: 24px; }
/* Nombres largos (alemán, finés…): parten en dos líneas en vez de salirse de la cabecera. */
.md-subtabs button { position: relative; padding: 6px 0 8px; font-size: 16px; font-weight: 700; color: var(--texto3); text-wrap: balance; }
.md-subtabs button[aria-selected="true"] { color: var(--texto); }
.md-subtabs button[aria-selected="true"]::after { content: ""; position: absolute; left: 50%; bottom: 0; width: 16px; height: 3px; margin-left: -8px; border-radius: 2px; background: var(--lima); box-shadow: 0 0 8px rgba(175, 243, 62, .7); }
.md-buscar { grid-column: 3; color: var(--texto2); }
.md-panel { padding-top: 4px; }
/* En «Para ti» la cabecera flota sobre el vídeo y el feed ocupa toda la pantalla. */
.md-en-feed .md-cab { position: fixed; left: 0; right: 0; max-width: var(--ancho); margin: 0 auto; background: linear-gradient(rgba(0, 0, 0, .55), transparent); }
.md-en-feed .md-subtabs button { color: rgba(255, 255, 255, .72); text-shadow: 0 1px 3px rgba(0, 0, 0, .6); }
.md-en-feed .md-subtabs button[aria-selected="true"] { color: var(--texto); }
.md-en-feed .md-buscar { visibility: hidden; }   /* ahí va el botón de sonido del visor */
.md-feed { padding-top: 0; }
.md-feed .vs, .md-feed > .estado-carga, .md-feed > .estado-vacio { height: calc(100dvh - var(--nav-alto) - var(--seg-abajo)); }
.md-feed > .estado-carga, .md-feed > .estado-vacio { display: grid; place-content: center; justify-items: center; }

/* =====================================================================
   IDIOMAS (ronda 3, 25-sep-2026)
   ===================================================================== */
/* Escrituras que se unen (árabe, persa, urdu) o que no admiten espaciado
   entre letras (hebreo, hindi, bengalí, tamil, tailandés, chino, japonés y
   coreano): sin letter-spacing. La marca COCUYO va en latín y lo conserva. */
:root:is(:lang(ar), :lang(fa), :lang(ur), :lang(he), :lang(hi), :lang(bn), :lang(ta), :lang(th), :lang(zh), :lang(ja), :lang(ko)) body,
:root:is(:lang(ar), :lang(fa), :lang(ur), :lang(he), :lang(hi), :lang(bn), :lang(ta), :lang(th), :lang(zh), :lang(ja), :lang(ko)) body :not(.marca-cocuyo, .marca-cocuyo *) {
  letter-spacing: normal;
}

/* ---------- Derecha a izquierda (ar, he, fa, ur) ---------- */
/* Iconos con dirección (ui.js les pone data-ic): «atrás» y la flecha de las
   filas apuntan al otro lado. «enviar» es una flecha hacia arriba y el play
   es de vídeo: esos no se voltean. Dentro de algo que va a propósito de
   izquierda a derecha (dir="ltr", p. ej. el comparador antes/después) tampoco. */
[dir="rtl"] .ic:is([data-ic="atras"], [data-ic="flecha"]):not([dir="ltr"] *) { transform: scaleX(-1); }
/* Las páginas entran por la izquierda. */
[dir="rtl"] #paginas .pagina:not(.visible) { transform: translateX(-6%); }
/* Un correo se escribe de izquierda a derecha; pegado al lado del icono. */
[dir="rtl"] input[type="email"] { direction: ltr; text-align: right; }
