/* ---------- FONTS — self-hosted (SIL Open Font License 1.1) ----------
   Inter and Space Grotesk are variable fonts: one file serves every
   weight, so the 500/600 faces below reuse the same download.
   unicode-range means latin-ext is only fetched if the page actually
   uses those glyphs — Spanish text needs latin alone.
   font-display:swap renders text immediately in the fallback, then
   swaps — never an invisible-text flash.
   See assets/fonts/README.md for attribution. */
@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url("fonts/inter-latin.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}
@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url("fonts/inter-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:300 700;font-display:swap;src:url("fonts/space-grotesk-latin.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}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:300 700;font-display:swap;src:url("fonts/space-grotesk-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url("fonts/ibm-plex-mono-400-latin.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}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url("fonts/ibm-plex-mono-400-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url("fonts/ibm-plex-mono-500-latin.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}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url("fonts/ibm-plex-mono-500-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:600;font-display:swap;src:url("fonts/ibm-plex-mono-600-latin.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}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:600;font-display:swap;src:url("fonts/ibm-plex-mono-600-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}

:root{
  --wave-black:#000000; --wave-midnight:#050816; --wave-executive-navy:#0B1628;
  --wave-infrastructure-blue:#173A67; --wave-graphite:#252C36; --wave-slate-grey:#697386;
  --wave-steel-grey:#9AA7B5; --wave-pale-tech-grey:#D9E0E8; --wave-soft-white:#F5F7FA; --wave-white:#FFFFFF;
  --wave-blue:#176BFF; --wave-corporate-cobalt:#2454C6; --wave-electric-celeste:#19C6FF;
  --wave-signal-cyan:#00E6FF; --wave-voltage-blue:#3447FF; --wave-violet:#713CFF;
  --wave-gradient-corporate-signal:linear-gradient(110deg,#19C6FF 0%,#176BFF 55%,#3447FF 100%);
  --wave-gradient-master:linear-gradient(110deg,#00E6FF 0%,#176BFF 50%,#713CFF 100%);
  --wave-gradient-atmospheric-light:linear-gradient(110deg,#D9E0E8 0%,#A8D5E8 52%,#AAA9D2 100%);
  --wave-font-display:"Space Grotesk","Inter Display",Inter,sans-serif;
  --wave-font-body:Inter,system-ui,-apple-system,sans-serif;
  --wave-font-mono:"IBM Plex Mono",Consolas,monospace;
  --wave-content-max:1320px; --wave-copy-max:720px;
  --wave-section-regular:clamp(5.5rem,9vw,7.5rem);
  --wave-section-major:clamp(7.5rem,12vw,10rem);
  --wave-radius-md:12px; --wave-radius-lg:16px;
  --wave-border-dark:rgba(154,167,181,.20); --wave-border-light:rgba(23,58,103,.14);
  --wave-shadow-card:0 16px 48px rgba(5,8,22,.10);
  --wave-ease:cubic-bezier(.22,1,.36,1); --wave-dur:360ms;
  --header-h:76px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:var(--wave-font-body);background:var(--wave-soft-white);color:var(--wave-midnight);
  line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}
:focus-visible{outline:2px solid var(--wave-signal-cyan);outline-offset:3px;border-radius:2px}

.shell{max-width:var(--wave-content-max);margin:0 auto;padding:0 clamp(20px,4vw,56px)}
.copy{max-width:var(--wave-copy-max)}
h1,h2,h3,h4{font-family:var(--wave-font-display);font-weight:500;letter-spacing:-.015em;line-height:1.1}
.eyebrow{font-family:var(--wave-font-mono);font-size:12px;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:var(--wave-corporate-cobalt);display:block}
.eyebrow--dark{color:var(--wave-electric-celeste)}
.rule{height:2px;width:56px;border-radius:2px;background:var(--wave-gradient-corporate-signal);margin-top:14px}

/* ---------- HEADER ---------- */
.hdr{position:fixed;top:0;left:0;right:0;height:var(--header-h);z-index:80;
  display:flex;align-items:center;border-bottom:1px solid transparent;
  transition:background var(--wave-dur) var(--wave-ease),border-color var(--wave-dur),
             transform .42s var(--wave-ease)}
.hdr.is-hidden{transform:translateY(-104%)}
.hdr.is-stuck{background:rgba(5,8,22,.97);border-bottom-color:var(--wave-border-dark)}
.hdr-in{display:flex;align-items:center;justify-content:space-between;width:100%;
  max-width:var(--wave-content-max);margin:0 auto;padding:0 clamp(20px,4vw,56px);gap:24px}
.hdr-logo img{width:184px;height:auto}
.nav{display:flex;gap:4px;align-items:center}
.nav a{font-size:14px;font-weight:500;color:var(--wave-pale-tech-grey);padding:9px 14px;border-radius:8px;
  transition:color var(--wave-dur) var(--wave-ease),background var(--wave-dur)}
.nav a:hover{color:var(--wave-white);background:rgba(154,167,181,.10)}
.btn{display:inline-flex;align-items:center;gap:9px;font-family:var(--wave-font-body);font-size:14.5px;
  font-weight:600;padding:14px 24px;border-radius:11px;cursor:pointer;position:relative;
  overflow:hidden;border:1px solid transparent;isolation:isolate;
  transition:transform .34s var(--wave-ease),box-shadow .34s var(--wave-ease),
             background-position .85s var(--wave-ease)}

/* ---- PRIMARY: dark body, living gradient edge, luminous lift ----
   Two background layers: the dark fill paints to padding-box, the gradient
   paints to border-box so the 1px border becomes the light. The gradient is
   oversized and its position animates on hover, so the edge appears to move. */
.btn--primary{
  color:var(--wave-white);
  background:
    linear-gradient(158deg,#173A67 0%,#0B1628 52%,#050816 100%) padding-box,
    linear-gradient(110deg,#00E6FF 0%,#176BFF 34%,#713CFF 62%,#19C6FF 100%) border-box;
  background-size:auto, 240% 100%;
  background-position:0 0, 0% 0;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.10),
    inset 0 -1px 0 rgba(0,0,0,.55),
    0 8px 20px rgba(5,8,22,.38),
    0 0 18px rgba(25,198,255,.13);
}
.btn--primary:hover,.btn--primary:focus-visible{
  transform:translateY(-2px);
  background-position:0 0, 100% 0;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.16),
    inset 0 -1px 0 rgba(0,0,0,.55),
    0 16px 34px rgba(5,8,22,.50),
    0 0 26px rgba(25,198,255,.38),
    0 0 62px rgba(113,60,255,.22);
}
.btn--primary:active{transform:translateY(0);
  box-shadow:inset 0 2px 6px rgba(0,0,0,.55),0 4px 12px rgba(5,8,22,.40),
             0 0 18px rgba(25,198,255,.26)}

/* shine sweep — transform only, runs once per hover */
.btn--primary::after{content:"";position:absolute;top:0;left:0;height:100%;width:42%;
  pointer-events:none;z-index:2;
  background:linear-gradient(100deg,transparent 0%,rgba(255,255,255,.22) 50%,transparent 100%);
  transform:translateX(-170%) skewX(-18deg)}
.btn--primary:hover::after{animation:btnShine .9s var(--wave-ease) forwards}
@keyframes btnShine{to{transform:translateX(330%) skewX(-18deg)}}

/* ---- GHOST: same language, no fill ---- */
.btn--ghost{color:var(--wave-white);
  background:linear-gradient(158deg,rgba(23,58,103,.30),rgba(5,8,22,.30)) padding-box,
             linear-gradient(110deg,rgba(0,230,255,.45),rgba(23,107,255,.32) 50%,
               rgba(113,60,255,.45)) border-box;
  background-size:auto,240% 100%;background-position:0 0,0% 0;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06)}
.btn--ghost:hover,.btn--ghost:focus-visible{color:var(--wave-electric-celeste);
  transform:translateY(-2px);background-position:0 0,100% 0;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10),0 10px 24px rgba(5,8,22,.40),
             0 0 20px rgba(25,198,255,.22)}
.btn .arw{transition:transform var(--wave-dur) var(--wave-ease);position:relative;z-index:3}
.btn:hover .arw{transform:translateX(4px)}
.burger{display:none;background:none;border:1px solid var(--wave-border-dark);border-radius:8px;
  width:42px;height:38px;cursor:pointer;position:relative}
.burger span{position:absolute;left:11px;right:11px;height:1.5px;background:var(--wave-white);transition:.3s}
.burger span:nth-child(1){top:13px}.burger span:nth-child(2){top:18.5px}.burger span:nth-child(3){top:24px}
.burger.is-open span:nth-child(1){transform:translateY(5.5px) rotate(45deg)}
.burger.is-open span:nth-child(2){opacity:0}
.burger.is-open span:nth-child(3){transform:translateY(-5.5px) rotate(-45deg)}

/* ---------- HERO — Executive Dark / Horizon Field ---------- */
.hero{position:relative;background:var(--wave-midnight);color:var(--wave-white);
  min-height:min(100vh,860px);display:flex;flex-direction:column;justify-content:flex-end;
  padding-top:calc(var(--header-h) + 40px);overflow:hidden;isolation:isolate}
#field{position:absolute;inset:0;width:100%;height:100%;z-index:0;display:block}
.hero::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(118% 88% at 16% 28%,rgba(5,8,22,.92) 0%,rgba(5,8,22,.62) 36%,rgba(5,8,22,.18) 62%,transparent 80%)}
.hero-copy{position:relative;z-index:2;padding-top:clamp(48px,9vh,104px);
  padding-bottom:clamp(40px,7vh,72px)}
.hero-copy-in{text-align:left;max-width:min(60%,740px)}
.hero h1{font-size:clamp(2.125rem,4.3vw,3.5rem);font-weight:500;margin:22px 0 26px;max-width:19em;
  letter-spacing:-.025em;line-height:1.1}
.hero h1 em{font-style:normal;background:var(--wave-gradient-master);-webkit-background-clip:text;
  background-clip:text;color:transparent}
.hero-lead{font-size:clamp(1rem,1.4vw,1.125rem);color:var(--wave-pale-tech-grey);
  max-width:40em;margin:0;line-height:1.65}
.hero-cta{margin-top:36px;display:flex;gap:14px;flex-wrap:wrap}
.statband{position:relative;z-index:2;border-top:1px solid var(--wave-border-dark);
  background:linear-gradient(180deg,rgba(5,8,22,.30) 0%,rgba(5,8,22,.72) 100%)}
.statband-in{display:grid;grid-template-columns:repeat(3,1fr);max-width:var(--wave-content-max);margin:0 auto;
  padding:0 clamp(20px,4vw,56px)}
.stat{padding:34px 26px 38px;border-left:1px solid var(--wave-border-dark);text-align:left}
.stat:first-child{border-left:none;padding-left:0}
.stat-n{font-family:var(--wave-font-mono);font-size:clamp(1.75rem,3.1vw,2.5rem);font-weight:500;
  line-height:1;background:var(--wave-gradient-master);-webkit-background-clip:text;background-clip:text;color:transparent}
.stat-l{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--wave-steel-grey);margin-top:12px;line-height:1.5}

/* ---------- generic light section ---------- */
.sec{padding:var(--wave-section-regular) 0;position:relative}
.sec--major{padding:var(--wave-section-major) 0}
.sec--light{background:var(--wave-soft-white)}
.sec--white{background:var(--wave-white)}
.sec-head{max-width:var(--wave-copy-max)}
.sec-head h2{font-size:clamp(1.875rem,3.4vw,2.875rem);margin-top:22px}
.sec-head p{color:var(--wave-graphite);font-size:1.0625rem;margin-top:20px}

/* ---------- OBJETIVO — editorial ---------- */
.obj-lead{font-size:clamp(1.0625rem,1.6vw,1.1875rem);color:var(--wave-graphite);margin-top:24px;max-width:44em}
.obj-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(32px,5vw,72px);margin-top:clamp(56px,7vw,88px);
  padding-top:clamp(40px,5vw,56px);border-top:1px solid var(--wave-border-light)}
