/* ============================================================
   PORTAFOLIO — tema oscuro con capas
   Sin frameworks. Profundidad = fondo con malla + superficies
   elevadas + bordes de luz + degradados de acento.
   ============================================================ */
:root{
  --fondo:#080C11;
  --fondo-2:#0D141C;
  --sup:#121B24;            /* superficie de tarjeta */
  --sup-alta:#16212C;
  --borde:#1E2C39;
  --borde-luz:rgba(255,255,255,.07);
  --texto:#E9F0F5;
  --gris:#8CA2B3;
  --gris-2:#5F7386;
  --a1:#34E39B;             /* acento: verde menta */
  --a2:#39C9F5;             /* acento: cian */
  --a3:#F5A524;             /* señal de aviso */
  --grad:linear-gradient(100deg,var(--a1),var(--a2));
  --sombra:0 1px 2px rgba(0,0,0,.5),0 8px 24px -8px rgba(0,0,0,.65);
  --sombra-alta:0 2px 4px rgba(0,0,0,.5),0 20px 48px -12px rgba(0,0,0,.8);

  --medida:36rem;
  --ancho:75rem;
  --paso:clamp(3rem,7vw,5.5rem);
  --display:"Archivo",system-ui,sans-serif;
  --texto-f:"Source Serif 4",Georgia,serif;
  --cifra:"IBM Plex Mono",ui-monospace,monospace;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  margin:0;color:var(--texto);background:var(--fondo);
  font-family:var(--texto-f);font-size:clamp(1rem,.96rem + .22vw,1.1rem);
  line-height:1.72;
  /* malla de fondo: tres focos de color muy tenues + degradado base */
  background-image:
    radial-gradient(60rem 34rem at 12% -8%, rgba(52,227,155,.11), transparent 60%),
    radial-gradient(52rem 30rem at 92% 6%, rgba(57,201,245,.09), transparent 62%),
    radial-gradient(44rem 40rem at 50% 108%, rgba(52,227,155,.06), transparent 60%),
    linear-gradient(180deg,var(--fondo),var(--fondo-2) 60%,var(--fondo));
  background-attachment:fixed;
}
/* grano finísimo: quita el aspecto "plano" del degradado */
body::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;opacity:.35;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.34'/%3E%3C/svg%3E");
}
body>*{position:relative;z-index:1}
.env{width:min(100% - 2.5rem,var(--ancho));margin-inline:auto}

h1,h2,h3{font-family:var(--display);font-weight:800;letter-spacing:-.024em;
  line-height:1.05;margin:0}
h2{font-size:clamp(1.65rem,1.25rem + 1.6vw,2.4rem)}
h3{font-size:1.14rem;font-weight:700;letter-spacing:-.012em}
p{margin:0 0 1.15rem}
a{color:inherit;text-decoration:none}
:focus-visible{outline:2.5px solid var(--a1);outline-offset:3px;border-radius:3px}
.num{font-family:var(--cifra);font-weight:500;font-variant-numeric:tabular-nums;
  font-size:.8em;letter-spacing:-.03em}
::selection{background:rgba(52,227,155,.28)}
::-webkit-scrollbar{width:11px}
::-webkit-scrollbar-track{background:var(--fondo)}
::-webkit-scrollbar-thumb{background:var(--borde);border-radius:9px;
  border:3px solid var(--fondo)}
