/* ===================================================
   BUOTECH — Arquitectura de Sistemas, Visión de Futuro
   Versión dinámica: circuitos con electricidad, hub de servicios,
   búho que sigue el cursor, contadores y línea de proceso que se energiza.
   =================================================== */

@property --ang {
  syntax: '<angle>';
  inherits: false;
  initial-value: 0deg;
}

:root {
  --bg: #e8edf2;
  --bg-alt: #d9e1e8;
  --cream: #e8edf2;        /* alias de compatibilidad */
  --cream-dark: #d9e1e8;   /* alias de compatibilidad */
  --navy: #0d2536;
  --navy-2: #081b30;
  --navy-dark: #081b30;
  --green: #1f9d55;
  --green-light: #2fbf6a;
  --mint: #9dffc4;
  --gray: #5c6b7a;
  --circuit: #aab6c2;
  --max: 1120px;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
section[id] { scroll-margin-top: 76px; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--navy);
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  font-size: 16px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

h1, h2, h3, h4 {
  font-family: 'Space Grotesk', 'Inter', sans-serif;
  color: var(--navy);
  margin: 0;
  line-height: 1.15;
}
a { color: inherit; }
img { max-width: 100%; display: block; }

.wrap { max-width: var(--max); margin: 0 auto; padding: 0 32px; }

:focus-visible { outline: 2px solid var(--green); outline-offset: 3px; }

/* ---------- Barra de progreso de scroll ---------- */
.progress {
  position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 100;
  transform-origin: left; transform: scaleX(var(--sp, 0));
  background: linear-gradient(90deg, var(--green), var(--mint));
  box-shadow: 0 0 10px var(--green-light);
  pointer-events: none;
}

/* ---------- Botones ---------- */
.btn {
  position: relative; overflow: hidden;
  display: inline-flex; align-items: center; gap: 8px;
  padding: 13px 26px; border-radius: 6px;
  font-weight: 600; font-size: 15px; text-decoration: none;
  border: 2px solid transparent; cursor: pointer;
  transition: transform .2s ease, box-shadow .25s ease, background .2s ease, color .2s ease;
}
.btn:hover { transform: translateY(-2px); }
.btn-primary { background: var(--green); color: #fff; }
.btn-primary:hover { background: var(--green-light); box-shadow: 0 8px 22px rgba(47,191,106,.38); }
.btn-primary::after {
  content: ""; position: absolute; top: 0; left: -80%; width: 50%; height: 100%;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,.45), transparent);
  transform: skewX(-20deg);
}
.btn-primary:hover::after { animation: shine-sweep .8s ease; }
@keyframes shine-sweep { to { left: 140%; } }
.btn-ghost { background: transparent; border-color: var(--navy); color: var(--navy); }
.btn-ghost:hover { background: var(--navy); color: #fff; }

/* ---------- Navegación ---------- */
.nav {
  position: sticky; top: 0; z-index: 50;
  background: rgba(232,237,242,.88);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--bg-alt);
  transition: box-shadow .3s ease;
}
.nav.scrolled { box-shadow: 0 8px 28px rgba(13,37,54,.10); }
.nav .wrap { display: flex; align-items: center; justify-content: space-between; height: 76px; }
.nav-brand { display: flex; align-items: center; gap: 10px; text-decoration: none; }
.nav-brand img { width: 34px; transition: transform .4s cubic-bezier(.3,1.6,.5,1); }
.nav-brand:hover img { transform: rotate(-12deg) scale(1.12); }
.nav-brand span { font-family: 'Space Grotesk', sans-serif; font-weight: 700; font-size: 20px; color: var(--navy); }
.nav-links { display: flex; align-items: center; gap: 34px; list-style: none; margin: 0; padding: 0; }
.nav-links a { text-decoration: none; color: var(--navy); font-weight: 500; font-size: 14.5px; white-space: nowrap; position: relative; }
.nav-links a:not(.btn)::after {
  content: ""; position: absolute; left: 0; bottom: -6px; height: 2px; width: 100%;
  background: var(--green); transform: scaleX(0); transform-origin: left; transition: transform .3s ease;
}
.nav-links a:not(.btn):hover::after, .nav-links a.active::after { transform: scaleX(1); }
.nav-links a:not(.btn):hover { color: var(--green); }
@media (max-width: 800px) {
  .nav-links { gap: 16px; }
  .nav-links li:not(:last-child) { display: none; }
  .nav-links a.btn { padding: 9px 16px; font-size: 13.5px; }
}