.obj-grid h4{font-family:var(--wave-font-mono);font-size:12px;font-weight:500;letter-spacing:.16em;
  text-transform:uppercase;color:var(--wave-corporate-cobalt);margin-bottom:16px}
.obj-grid p{color:var(--wave-graphite);font-size:1rem}
.quote{margin-top:clamp(56px,7vw,88px);padding-left:clamp(24px,4vw,44px);position:relative}
.quote::before{content:"";position:absolute;left:0;top:4px;bottom:4px;width:3px;border-radius:3px;
  background:var(--wave-gradient-master);transform:scaleY(0);transform-origin:top;
  transition:transform 900ms var(--wave-ease)}
.quote.in::before{transform:scaleY(1)}
.quote blockquote{font-family:var(--wave-font-display);font-size:clamp(1.375rem,2.9vw,2.125rem);
  font-weight:400;line-height:1.28;letter-spacing:-.02em;max-width:24em}
.quote figcaption{color:var(--wave-graphite);font-size:1rem;margin-top:24px;max-width:42em}

/* ---------- PARTNERS ---------- */
.pt-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(24px,2.4vw,32px);margin-top:clamp(48px,6vw,72px)}
/* partner logo slot — sized and positioned for the official partner badge.
   Vendor guidelines forbid recolouring or recreating these marks, so the slot
   takes the vendor's own approved monochrome / dark-background artwork. */
.pt-logo{position:absolute;top:clamp(20px,2.2vw,26px);right:clamp(20px,2.2vw,26px);
  width:76px;height:30px;z-index:2;display:flex;align-items:center;justify-content:flex-end;
  opacity:.72;transition:opacity .4s var(--wave-ease)}
.pt:hover .pt-logo{opacity:1}
.pt-logo img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;
  filter:grayscale(1) brightness(.35)}
.pt-logo .slot{width:100%;height:100%;border:1px dashed rgba(23,58,103,.30);border-radius:6px;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--wave-font-mono);font-size:8px;letter-spacing:.10em;
  color:var(--wave-slate-grey);text-transform:uppercase}
.pt{background:var(--wave-white);border:1px solid var(--wave-border-light);border-radius:var(--wave-radius-lg);
  padding:clamp(28px,3vw,40px);position:relative;overflow:hidden;
  transition:transform var(--wave-dur) var(--wave-ease),box-shadow var(--wave-dur),border-color var(--wave-dur)}
.pt::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--wave-gradient-corporate-signal);
  transform:scaleX(0);transform-origin:left;transition:transform 620ms var(--wave-ease)}
.pt:hover{transform:translateY(-3px);box-shadow:var(--wave-shadow-card);border-color:rgba(23,107,255,.28)}
.pt:hover::before{transform:scaleX(1)}
.pt-name{font-family:var(--wave-font-display);font-size:clamp(1.375rem,2.1vw,1.75rem);font-weight:500;letter-spacing:-.02em}
.pt-role{font-family:var(--wave-font-mono);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--wave-corporate-cobalt);margin-top:12px}
.pt p{color:var(--wave-graphite);font-size:.9375rem;margin-top:18px;padding-top:18px;
  border-top:1px solid var(--wave-border-light)}
.sec-cta{margin-top:clamp(48px,6vw,72px);display:flex;gap:16px;flex-wrap:wrap;align-items:center}
.sec-cta .note{font-family:var(--wave-font-mono);font-size:12px;letter-spacing:.06em;color:var(--wave-graphite)}

/* ---------- PILLARS ---------- */
.sec--pillars{background:var(--wave-white);position:relative;overflow:hidden}
.sec--pillars .quietfield{position:absolute;inset:0;z-index:0;opacity:.5;pointer-events:none}
.sec--pillars .shell{position:relative;z-index:1}
.pl-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(24px,2.4vw,32px);margin-top:clamp(48px,6vw,72px)}
.pl{background:var(--wave-soft-white);border:1px solid var(--wave-border-light);border-radius:var(--wave-radius-lg);
  padding:clamp(26px,2.6vw,34px);display:flex;flex-direction:column;
  transition:transform var(--wave-dur) var(--wave-ease),box-shadow var(--wave-dur),border-color var(--wave-dur),background var(--wave-dur)}
.pl:hover{transform:translateY(-4px);background:var(--wave-white);box-shadow:var(--wave-shadow-card);
  border-color:rgba(23,107,255,.28)}
.pl-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}
.pl-ico{width:48px;height:48px}
.pl-ico svg{width:100%;height:100%;overflow:visible}
.pl-ix{font-family:var(--wave-font-mono);font-size:12px;letter-spacing:.1em;color:var(--wave-steel-grey)}
.pl h3{font-size:1.1875rem;font-weight:500}
.pl p{color:var(--wave-graphite);font-size:.9375rem;margin-top:12px;flex:1}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}
.chip{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.06em;color:var(--wave-infrastructure-blue);
  background:rgba(23,107,255,.07);border:1px solid rgba(23,107,255,.14);padding:5px 10px;border-radius:6px}
.pl-link{font-family:var(--wave-font-mono);font-size:12px;letter-spacing:.06em;color:var(--wave-corporate-cobalt);
  margin-top:24px;display:inline-flex;align-items:center;gap:7px}
.pl:hover .pl-link .arw{transform:translateX(4px)}

/* ---------- MINERAL band — proof / transition ---------- */
.mineral{background:var(--wave-executive-navy);color:var(--wave-white);position:relative;overflow:hidden;
  padding:clamp(64px,8vw,104px) 0}
.mineral .crop{position:absolute;inset:0;z-index:0;opacity:.30;pointer-events:none}
.mineral canvas.depthband{position:absolute;inset:0;width:100%;height:100%;z-index:0;
  display:block;pointer-events:none}
.mineral::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(70% 120% at 22% 50%, rgba(5,8,22,.94) 0%, rgba(5,8,22,.62) 46%, transparent 78%),
    radial-gradient(52% 110% at 82% 50%, rgba(5,8,22,.90) 0%, rgba(5,8,22,.55) 48%, transparent 80%),
    linear-gradient(180deg, rgba(11,22,40,.55) 0%, rgba(11,22,40,.30) 40%, rgba(11,22,40,.55) 100%)}
.mineral .shell{position:relative;z-index:3}   /* MUST outrank .mineral::after (z:1).
     Equal z-index loses: a pseudo-element paints after its host's children, so a
     scrim at the same level covers the text. This was invisible in computed CSS. */

.mineral blockquote{font-family:var(--wave-font-display);font-size:clamp(1.25rem,2.5vw,1.875rem);
  font-weight:400;line-height:1.32;letter-spacing:-.018em;color:var(--wave-white);
  text-shadow:0 2px 18px rgba(5,8,22,.95),0 1px 4px rgba(5,8,22,.9)}
.mineral figcaption{font-family:var(--wave-font-mono);font-size:11.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--wave-electric-celeste);margin-top:26px;font-weight:500;
  text-shadow:0 2px 14px rgba(5,8,22,.95)}
.proof{display:flex;flex-direction:column;gap:0}
.proof div{padding:20px 0;border-top:1px solid rgba(154,167,181,.30);display:flex;align-items:baseline;gap:16px}
.proof div:first-child{border-top:none;padding-top:0}
.proof .n{font-family:var(--wave-font-mono);font-size:clamp(1.625rem,2.8vw,2.25rem);font-weight:600;
  line-height:1;min-width:5.5ch;
  /* master gradient ends in violet (3.3:1 here) — the statement numbers use the
     luminous half of the palette instead so they stay legible on the wave field */
  background:linear-gradient(110deg,#00E6FF 0%,#19C6FF 48%,#FFFFFF 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 2px 10px rgba(5,8,22,.95)) drop-shadow(0 0 12px rgba(0,230,255,.35))}
.proof .l{font-family:var(--wave-font-mono);font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--wave-pale-tech-grey);line-height:1.55;
  text-shadow:0 2px 12px rgba(5,8,22,.95),0 1px 3px rgba(5,8,22,.9)}

/* ---------- DIFERENCIADORES — editorial, no cards ---------- */
.df{border-top:1px solid var(--wave-border-light);padding:clamp(34px,4.5vw,52px) 0;align-items:center;
  display:grid;grid-template-columns:88px 1fr;gap:clamp(20px,4vw,56px);align-items:start}
.df:last-of-type{border-bottom:1px solid var(--wave-border-light)}
.df-n{font-family:var(--wave-font-mono);font-size:2rem;font-weight:400;line-height:1;
  background:var(--wave-gradient-master);-webkit-background-clip:text;background-clip:text;color:transparent}
.df h3{font-size:clamp(1.1875rem,2.1vw,1.5rem);font-weight:500;max-width:22em}
.df p{color:var(--wave-graphite);font-size:1rem;margin-top:14px;max-width:46em}
.df-list{margin-top:clamp(48px,6vw,72px)}

/* ---------- CTA BAND — Executive Dark ---------- */
.cta{position:relative;background:var(--wave-midnight);color:var(--wave-white);overflow:hidden;
  padding:var(--wave-section-major) 0}
#ctafield{position:absolute;left:0;right:0;bottom:0;width:100%;height:62%;z-index:0;display:block;opacity:.85}
.cta::after{content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg,var(--wave-midnight) 8%,rgba(5,8,22,.55) 55%,rgba(5,8,22,.2) 100%)}
.cta .shell{position:relative;z-index:2}
.cta h2{font-size:clamp(1.875rem,3.6vw,3rem);margin-top:22px;max-width:20em}
.cta p{color:var(--wave-pale-tech-grey);font-size:1.0625rem;margin-top:20px;max-width:38em}
.cta-row{display:flex;gap:16px;flex-wrap:wrap;margin-top:40px}
.cta-meta{display:flex;gap:clamp(24px,4vw,56px);flex-wrap:wrap;margin-top:clamp(48px,6vw,72px);
  padding-top:32px;border-top:1px solid var(--wave-border-dark)}