::-webkit-scrollbar-thumb:hover{background:#2b3d4d}

/* ---------- barra ---------- */
.barra{position:sticky;top:0;z-index:30;
  background:rgba(8,12,17,.72);backdrop-filter:blur(14px) saturate(140%);
  border-bottom:1px solid transparent}
.barra .env{display:flex;flex-wrap:wrap;gap:.5rem 1.4rem;align-items:center;
  padding-block:1rem}
/* la barra "aterriza" al hacer scroll: solo CSS, sin JS */
@supports (animation-timeline:scroll()){
  @keyframes aterriza{to{border-bottom-color:var(--borde);
    box-shadow:0 10px 30px -14px rgba(0,0,0,.9)}}
  .barra{animation:aterriza linear both;animation-timeline:scroll();
    animation-range:0 90px}
}
.marca{font-family:var(--display);font-weight:800;font-size:1.05rem;
  letter-spacing:-.025em;margin-right:auto;display:flex;align-items:center;gap:.55rem}
.marca::before{content:"";width:9px;height:9px;border-radius:50%;
  background:var(--grad);box-shadow:0 0 0 3px rgba(52,227,155,.15),0 0 14px rgba(52,227,155,.7)}
.barra nav{display:flex;gap:1.4rem;flex-wrap:wrap}
.barra nav a{font-family:var(--display);font-weight:600;font-size:.93rem;
  color:var(--gris);padding-block:.2rem;position:relative;transition:color .18s}
.barra nav a:hover{color:var(--texto)}
.barra nav a::after{content:"";position:absolute;left:0;right:100%;bottom:-2px;height:2px;
  background:var(--grad);border-radius:2px;transition:right .25s cubic-bezier(.2,.8,.2,1)}
.barra nav a:hover::after,.barra nav a[aria-current="page"]::after{right:0}
.barra nav a[aria-current="page"]{color:var(--texto)}

/* ---------- portada ---------- */
.portada{padding-block:clamp(3.5rem,8vw,6.5rem);position:relative}
.portada::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:linear-gradient(90deg,transparent,var(--borde) 18%,var(--borde) 82%,transparent)}
.portada .env{display:grid;gap:clamp(2.2rem,5vw,4rem);
  grid-template-columns:minmax(0,1.12fr) minmax(0,1fr);align-items:center}
@media (max-width:860px){.portada .env{grid-template-columns:1fr}}
.nombre{font-size:clamp(2.7rem,1.3rem + 6vw,5.6rem);line-height:.9;
  margin-bottom:1.5rem;text-wrap:balance;
  background:linear-gradient(96deg,#EAF3F8 8%,var(--a1) 52%,var(--a2) 88%);
  background-size:220% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 6px 26px rgba(52,227,155,.16))}