/* ---------- Circuitos con electricidad ---------- */
.circuit-bg {
  position: absolute; inset: 0; width: 100%; height: 100%;
  pointer-events: none; z-index: 0;
  --P: 120px;
  --wire: var(--circuit);
  --node: var(--circuit);
}
.circuit-bg .wire {
  fill: none; stroke: var(--wire); stroke-width: 2.2;
  stroke-linecap: round; stroke-linejoin: round; opacity: .6;
}
.circuit-bg .pulses { filter: drop-shadow(0 0 3px rgba(47,191,106,.95)) drop-shadow(0 0 9px rgba(47,191,106,.45)); }
.circuit-bg .pulse {
  fill: none; stroke: var(--green-light); stroke-width: 2.6;
  stroke-linecap: round; stroke-linejoin: round;
  stroke-dasharray: var(--P) var(--gap);
  animation: zap var(--T) linear var(--d) infinite both;
}
@keyframes zap {
  0%   { stroke-dashoffset: var(--P); }
  42%  { stroke-dashoffset: var(--end); }
  100% { stroke-dashoffset: var(--end); }
}
.circuit-bg .node {
  fill: var(--node);
  transform-box: fill-box; transform-origin: center;
  animation: flash var(--T) ease-out var(--nd) infinite both;
}
@keyframes flash {
  0%   { fill: var(--node); transform: scale(1); }
  1.5% { fill: var(--mint); transform: scale(2.4); }
  9%   { fill: var(--green-light); transform: scale(1.4); }
  20%  { fill: var(--node); transform: scale(1); }
  100% { fill: var(--node); transform: scale(1); }
}
.circuit-dark { --wire: rgba(255,255,255,.16); --node: rgba(255,255,255,.34); }
.circuit-dark .wire { opacity: 1; }