.cta-meta div{min-width:150px}
.cta-meta .k{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--wave-electric-celeste)}
.cta-meta .v{font-size:.9375rem;color:var(--wave-pale-tech-grey);margin-top:8px;line-height:1.55}

/* ---------- FOOTER ---------- */
.ft{background:var(--wave-midnight);color:var(--wave-steel-grey);padding:clamp(56px,7vw,88px) 0 40px}
.ft-logo img{width:172px;height:auto;margin-bottom:22px}
.ft-blurb{font-size:.875rem;line-height:1.65;max-width:32em}
.ft-btm{margin-top:clamp(48px,6vw,72px);padding-top:28px;border-top:1px solid var(--wave-border-dark);
  display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;font-size:12px;line-height:1.6}
.ft-btm p{max-width:52em}

/* ---------- reveal ---------- */
.rv{opacity:0;transform:translateY(20px);transition:opacity 720ms var(--wave-ease),transform 720ms var(--wave-ease)}
.rv.in{opacity:1;transform:none}

/* ---------- responsive ---------- */
@media(max-width:1080px){
  .statband-in{grid-template-columns:1fr}
  .stat{border-left:none;border-top:1px solid var(--wave-border-dark);padding:24px 0}
  .stat:first-child{border-top:none}
  .hero-copy-in{max-width:100%}
  .pl-grid{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:860px){
  .nav,.hdr .btn{display:none}
  .burger{display:block}
  .nav.is-open{display:flex;position:fixed;top:var(--header-h);left:0;right:0;flex-direction:column;
    gap:0;background:rgba(5,8,22,.99);padding:16px 20px 26px;
    border-bottom:1px solid var(--wave-border-dark);z-index:79}
  .nav.is-open a{padding:15px 4px;border-bottom:1px solid var(--wave-border-dark);border-radius:0}
  .hero{min-height:auto}
  .obj-grid,.pt-grid,.pl-grid{grid-template-columns:1fr}
  .df{grid-template-columns:1fr;gap:14px}
  .proof div{flex-direction:column;gap:6px}
  .proof .n{min-width:0}
  .callout{gap:18px}
}
@media(max-width:520px){
  .stat{padding:20px 0}
}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important}
  .rv{opacity:1;transform:none}
  .quote::before{transform:scaleY(1)}
}
/* ============================================================
   A · DEPTH PASS — guidance, emphasis, texture, motion
   ============================================================ */

/* ---- reading progress (top of header) ---- */
.progress{position:fixed;top:0;left:0;height:2px;z-index:95;width:0%;
  background:var(--wave-gradient-master);transition:width 90ms linear}

/* ---- section rail: nodes activating in sequence down the page ---- */
.rail{position:fixed;right:clamp(16px,2.2vw,32px);top:50%;transform:translateY(-50%);z-index:70;
  display:flex;flex-direction:column;gap:17px;align-items:flex-end;padding:0}
/* A hairline running through the nodes — no panel, no border, no shadow, at any
   scroll position. The rail should read the same over the hero as everywhere else. */
.rail::before{content:"";position:absolute;right:3px;top:5px;bottom:5px;width:1px;
  background:linear-gradient(180deg,transparent,rgba(23,58,103,.30) 14%,
    rgba(23,58,103,.30) 86%,transparent);
  transition:background .42s var(--wave-ease)}
.rail.on-dark::before{background:linear-gradient(180deg,transparent,rgba(154,167,181,.38) 14%,
    rgba(154,167,181,.38) 86%,transparent)}
.rail a{display:flex;align-items:center;gap:10px;text-decoration:none;position:relative}
.rail .lbl{font-family:var(--wave-font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--wave-graphite);opacity:0;transform:translateX(6px);
  transition:opacity var(--wave-dur) var(--wave-ease),transform var(--wave-dur) var(--wave-ease),
             color var(--wave-dur);
  white-space:nowrap;pointer-events:none;
  text-shadow:0 1px 8px var(--wave-soft-white)}
.rail.on-dark .lbl{color:var(--wave-pale-tech-grey);text-shadow:0 1px 10px rgba(5,8,22,.95)}
.rail a:hover .lbl,.rail a.is-active .lbl{opacity:1;transform:none}
.rail .dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;position:relative;z-index:1;
  background:var(--wave-soft-white);border:1.5px solid rgba(23,58,103,.55);
  transition:all var(--wave-dur) var(--wave-ease)}
.rail a:hover .dot{border-color:var(--wave-blue);transform:scale(1.15)}
.rail a.is-active .dot{background:var(--wave-blue);border-color:var(--wave-blue);
  box-shadow:0 0 0 4px rgba(23,107,255,.14);transform:scale(1.2)}
.rail.on-dark .dot{background:var(--wave-midnight);border-color:rgba(154,167,181,.72)}
.rail.on-dark a:hover .dot{border-color:var(--wave-electric-celeste)}
.rail.on-dark a.is-active .dot{background:var(--wave-electric-celeste);
  border-color:var(--wave-electric-celeste);box-shadow:0 0 0 4px rgba(25,198,255,.22)}
@media(max-width:1180px){.rail{display:none}}

/* ---- text emphasis: guide the eye through long copy ---- */
.hl{font-weight:600;color:var(--wave-corporate-cobalt);
  background-image:linear-gradient(110deg,rgba(25,198,255,.55),rgba(23,107,255,.55));
  background-repeat:no-repeat;background-position:0 100%;background-size:0% 2px;
  transition:background-size 900ms var(--wave-ease)}
.in .hl,.rv.in .hl{background-size:100% 2px}
.on-dark .hl,.mineral .hl,.cta .hl,.hero .hl{color:var(--wave-electric-celeste);
  background-image:linear-gradient(110deg,rgba(0,230,255,.6),rgba(113,60,255,.6))}

/* one elevated sentence per section — the line we want remembered */
.keyline{font-family:var(--wave-font-display);font-size:clamp(1.25rem,2.3vw,1.75rem);
  font-weight:400;line-height:1.34;letter-spacing:-.018em;color:var(--wave-midnight);
  margin-top:clamp(32px,4vw,44px);padding-left:clamp(20px,2.5vw,30px);position:relative;max-width:26em}
.keyline::before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:3px;border-radius:3px;
  background:var(--wave-gradient-master);transform:scaleY(0);transform-origin:top;
  transition:transform 820ms var(--wave-ease) 120ms}
.rv.in .keyline::before,.keyline.in::before{transform:scaleY(1)}

/* inline metric callout inside prose */
.callout{display:flex;gap:clamp(20px,3vw,36px);flex-wrap:wrap;margin-top:clamp(28px,3.4vw,40px);
  padding:24px clamp(20px,2.4vw,30px);border-radius:var(--wave-radius-md);
  background:linear-gradient(110deg,rgba(25,198,255,.06),rgba(113,60,255,.05));
  border:1px solid rgba(23,107,255,.14)}
.callout div{min-width:120px}
.callout .n{font-family:var(--wave-font-mono);font-size:1.375rem;font-weight:500;line-height:1;
  background:var(--wave-gradient-master);-webkit-background-clip:text;background-clip:text;color:transparent}
.callout .l{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--wave-slate-grey);margin-top:8px}

/* ---- atmospheric wash on light sections (muted, edge-entering) ---- */
.wash{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.wash svg{position:absolute;width:120%;height:auto}
.wash--tr svg{right:-14%;top:-30%;opacity:.5}
.wash--bl svg{left:-16%;bottom:-26%;opacity:.42}
.sec,.hub{isolation:isolate}
.sec > .shell,.hub > .shell{position:relative;z-index:1}

/* ---- signal divider between information-heavy sections ---- */
.divider{height:4px;border:0;background:transparent;position:relative;overflow:hidden}
.divider::before{content:"";position:absolute;top:1.5px;left:0;right:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(23,107,255,.22) 18%,
    rgba(113,60,255,.28) 50%,rgba(23,107,255,.22) 82%,transparent)}
.divider::after{content:"";position:absolute;top:0;left:0;width:64px;height:4px;border-radius:4px;
  background:var(--wave-gradient-master);filter:blur(1px);opacity:.9;
  will-change:transform;animation:sweep 7s var(--wave-ease) infinite}
@keyframes sweep{
  0%{transform:translateX(-120%);opacity:0}
  12%{opacity:.9}
  88%{opacity:.9}
  100%{transform:translateX(2300%);opacity:0}}

/* ---- card upgrades: gradient sweep + icon halo on hover ---- */
.pl,.pt{position:relative}
.pl::after,.pt::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(130% 90% at 100% 0%,rgba(25,198,255,.10),transparent 62%);
  opacity:0;transition:opacity 420ms var(--wave-ease)}
.pl:hover::after,.pt:hover::after{opacity:1}
.pl-ico,.hcard-ico,.tcard-ico,.offer-ico,.sib-ico{position:relative}
.pl-ico::before,.hcard-ico::before,.tcard-ico::before,.offer-ico::before,.sib-ico::before{
  content:"";position:absolute;inset:-9px;border-radius:50%;
  background:radial-gradient(circle,rgba(23,107,255,.18),transparent 70%);
  opacity:0;transform:scale(.7);transition:opacity 420ms var(--wave-ease),transform 420ms var(--wave-ease)}
.pl:hover .pl-ico::before,.hcard:hover .hcard-ico::before,.tcard:hover .tcard-ico::before,
.offer:hover .offer-ico::before,.sib-card:hover .sib-ico::before{opacity:1;transform:scale(1)}
.pl-ico svg,.hcard-ico svg,.tcard-ico svg,.offer-ico svg,.sib-ico svg{position:relative}

/* ---- differentiators: alternating detail-crop visuals (brief §14) ---- */
.df-visual{width:100%;height:132px;border-radius:var(--wave-radius-md);overflow:hidden;
  border:1px solid rgba(23,58,103,.26);position:relative;
  background:radial-gradient(130% 130% at 28% 6%,#173A67 0%,#0B1628 46%,#050816 100%);
  box-shadow:inset 0 2px 12px rgba(0,0,0,.55), inset 0 -1px 0 rgba(154,167,181,.10),
             0 6px 18px rgba(5,8,22,.14)}
.df-visual canvas{width:100%;height:100%;display:block}
.df-visual .vtag{position:absolute;left:11px;bottom:8px;font-family:var(--wave-font-mono);
  font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--wave-steel-grey);z-index:2}
.df--split{grid-template-columns:88px 1fr 240px}
.df--split.flip{grid-template-columns:88px 240px 1fr}
.df--split.flip .df-body{order:2}
.df--split.flip .df-visual{order:1}
@media(max-width:960px){
  .df--split,.df--split.flip{grid-template-columns:1fr}
  .df-visual{height:104px}
  .df--split.flip .df-body{order:1}
  .df--split.flip .df-visual{order:2}
}

