/* =========================================================================
   URRETA — Base: reset, tokens y contenedor
   Todos los valores en rem. 1rem = 16px @ 1980px (ancho del artboard).
   ========================================================================= */

@import url('https://fonts.googleapis.com/css2?family=Stack+Sans+Headline:wght@200;300;400;500;600;700&family=Spectral:wght@200;300;400&display=swap');

/* ---------- Tokens ---------- */
:root {
  /* Paleta (variables de Figma) */
  --c-primary:        #DB4D87;   /* Primary/Primary 01 */
  --c-cream:          #FFFAF3;   /* Primary/Primary 02 */
  --c-white:          #FFFFFF;
  --c-border-pink:    #F1578E;

  /* Gradiente de marca (CALL TO ACTION) */
  --grad-cta: linear-gradient(
    50.63deg,
    rgb(225, 73, 110)  21.560%,
    rgb(252, 104, 156) 40.442%,
    rgb(200, 54, 150)  61.297%,
    rgb(200, 54, 150)  76.581%,
    rgb(239, 62, 177)  93.953%
  );

  /* Sombra del botón principal */
  --shadow-cta: 0 0.25rem 0.175rem rgba(109, 20, 86, 0.22);

  /* Tipografía */
  --font-display: 'Stack Sans Headline', 'Helvetica Neue', Arial, sans-serif;

  /* Medidas del artboard */
  --design-width: 123.75rem;  /* 1980px */

  /* Grosor de las líneas de un pelo —divisores, subrayados de campo—.
     No pueden ir en rem sueltos: a 0.125rem el navegador tiene que pintar
     1,4 px en una pantalla mediana, y redondea según dónde caiga cada línea.
     Resultado: una sale de 2 px, la de al lado de 1, y por debajo de 800 px
     alguna se queda en 0 y desaparece. Redondeadas a píxel entero, todas
     miden lo mismo caiga donde caiga, y nunca bajan de 1. */
  --linea-1: 1px;   /* 1px del artboard */
  --linea-2: 2px;   /* 2px del artboard */

  /* Movimiento — una sola escala de tiempos y curvas para todo el sitio */
  --t-corto: 180ms;
  --t-medio: 320ms;
  --t-largo: 620ms;
  --e-suave: cubic-bezier(0.22, 0.61, 0.36, 1);
  --e-entrada: cubic-bezier(0.16, 1, 0.3, 1);
}

/* Donde haya round() —Chrome 125, Safari 15.4, Firefox 118— las líneas
   vuelven a escalar con el diseño, pero saltando de píxel en píxel. */
@supports (height: round(1px, 1px)) {
  :root {
    --linea-1: max(1px, round(0.0625rem, 1px));
    --linea-2: max(1px, round(0.125rem, 1px));
  }
}

/* ---------- Reset ---------- */
*,
*::before,
*::after { box-sizing: border-box; }

html {
  /* font-size lo controla js/scale.js — este valor es el fallback sin JS */
  font-size: 16px;
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
}

body {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 300;
  color: var(--c-primary);
  background: var(--c-cream);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
  /* Figma aplica word-break:break-word a todos los textos del diseño:
     los titulares grandes parten dentro de la palabra cuando no caben. */
  overflow-wrap: break-word;
}

h1, h2, h3, h4, h5, h6, p, figure, blockquote, ul, ol, dl, dd {
  margin: 0;
}

ul, ol { padding: 0; list-style: none; }

img, svg, video {
  display: block;
  max-width: 100%;
}

a {
  color: inherit;
  text-decoration: none;
}

button, input, textarea, select {
  font: inherit;
  color: inherit;
  border: 0;
  background: none;
}

/* El UA de Chrome/Safari da a <button> un padding propio (1px 6px). En una
   caja de medida fija eso aplasta el contenido: se anula aqui y cada boton
   declara el suyo. */
button { padding: 0; cursor: pointer; }

/* ---------- Contenedor del artboard ---------- */
/* Ancho fijo en rem: al escalar el rem, escala el lienzo completo.        */
/* Sin techo: el lienzo siempre ocupa el 100% del viewport.               */
/* El prefijo `u-` no es decoración: WordPress le pone al <body> clases con
   nombres muy comunes —`page`, `home`, `blog`, `search`, `single`—, y este
   envoltorio se llamaba `.page`. Resultado: la regla caía tambien sobre el
   <body>, que se quedaba con el ancho del artboard y, peor, con `overflow:
   clip`. Esa propiedad en el <body> se traslada al viewport, y un viewport
   recortado NO se desplaza con la rueda del raton (aunque scrollTo() si lo
   mueva, que es lo que hacia el fallo tan dificil de ver). */
.u-page {
  position: relative;
  width: var(--design-width);
  margin-inline: auto;
  /* `clip` recorta igual que `hidden` pero NO crea un contenedor de scroll:
     es lo que deja que los `position: sticky` de dentro se resuelvan contra
     el viewport. Los navegadores que no lo entienden se quedan con `hidden`
     (la línea anterior) y sencillamente no anclan nada. */
  overflow: hidden;
  overflow: clip;
}

/* Bloque posicionado en coordenadas absolutas del artboard */
.abs { position: absolute; }

/* Utilidades tipográficas del sistema */
.t-xlight { font-weight: 200; }
.t-light  { font-weight: 300; }
.t-reg    { font-weight: 400; }
.t-med    { font-weight: 500; }
.t-bold   { font-weight: 700; }


/* ---------- Movimiento reducido ---------- */
/* Quien lo pide en su sistema recibe los mismos estados, sin recorrido. */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
