/* Generado por scripts/build-tailwind.cjs — no editar a mano */
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/fonts/inter-latin-var-v20.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.grid{display:grid}.hidden{display:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.items-center{align-items:center}.gap-14{gap:3.5rem}.gap-8{gap:2rem}@media (min-width:768px){.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:hidden{display:none}}@media (min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (min-width:768px){#hamburger{display:none}}
p a:not([class]),li a:not([class]){text-decoration:underline!important;text-decoration-color:rgba(96,165,250,.5)!important;text-decoration-thickness:1px;text-underline-offset:3px}
/* ── Capa de experiencia visual para las páginas interiores ──────────────────
   Fuente: scripts/experience.pages.css → se añade a /assets/css/pages.css con
   npm run css:build. Mismo sistema que el index (allí va inline en <style>).
   Todo lo que oculta o cambia fondos va bajo html.js: sin JS nada cambia. */

:root {
  --ease-out: cubic-bezier(0.215, 0.61, 0.355, 1);
  --ease-in-out: cubic-bezier(0.455, 0.03, 0.515, 0.955);
  --dur-fast: 0.45s;
  --dur-base: 0.8s;
  --dur-slow: 1.2s;
}

/* ── Rejillas inline de 2 columnas sin versión móvil: desbordaban a 375px ── */
@media (max-width: 767px) {
  [style*="grid-template-columns:1fr 1fr"] { grid-template-columns: 1fr !important; gap: 40px !important; }
}
@media (max-width: 359px) {
  [style*="minmax(280px"], [style*="minmax(300px"] { grid-template-columns: 1fr !important; }
}

/* ── Fondo global fijo (secciones transparentes) ── */
.exp-bg { display: none; }
.js .exp-bg {
  display: block;
  position: fixed;
  top: 0; left: 0;
  width: 100%;
  height: 100vh;
  height: 100lvh;
  z-index: -1;
  pointer-events: none;
  overflow: hidden;
  contain: strict;
}
.exp-layer { position: absolute; inset: 0; }
.exp-layer--a {
  background:
    radial-gradient(ellipse 55% 60% at 80% 42%, rgba(37,99,235,0.078) 0%, transparent 70%),
    radial-gradient(ellipse 45% 45% at 10% 85%, rgba(20,184,166,0.048) 0%, transparent 70%),
    linear-gradient(180deg, #030b22 0%, #041029 100%);
}
.exp-layer--b { opacity: 0; will-change: opacity; }
.exp-orbs { position: absolute; inset: 0; opacity: 0; transition: opacity 1.4s ease; }
.exp-bg.is-ready .exp-orbs { opacity: 1; }
.exp-orb {
  position: absolute;
  left: 0; top: 0;
  width: 64vmax; height: 64vmax;
  margin: -32vmax 0 0 -32vmax;
  border-radius: 50%;
  opacity: 0;
  will-change: transform, opacity;
}
.exp-orb--1 { background: radial-gradient(circle, rgba(37,99,235,0.13) 0%, rgba(37,99,235,0.05) 38%, transparent 66%); }
.exp-orb--2 { background: radial-gradient(circle, rgba(56,189,248,0.10) 0%, rgba(56,189,248,0.035) 38%, transparent 66%); }
.exp-orb--3 { background: radial-gradient(circle, rgba(20,184,166,0.10) 0%, rgba(20,184,166,0.035) 38%, transparent 66%); }
.exp-particles { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 1.2s ease; }
.exp-particles.is-live { opacity: 1; }
/* Velo: bordes más oscuros + atenuado general (páginas de lectura: contraste AA) */
.exp-veil { position: absolute; inset: 0; background: radial-gradient(ellipse 120% 95% at 50% 50%, transparent 55%, rgba(1,4,12,0.55) 100%), rgba(2,6,18,0.32); }
.exp-halo {
  position: absolute; left: 0; top: 0;
  width: 560px; height: 560px; margin: -280px 0 0 -280px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(56,189,248,0.07) 0%, rgba(37,99,235,0.04) 35%, transparent 65%);
  opacity: 0;
  transition: opacity 0.6s ease;
  will-change: transform;
}
.exp-halo.is-on { opacity: 1; }
@media (max-width: 767px) {
  .exp-orb { width: 90vmax; height: 90vmax; margin: -45vmax 0 0 -45vmax; }
  .exp-orb--3 { display: none; }
}
.js [data-scene], .js [data-scene-part] { background: transparent !important; }

/* Nav translúcido con desenfoque solo en escritorio (80px: coste bajo) */
@media (min-width: 1024px) and (hover: hover) {
  .js body > nav {
    background: rgba(2, 8, 23, 0.72) !important;
    -webkit-backdrop-filter: blur(14px) saturate(140%);
    backdrop-filter: blur(14px) saturate(140%);
  }
}

/* Tarjetas: semiopacas sobre el fondo en movimiento (sin backdrop-filter) */
.js .glass-card { background: linear-gradient(rgba(255,255,255,0.04), rgba(255,255,255,0.04)), rgba(4, 11, 26, 0.68); }
.js .glass-card:hover { background: linear-gradient(rgba(37,99,235,0.05), rgba(37,99,235,0.05)), rgba(4, 11, 26, 0.68); }

/* Brillo que sigue al ratón en las tarjetas (solo puntero fino) */
@media (hover: hover) and (pointer: fine) {
  .js .glass-card { position: relative; overflow: hidden; --mx: 50%; --my: 50%; transition: border-color 0.25s, background 0.25s, box-shadow 0.3s ease; }
  .js .glass-card::before {
    content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
    background: radial-gradient(320px circle at var(--mx) var(--my), rgba(56,189,248,0.14), transparent 65%);
    opacity: 0; transition: opacity 0.35s ease;
  }
  .js .glass-card:hover::before { opacity: 1; }
  .js .glass-card > * { position: relative; z-index: 1; }
  .js .glass-card:hover { border-color: rgba(56,189,248,0.4); box-shadow: 0 24px 60px rgba(0,0,0,0.35), 0 0 40px rgba(37,99,235,0.12); }
}

/* Reveals: los grupos los marca JS (solo por debajo del primer pliegue) */
.js [data-reveal-group] > :not([aria-hidden="true"]) { opacity: 0; }
.no-anim [data-reveal-group] > * { opacity: 1 !important; }

/* Foco visible y pulsación en botones */
.btn-primary:focus-visible, .btn-outline:focus-visible, .nav-link:focus-visible { outline: 2px solid #38bdf8; outline-offset: 3px; }
.btn-primary:not(.magnetic):active, .btn-outline:not(.magnetic):active { transform: translateY(1px); }