/* ---- staggered child reveals ---- */
.stagger > *{opacity:0;transform:translateY(18px);
  transition:opacity 620ms var(--wave-ease),transform 620ms var(--wave-ease)}
.stagger.in > *{opacity:1;transform:none}
.stagger.in > *:nth-child(1){transition-delay:0ms}
.stagger.in > *:nth-child(2){transition-delay:70ms}
.stagger.in > *:nth-child(3){transition-delay:140ms}
.stagger.in > *:nth-child(4){transition-delay:210ms}
.stagger.in > *:nth-child(5){transition-delay:280ms}
.stagger.in > *:nth-child(6){transition-delay:350ms}

/* ---- animated rule draw ---- */
.rule{transform:scaleX(0);transform-origin:left;transition:transform 700ms var(--wave-ease) 80ms}
.rv.in .rule,.rule.in{transform:scaleX(1)}

/* ---- stat counters: hold layout while counting ---- */
.stat-n[data-count],.proof .n[data-count]{font-variant-numeric:tabular-nums}

@media(prefers-reduced-motion:reduce){
  .divider::after{animation:none;left:0;opacity:.9}
  .stagger > *{opacity:1;transform:none}
  .rule{transform:none}
  .hl{background-size:100% 2px}
  .keyline::before{transform:scaleY(1)}
}

/* ============================================================
   A · LIGHT-SECTION ELEVATION
   Motion in the Corporate Light areas so they sit naturally
   alongside the dark wave moments. Pure CSS/SVG where possible —
   no extra canvases, nothing over an animating surface.
   ============================================================ */

/* ---- Fiber Optic Paths: light packets drifting through white sections ----
   stroke-dashoffset animation only; no JS, no canvas, compositor-cheap. */
.fiberfield{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.fiberfield svg{position:absolute;left:0;top:0;width:100%;height:100%}
.fiberfield .fl{fill:none;stroke-width:1;opacity:.22}
.fiberfield .fp{fill:none;stroke-width:2;stroke-linecap:round;
  stroke-dasharray:5 995;animation:fibflow 11s linear infinite}
.fiberfield .fpg{fill:none;stroke:#19C6FF;stroke-width:7;stroke-linecap:round;opacity:.20;
  stroke-dasharray:5 995;animation:fibflow 11s linear infinite}
/* vertical variant — packets descend, which reads calmer than lateral travel */
.fiberfield--v .fp,.fiberfield--v .fpg{animation-name:fibflowV}

.fiberfield .d2{animation-duration:14s;animation-delay:-3s}
.fiberfield .d3{animation-duration:9s;animation-delay:-6s}
.fiberfield .d4{animation-duration:16s;animation-delay:-1.5s}
@keyframes fibflow{from{stroke-dashoffset:1000}to{stroke-dashoffset:0}}
@keyframes fibflowV{from{stroke-dashoffset:1000}to{stroke-dashoffset:0}}

/* ---- Title reveal: words assemble left to right ---- */
.tw{display:inline-block;opacity:0;transform:translateY(0.5em);
  transition:opacity .5s var(--wave-ease),transform .5s var(--wave-ease)}
.tw-go .tw{opacity:1;transform:none}

/* ---- Card motion: cursor-tracked highlight + edge sweep on reveal ---- */
/* ---- CARD HOVER — one behaviour across every card-heavy section ----
   Applied via an injected <i class="cglow"> rather than ::before/::after, because
   several cards already use both pseudo-elements for their gradient top rules.
   Cursor position arrives as --mx/--my from a single rAF-coalesced listener. */
.card-hv{position:relative;overflow:hidden}
.cglow{position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0;
  opacity:0;transition:opacity .45s var(--wave-ease);
  background:radial-gradient(340px circle at var(--mx,50%) var(--my,0%),
    rgba(25,198,255,.14),rgba(23,107,255,.06) 42%,transparent 68%)}
.card-hv:hover .cglow{opacity:1}
/* dark-surface cards need a brighter wash to register at all */
.opc .cglow,.offer--dark .cglow,.zone .cglow{
  background:radial-gradient(340px circle at var(--mx,50%) var(--my,0%),
    rgba(25,198,255,.24),rgba(23,107,255,.11) 42%,transparent 68%)}
.card-hv > *:not(.cglow){position:relative;z-index:1}
.pl > .pl-ico-abs,.pt > .pt-logo{position:absolute}   /* keep positioned children positioned */
   /* keep positioned children positioned */

/* one-time gradient sweep along the top edge as each card arrives */
.sweepline{position:absolute;top:0;left:0;height:2px;width:100%;border-radius:2px;
  overflow:hidden;z-index:2;pointer-events:none;opacity:0}
.stagger.in .sweepline{opacity:1}
.sweepline i{position:absolute;top:0;left:0;height:100%;width:38%;border-radius:2px;
  background:var(--wave-gradient-master);transform:translateX(-110%)}
.stagger.in .sweepline i{animation:edgeSweep 1.5s var(--wave-ease) forwards}
.stagger.in > *:nth-child(2) .sweepline i{animation-delay:.09s}
.stagger.in > *:nth-child(3) .sweepline i{animation-delay:.18s}
.stagger.in > *:nth-child(4) .sweepline i{animation-delay:.27s}
.stagger.in > *:nth-child(5) .sweepline i{animation-delay:.36s}
.stagger.in > *:nth-child(6) .sweepline i{animation-delay:.45s}
@keyframes edgeSweep{
  0%{transform:translateX(-110%);opacity:0}
  18%{opacity:1}
  82%{opacity:1}
  100%{transform:translateX(300%);opacity:0}}

/* ---- Misión / Visión: paired gradient panels ---- */
.mvgrid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(20px,2.4vw,30px);
  margin-top:clamp(56px,7vw,88px)}
.mv{position:relative;padding:clamp(28px,3vw,38px);border-radius:var(--wave-radius-lg);
  overflow:hidden;border:1px solid rgba(23,107,255,.16);
  background:linear-gradient(158deg,rgba(25,198,255,.055) 0%,rgba(23,107,255,.035) 46%,
    rgba(113,60,255,.05) 100%),var(--wave-white);
  transition:transform var(--wave-dur) var(--wave-ease),box-shadow var(--wave-dur),
    border-color var(--wave-dur)}
.mv:hover{transform:translateY(-3px);box-shadow:var(--wave-shadow-card);
  border-color:rgba(23,107,255,.30)}
.mv::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;
  background:var(--wave-gradient-master);transform:scaleX(0);transform-origin:left;
  transition:transform 900ms var(--wave-ease)}
.rv.in .mv::before,.mv.in::before{transform:scaleX(1)}
.mv .mvk{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.18em;
  text-transform:uppercase;background:var(--wave-gradient-master);
  -webkit-background-clip:text;background-clip:text;color:transparent;font-weight:500}
.mv h4{font-family:var(--wave-font-display);font-size:1.25rem;font-weight:500;margin:14px 0 12px}
.mv p{color:var(--wave-graphite);font-size:.9375rem}
.mv .mvglyph{position:absolute;right:-18px;bottom:-22px;width:120px;height:120px;opacity:.10}
.mv .mvglyph svg{width:100%;height:100%}
@media(max-width:860px){.mvgrid{grid-template-columns:1fr}}

@media(prefers-reduced-motion:reduce){
  .btn--primary::after{display:none}
  .btn--primary:hover,.btn--ghost:hover{transform:none}
  .fiberfield .fp,.fiberfield .fpg{animation:none;stroke-dasharray:none;opacity:.22}
  .tw{opacity:1;transform:none}
  .sweepline i{animation:none!important;transform:translateX(300%)}
  .mv::before{transform:scaleX(1)}
}

.ft-top{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:clamp(28px,4vw,56px)}
.ft h5{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--wave-white);margin-bottom:18px;font-weight:500}
.ft ul{list-style:none;display:flex;flex-direction:column;gap:11px}
.ft li a{font-size:.875rem;transition:color var(--wave-dur)}
.ft li a:hover{color:var(--wave-electric-celeste)}
@media(max-width:860px){.ft-top{grid-template-columns:1fr}}
/* ===== page rules merged from servicios ===== */

/* ---- page: servicios hub ---- */
.opener .netcrop{position:absolute;right:-6%;top:-20%;width:52%;height:150%;z-index:0;opacity:.42;pointer-events:none}
.opener .shell{position:relative;z-index:1}
.opener-stats{display:flex;gap:clamp(28px,4vw,56px);flex-wrap:wrap;margin-top:clamp(36px,4vw,48px);
  padding-top:28px;border-top:1px solid var(--wave-border-light)}
.opener-stats .k{font-family:var(--wave-font-mono);font-size:clamp(1.25rem,2vw,1.5rem);font-weight:500;
  background:var(--wave-gradient-master);-webkit-background-clip:text;background-clip:text;color:transparent;line-height:1}
.opener-stats .l{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--wave-slate-grey);margin-top:9px}

.hub{background:var(--wave-white)}
.hub-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(24px,2.4vw,32px)}
.hcard{background:var(--wave-soft-white);border:1px solid var(--wave-border-light);
  border-radius:var(--wave-radius-lg);padding:clamp(26px,2.6vw,34px);display:flex;flex-direction:column;
  position:relative;overflow:hidden;
  transition:transform var(--wave-dur) var(--wave-ease),box-shadow var(--wave-dur),
    border-color var(--wave-dur),background var(--wave-dur)}
.hcard::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;
  background:var(--wave-gradient-corporate-signal);transform:scaleX(0);transform-origin:left;
  transition:transform 620ms var(--wave-ease)}
.hcard:hover{transform:translateY(-4px);background:var(--wave-white);box-shadow:var(--wave-shadow-card);
  border-color:rgba(23,107,255,.28)}
.hcard:hover::before{transform:scaleX(1)}
.hcard-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}
.hcard-ico{width:48px;height:48px}
.hcard-ico svg{width:100%;height:100%;overflow:visible}
.hcard-ix{font-family:var(--wave-font-mono);font-size:12px;letter-spacing:.1em;color:var(--wave-steel-grey)}
.hcard h3{font-size:1.25rem}
.hcard .desc{color:var(--wave-graphite);font-size:.9375rem;margin-top:12px}
.hcard .chips{margin-top:22px}
.hcard-foot{margin-top:26px;padding-top:20px;border-top:1px solid var(--wave-border-light);
  display:flex;align-items:center;justify-content:space-between;gap:12px}
.hcard-link{font-family:var(--wave-font-mono);font-size:12px;letter-spacing:.06em;
  color:var(--wave-corporate-cobalt);display:inline-flex;align-items:center;gap:7px}
.hcard:hover .hcard-link .arw{transform:translateX(4px)}
.hcard-link .arw{transition:transform var(--wave-dur) var(--wave-ease)}
.hcard-state{font-family:var(--wave-font-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--wave-steel-grey)}

