/* ==========================================================================
   Istmo Networks — istmonetworks.net
   Tema oscuro único. Sin JavaScript, sin fuentes ni recursos de terceros.
   Toda la gráfica del sitio es SVG en línea, servida desde este dominio.
   ========================================================================== */

:root{
  color-scheme: dark;

  /* superficies */
  --bg:        #07090A;
  --bg-1:      #0B0F10;
  --bg-2:      #111617;
  --bg-3:      #171E1F;

  /* líneas */
  --line:      #1C2425;
  --line-2:    #293334;
  --line-3:    #3A4647;

  /* texto */
  --tx:        #E9EFEC;
  --tx-2:      #9DABA7;
  --tx-3:      #6C7B78;

  /* acentos */
  --jade:      #2FD6A3;
  --jade-2:    #1FA37B;
  --jade-dim:  #0E3A2F;
  --coral:     #FF6E5C;

  --glow:      rgba(47,214,163,.16);
  --glow-soft: rgba(47,214,163,.07);

  /* tipografía */
  --sans: -apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --mono: ui-monospace,"SFMono-Regular","Cascadia Mono",Menlo,Consolas,"Liberation Mono",monospace;

  /* medidas */
  --page: 1120px;
  --prose: 68ch;
  --r: 10px;
  --r-lg: 16px;
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

body{
  background:var(--bg);
  color:var(--tx);
  font:16px/1.7 var(--sans);
  margin:0;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}

.wrap{max-width:var(--page);margin:0 auto;padding:0 28px}
@media(max-width:640px){.wrap{padding:0 20px}}

a{color:var(--jade);text-decoration:none}
a:focus-visible{outline:2px solid var(--jade);outline-offset:3px;border-radius:3px}
::selection{background:var(--jade);color:#04110C}

/* ============================ marca ============================ */

.logo{display:flex;align-items:center;gap:11px}
.logo svg.mark{width:30px;height:30px;flex:none;display:block}
.logo .word{display:flex;flex-direction:column;line-height:1}
.logo .word b{font-size:15.5px;font-weight:650;letter-spacing:-.005em;color:var(--tx)}
.logo .word span{
  font-family:var(--mono);font-size:8.5px;letter-spacing:.22em;
  color:var(--tx-3);margin-top:4px;text-transform:uppercase;
}

/* ============================ cabecera ============================ */

.site-head{
  position:sticky;top:0;z-index:50;
  background:rgba(7,9,10,.78);
  backdrop-filter:saturate(160%) blur(14px);
  -webkit-backdrop-filter:saturate(160%) blur(14px);
  border-bottom:1px solid var(--line);
}
.site-head .wrap{
  display:flex;align-items:center;justify-content:space-between;
  gap:24px;height:66px;
}
.site-head nav{display:flex;align-items:center;gap:26px}
.site-head nav a{
  font-size:13.5px;color:var(--tx-2);letter-spacing:-.005em;
  transition:color .16s ease;
}
.site-head nav a:hover{color:var(--tx)}

.lang{
  font-family:var(--mono);font-size:11px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--tx-2);
  border:1px solid var(--line-2);border-radius:999px;
  padding:5px 12px;transition:border-color .16s ease,color .16s ease;
}
.lang:hover{color:var(--jade);border-color:var(--jade-2)}

@media(max-width:720px){
  .site-head nav a.hide-sm{display:none}
  .site-head .wrap{height:60px}
}

/* ============================ hero ============================ */

.hero{position:relative;overflow:hidden;border-bottom:1px solid var(--line)}
.hero::before{
  content:"";position:absolute;inset:-40% -20% auto -20%;height:900px;
  background:radial-gradient(52% 46% at 50% 42%,var(--glow) 0%,transparent 72%);
  pointer-events:none;
}
.hero .wrap{position:relative;padding-top:82px}

.eyebrow{
  display:inline-flex;align-items:center;gap:9px;
  font-family:var(--mono);font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--jade);
  border:1px solid var(--jade-dim);background:rgba(47,214,163,.05);
  border-radius:999px;padding:6px 14px;margin:0 0 30px;
}
.eyebrow .dot{
  width:6px;height:6px;border-radius:50%;background:var(--jade);flex:none;
  box-shadow:0 0 0 3px rgba(47,214,163,.16);
}