@media (prefers-reduced-motion:no-preference){
  @keyframes desliza{to{background-position:100% 0}}
  .nombre{animation:desliza 9s ease-in-out infinite alternate}
}
.entradilla{font-size:clamp(1.08rem,1rem + .5vw,1.32rem);max-width:var(--medida);
  color:#C4D4E0}
.acciones{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:2rem}
.btn{font-family:var(--display);font-weight:700;font-size:.95rem;
  padding:.85rem 1.6rem;border-radius:10px;border:1px solid transparent;
  background:var(--grad);color:#04120C;position:relative;
  box-shadow:0 1px 0 rgba(255,255,255,.35) inset,0 10px 26px -10px rgba(52,227,155,.75);
  transition:transform .16s,box-shadow .16s,filter .16s}
.btn:hover{transform:translateY(-2px);filter:brightness(1.06);
  box-shadow:0 1px 0 rgba(255,255,255,.4) inset,0 16px 34px -10px rgba(52,227,155,.9)}
.btn:active{transform:translateY(0)}
.btn.hueco{background:var(--sup);color:var(--texto);border-color:var(--borde);
  box-shadow:0 1px 0 var(--borde-luz) inset,var(--sombra)}
.btn.hueco:hover{border-color:var(--a1);color:var(--a1);filter:none}

/* ---------- superficie base reutilizable ---------- */
.sup{background:linear-gradient(180deg,var(--sup-alta),var(--sup));
  border:1px solid var(--borde);border-radius:16px;box-shadow:var(--sombra);
  position:relative;overflow:hidden}
.sup::before{content:"";position:absolute;inset:0 0 auto;height:1px;
  background:linear-gradient(90deg,transparent,var(--borde-luz) 30%,var(--borde-luz) 70%,transparent)}

/* ---------- EL EMBUDO ---------- */
.embudo{background:linear-gradient(180deg,var(--sup-alta),var(--sup));
  border:1px solid var(--borde);border-radius:18px;padding:1.7rem 1.7rem 1.4rem;
  box-shadow:var(--sombra-alta);position:relative;overflow:hidden}
.embudo::before{content:"";position:absolute;inset:0 0 auto;height:1px;
  background:linear-gradient(90deg,transparent,rgba(52,227,155,.5),transparent)}
.embudo::after{content:"";position:absolute;width:20rem;height:20rem;right:-8rem;top:-9rem;
  background:radial-gradient(circle,rgba(52,227,155,.13),transparent 70%);pointer-events:none}
.embudo h2{font-size:.98rem;font-weight:700;margin-bottom:1rem;color:var(--texto)}
.embudo .pie{color:var(--gris);font-size:.87rem;margin:1.2rem 0 0;line-height:1.6;
  padding-top:1rem;border-top:1px solid var(--borde)}
.paso{display:grid;grid-template-columns:9rem 1fr;align-items:center;
  gap:.85rem;padding-block:.4rem}
.paso span{font-family:var(--display);font-weight:600;font-size:.85rem;color:var(--gris)}
.paso i{display:block;height:1.4rem;border-radius:5px;font-style:normal;
  transform-origin:left center;background:linear-gradient(90deg,#22384A,#2E5468);
  box-shadow:0 1px 0 var(--borde-luz) inset}
.paso:nth-child(2) i{width:100%}
.paso:nth-child(3) i{width:76%}
.paso:nth-child(4) i{width:54%}
.paso:nth-child(5) i{width:33%}
.paso:nth-child(6) i{width:17%;background:var(--grad);
  box-shadow:0 0 22px rgba(52,227,155,.55),0 1px 0 rgba(255,255,255,.35) inset}
.paso:nth-child(6) span{color:var(--a1)}
@media (prefers-reduced-motion:no-preference){
  @supports (animation-timeline:view()){
    @keyframes dibuja{from{transform:scaleX(0);opacity:.2}}
    .paso i{animation:dibuja .6s cubic-bezier(.2,.75,.3,1) backwards;
      animation-timeline:view();animation-range:entry 4% cover 28%}
  }
}

/* ---------- secciones ---------- */
.seccion{padding-block:var(--paso);position:relative}
.seccion+.seccion::before{content:"";position:absolute;top:0;left:50%;
  transform:translateX(-50%);width:min(100% - 2.5rem,var(--ancho));height:1px;
  background:linear-gradient(90deg,transparent,var(--borde) 20%,var(--borde) 80%,transparent)}
.cab{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;
  margin-bottom:2rem;flex-wrap:wrap}
.cab a{font-family:var(--display);font-weight:600;font-size:.9rem;color:var(--gris);
  transition:color .18s}
.cab a:hover{color:var(--a1)}

/* reveal suave, una sola vez, solo en bloques grandes */
@media (prefers-reduced-motion:no-preference){
  @supports (animation-timeline:view()){
    @keyframes sube{from{opacity:0;transform:translateY(22px)}}
    .tres>div,.fila,.hito{animation:sube .55s ease-out backwards;
      animation-timeline:view();animation-range:entry 0% cover 22%}
  }
}

/* tríptico */
.tres{display:grid;gap:1.1rem}
@media (min-width:760px){.tres{grid-template-columns:repeat(3,1fr)}}
.tres>div{background:linear-gradient(180deg,var(--sup-alta),var(--sup));
  border:1px solid var(--borde);border-radius:16px;padding:1.6rem;
  box-shadow:var(--sombra);position:relative;overflow:hidden;
  transition:transform .2s,border-color .2s,box-shadow .2s}
.tres>div::before{content:"";position:absolute;inset:0 0 auto;height:2px;
  background:var(--grad);opacity:0;transition:opacity .22s}
.tres>div:hover{transform:translateY(-4px);border-color:#2A3F51;
  box-shadow:var(--sombra-alta)}
.tres>div:hover::before{opacity:1}
.tres h3{margin-bottom:.6rem}
.tres p{color:var(--gris);font-size:.96rem;margin:0}

/* ---------- filas ---------- */
.filas{display:grid;gap:.7rem}
.fila{display:grid;grid-template-columns:5rem minmax(0,1fr) minmax(0,15rem);
  gap:.6rem 1.5rem;padding:1.35rem 1.4rem;align-items:baseline;border-radius:14px;
  border:1px solid transparent;background:transparent;
  transition:background .2s,border-color .2s,transform .2s}
.fila:hover{background:linear-gradient(180deg,var(--sup-alta),var(--sup));
  border-color:var(--borde);transform:translateX(4px);box-shadow:var(--sombra)}
@media (max-width:780px){.fila{grid-template-columns:1fr;gap:.4rem}}
.fila .meta{color:var(--gris-2)}
.tit{font-family:var(--display);font-weight:700;font-size:1.16rem;
  letter-spacing:-.015em;display:block;margin-bottom:.3rem;transition:color .18s}
.fila:hover .tit{color:var(--a1)}
.fila p{color:var(--gris);font-size:.96rem;margin:0;max-width:54ch}
.pila{display:flex;flex-wrap:wrap;gap:.35rem}
.pieza{font-family:var(--cifra);font-size:.72rem;color:var(--gris);
  background:rgba(255,255,255,.03);border:1px solid var(--borde);
  padding:.2rem .55rem;border-radius:7px;white-space:nowrap}
.marca-si{color:#04120C;background:var(--grad);border-color:transparent;font-weight:600}

/* ---------- línea de tiempo ---------- */
.linea{position:relative;padding-left:2rem}
.linea::before{content:"";position:absolute;left:5px;top:.7rem;bottom:1rem;width:2px;
  background:linear-gradient(180deg,var(--a1),var(--borde) 40%,transparent)}
.hito{position:relative;padding-bottom:2.2rem}
.hito::before{content:"";position:absolute;left:-2rem;top:.55rem;width:12px;height:12px;
  border-radius:50%;background:var(--fondo);border:2px solid var(--borde)}
.hito:first-child::before{background:var(--grad);border-color:transparent;
  box-shadow:0 0 0 4px rgba(52,227,155,.14),0 0 16px rgba(52,227,155,.6)}
.hito .cuando{color:var(--a2);display:block;margin-bottom:.25rem}
.hito .donde{color:var(--gris-2);font-size:.92rem;margin-bottom:.55rem}
.hito p{font-size:.97rem;color:var(--gris);max-width:var(--medida);margin:0}

/* ---------- prosa, ficha, formulario ---------- */
.prosa{max-width:var(--medida);color:#C9D8E3}
.prosa p:first-child{font-size:1.14rem;color:var(--texto)}
.entradilla-nota{color:var(--gris);max-width:var(--medida)}
.dos{display:grid;gap:clamp(1.6rem,4vw,3rem)}
@media (min-width:880px){.dos{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr)}}

.ficha{background:linear-gradient(180deg,var(--sup-alta),var(--sup));
  border:1px solid var(--borde);border-radius:16px;padding:1.5rem;
  box-shadow:var(--sombra);position:relative;overflow:hidden}
.ficha::before{content:"";position:absolute;inset:0 0 auto;height:1px;
  background:linear-gradient(90deg,transparent,var(--borde-luz),transparent)}
.ficha dt{font-family:var(--display);font-weight:600;font-size:.8rem;
  color:var(--gris-2);margin-bottom:.25rem;text-transform:none}
.ficha dd{margin:0 0 1.1rem;color:var(--texto)}

.form{display:grid;gap:1.2rem;max-width:38rem}
.campo label{display:block;font-family:var(--display);font-weight:600;
  font-size:.89rem;margin-bottom:.4rem;color:var(--gris)}
.campo input,.campo textarea{width:100%;font:inherit;font-size:1rem;
  padding:.8rem .95rem;background:rgba(255,255,255,.025);color:var(--texto);
  border:1px solid var(--borde);border-radius:11px;transition:border-color .18s,box-shadow .18s}
.campo input::placeholder,.campo textarea::placeholder{color:var(--gris-2)}
.campo input:focus,.campo textarea:focus{outline:none;border-color:var(--a1);
  box-shadow:0 0 0 3px rgba(52,227,155,.14)}
.campo textarea{resize:vertical;min-height:8.5rem;line-height:1.65}
.campo .mal{color:#FF8A73;font-size:.87rem;margin:.4rem 0 0}
.campo:has(.mal) input,.campo:has(.mal) textarea{border-color:#B3452E}
.obligatorio{color:var(--a1)}

.aviso{border:1px solid var(--borde);border-left:3px solid var(--a1);border-radius:12px;
  background:linear-gradient(90deg,rgba(52,227,155,.09),var(--sup) 40%);
  padding:.95rem 1.2rem;margin-bottom:1.5rem;font-size:.97rem;box-shadow:var(--sombra)}
.aviso.danger,.aviso.error{border-left-color:#FF8A73;
  background:linear-gradient(90deg,rgba(255,138,115,.09),var(--sup) 40%)}

.paginas{display:flex;gap:.45rem;justify-content:center;margin-top:2.8rem}
.paginas a,.paginas span{font-family:var(--cifra);font-size:.85rem;padding:.5rem .85rem;
  border:1px solid var(--borde);border-radius:9px;color:var(--gris);transition:.18s}
.paginas a:hover{border-color:var(--a1);color:var(--a1)}
.paginas .aqui{background:var(--grad);color:#04120C;border-color:transparent;font-weight:600}

.vacio{border:1px dashed var(--borde);border-radius:16px;padding:3rem;
  text-align:center;color:var(--gris)}
.vacio a{color:var(--a1)}

/* ---------- pie ---------- */
.pie-sitio{border-top:1px solid var(--borde);margin-top:var(--paso);
  background:linear-gradient(180deg,transparent,rgba(52,227,155,.035));padding-block:2.6rem}
.pie-sitio .env{display:grid;gap:1.6rem}
@media (min-width:760px){.pie-sitio .env{grid-template-columns:1.3fr 1fr 1fr}}
.pie-sitio h3{font-size:.82rem;color:var(--gris-2);font-weight:600;margin-bottom:.5rem}
.pie-sitio p{color:var(--gris);margin:0}
.pie-sitio a{color:var(--texto);border-bottom:1px solid var(--borde);transition:.18s}
.pie-sitio a:hover{color:var(--a1);border-bottom-color:var(--a1)}
.copy{border-top:1px solid var(--borde);margin-top:1.8rem;padding-top:1.2rem;
  color:var(--gris-2);font-size:.85rem}

/* ============================================================
   MOVIMIENTO — degradados que se mueven de verdad.
   Todo va sobre transform/opacity (los compone la GPU) y todo
   queda desactivado si el sistema pide menos movimiento.
   ============================================================ */

/* --- aurora: tres manchas de color derivando detrás de todo --- */
.aurora{position:fixed;inset:-25%;z-index:0;pointer-events:none;
  overflow:hidden;filter:blur(70px);opacity:.6}
.aurora i{position:absolute;display:block;border-radius:50%;will-change:transform}
.aurora i:nth-child(1){width:44rem;height:44rem;left:-6rem;top:-8rem;
  background:radial-gradient(circle,rgba(52,227,155,.34),transparent 64%)}
.aurora i:nth-child(2){width:38rem;height:38rem;right:-8rem;top:4rem;
  background:radial-gradient(circle,rgba(57,201,245,.30),transparent 64%)}
.aurora i:nth-child(3){width:40rem;height:40rem;left:38%;bottom:-14rem;
  background:radial-gradient(circle,rgba(120,90,255,.20),transparent 66%)}

@media (prefers-reduced-motion:no-preference){
  @keyframes deriva1{
    0%{transform:translate3d(0,0,0) scale(1)}
    50%{transform:translate3d(14vw,7vh,0) scale(1.15)}
    100%{transform:translate3d(4vw,16vh,0) scale(.95)}}
  @keyframes deriva2{
    0%{transform:translate3d(0,0,0) scale(1.05)}
    50%{transform:translate3d(-13vw,11vh,0) scale(.9)}
    100%{transform:translate3d(-4vw,-6vh,0) scale(1.12)}}
  @keyframes deriva3{
    0%{transform:translate3d(0,0,0) scale(.95)}
    50%{transform:translate3d(10vw,-12vh,0) scale(1.2)}
    100%{transform:translate3d(-9vw,-3vh,0) scale(1)}}
  .aurora i:nth-child(1){animation:deriva1 34s ease-in-out infinite alternate}
  .aurora i:nth-child(2){animation:deriva2 42s ease-in-out infinite alternate}
  .aurora i:nth-child(3){animation:deriva3 38s ease-in-out infinite alternate}
}

/* --- borde con degradado que gira alrededor de la tarjeta --- */
@property --giro{syntax:"<angle>";initial-value:0deg;inherits:false}
@keyframes gira{to{--giro:360deg}}

@supports (background:conic-gradient(from 0deg,red,blue)){
  .embudo,.ficha{
    border-color:transparent;
    background:
      linear-gradient(180deg,var(--sup-alta),var(--sup)) padding-box,
      linear-gradient(180deg,var(--borde),var(--borde)) border-box;
  }
  @media (prefers-reduced-motion:no-preference){
    .embudo{
      background:
        linear-gradient(180deg,var(--sup-alta),var(--sup)) padding-box,
        conic-gradient(from var(--giro),
          var(--borde) 0 58%, var(--a1) 72%, var(--a2) 82%, var(--borde) 94%) border-box;
      animation:gira 9s linear infinite;
    }
    .tres>div:hover{
      background:
        linear-gradient(180deg,var(--sup-alta),var(--sup)) padding-box,
        conic-gradient(from var(--giro),
          var(--borde) 0 55%, var(--a1) 74%, var(--a2) 86%, var(--borde) 96%) border-box;
      border-color:transparent;animation:gira 5s linear infinite;
    }
  }
}

/* --- barrido de luz al pasar por los botones --- */
.btn{position:relative;overflow:hidden;isolation:isolate}
.btn::after{content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(105deg,transparent 32%,rgba(255,255,255,.42) 46%,transparent 62%);
  transform:translateX(-130%)}
@media (prefers-reduced-motion:no-preference){
  @keyframes barrido{to{transform:translateX(130%)}}
  .btn:hover::after{animation:barrido .75s cubic-bezier(.3,.6,.3,1)}
  .btn.hueco::after{background:linear-gradient(105deg,transparent 32%,rgba(52,227,155,.22) 46%,transparent 62%)}
}

/* --- las reglas entre secciones respiran --- */
@media (prefers-reduced-motion:no-preference){
  @keyframes corre{to{background-position:200% 0}}
  .seccion+.seccion::before,.portada::after{
    background:linear-gradient(90deg,transparent,var(--borde) 12%,var(--a1) 48%,var(--borde) 84%,transparent);
    background-size:200% 100%;opacity:.55;
    animation:corre 14s linear infinite}
}

/* --- el punto de la marca late --- */
@media (prefers-reduced-motion:no-preference){
  @keyframes late{
    0%,100%{box-shadow:0 0 0 3px rgba(52,227,155,.14),0 0 12px rgba(52,227,155,.55)}
    50%{box-shadow:0 0 0 5px rgba(52,227,155,.07),0 0 22px rgba(52,227,155,.95)}}
  .marca::before{animation:late 3.2s ease-in-out infinite}
}

/* --- las etiquetas de tecnología se encienden al pasar la fila --- */
.fila:hover .pieza{border-color:#2C4557;color:var(--texto);
  background:rgba(52,227,155,.06)}
.pieza{transition:border-color .2s,color .2s,background .2s}