/* mineral: how the six pillars relate */
.mineral-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:clamp(36px,6vw,80px);align-items:center}
.mineral h2{font-size:clamp(1.5rem,2.8vw,2.125rem);margin-top:22px;max-width:20em}
.mineral p{color:var(--wave-pale-tech-grey);font-size:1rem;margin-top:20px;max-width:40em}
.flow{display:flex;flex-direction:column;gap:0}
.flow div{display:flex;gap:18px;align-items:baseline;padding:18px 0;border-top:1px solid var(--wave-border-dark)}
.flow div:first-child{border-top:none;padding-top:0}
.flow .n{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.12em;
  color:var(--wave-electric-celeste);min-width:3.5ch}
.flow .t{font-size:.9375rem;color:var(--wave-pale-tech-grey);line-height:1.55}
.flow .t b{color:var(--wave-white);font-weight:600}

@media(max-width:1080px){ .hub-grid{grid-template-columns:repeat(2,1fr)} }
@media(max-width:860px){
  .hub-grid{grid-template-columns:1fr}
  .mineral-grid{grid-template-columns:1fr}
  .opener .netcrop{display:none}
}

/* ===== page rules merged from nube ===== */

/* ---- page: arquitectura detail ---- */
.opener-ico{width:56px;height:56px;margin-bottom:24px}
.opener-ico svg{width:100%;height:100%;overflow:visible}

/* anchored sub-navigation */
.subnav{position:sticky;top:var(--header-h);z-index:60;background:rgba(245,247,250,.94);
  backdrop-filter:blur(12px);border-bottom:1px solid var(--wave-border-light)}
.subnav-in{max-width:var(--wave-content-max);margin:0 auto;padding:0 clamp(20px,4vw,56px);
  display:flex;gap:2px;overflow-x:auto;scrollbar-width:none}
.subnav-in::-webkit-scrollbar{display:none}
.subnav a{font-family:var(--wave-font-mono);font-size:11.5px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--wave-slate-grey);padding:16px 14px;white-space:nowrap;border-bottom:2px solid transparent;
  transition:color var(--wave-dur),border-color var(--wave-dur)}
.subnav a:hover{color:var(--wave-graphite)}
.subnav a.is-active{color:var(--wave-corporate-cobalt);border-bottom-color:var(--wave-blue)}

/* Well-Architected diagram — clean technical figure on white */
.diagram{background:var(--wave-soft-white)}
.wa{margin-top:clamp(40px,5vw,56px);border:1px solid rgba(154,167,181,.18);
  border-radius:var(--wave-radius-lg);padding:clamp(28px,4vw,48px);position:relative;
  overflow:hidden;isolation:isolate;
  background:radial-gradient(130% 120% at 22% 8%,#0B1628 0%,#050816 62%,#050816 100%);
  box-shadow:0 28px 70px rgba(5,8,22,.30), inset 0 1px 0 rgba(255,255,255,.05)}
.wa canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;display:block;pointer-events:none}
.wa > svg,.wa > figcaption{position:relative;z-index:2}
.wa::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(120% 90% at 50% 46%,transparent 0%,rgba(5,8,22,.30) 62%,rgba(5,8,22,.62) 100%)}
/* pulse travelling the framework path */
.wa .wa-track{stroke-dasharray:5 995;animation:waPulse 9s linear infinite}
@keyframes waPulse{from{stroke-dashoffset:1000}to{stroke-dashoffset:0}}
@media(prefers-reduced-motion:reduce){.wa .wa-track{animation:none;stroke-dasharray:none;opacity:.5}}
.wa-caption{font-family:var(--wave-font-mono);font-size:11.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--wave-pale-tech-grey);margin-top:24px;text-align:center;
  text-shadow:0 1px 10px rgba(5,8,22,.9)}
.wa svg{width:100%;height:auto;display:block}

/* capability modules */
.grp{scroll-margin-top:calc(var(--header-h) + 64px)}
.mod-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(24px,2.4vw,32px);
  margin-top:clamp(36px,4vw,48px)}
.mod{background:var(--wave-white);border:1px solid var(--wave-border-light);
  border-radius:var(--wave-radius-lg);padding:clamp(26px,2.6vw,34px);position:relative;overflow:hidden;
  transition:box-shadow var(--wave-dur),border-color var(--wave-dur),transform var(--wave-dur) var(--wave-ease)}
.mod:hover{box-shadow:var(--wave-shadow-card);border-color:rgba(23,107,255,.26);transform:translateY(-2px)}
.mod-k{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--wave-corporate-cobalt)}
.mod h3{font-size:1.0625rem;margin-top:12px;font-family:var(--wave-font-mono);font-weight:500;
  letter-spacing:-.005em;line-height:1.4}
.mod p{color:var(--wave-graphite);font-size:.9375rem;margin-top:16px;padding-top:16px;
  border-top:1px solid var(--wave-border-light)}

/* best practices */
.bp{background:var(--wave-executive-navy);color:var(--wave-white);position:relative;overflow:hidden;
  padding:var(--wave-section-regular) 0}
.bp .crop{position:absolute;inset:0;z-index:0;opacity:.26;pointer-events:none}
.bp .shell{position:relative;z-index:1}
.bp .eyebrow{color:var(--wave-electric-celeste)}
.bp h2{font-size:clamp(1.5rem,2.8vw,2.125rem);margin-top:22px;max-width:22em}
.bp-list{display:grid;grid-template-columns:1fr 1fr;gap:clamp(20px,3vw,40px);margin-top:clamp(40px,5vw,56px)}
.bp-item{display:flex;gap:16px;align-items:flex-start;padding-top:22px;border-top:1px solid var(--wave-border-dark)}
.bp-item .n{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.12em;
  color:var(--wave-electric-celeste);min-width:3.5ch;padding-top:3px}
.bp-item p{font-size:.9375rem;color:var(--wave-pale-tech-grey);line-height:1.6}

/* sibling pillars */
.sib{background:var(--wave-soft-white)}
.sib-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:clamp(16px,1.8vw,22px);
  margin-top:clamp(36px,4vw,48px)}
.sib-card{background:var(--wave-white);border:1px solid var(--wave-border-light);
  border-radius:var(--wave-radius-md);padding:22px 20px;display:flex;flex-direction:column;gap:12px;
  transition:border-color var(--wave-dur),transform var(--wave-dur) var(--wave-ease),box-shadow var(--wave-dur)}
.sib-card:hover{border-color:rgba(23,107,255,.3);transform:translateY(-3px);box-shadow:var(--wave-shadow-card)}
.sib-ico{width:44px;height:44px}   /* 44 not 34: the feature tier is drawn for 48+,
     and dimensional surfaces turn muddy below that */
.sib-ico svg{width:100%;height:100%;overflow:visible}
.sib-card .nm{font-size:.9375rem;font-weight:600;font-family:var(--wave-font-display)}
.sib-card .ix{font-family:var(--wave-font-mono);font-size:10px;letter-spacing:.1em;color:var(--wave-steel-grey)}

@media(max-width:1080px){ .sib-grid{grid-template-columns:repeat(3,1fr)} }
@media(max-width:860px){
  .mod-grid,.bp-list{grid-template-columns:1fr}
  .sib-grid{grid-template-columns:repeat(2,1fr)}
}
/* ===== interior base rules recovered from base.css during consolidation ===== */
.opener{background:var(--wave-soft-white);
  padding:calc(var(--header-h) + clamp(48px,7vw,80px)) 0 clamp(48px,6vw,72px);
  border-bottom:1px solid var(--wave-border-light);position:relative;overflow:hidden}
.opener h1{font-size:clamp(2rem,4.2vw,3.25rem);margin-top:20px;max-width:22em}
.opener .lede{font-size:clamp(1.0625rem,1.6vw,1.1875rem);color:var(--wave-graphite);
  max-width:44em;margin-top:22px}
.crumb{font-family:var(--wave-font-mono);font-size:12px;letter-spacing:.08em;
  color:var(--wave-slate-grey);margin-bottom:26px;display:flex;gap:9px;align-items:center;flex-wrap:wrap}
.crumb a{color:var(--wave-corporate-cobalt)}
.crumb a:hover{text-decoration:underline}
.nav a[aria-current="page"]{color:var(--wave-electric-celeste);background:rgba(25,198,255,.10)}
.mineral .eyebrow{color:var(--wave-electric-celeste)}
.ft li span{font-size:.875rem}
.cta canvas{position:absolute;left:0;right:0;bottom:0;width:100%;height:62%;z-index:0;
  display:block;opacity:.85}

/* ===== interior pages: no hero behind the header ===== */
body.interior .hdr{background:rgba(5,8,22,.97);border-bottom-color:var(--wave-border-dark)}
body.interior .opener{padding-top:calc(var(--header-h) + clamp(48px,7vw,80px))}

/* ============================================================
   PAGE · METODOLOGÍA
   PMI reads as a sequential timeline; ITIL reads as a parallel
   practice grid. Deliberately different structures so the two
   frameworks are visually distinct but obviously one system.
   ============================================================ */
.pmi{list-style:none;margin-top:clamp(48px,6vw,72px);position:relative}
.pmi-step{display:grid;grid-template-columns:72px 1fr;gap:clamp(20px,3vw,40px);
  padding-bottom:clamp(34px,4.5vw,52px);position:relative}
.pmi-step:last-child{padding-bottom:0}
.pmi-step::before{content:"";position:absolute;left:35px;top:76px;bottom:6px;width:1px;
  background:linear-gradient(180deg,rgba(23,107,255,.34),rgba(52,71,255,.10))}
.pmi-step:last-child::before{display:none}
.pmi-n{width:72px;height:72px;border-radius:50%;background:var(--wave-white);
  border:1px solid rgba(23,107,255,.30);display:flex;align-items:center;justify-content:center;
  font-family:var(--wave-font-mono);font-size:1.125rem;font-weight:600;
  background-image:linear-gradient(158deg,rgba(25,198,255,.07),rgba(52,71,255,.05));
  color:var(--wave-corporate-cobalt);position:relative;z-index:1;flex-shrink:0;
  box-shadow:0 6px 18px rgba(5,8,22,.07)}
.pmi-phase{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--wave-corporate-cobalt);display:block;margin-bottom:10px}
.pmi-body h3{font-size:clamp(1.125rem,2vw,1.4375rem);margin-bottom:12px}
.pmi-body p{color:var(--wave-graphite);font-size:1rem;max-width:44em}
.pmi-body .chips{margin-top:18px}

.mineral-lead{font-family:var(--wave-font-display);font-size:clamp(1.25rem,2.5vw,1.875rem);
  font-weight:400;line-height:1.32;letter-spacing:-.018em;color:var(--wave-white);margin-top:22px;
  text-shadow:0 2px 18px rgba(5,8,22,.95),0 1px 4px rgba(5,8,22,.9)}

