/*
Theme Name:  Prexenz
Theme URI:   https://prexenz.com/
Author:      Prexenz Studio
Description: Tema de bloques a medida para Prexenz VR·AR Studio. Sin constructores ni dependencias externas.
Version:     0.1.0
Requires at least: 6.5
Tested up to: 6.8
Requires PHP: 8.2
License:     GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: prexenz
Tags:        block-theme, full-site-editing, dark, portfolio, translation-ready
*/

/* ═══════════════════════════════════════════════════════════════════════
   PREXENZ · SALA OSCURA · Base del sistema de diseño (persona A).
   ───────────────────────────────────────────────────────────────────────
   Este archivo contiene, en este orden y nada más:
     1. Cabecera del tema (arriba).
     2. :root con TODOS los tokens --prexenz-* del sistema.
     3. Reglas globales (elementos, foco, enlace de salto, tablas, medios).
     4. prefers-reduced-motion.
     5. prefers-contrast: more.
     6. forced-colors: active.
   Lo visual de las secciones vive en assets/css/secciones.css (persona B).
   Aquí NO se escribe ni una regla de sección.
   ═══════════════════════════════════════════════════════════════════════ */

:root {
	/* ─── PROFUNDIDAD: 5 escalones con deriva fría hacia arriba ─────────── */
	--prexenz-sala:            #0a0a0b;
	--prexenz-fondo:           #111111;
	--prexenz-elev-1:          #161618;
	--prexenz-elev-2:          #1e1e1e;
	--prexenz-elev-3:          #24262a;
	--prexenz-elev-4:          #2e3136;

	/* ─── LÍNEAS: cuatro pesos ópticos, todas de 1px ────────────────────── */
	--prexenz-linea-ambiente:  rgba(255,255,255,.05);
	--prexenz-linea-tenue:     rgba(255,255,255,.07);
	--prexenz-linea:           rgba(255,255,255,.12);
	--prexenz-linea-fuerte:    rgba(255,255,255,.22);
	--prexenz-linea-marca:     rgba(255,255,255,.38);
	--prexenz-linea-luz:       rgba(0,192,255,.45);

	/* ─── CANTOS (bisel de objeto físico) ───────────────────────────────── */
	--prexenz-canto-luz:       rgba(255,255,255,.10);
	--prexenz-canto-sombra:    rgba(0,0,0,.50);
	--prexenz-bisel:           inset 0 1px 0 var(--prexenz-canto-luz),
	                           inset 0 -1px 0 var(--prexenz-canto-sombra);

	/* ─── LUZ: el cian como emisión ─────────────────────────────────────── */
	--prexenz-luz:             #00c0ff;
	--prexenz-luz-fria:        #00adb5;
	--prexenz-luz-alta:        #7fe3ff;
	--prexenz-luz-04:          rgba(0,192,255,.04);
	--prexenz-luz-08:          rgba(0,192,255,.08);
	--prexenz-luz-10:          rgba(0,192,255,.10);
	--prexenz-luz-16:          rgba(0,192,255,.16);
	--prexenz-luz-24:          rgba(0,192,255,.24);
	--prexenz-luz-35:          rgba(0,192,255,.35);
	--prexenz-luz-50:          rgba(0,192,255,.50);
	--prexenz-luz-fria-12:     rgba(0,173,181,.12);

	/* ─── TEXTO ─────────────────────────────────────────────────────────── */
	--prexenz-texto:           #ffffff;   /* 18.9:1 sobre #111 */
	--prexenz-texto-suave:     #a8a8a8;   /*  7.9:1 sobre #111 · 7.0:1 sobre #1e1e1e */
	--prexenz-texto-dato:      #c2c2c2;   /* 10.6:1 · obligatorio en todo texto <12px */
	--prexenz-texto-atenuado:  #8a8a8a;   /*  5.5:1 · SOLO estado atenuado del índice */
	--prexenz-texto-inverso:   #0a0a0b;   /*  9.4:1 sobre #00c0ff */

	/* ─── GRADIENTES COMPUESTOS ─────────────────────────────────────────── */
	--prexenz-haz-cenital:
		/* Casi el doble de intensidad en el pico (.16→.34) y el alcance más
		   lejos (72%→85%): antes se apagaba tan rápido que en el cierre
		   «Hablemos.» y en las portadillas de archivo apenas se distinguía del
		   negro liso. Sigue resolviendo a transparente, así que no se convierte
		   en relleno: sigue siendo una luz que cae, más fuerte. */
		radial-gradient(135% 95% at 50% -16%, rgba(0,192,255,.34) 0%, rgba(0,192,255,.15) 32%, rgba(0,192,255,.04) 58%, transparent 85%);
	--prexenz-relleno-frio:
		radial-gradient(80% 60% at 108% 78%, rgba(0,173,181,.10), transparent 60%);
	--prexenz-vineta:
		radial-gradient(130% 110% at 50% 38%, transparent 42%, rgba(0,0,0,.60) 100%);
	--prexenz-panel-mate:
		linear-gradient(158deg, #1e1e1e 0%, #141416 62%, #0f0f11 100%);
	--prexenz-panel-luz:
		radial-gradient(90% 130% at 22% 8%, rgba(0,192,255,.14), transparent 58%),
		linear-gradient(158deg, #1b1b1e, #0e0e10);
	--prexenz-filo-luz:
		linear-gradient(90deg, transparent, #00c0ff 32%, #7fe3ff 50%, #00c0ff 68%, transparent);
	--prexenz-filo-luz-v:
		linear-gradient(180deg, transparent, #00c0ff 30%, #7fe3ff 50%, #00c0ff 70%, transparent);
	--prexenz-senal:
		linear-gradient(90deg, #00c0ff 0%, #00adb5 100%);
	--prexenz-fundido-inferior:
		linear-gradient(to bottom, transparent, #0a0a0b 88%);
	--prexenz-desvanece-lateral:
		linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);

	/* ─── SOMBRAS Y RESPLANDORES ────────────────────────────────────────── */
	--prexenz-sombra-contacto: 0 1px 2px rgba(0,0,0,.55), 0 24px 48px -34px rgba(0,0,0,.95);
	--prexenz-sombra-flotante: 0 2px 4px rgba(0,0,0,.55), 0 28px 64px -40px rgba(0,0,0,.95);
	--prexenz-sombra-banda:    0 -1px 0 rgba(255,255,255,.06), 0 48px 90px -56px rgba(0,0,0,1);
	--prexenz-resplandor:      0 0 0 1px rgba(0,192,255,.30), 0 0 42px -10px rgba(0,192,255,.35);
	--prexenz-resplandor-duro: 0 0 26px -2px rgba(0,192,255,.55);
	--prexenz-foco-anillo:     0 0 0 4px rgba(0,192,255,.28);

	/* ─── RADIOS Y GROSORES ─────────────────────────────────────────────── */
	--prexenz-radio-0:         0;
	--prexenz-radio-control:   2px;
	--prexenz-radio-panel:     4px;
	--prexenz-radio-pastilla:  999px;
	--prexenz-filo:            1px;
	--prexenz-filo-doble:      2px;

	/* ─── TIPOGRAFÍA: trackings e interlineados por rol ─────────────────── */
	/* Los negativos venían de Technor, que es una grotesca muy estrecha y
	   pedía apretar. Kanit ya nace más abierta y a peso 600 el trazo es fino:
	   apretándola las contraformas se cerraban. De ahí que los carteles pasen
	   a positivo y el resto se quede cerca del cero. */
	--prexenz-track-cartel:     0.005em;
	--prexenz-track-h1:         0.004em;
	--prexenz-track-h2:         0.002em;
	--prexenz-track-h3:         0.010em;
	--prexenz-track-etiqueta:   0.180em;
	--prexenz-track-marca:      0.220em;
	--prexenz-track-pie:        0.350em;
	--prexenz-lh-cartel:        0.92;   /* NUNCA menos: decapita Á, Í, Ñ */
	--prexenz-lh-titular:       1.00;
	--prexenz-lh-medio:         1.25;
	--prexenz-lh-entradilla:    1.40;
	--prexenz-lh-cuerpo:        1.65;
	--prexenz-medida:           62ch;

	/* ─── MOVIMIENTO ────────────────────────────────────────────────────── */
	--prexenz-curva-corte:     cubic-bezier(.22,.61,.20,1);
	--prexenz-curva-camara:    cubic-bezier(.65,0,.35,1);
	--prexenz-curva-servo:     cubic-bezier(.16,.84,.28,1);
	--prexenz-t-micro:         140ms;
	--prexenz-t-control:       220ms;
	--prexenz-t-panel:         420ms;
	--prexenz-t-plano:         720ms;
	--prexenz-t-cortina:       900ms;
	--prexenz-t-paso:          90ms;
	--prexenz-t-grano:         8s;
	--prexenz-t-latido:        2.4s;

	/* ─── CAPAS ─────────────────────────────────────────────────────────── */
	--prexenz-z-sala:          -2;
	--prexenz-z-reticula:      -1;
	--prexenz-z-cabecera:      100;
	--prexenz-z-grano:         9000;
	--prexenz-z-visor:         99997;
	--prexenz-z-telon:         99998;
	--prexenz-z-salto:         99999;

	/* ─── GEOMETRÍA ─────────────────────────────────────────────────────── */
	--prexenz-margen:          clamp(1.25rem, 4vw, 4rem);
	--prexenz-columnas:        12;
	--prexenz-cabecera-alto:   64px;
	--prexenz-letterbox:       clamp(18px, 4.5vh, 44px);
}

/* ══ REGLAS GLOBALES ═══════════════════════════════════════════════════
   Fuentes autoalojadas: los cuatro archivos van en assets/fonts/ y se
   declaran en theme.json. Aquí solo se corrige lo que theme.json no
   expresa. */

/* Sin scroll-behavior: smooth. Lenis hace su propia interpolación y las dos
   cosas juntas se pelean: el navegador frena cada golpe de rueda y la página
   avanzaba 26px en vez de 400. Si Lenis no carga, se activa el suave nativo
   desde la regla de abajo. */
html:not(.lenis) { scroll-behavior: smooth; }

/* Hoja de estilos que Lenis necesita para funcionar. Sin esto el
   desplazamiento se comporta de forma errática. */
html.lenis,
html.lenis body {
	height: auto;
}

.lenis.lenis-smooth {
	scroll-behavior: auto !important;
}

.lenis.lenis-smooth [data-lenis-prevent] {
	overscroll-behavior: contain;
}

.lenis.lenis-stopped {
	overflow: hidden;
}

.lenis.lenis-smooth iframe {
	pointer-events: none;
}
body { background-color: var(--prexenz-fondo); color: var(--prexenz-texto); }

/* Medida de lectura y composición de párrafo. */
p { text-wrap: pretty; max-width: var(--prexenz-medida); }
h1, h2 { text-wrap: balance; }
h1 { line-height: var(--prexenz-lh-cartel); }

/* Enlaces de cuerpo: blancos, marcados con luz en el subrayado. */
:where(.wp-block-post-content, .entry-content) a:where(:not(.wp-element-button)) {
	color: var(--prexenz-texto);
	text-decoration-color: var(--prexenz-luz-35);
	text-decoration-thickness: 1px;
	text-underline-offset: .22em;
	transition: text-decoration-color var(--prexenz-t-micro) var(--prexenz-curva-corte),
	            text-decoration-thickness var(--prexenz-t-micro) var(--prexenz-curva-corte);
}
:where(.wp-block-post-content, .entry-content) a:where(:not(.wp-element-button)):hover {
	text-decoration-color: var(--prexenz-luz);
	text-decoration-thickness: 2px;
}

/* Foco de teclado: única declaración del sistema. B NO puede redefinirlo. */
:where(a, button, input, textarea, select, summary, [tabindex]):focus-visible {
	outline: var(--prexenz-filo-doble) solid var(--prexenz-luz);
	outline-offset: 3px;
	box-shadow: var(--prexenz-foco-anillo);
	border-radius: var(--prexenz-radio-control);
}

/* Enlace de salto al contenido: invisible hasta que se tabula. */
.prexenz-skip-link {
	position: absolute;
	left: -9999px;
	z-index: var(--prexenz-z-salto);
	padding: .75rem 1.25rem;
	background: var(--prexenz-luz);
	color: var(--prexenz-texto-inverso);
	font-weight: 700;
	text-decoration: none;
}
.prexenz-skip-link:focus { left: 1rem; top: 1rem; }

/* Tablas: mata is-style-stripes (hoy #f0f0f0 con texto blanco = 1.1:1). */
.wp-block-table table {
	border-collapse: collapse;
	width: 100%;
	font-variant-numeric: tabular-nums;
}
.wp-block-table.is-style-stripes table,
.wp-block-table.is-style-stripes tbody tr,
.wp-block-table.is-style-stripes tbody tr:nth-child(odd) {
	background-color: transparent;
	border-bottom: 0;
}
.wp-block-table :is(th, td) {
	border: 0;
	border-bottom: 1px solid var(--prexenz-linea-tenue);
	padding: .85rem 1rem;
	vertical-align: top;
}
.wp-block-table th {
	background: var(--prexenz-elev-3);
	color: var(--prexenz-texto);
	font-family: var(--wp--preset--font-family--cuerpo);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--x-small);
	letter-spacing: var(--prexenz-track-etiqueta);
	text-transform: uppercase;
	text-align: start;
}
.wp-block-table td:last-child { text-align: end; }
.wp-block-table figcaption {
	color: var(--prexenz-texto-suave);
	font-size: var(--wp--preset--font-size--small);
	margin-top: var(--wp--preset--spacing--20);
}

/* Imágenes: nunca desbordan ni empujan el layout. */
img, video { max-width: 100%; height: auto; }

/* ══ MOVIMIENTO REDUCIDO ═══════════════════════════════════════════════
   Se anula el movimiento, NO la información. Los cambios de color, de
   borde y de sombra en hover se conservan: son retroalimentación de
   estado, no decoración. La profundidad sobrevive porque la producen la
   escalera de superficies, el bisel y las sombras, que son estáticos. */
@media (prefers-reduced-motion: reduce) {

	*, *::before, *::after {
		animation-duration: 1ms !important;
		animation-iteration-count: 1 !important;
		animation-delay: 0ms !important;
		transition-duration: 1ms !important;
		transition-delay: 0ms !important;
		scroll-behavior: auto !important;
	}

	html { scroll-behavior: auto !important; }

	/* El grano se queda: es textura, no movimiento. Solo deja de temblar. */
	.prexenz-grano { animation: none !important; }

	/* Revelados: estado final aplicado directamente. */
	.prexenz-corte,
	.prexenz-escalonado > *,
	.prexenz-hero__linea {
		opacity: 1 !important;
		translate: none !important;
		transform: none !important;
		clip-path: none !important;
		filter: none !important;
	}

	/* El filo del hero está encendido desde el principio. */
	.prexenz-hero__filo { transform: scaleY(1) !important; }

	/* La cabecera es sólida desde el principio. */
	.prexenz-cabecera::before { opacity: 1 !important; }

	/* Sin desplazamientos en hover; el resto del estado se conserva. */
	.prexenz-sector:is(:hover, :focus-within),
	.prexenz-indice__fila:is(:hover, :has(a:focus-visible)),
	.prexenz-servicios__fila:is(:hover, :focus-within) { translate: none !important; }
	.prexenz-indice__fila:is(:hover, :has(a:focus-visible)) .prexenz-indice__titulo { translate: none !important; }

	/* Las barras de luz existen pero no crecen: conmutan con opacidad. */
	.prexenz-indice__fila::before,
	.prexenz-servicios__fila::before { transform: scaleY(1) !important; opacity: 0; }
	.prexenz-indice__fila:is(:hover, :has(a:focus-visible))::before,
	.prexenz-servicios__fila:is(:hover, :focus-within)::before { opacity: 1; }

	/* El foco de puntero del hero se queda centrado y fijo. */
	[data-prexenz-luz] { --prexenz-luz-x: 38%; --prexenz-luz-y: 32%; }

	/* El latido se apaga; la hairline queda visible. */
	.prexenz-hero__pie { opacity: 1 !important; }
}

/* ══ CONTRASTE ALTO ════════════════════════════════════════════════════
   Se suben las líneas y el texto secundario, y se apaga toda la
   atmósfera: sala, retícula y grano dejan de pintar. */
@media (prefers-contrast: more) {
	:root {
		--prexenz-linea:        rgba(255,255,255,.34);
		--prexenz-linea-tenue:  rgba(255,255,255,.24);
		--prexenz-canto-luz:    rgba(255,255,255,.30);
		--prexenz-texto-suave:  #d0d0d0;
		--prexenz-texto-atenuado: #d0d0d0;
	}
	.prexenz-sala, .prexenz-reticula, .prexenz-grano { display: none; }
	.prexenz-sector, .prexenz-showreel, .prexenz-placa {
		background-image: none; background-color: var(--prexenz-elev-2);
		border: 1px solid var(--prexenz-linea); box-shadow: none;
	}
}

/* ══ COLORES FORZADOS (modo de alto contraste del sistema) ═════════════ */
@media (forced-colors: active) {
	.prexenz-sala, .prexenz-reticula, .prexenz-grano { display: none; }
	.prexenz-hero__titular, .prexenz-cierre__cartel {
		background: none; color: CanvasText; -webkit-text-fill-color: currentColor;
	}
	.prexenz-indice__fila::before, .prexenz-servicios__fila::before { background: Highlight; }
	:where(a, button, [tabindex]):focus-visible { outline: 3px solid Highlight; outline-offset: 3px; }
}