/* ---------- Hero ---------- */
.hero {
  position: relative; overflow: hidden;
  padding: 64px 0 150px 0;
  --mx: 72%; --my: 30%;
}
.hero::before {            /* resplandor que sigue el cursor */
  content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: radial-gradient(480px circle at var(--mx) var(--my), rgba(47,191,106,.16), transparent 62%);
}
.hero .circuit-bg {
  -webkit-mask-image: radial-gradient(ellipse 36% 46% at 27% 46%, transparent 0 58%, #000 100%);
          mask-image: radial-gradient(ellipse 36% 46% at 27% 46%, transparent 0 58%, #000 100%);
}
.hero .wrap {
  position: relative; z-index: 2;
  display: grid; grid-template-columns: 1.08fr .92fr; gap: 36px; align-items: center;
}
.eyebrow { display: inline-block; font-size: 13px; font-weight: 700; color: var(--green); letter-spacing: .3px; margin-bottom: 18px; }
.hero h1 { font-size: clamp(36px, 4.9vw, 58px); font-weight: 700; letter-spacing: -.6px; max-width: 14ch; }
.grad {
  background: linear-gradient(90deg, var(--navy) 0%, var(--green) 45%, var(--navy) 100%);
  background-size: 220% 100%;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: grad-move 6s linear infinite;
}
@keyframes grad-move { to { background-position: -220% 0; } }

.rotator {
  margin: 20px 0 0 0; font-family: 'Space Grotesk', sans-serif;
  font-size: clamp(17px, 2vw, 21px); font-weight: 500; color: var(--navy); min-height: 1.5em;
}
.rotator .prompt { color: var(--green); font-weight: 700; margin-right: 8px; }
.rotator b { color: var(--green); font-weight: 700; }
.caret { display: inline-block; width: 2px; height: 1.1em; background: var(--green); margin-left: 3px; vertical-align: -3px; animation: caret 1s steps(1) infinite; }
@keyframes caret { 50% { opacity: 0; } }

.hero p.lead { margin-top: 18px; font-size: 18px; color: var(--gray); max-width: 48ch; }
.hero .cta-row { margin-top: 32px; display: flex; gap: 14px; flex-wrap: wrap; }

/* ---------- Hub de servicios (logo + órbita) ---------- */
.hero .wrap > div { min-width: 0; }
.hub-wrap { --k: 1; display: flex; flex-direction: column; align-items: center; }
.hub {
  position: relative; width: 440px; height: 440px;
  transform: scale(var(--k)); transform-origin: top center;
  margin-bottom: calc(440px * (var(--k) - 1));
}
.hub::before {
  content: ""; position: absolute; inset: 40px; border-radius: 50%;
  background: radial-gradient(circle, rgba(47,191,106,.28), transparent 66%);
  animation: breathe 4s ease-in-out infinite;
}
@keyframes breathe { 50% { transform: scale(1.14); opacity: .65; } }
.rings { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.ring-a { fill: none; stroke: var(--circuit); stroke-width: 2; stroke-dasharray: 2 11; stroke-linecap: round; transform-origin: center; animation: spin 90s linear infinite reverse; }
.ring-b { fill: none; stroke: var(--circuit); stroke-width: 1.6; opacity: .75; }
.ring-pulse { fill: none; stroke: var(--green-light); stroke-width: 3; stroke-linecap: round; stroke-dasharray: 14 86; transform-origin: center; animation: spin 5s linear infinite; filter: drop-shadow(0 0 4px var(--green-light)); }
.ring-pulse.b { stroke-dasharray: 8 92; animation-duration: 8s; animation-direction: reverse; stroke: var(--mint); }
@keyframes spin { to { transform: rotate(360deg); } }

.hub-core {
  position: absolute; left: 50%; top: 50%; width: 270px; height: 270px; margin: -135px 0 0 -135px;
  border-radius: 50%; background: #fff;
  box-shadow: 0 22px 60px rgba(13,37,54,.18), inset 0 0 0 1px rgba(13,37,54,.04);
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;
}
.owl-stage { position: relative; width: 108px; animation: float 5s ease-in-out infinite; }
@keyframes float { 50% { transform: translateY(-7px); } }
.owl-img { width: 100%; height: auto; display: block; }
.owl-eyes { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.eye-white { fill: #fff; }
.iris { fill: #1f9d55; }
.hl { fill: #fff; }
.iris-g { transition: transform .14s ease-out; }
.lid { fill: #012b53; transform-box: fill-box; transform-origin: center; transform: scaleY(0); animation: blink 6.5s infinite; }
@keyframes blink { 0%, 93%, 100% { transform: scaleY(0); } 96% { transform: scaleY(1); } }
.hub-word { width: 156px; height: auto; }

.orbit { position: absolute; inset: 0; animation: spin 70s linear infinite; }
.sat {
  position: absolute; left: 50%; top: 50%; width: 48px; height: 48px; margin: -24px 0 0 -24px;
  transform: rotate(var(--a)) translateX(205px) rotate(calc(var(--a) * -1));
  text-decoration: none;
}
.sat > span {
  position: relative; display: flex; align-items: center; justify-content: center;
  width: 100%; height: 100%; border-radius: 50%;
  background: var(--navy); color: #fff;
  font-family: 'Space Grotesk', sans-serif; font-weight: 700; font-size: 13px;
  box-shadow: 0 0 0 3px var(--bg), 0 0 0 5px var(--green-light), 0 8px 18px rgba(13,37,54,.25);
  animation: spin-rev 70s linear infinite;
  transition: background .25s ease, box-shadow .25s ease;
}
@keyframes spin-rev { to { transform: rotate(-360deg); } }
.sat:hover > span, .sat:focus-visible > span { background: var(--green); box-shadow: 0 0 0 3px var(--bg), 0 0 0 5px var(--mint), 0 0 24px rgba(47,191,106,.85); }
.sat > span::after {
  content: attr(data-label); position: absolute; top: 58px; left: 50%; transform: translateX(-50%) translateY(-4px);
  background: var(--navy); color: #fff; font-family: 'Inter', sans-serif; font-size: 12px; font-weight: 600;
  padding: 6px 10px; border-radius: 6px; white-space: nowrap; opacity: 0; pointer-events: none;
  transition: opacity .2s ease, transform .2s ease;
}
.sat:hover > span::after, .sat:focus-visible > span::after { opacity: 1; transform: translateX(-50%) translateY(0); }
.hub:hover .orbit, .hub:hover .sat > span { animation-play-state: paused; }
.hub-caption { max-width: 320px; margin: 8px 0 0 0; font-size: 11.5px; font-weight: 700; letter-spacing: 2px; color: var(--gray); text-align: center; }

@media (max-width: 980px) {
  .hero { padding: 48px 0 130px 0; }
  .hero .wrap { grid-template-columns: minmax(0, 1fr); gap: 28px; }
  .hero h1 { max-width: 18ch; }
  .hub-wrap { --k: .8; }
  .hero .circuit-bg {
    -webkit-mask-image: radial-gradient(ellipse 70% 38% at 50% 34%, transparent 0 60%, #000 100%);
            mask-image: radial-gradient(ellipse 70% 38% at 50% 34%, transparent 0 60%, #000 100%);
  }
}
@media (max-width: 520px) { .hub-wrap { --k: .66; } }

/* ---------- Franja de estadísticas ---------- */
.stats-wrap { position: relative; z-index: 5; margin-top: -92px; }
.stats {
  position: relative; overflow: hidden;
  background: var(--navy); color: #fff; border-radius: 14px;
  display: grid; grid-template-columns: repeat(3, 1fr);
  box-shadow: 0 24px 60px rgba(13,37,54,.28);
}
.stats::before {            /* haz de luz que recorre la franja */
  content: ""; position: absolute; top: 0; left: -40%; width: 40%; height: 100%;
  background: linear-gradient(100deg, transparent, rgba(47,191,106,.22), transparent);
  animation: sweep 5.5s ease-in-out infinite;
}
@keyframes sweep { 0% { left: -40%; } 55%, 100% { left: 110%; } }
.stat { position: relative; padding: 30px 26px; text-align: center; }
.stat + .stat { border-left: 1px solid rgba(255,255,255,.12); }
.stat-num { font-family: 'Space Grotesk', sans-serif; font-weight: 700; font-size: clamp(32px, 4.6vw, 50px); color: var(--green-light); line-height: 1; text-shadow: 0 0 22px rgba(47,191,106,.5); }
.stat-label { margin-top: 8px; font-size: 13.5px; color: #cfd8e3; }
@media (max-width: 560px) {
  .stat { padding: 22px 8px; }
  .stat-label { font-size: 11.5px; }
}

/* ---------- Secciones ---------- */
.section { position: relative; overflow: hidden; padding: 96px 0; }
.section > .wrap { position: relative; z-index: 2; }
.section-alt { background: var(--bg-alt); }
.section-head { max-width: 640px; margin-bottom: 50px; }
.section-head .eyebrow { display: block; }
.section-head h2 { font-size: clamp(27px, 3.3vw, 38px); letter-spacing: -.3px; }
.section-head p { margin-top: 14px; color: var(--gray); font-size: 16.5px; }

/* ---------- Servicios ---------- */
.services-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
@media (max-width: 900px) { .services-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 620px) { .services-grid { grid-template-columns: 1fr; } }

.service-card {
  --mx: 50%; --my: 50%;
  position: relative; overflow: hidden;
  background: #fff; border-left: 4px solid var(--green); border-radius: 10px;
  padding: 28px 26px;
  transition: transform .3s cubic-bezier(.2,.7,.2,1), box-shadow .3s ease;
}
.service-card > * { position: relative; z-index: 2; }
.service-card::before {      /* borde eléctrico que gira al pasar el cursor */
  content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 2px; z-index: 1; pointer-events: none;
  background: conic-gradient(from var(--ang), transparent 0 62%, var(--green-light) 82%, var(--mint) 90%, transparent 100%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude;
  opacity: 0; transition: opacity .3s ease; animation: ang-spin 2.4s linear infinite;
}
.service-card::after {       /* foco de luz que sigue el cursor */
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: radial-gradient(260px circle at var(--mx) var(--my), rgba(47,191,106,.14), transparent 65%);
  opacity: 0; transition: opacity .3s ease;
}
@keyframes ang-spin { to { --ang: 360deg; } }
.service-card:hover { transform: translateY(-6px); box-shadow: 0 18px 40px rgba(13,37,54,.14); }
.service-card:hover::before, .service-card:hover::after { opacity: 1; }

.badge {
  position: relative;
  width: 42px; height: 42px; border-radius: 50%;
  background: var(--navy); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 700; font-family: 'Space Grotesk', sans-serif;
  margin-bottom: 18px;
  transition: transform .45s cubic-bezier(.3,1.6,.5,1), background .25s ease;
}
.badge::after {
  content: ""; position: absolute; inset: 0; border-radius: 50%;
  border: 2px solid var(--green-light);
  animation: ping 3s ease-out infinite; animation-delay: var(--bd, 0s);
}
@keyframes ping { 0% { transform: scale(1); opacity: .75; } 70%, 100% { transform: scale(1.75); opacity: 0; } }
.service-card:hover .badge { transform: rotate(360deg) scale(1.1); background: var(--green); }
.service-card h3 { font-size: 18px; margin-bottom: 10px; }
.service-card p { color: var(--gray); font-size: 14.5px; margin: 0; }

.service-card.highlight {
  grid-column: 1 / -1; display: flex; align-items: center; gap: 22px;
  background: var(--navy); border-left-color: var(--green-light);
}
.service-card.highlight .badge { margin: 0; background: var(--green); min-width: 42px; }
.service-card.highlight h3 { color: #fff; margin-bottom: 4px; }
.service-card.highlight p { color: #cfd8e3; }

/* ---------- Proceso (línea que se energiza) ---------- */
.timeline { position: relative; margin-top: 10px; }
.timeline::before { content: ""; position: absolute; left: 20px; top: 8px; bottom: 8px; width: 2px; background: var(--bg-alt); }
.line-fill {
  position: absolute; left: 20px; top: 8px; width: 2px; height: calc(100% - 16px);
  background: linear-gradient(var(--green-light), var(--green));
  transform-origin: top; transform: scaleY(var(--p, 0));
  box-shadow: 0 0 10px rgba(47,191,106,.9);
}
.spark {
  position: absolute; left: 15px; width: 12px; height: 12px; border-radius: 50%;
  top: calc(8px + (100% - 16px) * var(--p, 0));
  background: #fff; transform: translateY(-50%);
  box-shadow: 0 0 0 3px var(--green-light), 0 0 18px 6px rgba(47,191,106,.75);
  opacity: var(--so, 0); z-index: 3;
}
.timeline-step { position: relative; padding-left: 62px; margin-bottom: 38px; }
.timeline-step:last-child { margin-bottom: 0; }
.timeline-step .num {
  position: absolute; left: 0; top: 0; width: 40px; height: 40px; border-radius: 50%;
  border: 2px solid var(--green); background: var(--bg); color: var(--green);
  font-family: 'Space Grotesk', sans-serif; font-weight: 700;
  display: flex; align-items: center; justify-content: center; z-index: 2;
  transition: background .4s ease, color .4s ease, transform .5s cubic-bezier(.3,1.6,.5,1), box-shadow .4s ease;
}
.timeline-step.active .num {
  background: var(--green); color: #fff; transform: scale(1.12);
  box-shadow: 0 0 0 6px rgba(47,191,106,.2), 0 0 22px rgba(47,191,106,.7);
}
.timeline-step h4 { font-size: 18px; margin-bottom: 6px; transition: color .4s ease; }
.timeline-step.active h4 { color: var(--green); }
.timeline-step p { color: var(--gray); margin: 0; font-size: 15px; max-width: 60ch; }

/* ---------- Equipo ---------- */
.equipo-grid { display: grid; grid-template-columns: 1.3fr 1fr; gap: 48px; align-items: center; }
.equipo-text { text-align: left; margin: 0; max-width: none; }
.equipo-icons { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
.equipo-icon-card { text-align: center; padding: 24px 12px; animation: floaty 5.5s ease-in-out infinite; }
.equipo-icon-card:nth-child(2n) { animation-delay: -1.8s; }
.equipo-icon-card:nth-child(3n) { animation-delay: -3.2s; }
.equipo-icon-card:hover { animation-play-state: paused; }
@keyframes floaty { 50% { transform: translateY(-8px); } }
.equipo-badge { margin: 0 auto 10px; }
.equipo-icon-label { margin: 0; font-size: 14px; font-weight: 600; color: var(--navy); }
@media (max-width: 860px) {
  .equipo-grid { grid-template-columns: 1fr; gap: 32px; }
  .equipo-text { text-align: center; }
  .equipo-icons { max-width: 420px; margin: 0 auto; }
}
@media (max-width: 420px) {
  .equipo-icons { gap: 12px; }
  .equipo-icon-card { padding: 18px 8px; }
}

/* ---------- Contacto ---------- */
.contact { position: relative; overflow: hidden; background: var(--navy); color: #fff; padding: 110px 0; text-align: center; }
.contact .circuit-bg {
  -webkit-mask-image: radial-gradient(ellipse 34% 60% at 50% 50%, transparent 0 55%, #000 100%);
          mask-image: radial-gradient(ellipse 34% 60% at 50% 50%, transparent 0 55%, #000 100%);
}
.contact .wrap { position: relative; z-index: 2; }
.contact h2 { color: #fff; font-size: clamp(27px, 3.6vw, 40px); }
.contact p.lead { margin: 16px auto 0 auto; max-width: 46ch; color: #cfd8e3; font-size: 17px; }
.btn-electric {
  margin-top: 34px; padding: 15px 34px; font-size: 16px; background: var(--green); color: #fff; border-radius: 8px;
  animation: glow-pulse 2.6s ease-in-out infinite;
}
.btn-electric:hover { background: var(--green-light); }
@keyframes glow-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(47,191,106,.55), 0 0 18px rgba(47,191,106,.35); }
  50%      { box-shadow: 0 0 0 12px rgba(47,191,106,0), 0 0 34px rgba(47,191,106,.6); }
}
.contact-cards { margin-top: 44px; display: flex; gap: 18px; justify-content: center; flex-wrap: wrap; }
.contact-card {
  background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.14);
  border-radius: 10px; padding: 22px 26px; min-width: 220px; text-align: left;
  backdrop-filter: blur(4px);
  transition: transform .3s ease, border-color .3s ease, background .3s ease;
}
.contact-card:hover { transform: translateY(-5px); border-color: var(--green-light); background: rgba(47,191,106,.10); }
.contact-card .tag {
  display: inline-block; background: var(--green); color: #fff;
  font-size: 10px; font-weight: 700; letter-spacing: .5px; padding: 4px 9px; border-radius: 4px; margin-bottom: 10px;
}
.contact-card a, .contact-card div.val { color: #fff; font-size: 15px; font-weight: 600; text-decoration: none; word-break: break-word; }

/* ---------- Footer ---------- */
.footer { position: relative; background: var(--navy-2); color: rgba(255,255,255,.6); padding: 28px 0; font-size: 13px; text-align: center; }
.footer::before {
  content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 2px;
  background: linear-gradient(90deg, transparent, var(--green-light), transparent);
  background-size: 35% 100%; background-repeat: no-repeat;
  animation: line-run 4s linear infinite;
}
@keyframes line-run { from { background-position: -40% 0; } to { background-position: 140% 0; } }
.footer strong { color: #fff; }

/* ---------- Revelado al hacer scroll ---------- */
html.js .reveal { opacity: 0; }
html.js .reveal.in { opacity: 1; animation: rise .85s cubic-bezier(.2,.7,.2,1) backwards; animation-delay: var(--d, 0s); }
@keyframes rise { from { opacity: 0; transform: translateY(30px); filter: blur(5px); } }

/* ---------- Accesibilidad: sin animaciones si el usuario lo prefiere ---------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation: none !important; transition: none !important; }
  html.js .reveal { opacity: 1; }
  .circuit-bg .pulses, .circuit-bg .nodes { display: none; }
  .ring-pulse { display: none; }
}