.itil-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,2.4vw,30px);
  margin-top:clamp(48px,6vw,72px)}
.itil{background:var(--wave-soft-white);border:1px solid var(--wave-border-light);
  border-radius:var(--wave-radius-lg);padding:clamp(24px,2.6vw,32px);position:relative;
  overflow:hidden;transition:transform var(--wave-dur) var(--wave-ease),
  box-shadow var(--wave-dur),border-color var(--wave-dur)}
.itil:hover{transform:translateY(-3px);box-shadow:var(--wave-shadow-card);
  border-color:rgba(23,107,255,.28)}
.itil-code{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.16em;font-weight:500;
  color:var(--wave-white);background:linear-gradient(110deg,#19C6FF,#176BFF 55%,#3447FF);
  padding:5px 11px;border-radius:5px;display:inline-block;margin-bottom:16px}
.itil h3{font-size:1.0625rem;margin-bottom:10px}
.itil p{color:var(--wave-graphite);font-size:.9375rem}

.flow4{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(18px,2vw,26px);
  margin-top:clamp(48px,6vw,72px);position:relative}
.flow4::before{content:"";position:absolute;left:6%;right:6%;top:0;height:2px;border-radius:2px;
  background:linear-gradient(90deg,transparent,#19C6FF 12%,#176BFF 50%,#3447FF 88%,transparent);
  opacity:.55}
.f4{padding-top:clamp(26px,3vw,36px);position:relative}
.f4::before{content:"";position:absolute;top:-4px;left:0;width:10px;height:10px;border-radius:50%;
  background:var(--wave-electric-celeste);box-shadow:0 0 0 4px rgba(25,198,255,.18)}
.f4-k{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--wave-corporate-cobalt);display:block;margin-bottom:12px}
.f4 h3{font-size:1.0625rem;margin-bottom:10px}
.f4 p{color:var(--wave-graphite);font-size:.9375rem}

.std-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(18px,2.2vw,28px);
  margin-top:clamp(40px,5vw,56px)}
.std{padding:24px 0 0;border-top:2px solid;border-image:linear-gradient(90deg,#19C6FF,#3447FF) 1}
.std-n{font-family:var(--wave-font-mono);font-size:1.0625rem;font-weight:600;
  color:var(--wave-infrastructure-blue);display:block}
.std-l{font-size:.875rem;color:var(--wave-graphite);margin-top:8px;display:block}

@media(max-width:1000px){
  .itil-grid{grid-template-columns:repeat(2,1fr)}
  .flow4{grid-template-columns:repeat(2,1fr);row-gap:clamp(30px,4vw,44px)}
  .flow4::before{display:none}
  .std-grid{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:700px){
  .pmi-step{grid-template-columns:56px 1fr;gap:18px}
  .pmi-n{width:56px;height:56px;font-size:1rem}
  .pmi-step::before{left:27px;top:60px}
  .itil-grid,.flow4,.std-grid{grid-template-columns:1fr}
}

/* ============================================================
   PAGE · OPERACIÓN
   Brief assigns SmartHands/NOC-SOC/Presencia to Executive Dark.
   Long-form service lists stay on Corporate Light for readability;
   the observability and presence moments carry the dark weight.
   ============================================================ */
.offer-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(24px,2.6vw,34px);
  margin-top:clamp(48px,6vw,72px)}
.offer{background:var(--wave-white);border:1px solid var(--wave-border-light);
  border-radius:var(--wave-radius-lg);padding:clamp(28px,3vw,38px);position:relative;overflow:hidden;
  transition:transform var(--wave-dur) var(--wave-ease),box-shadow var(--wave-dur),border-color var(--wave-dur)}
.offer::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;
  background:linear-gradient(90deg,#19C6FF,#176BFF 55%,#3447FF)}
.offer--alt::before{background:linear-gradient(90deg,#3447FF,#176BFF 45%,#19C6FF)}
.offer:hover{transform:translateY(-3px);box-shadow:var(--wave-shadow-card);
  border-color:rgba(23,107,255,.28)}
.offer-head{display:flex;gap:18px;align-items:flex-start;margin-bottom:20px}
.offer-ico{width:48px;height:48px;flex:0 0 auto}
.offer-ico svg{width:100%;height:100%;overflow:visible}
.offer-k{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--wave-corporate-cobalt);display:block;margin-bottom:8px}
.offer-head h3{font-size:clamp(1.0625rem,1.8vw,1.25rem)}
.offer-lead{color:var(--wave-graphite);font-size:.9375rem;padding-bottom:20px;
  border-bottom:1px solid var(--wave-border-light)}
.offer-list{list-style:none;margin-top:20px;display:flex;flex-direction:column;gap:12px}
.offer-list li{font-size:.9375rem;color:var(--wave-graphite);padding-left:22px;position:relative;
  line-height:1.55}
.offer-list li::before{content:"";position:absolute;left:0;top:8px;width:9px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,#19C6FF,#176BFF)}

/* NOC/SOC — Executive Dark with vertical signal spikes */
.ops{position:relative;background:var(--wave-midnight);color:var(--wave-white);overflow:hidden;
  isolation:isolate;padding:var(--wave-section-major) 0}
.ops canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;display:block;pointer-events:none}
.ops::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(120% 90% at 30% 30%,rgba(5,8,22,.90) 0%,rgba(5,8,22,.62) 46%,rgba(5,8,22,.34) 100%)}
.ops .shell{position:relative;z-index:3}
.ops .sec-head h2{color:var(--wave-white);text-shadow:0 2px 18px rgba(5,8,22,.95)}
.ops .sec-head p{color:var(--wave-pale-tech-grey);text-shadow:0 2px 14px rgba(5,8,22,.95)}
.ops-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,2.2vw,28px);
  margin-top:clamp(48px,6vw,72px)}
.opc{background:linear-gradient(158deg,rgba(23,58,103,.34),rgba(5,8,22,.62));
  border:1px solid rgba(154,167,181,.20);border-radius:var(--wave-radius-lg);
  padding:clamp(22px,2.4vw,30px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 18px 44px rgba(5,8,22,.34);
  transition:transform var(--wave-dur) var(--wave-ease),border-color var(--wave-dur)}
.opc:hover{transform:translateY(-3px);border-color:rgba(25,198,255,.40)}
.opc-k{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;
  display:inline-block;padding:4px 9px;border-radius:4px;margin-bottom:14px;font-weight:500}
.opc-k--noc{color:var(--wave-midnight);background:var(--wave-electric-celeste)}
.opc-k--soc{color:var(--wave-white);background:var(--wave-voltage-blue)}
.opc h3{font-size:1.0625rem;margin-bottom:10px;color:var(--wave-white)}
.opc p{font-size:.9375rem;color:var(--wave-pale-tech-grey)}
.ops-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(20px,3vw,40px);
  margin-top:clamp(48px,6vw,72px);padding-top:clamp(32px,4vw,44px);
  border-top:1px solid rgba(154,167,181,.28)}
.ops-stats .n{font-family:var(--wave-font-mono);font-size:clamp(1.5rem,2.6vw,2rem);font-weight:600;
  line-height:1;display:block;
  background:linear-gradient(110deg,#19C6FF 0%,#7FD8FF 52%,#FFFFFF 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 2px 10px rgba(5,8,22,.95))}
.ops-stats .l{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--wave-pale-tech-grey);margin-top:12px;display:block;line-height:1.5;
  text-shadow:0 2px 12px rgba(5,8,22,.95)}

/* Presence — Executive Dark connection map */
.presencia{position:relative;background:var(--wave-executive-navy);color:var(--wave-white);
  overflow:hidden;padding:var(--wave-section-major) 0}
.presencia .sec-head h2{color:var(--wave-white)}
.presencia .sec-head p{color:var(--wave-pale-tech-grey)}
.map-wrap{display:grid;grid-template-columns:1.35fr 1fr;gap:clamp(32px,4vw,64px);
  align-items:center;margin-top:clamp(48px,6vw,72px)}
/* Presence — orbital radar. CDMX emits wavefronts that light each orbit as they
   cross it. Distance from CDMX is real (sqrt-scaled so Querétaro stays legible);
   direction and start angle are chosen so the three nodes never bunch. */
.map{position:relative}
.map canvas{width:100%;aspect-ratio:1/0.78;display:block}
.map-cap{font-family:var(--wave-font-mono);font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--wave-slate-grey);line-height:1.7;margin-top:14px;
  max-width:34em}
@media(max-width:700px){.map canvas{aspect-ratio:1/0.92}}
.zones{display:flex;flex-direction:column;gap:14px}
.zone{background:linear-gradient(158deg,rgba(23,58,103,.30),rgba(5,8,22,.50));
  border:1px solid rgba(154,167,181,.20);border-radius:var(--wave-radius-md);
  padding:18px 22px;border-left:3px solid var(--wave-electric-celeste);
  transition:transform var(--wave-dur) var(--wave-ease),border-color var(--wave-dur)}
.zone--hq{border-left-color:var(--wave-white)}
.zone:hover{transform:translateX(4px);border-color:rgba(25,198,255,.40)}
.zone-k{font-family:var(--wave-font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--wave-electric-celeste);display:block;margin-bottom:7px}
.zone--hq .zone-k{color:var(--wave-white)}
.zone h3{font-size:1.0625rem;margin-bottom:6px;color:var(--wave-white)}
.zone p{font-size:.8125rem;color:var(--wave-pale-tech-grey);line-height:1.6}

@media(max-width:1000px){
  .offer-grid{grid-template-columns:1fr}
  .ops-grid{grid-template-columns:repeat(2,1fr)}
  .ops-stats{grid-template-columns:repeat(2,1fr);row-gap:28px}
  .map-wrap{grid-template-columns:1fr}
}
@media(max-width:700px){
  .ops-grid{grid-template-columns:1fr}
  .ops-stats{grid-template-columns:1fr}
  .offer-head{flex-direction:column;gap:12px}
}

/* ============================================================
   PAGE · CONTACTO
   Brief §16: calm dark field with ONE luminous edge, and explicitly
   no dense field behind the form labels. The Horizon Field is
   therefore confined to the opener; the form sits on a plain
   Executive Navy surface with a single gradient edge above it.
   ============================================================ */
.c-open{position:relative;background:var(--wave-midnight);color:var(--wave-white);overflow:hidden;
  isolation:isolate;padding:calc(var(--header-h) + clamp(56px,8vw,96px)) 0 clamp(64px,8vw,104px)}
.c-open canvas{position:absolute;left:0;right:0;bottom:0;width:100%;height:58%;z-index:0;
  display:block;opacity:.85;pointer-events:none}
.c-open::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(120% 96% at 16% 26%,rgba(5,8,22,.94) 0%,rgba(5,8,22,.66) 40%,
    rgba(5,8,22,.22) 70%,transparent 88%)}