h1{
  font-size:clamp(2.25rem,4.9vw,3.65rem);
  font-weight:680;letter-spacing:-.034em;line-height:1.06;
  margin:0 0 24px;max-width:21ch;
}
h1 .accent{
  background:linear-gradient(96deg,var(--jade) 0%,#7FE9C6 52%,var(--jade-2) 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.hero p.lead{
  font-size:clamp(1.05rem,1.7vw,1.28rem);
  color:var(--tx-2);max-width:60ch;margin:0 0 36px;line-height:1.62;
}

.cta-row{display:flex;flex-wrap:wrap;gap:12px;margin:0 0 64px}
.btn{
  display:inline-flex;align-items:center;gap:9px;
  font-size:14.5px;font-weight:560;letter-spacing:-.005em;
  border-radius:var(--r);padding:12px 20px;
  transition:transform .16s ease,background .16s ease,border-color .16s ease;
}
.btn svg{width:15px;height:15px;flex:none}
.btn-primary{background:var(--jade);color:#04110C;border:1px solid var(--jade)}
.btn-primary:hover{background:#54E3B7;transform:translateY(-1px)}
.btn-ghost{background:transparent;color:var(--tx);border:1px solid var(--line-2)}
.btn-ghost:hover{border-color:var(--line-3);background:var(--bg-2);transform:translateY(-1px)}
@media (prefers-reduced-motion:reduce){.btn:hover{transform:none}}

/* ============================ secciones ============================ */

section.band{padding:92px 0;border-bottom:1px solid var(--line)}
section.band.tint{background:var(--bg-1)}

.sec-head{margin:0 0 48px;max-width:var(--prose)}
.sec-num{
  font-family:var(--mono);font-size:11px;letter-spacing:.18em;
  color:var(--jade);display:block;margin:0 0 16px;
}
h2{
  font-size:clamp(1.55rem,3.1vw,2.2rem);
  font-weight:660;letter-spacing:-.028em;line-height:1.15;margin:0 0 18px;
}
h3{font-size:16.5px;font-weight:620;letter-spacing:-.012em;margin:0 0 8px;color:var(--tx)}

p{margin:0 0 18px;max-width:var(--prose);color:var(--tx-2)}
strong{color:var(--tx);font-weight:600}
em{font-style:normal;font-family:var(--mono);font-size:.92em;color:var(--tx)}
.mono{font-family:var(--mono);font-size:.92em}

ul.plain{margin:0 0 18px;padding:0 0 0 20px;max-width:var(--prose);color:var(--tx-2)}
ul.plain li{margin:0 0 10px}
ul.plain li::marker{color:var(--jade-2)}

/* ============================ tarjetas ============================ */

.grid{display:grid;gap:16px}
.grid-3{grid-template-columns:repeat(3,1fr)}
@media(max-width:900px){.grid-3{grid-template-columns:1fr}}

.card{
  background:var(--bg-2);border:1px solid var(--line);
  border-radius:var(--r-lg);padding:26px 24px;
  transition:border-color .18s ease,background .18s ease,transform .18s ease;
}
.card:hover{border-color:var(--line-3);background:var(--bg-3);transform:translateY(-2px)}
@media (prefers-reduced-motion:reduce){.card:hover{transform:none}}
.card p{margin:0;font-size:14.5px;line-height:1.66;color:var(--tx-2)}
.card .tag{
  font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--jade);display:block;margin:0 0 14px;
}

/* fichas con icono */
.spec{
  display:flex;gap:16px;align-items:flex-start;
  padding:22px 0;border-bottom:1px solid var(--line);
}
.spec .ico{
  width:38px;height:38px;flex:none;border-radius:9px;
  background:var(--bg-2);border:1px solid var(--line-2);
  display:flex;align-items:center;justify-content:center;color:var(--jade);
}
.spec .ico svg{width:18px;height:18px}
.spec .body{min-width:0}
.spec h3{margin:0 0 5px;font-size:15px}
.spec p{margin:0;font-size:14.5px;max-width:62ch}

.spec:last-child{border-bottom:0}
@media(min-width:880px){
  .spec-list{display:grid;grid-template-columns:1fr 1fr;gap:0 52px}
  .spec:nth-last-child(-n+2){border-bottom:0}
}

/* ============================ contacto ============================ */

.contact-grid{display:grid;gap:14px;grid-template-columns:repeat(3,1fr)}
@media(max-width:820px){.contact-grid{grid-template-columns:1fr}}
.contact-card{
  background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:24px;transition:border-color .18s ease,background .18s ease;
}
.contact-card:hover{border-color:var(--jade-2);background:var(--bg-3)}
.contact-card .addr{
  font-family:var(--mono);font-size:14px;color:var(--tx);
  display:block;margin:0 0 8px;word-break:break-all;
}
.contact-card .addr:hover{color:var(--jade)}
.contact-card .role{font-size:13.5px;color:var(--tx-3);margin:0}

/* ============================ llamada final ============================ */

.cta{
  position:relative;overflow:hidden;
  border:1px solid var(--line-2);border-radius:22px;
  background:linear-gradient(150deg,var(--bg-2) 0%,var(--bg-1) 60%);
  padding:56px 44px;text-align:center;
}
.cta::before{
  content:"";position:absolute;inset:auto -10% -70% -10%;height:340px;
  background:radial-gradient(50% 60% at 50% 50%,var(--glow-soft) 0%,transparent 70%);
}
.cta > *{position:relative}
.cta h2{margin:0 auto 14px;max-width:20ch}
.cta p{margin:0 auto 28px;max-width:52ch;color:var(--tx-2)}
.cta .cta-row{justify-content:center;margin:0}
@media(max-width:640px){.cta{padding:40px 24px}}

/* ============================ pie ============================ */

.site-foot{padding:64px 0 48px;color:var(--tx-3);font-size:13.5px}
.foot-top{
  display:grid;grid-template-columns:1.6fr 1fr 1fr;gap:40px;
  padding-bottom:40px;border-bottom:1px solid var(--line);
}
@media(max-width:820px){.foot-top{grid-template-columns:1fr;gap:32px}}
.foot-top h4{
  font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--tx-3);margin:0 0 16px;font-weight:600;
}
.foot-top ul{list-style:none;margin:0;padding:0}
.foot-top li{margin:0 0 9px}
.foot-top a{color:var(--tx-2);font-size:13.5px}
.foot-top a:hover{color:var(--jade)}
.foot-note{max-width:44ch;margin:18px 0 0;color:var(--tx-3);font-size:13px;line-height:1.65}
.foot-bottom{
  display:flex;flex-wrap:wrap;gap:12px 24px;justify-content:space-between;
  padding-top:26px;font-family:var(--mono);font-size:11.5px;color:var(--tx-3);
}
.foot-bottom a{color:var(--tx-3)}
.foot-bottom a:hover{color:var(--jade)}

/* ============================ gráficos SVG ============================ */

.figure{margin:0;position:relative}
.figure .scroll{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}
.figure svg{display:block;width:100%;height:auto}
figcaption{
  font-family:var(--mono);font-size:11.5px;letter-spacing:.04em;
  color:var(--tx-3);margin-top:18px;text-align:center;
}

/* mapa de topología */
.topo{max-width:1000px;margin:0 auto}
.topo .link{fill:none;stroke:var(--line-3);stroke-width:1.25}
.topo .pulse{
  fill:none;stroke:var(--jade);stroke-width:1.75;stroke-linecap:round;
  stroke-dasharray:26 340;
  animation:flow 4.2s linear infinite;
}
.topo .p2{animation-delay:1.05s}
.topo .p3{animation-delay:2.1s}
.topo .p4{animation-delay:3.15s}
@keyframes flow{from{stroke-dashoffset:366}to{stroke-dashoffset:0}}

.topo .node{fill:var(--bg);stroke:var(--line-3);stroke-width:1.5}
.topo .node-lit{fill:var(--jade);stroke:none}
.topo .ring{fill:none;stroke:var(--jade);opacity:.5}
.topo .ring-a{animation:ping 3.6s cubic-bezier(.2,.6,.3,1) infinite}
.topo .ring-b{animation:ping 3.6s cubic-bezier(.2,.6,.3,1) infinite 1.8s}
@keyframes ping{
  0%{r:9;opacity:.55;stroke-width:1.6}
  70%{opacity:0}
  100%{r:44;opacity:0;stroke-width:.5}
}
.topo text{font-family:var(--mono);font-size:12.5px;fill:var(--tx-2)}
.topo text.home{fill:var(--tx);font-size:13.5px}
.topo .grid-dot{fill:var(--line-2)}

/* diagrama RPKI */
.rpki{min-width:780px;margin:0 auto;display:block}
.rpki .box{fill:var(--bg-2);stroke:var(--line-2);stroke-width:1}
.rpki .box-ok{stroke:var(--jade-2)}
.rpki .box-no{stroke:var(--coral);stroke-opacity:.5}
.rpki .lbl{font-family:var(--sans);font-size:13.5px;font-weight:560;fill:var(--tx)}
.rpki .sub{font-family:var(--mono);font-size:11px;fill:var(--tx-3)}
.rpki .path-ok{fill:none;stroke:var(--jade);stroke-width:1.75;stroke-linecap:round}
.rpki .path-no{fill:none;stroke:var(--coral);stroke-width:1.75;stroke-linecap:round;stroke-dasharray:5 6}
.rpki .verdict-ok{font-family:var(--mono);font-size:12px;fill:var(--jade)}
.rpki .verdict-no{font-family:var(--mono);font-size:12px;fill:var(--coral)}
.rpki .flow{
  fill:none;stroke:#7FE9C6;stroke-width:2.4;stroke-linecap:round;
  stroke-dasharray:16 190;animation:flow2 3s linear infinite;
}
.rpki .tick{fill:none;stroke:var(--jade);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
@keyframes flow2{from{stroke-dashoffset:204}to{stroke-dashoffset:0}}

@media (prefers-reduced-motion:reduce){
  .topo .pulse,.topo .ring-a,.topo .ring-b,.rpki .flow{animation:none}
  .topo .pulse{stroke-dasharray:none;opacity:.85}
  .topo .ring{opacity:.22}
}

/* ============================ páginas de texto ============================ */

.page-head{padding:74px 0 44px;border-bottom:1px solid var(--line);position:relative;overflow:hidden}
.page-head::before{
  content:"";position:absolute;inset:-60% -30% auto -30%;height:560px;
  background:radial-gradient(46% 50% at 50% 40%,var(--glow-soft) 0%,transparent 70%);
}
.page-head .wrap{position:relative}
.page-head h1{font-size:clamp(2rem,4.4vw,3.1rem);margin:0 0 16px;max-width:20ch}
.page-head p{font-size:1.05rem;margin:0;color:var(--tx-2)}

.doc{padding:64px 0 24px}
.doc section{padding:0 0 44px}
.doc h2{font-size:clamp(1.3rem,2.4vw,1.6rem);margin:0 0 16px}
.doc .sec-num{margin-bottom:12px}

.callout{
  background:var(--bg-2);border:1px solid var(--line-2);
  border-left:2px solid var(--jade);border-radius:var(--r);
  padding:20px 24px;margin:0 0 20px;max-width:var(--prose);
}
.callout p{margin:0;font-size:14.5px}

/* 404 */
.mid{min-height:62vh;display:flex;align-items:center;text-align:center}
.mid .wrap{width:100%}
.mid h1{margin:0 auto 14px;max-width:none;font-size:clamp(3.4rem,11vw,6.6rem)}
.mid p{margin:0 auto 10px;max-width:44ch}
.mid .cta-row{justify-content:center;margin-top:28px}

/* oculto visualmente, accesible para lectores de pantalla */
.sr{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}

/* utilidades */
.sprite{position:absolute;width:0;height:0;overflow:hidden}
.gap-top{margin-top:44px}
.callout.wide{max-width:none;margin-top:36px}