.c-open .shell{position:relative;z-index:3}
.c-open-in{max-width:min(62%,760px)}
.c-open h1{font-size:clamp(2rem,4.2vw,3.25rem);margin-top:20px;color:var(--wave-white);
  text-shadow:0 2px 20px rgba(5,8,22,.9)}
.crumb--dark{color:var(--wave-steel-grey)}
.crumb--dark a{color:var(--wave-electric-celeste)}
.lede-dark{font-size:clamp(1.0625rem,1.6vw,1.1875rem);color:var(--wave-pale-tech-grey);
  max-width:44em;margin-top:22px;text-shadow:0 2px 14px rgba(5,8,22,.9)}
.c-promise{display:flex;gap:clamp(24px,4vw,52px);flex-wrap:wrap;margin-top:clamp(34px,4vw,46px);
  padding-top:28px;border-top:1px solid rgba(154,167,181,.26)}
.c-promise .n{font-family:var(--wave-font-mono);font-size:clamp(1.25rem,2.2vw,1.625rem);
  font-weight:600;line-height:1;display:block;
  background:linear-gradient(110deg,#19C6FF,#7FD8FF 55%,#FFFFFF);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 2px 10px rgba(5,8,22,.95))}
.c-promise .l{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--wave-pale-tech-grey);margin-top:10px;display:block;
  text-shadow:0 2px 12px rgba(5,8,22,.95)}

.c-body{background:var(--wave-executive-navy);color:var(--wave-white);position:relative;
  padding:clamp(56px,7vw,88px) 0 clamp(64px,8vw,104px)}
.c-body::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,transparent,#19C6FF 18%,#176BFF 50%,#3447FF 82%,transparent);
  opacity:.85}
.c-grid{display:grid;grid-template-columns:1.35fr .85fr;gap:clamp(32px,4vw,64px);align-items:start}
.c-h2{font-size:clamp(1.375rem,2.4vw,1.875rem);color:var(--wave-white)}
.c-sub{font-size:.875rem;color:var(--wave-pale-tech-grey);margin-top:10px}
.c-sub abbr{color:var(--wave-electric-celeste);text-decoration:none;border:0}

.c-form{margin-top:clamp(28px,3.4vw,40px)}
.c-row{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.field{margin-bottom:18px;display:flex;flex-direction:column}
.field label{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--wave-pale-tech-grey);margin-bottom:9px}
.field label span{color:var(--wave-electric-celeste)}
.field input,.field select,.field textarea{
  width:100%;font-family:var(--wave-font-body);font-size:.9375rem;color:var(--wave-white);
  background:rgba(5,8,22,.62);border:1px solid rgba(154,167,181,.26);
  border-radius:var(--wave-radius-sm,8px);padding:13px 15px;
  transition:border-color var(--wave-dur),box-shadow var(--wave-dur),background var(--wave-dur)}
.field textarea{resize:vertical;min-height:120px;line-height:1.6}
.field input::placeholder,.field textarea::placeholder{color:var(--wave-slate-grey)}
.field select{appearance:none;cursor:pointer;
  background-image:linear-gradient(45deg,transparent 50%,#19C6FF 50%),
                   linear-gradient(135deg,#19C6FF 50%,transparent 50%);
  background-position:calc(100% - 19px) 21px, calc(100% - 13px) 21px;
  background-size:6px 6px, 6px 6px; background-repeat:no-repeat}
.field select option{background:var(--wave-executive-navy);color:var(--wave-white)}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--wave-electric-celeste);background:rgba(5,8,22,.80);
  box-shadow:0 0 0 3px rgba(25,198,255,.18)}
.field input:focus-visible,.field select:focus-visible,.field textarea:focus-visible{
  outline:2px solid var(--wave-signal-cyan);outline-offset:2px}

.c-consent{display:flex;gap:12px;align-items:flex-start;margin:6px 0 26px}
.c-consent input{width:17px;height:17px;margin-top:3px;flex:0 0 auto;accent-color:#19C6FF;cursor:pointer}
.c-consent label{font-size:.8125rem;color:var(--wave-pale-tech-grey);line-height:1.6;cursor:pointer}
.c-consent label span{color:var(--wave-electric-celeste)}
.c-submit{margin-top:4px}
.c-note{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.08em;
  color:var(--wave-steel-grey);margin-top:16px}

.c-aside{display:flex;flex-direction:column;gap:16px}
.c-card{background:linear-gradient(158deg,rgba(23,58,103,.32),rgba(5,8,22,.52));
  border:1px solid rgba(154,167,181,.20);border-radius:var(--wave-radius-lg);
  padding:clamp(20px,2.2vw,26px)}
.c-k{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--wave-electric-celeste);display:block;margin-bottom:14px}
.c-big{display:block;font-size:1.0625rem;color:var(--wave-white);margin-bottom:9px;
  transition:color var(--wave-dur)}
.c-big:last-child{margin-bottom:0}
.c-big:hover{color:var(--wave-electric-celeste)}
.c-addr{font-size:.875rem;color:var(--wave-pale-tech-grey);line-height:1.7}
.c-zones{list-style:none;display:flex;flex-direction:column;gap:11px}
.c-zones li{font-size:.875rem;color:var(--wave-white);display:flex;flex-direction:column;
  padding-left:11px;border-left:2px solid var(--wave-electric-celeste)}
.c-zones li em{font-style:normal;font-family:var(--wave-font-mono);font-size:9.5px;
  letter-spacing:.1em;text-transform:uppercase;color:var(--wave-pale-tech-grey);margin-top:3px}
.c-link{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.06em;
  color:var(--wave-electric-celeste);margin-top:18px;display:inline-flex;align-items:center;gap:7px}
.c-link .arw{transition:transform var(--wave-dur) var(--wave-ease)}
.c-link:hover .arw{transform:translateX(4px)}
.c-privacy{display:flex;gap:14px;align-items:flex-start;padding:20px;
  border:1px solid rgba(25,198,255,.20);border-radius:var(--wave-radius-md);
  background:rgba(25,198,255,.045)}
.c-lock{width:22px;height:22px;flex:0 0 auto}
.c-lock svg{width:100%;height:100%}
.c-privacy p{font-size:.8125rem;color:var(--wave-pale-tech-grey);line-height:1.65}

@media(max-width:1000px){
  .c-grid{grid-template-columns:1fr}
  .c-open-in{max-width:100%}
}
@media(max-width:600px){ .c-row{grid-template-columns:1fr} }

/* Contacto: texture confined to the right third so it can never sit behind a
   form label (brief §16 forbids a dense field behind the form). */
.fiberfield--aside{left:auto;right:0;width:34%;opacity:.55}
@media(max-width:1000px){.fiberfield--aside{display:none}}

/* ============================================================
   PAGE · NOSOTROS
   ============================================================ */
.tray{position:relative;background:var(--wave-midnight);color:var(--wave-white);overflow:hidden;
  isolation:isolate;padding:var(--wave-section-major) 0}
.tray canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;display:block;pointer-events:none}
.tray::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(78% 120% at 26% 50%,rgba(5,8,22,.94) 0%,rgba(5,8,22,.62) 46%,transparent 82%),
             radial-gradient(58% 110% at 84% 50%,rgba(5,8,22,.90) 0%,rgba(5,8,22,.52) 50%,transparent 84%)}
.tray .shell{position:relative;z-index:3}
.tray-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:clamp(36px,5vw,80px);align-items:center}
.tray-quote blockquote{font-family:var(--wave-font-display);font-size:clamp(1.25rem,2.5vw,1.875rem);
  font-weight:400;line-height:1.32;letter-spacing:-.018em;color:var(--wave-white);
  text-shadow:0 2px 20px rgba(5,8,22,.95),0 1px 4px rgba(5,8,22,.9)}
.tray-quote figcaption{font-family:var(--wave-font-mono);font-size:11.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--wave-electric-celeste);margin-top:26px;font-weight:500;
  text-shadow:0 2px 14px rgba(5,8,22,.95)}
.tray-stats{display:flex;flex-direction:column}
.tray-stats > div{padding:22px 0;border-top:1px solid rgba(154,167,181,.30);
  display:flex;align-items:baseline;gap:18px}
.tray-stats > div:first-child{border-top:none;padding-top:0}
.tray-stats .n{font-family:var(--wave-font-mono);font-size:clamp(1.75rem,3vw,2.375rem);font-weight:600;
  line-height:1;min-width:5.5ch;font-variant-numeric:tabular-nums;
  background:linear-gradient(110deg,#19C6FF 0%,#7FD8FF 50%,#FFFFFF 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 2px 10px rgba(5,8,22,.95))}
.tray-stats .l{font-family:var(--wave-font-mono);font-size:11.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--wave-pale-tech-grey);line-height:1.55;
  text-shadow:0 2px 12px rgba(5,8,22,.95)}

.team-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(22px,2.4vw,30px);
  margin-top:clamp(48px,6vw,72px)}
.tcard{background:var(--wave-white);border:1px solid var(--wave-border-light);
  border-radius:var(--wave-radius-lg);padding:clamp(26px,2.8vw,34px);position:relative;overflow:hidden;
  transition:transform var(--wave-dur) var(--wave-ease),box-shadow var(--wave-dur),border-color var(--wave-dur)}
.tcard:hover{transform:translateY(-3px);box-shadow:var(--wave-shadow-card);border-color:rgba(23,107,255,.28)}
.tcard-ico{width:48px;height:48px;margin-bottom:20px}
.tcard-ico svg{width:100%;height:100%;overflow:visible}
.tcard h3{font-size:1.0625rem;margin-bottom:12px}
.tcard p{color:var(--wave-graphite);font-size:.9375rem}

.sect-list{margin-top:clamp(48px,6vw,72px)}
.sect{display:grid;grid-template-columns:64px 1fr 210px;gap:clamp(18px,2.6vw,36px);align-items:start;
  padding:clamp(24px,3vw,32px) 0;border-top:1px solid var(--wave-border-light)}
.sect:last-child{border-bottom:1px solid var(--wave-border-light)}
.sect-n{font-family:var(--wave-font-mono);font-size:1.375rem;line-height:1;
  background:linear-gradient(140deg,#19C6FF,#3447FF);-webkit-background-clip:text;
  background-clip:text;color:transparent}
.sect-body h3{font-size:1.125rem;margin-bottom:10px}
.sect-body p{color:var(--wave-graphite);font-size:.9375rem;max-width:46em}
.sect .chips{justify-content:flex-end}

.cert-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(20px,2.2vw,28px);
  margin-top:clamp(48px,6vw,72px)}
.cert{padding:24px 0 0;border-top:2px solid;
  border-image:linear-gradient(90deg,#19C6FF,#3447FF) 1}
.cert-v{font-family:var(--wave-font-display);font-size:1.0625rem;font-weight:500;
  color:var(--wave-midnight);display:block}
.cert-c{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.1em;
  color:var(--wave-corporate-cobalt);display:block;margin:8px 0 12px}
.cert p{font-size:.875rem;color:var(--wave-graphite);line-height:1.6}

.ally-primary{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(18px,2.2vw,26px);
  margin-top:clamp(48px,6vw,72px)}
.ally--p{background:var(--wave-soft-white);border:1px solid rgba(23,107,255,.20);
  border-radius:var(--wave-radius-lg);padding:clamp(22px,2.4vw,28px);position:relative;overflow:hidden}
.ally--p::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,#19C6FF,#176BFF 55%,#3447FF)}
.ally-n{font-family:var(--wave-font-display);font-size:1.0625rem;font-weight:500;display:block}
.ally-r{font-family:var(--wave-font-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--wave-graphite);display:block;margin-top:9px;line-height:1.5}
.ally-sep{margin-top:clamp(44px,5vw,64px);padding-top:clamp(28px,3vw,36px);
  border-top:1px solid var(--wave-border-light);max-width:var(--wave-copy-max)}
.ally-sep-k{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--wave-slate-grey);display:block;margin-bottom:10px}
.ally-sep p{font-size:.9375rem;color:var(--wave-graphite)}
.ally-secondary{display:flex;flex-wrap:wrap;gap:10px;margin-top:24px}
.ally-s{font-family:var(--wave-font-mono);font-size:11.5px;letter-spacing:.04em;
  color:var(--wave-graphite);border:1px solid var(--wave-border-light);
  padding:9px 15px;border-radius:20px;background:var(--wave-white);
  transition:border-color var(--wave-dur),color var(--wave-dur)}
.ally-s:hover{border-color:rgba(23,107,255,.34);color:var(--wave-corporate-cobalt)}

@media(max-width:1000px){
  .tray-grid{grid-template-columns:1fr}
  .team-grid,.cert-grid{grid-template-columns:repeat(2,1fr)}
  .ally-primary{grid-template-columns:repeat(2,1fr)}
  .sect{grid-template-columns:52px 1fr}
  .sect .chips{grid-column:2;justify-content:flex-start;margin-top:14px}
}
@media(max-width:700px){
  .team-grid,.cert-grid,.ally-primary{grid-template-columns:1fr}
  .tray-stats > div{flex-direction:column;gap:8px}
  .tray-stats .n{min-width:0}
}

/* lift for cards that previously had none */
.cert,.ally--p,.c-card{transition:transform var(--wave-dur) var(--wave-ease),
  box-shadow var(--wave-dur),border-color var(--wave-dur)}
.cert:hover,.ally--p:hover{transform:translateY(-3px)}
.ally--p:hover{box-shadow:var(--wave-shadow-card);border-color:rgba(23,107,255,.36)}
.c-card:hover{transform:translateY(-2px);border-color:rgba(25,198,255,.34)}
.sib-card{position:relative;overflow:hidden}
.mod,.itil,.hcard,.tcard,.offer{position:relative;overflow:hidden}

/* ============================================================
   PAGE · PRIVACIDAD
   Brief §17: legal text on its own page, sufficient contrast,
   readable type. Deliberately the quietest page on the site —
   no fields, no crops, no hover effects. Legibility only.
   ============================================================ */
.opener--legal{padding-bottom:clamp(40px,5vw,56px)}
.opener--legal .lede{max-width:46em}
.legal-meta{display:flex;gap:clamp(20px,3vw,40px);flex-wrap:wrap;margin-top:26px;
  padding-top:22px;border-top:1px solid var(--wave-border-light);
  font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.08em;color:var(--wave-graphite)}
.legal-meta strong{color:var(--wave-corporate-cobalt);font-weight:500;letter-spacing:.12em;
  text-transform:uppercase;font-size:10px}

.legal{background:var(--wave-white);padding:clamp(56px,7vw,88px) 0 clamp(64px,8vw,104px)}
.legal-grid{display:grid;grid-template-columns:220px 1fr;gap:clamp(32px,5vw,72px);align-items:start}

.legal-toc{position:sticky;top:calc(var(--header-h) + 24px)}
.legal-toc-k{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--wave-slate-grey);display:block;margin-bottom:16px}
.legal-toc ol{list-style:none;counter-reset:toc;display:flex;flex-direction:column;gap:2px}
.legal-toc li{counter-increment:toc}
.legal-toc a{display:block;font-size:.875rem;color:var(--wave-graphite);padding:7px 0 7px 26px;
  position:relative;border-left:2px solid var(--wave-border-light);
  transition:color var(--wave-dur),border-color var(--wave-dur)}
.legal-toc a::before{content:counter(toc);position:absolute;left:11px;
  font-family:var(--wave-font-mono);font-size:10px;color:var(--wave-steel-grey)}
.legal-toc a:hover{color:var(--wave-corporate-cobalt);border-left-color:var(--wave-blue)}

.legal-body{max-width:var(--wave-copy-max)}
.legal-flag{display:block;padding:20px 22px;border-radius:var(--wave-radius-md);
  background:rgba(23,107,255,.05);border:1px solid rgba(23,107,255,.20);margin-bottom:clamp(32px,4vw,44px)}
.legal-flag-k{font-family:var(--wave-font-mono);font-size:10.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--wave-corporate-cobalt);display:block;margin-bottom:10px}
.legal-flag p{font-size:.875rem;color:var(--wave-graphite);line-height:1.7}
.legal-flag em{font-style:normal;font-family:var(--wave-font-mono);font-size:.8125rem;
  color:var(--wave-corporate-cobalt)}

.legal-sec{padding-bottom:clamp(28px,3.4vw,40px);margin-bottom:clamp(28px,3.4vw,40px);
  border-bottom:1px solid var(--wave-border-light);scroll-margin-top:calc(var(--header-h) + 28px)}
.legal-sec h2{font-size:clamp(1.0625rem,1.9vw,1.3125rem);margin-bottom:14px}
.legal-sec p{font-size:1rem;color:var(--wave-graphite);line-height:1.75;margin-bottom:12px}
.legal-sec p:last-child{margin-bottom:0}
.legal-sec strong{color:var(--wave-midnight);font-weight:600}
.legal-sec a{color:var(--wave-corporate-cobalt);text-decoration:underline;
  text-underline-offset:3px;text-decoration-thickness:1px}
.legal-todo{font-size:.875rem !important;color:var(--wave-graphite);
  background:repeating-linear-gradient(135deg,rgba(105,115,134,.05),
    rgba(105,115,134,.05) 8px,transparent 8px,transparent 16px);
  border-left:2px dashed rgba(105,115,134,.45);padding:12px 16px;border-radius:0 6px 6px 0}

.legal-marks{margin-top:clamp(36px,4vw,52px);padding-top:24px;
  border-top:1px solid var(--wave-border-light)}
.legal-marks p{font-size:.8125rem;color:var(--wave-slate-grey);line-height:1.65;margin-bottom:8px}

@media(max-width:900px){
  .legal-grid{grid-template-columns:1fr}
  .legal-toc{position:static;padding-bottom:24px;border-bottom:1px solid var(--wave-border-light)}
  .legal-toc ol{flex-direction:row;flex-wrap:wrap;gap:6px}
  .legal-toc a{border-left:none;border:1px solid var(--wave-border-light);
    border-radius:20px;padding:7px 13px 7px 26px}
}

/* Misión / Visión restored to the approved single-sentence form — the earlier
   heading+body split altered approved copy for layout reasons. */
.mv .mv-body{font-family:var(--wave-font-display);font-size:clamp(1.0625rem,1.7vw,1.25rem);
  font-weight:400;line-height:1.44;letter-spacing:-.012em;color:var(--wave-midnight);
  margin-top:14px;max-width:30em}

/* ---- accessibility: skip link ---- */
.skip{position:absolute;left:-9999px;top:0;z-index:200;
  background:var(--wave-midnight);color:var(--wave-white);
  font-family:var(--wave-font-mono);font-size:12px;letter-spacing:.08em;
  padding:14px 20px;border-radius:0 0 10px 0;
  border:1px solid var(--wave-electric-celeste)}
.skip:focus{left:0}
/* headings that changed level for hierarchy must keep their visual weight */
.obj-h{font-family:var(--wave-font-mono);font-size:12px;font-weight:500;letter-spacing:.16em;
  text-transform:uppercase;color:var(--wave-corporate-cobalt);margin-bottom:14px}
.ft-h{font-family:var(--wave-font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--wave-white);margin-bottom:18px;font-weight:500}
.hcard-h{font-size:clamp(1.0625rem,1.9vw,1.3125rem);font-weight:500;margin-bottom:12px}

/* ============================================================
   MOBILE — tap targets and input sizing
   Audit found 13–18 targets under 44×44 per page, and 7 inputs
   below 16px on Contacto, which makes iOS Safari auto-zoom the
   page the moment a field is focused.
   ============================================================ */
@media (hover:none), (max-width:900px){
  /* footer and breadcrumb links were 16–19px tall */
  .ft li a,.ft-chips a,.crumb a,.legal-toc a,.c-link,.ally-s,.c-big,.c-zones li{
    min-height:44px;display:inline-flex;align-items:center}
  .ft ul{gap:2px}
  .subnav-in a{min-height:44px;display:inline-flex;align-items:center}
  .burger{width:44px;height:44px}

  /* 16px is the threshold below which iOS zooms on focus */
  .field input,.field select,.field textarea{font-size:16px}

  /* the consent checkbox was 17×17 — enlarge the hit area without
     enlarging the box, using a transparent expanded target */
  .c-consent{position:relative;padding:8px 0}
  .c-consent input{width:22px;height:22px;margin-top:1px}
  .c-consent input::before{content:"";position:absolute;left:-11px;top:-11px;
    width:44px;height:44px}
  .c-consent label{min-height:44px;display:flex;align-items:center}

  /* small print raised to a legible floor */
  .zone p,.c-addr,.legal-marks p,.ally-r,.c-privacy p,.cert p{font-size:.875rem}
}
/* the cursor-tracked card glow has no meaning without a pointer */
@media (hover:none){
  .cglow{display:none}
}

/* privacy policy list items */
.legal-list{list-style:none;margin-top:6px;display:flex;flex-direction:column;gap:9px}
.legal-list li{font-size:1rem;color:var(--wave-graphite);padding-left:20px;position:relative;line-height:1.6}
.legal-list li::before{content:"";position:absolute;left:0;top:10px;width:9px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,#19C6FF,#176BFF)}
.legal-meta a{color:var(--wave-corporate-cobalt)}

/* ===== page rules merged from contacto · form wiring ===== */
/* honeypot: off-screen rather than display:none — some bots skip hidden
   fields, but nearly all fill a field they can "see" in the DOM */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.c-note[data-state="pending"]{color:var(--wave-steel-grey)}
.c-note[data-state="ok"]{color:var(--wave-signal-cyan)}
.c-note[data-state="error"]{color:#FF7A7A}
.c-submit[disabled]{opacity:.55;cursor:progress}
