@font-face{font-family:'Archivo';font-style:normal;font-weight:100 900;font-stretch:62% 125%;font-display:swap;src:url(fonts/archivo-latin.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400 700;font-display:swap;src:url(fonts/ibm-plex-sans-400-normal-latin.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url(fonts/ibm-plex-mono-500-normal-latin.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:600 700;font-display:swap;src:url(fonts/ibm-plex-mono-600-normal-latin.woff2) format('woff2')}

/* Proyectos STM Pro · mismo lenguaje visual que info.stmpro.es */
:root{
  --ink:#121214;--ink-2:#1b1b1f;--ink-3:#26262c;--paper:#f6f5f3;--white:#fff;--signal:#c8102e;--steel:#55565c;
  --line:rgba(18,18,20,.1);--line-2:rgba(18,18,20,.16);
  --hd-red:#ff3b55;--hd-glass:rgba(5,3,1,.82);--hd-line:rgba(255,255,255,.14);
  --ok:#1f9d55;--warn:#e0a100;--off:#8a8b91;
  --c-web:#2f6fe4;--c-software:#c8102e;--c-ia:#8b3fd9;--c-infra:#1b1b1f;
  --gutter:max(5vw,calc((100% - 1290px)/2));--ease:cubic-bezier(.22,1,.36,1);
  --display:'Archivo',system-ui,sans-serif;--body:'IBM Plex Sans',system-ui,sans-serif;--mono:'IBM Plex Mono',ui-monospace,monospace
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;overflow-x:clip}
body{margin:0;font:400 16px/1.6 var(--body);background:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;overflow-x:clip}
[hidden]{display:none!important}
a{color:inherit;text-decoration:none}
img{max-width:100%;height:auto;display:block}
h1,h2,h3{margin:0;font-family:var(--display)}
.wrap{padding:0 var(--gutter)}
.mono{font-family:var(--mono)}
:focus-visible{outline:2px solid var(--hd-red);outline-offset:3px}
#pb{position:fixed;top:0;left:0;right:0;height:3px;background:var(--hd-red);transform:scaleX(0);transform-origin:0 50%;z-index:90}

/* Barra flotante de cristal oscuro */
.top{position:fixed;top:14px;left:0;right:0;z-index:50;padding:0 var(--gutter)}
.mast{display:flex;align-items:center;gap:14px;height:58px;padding:0 14px 0 20px;background:var(--hd-glass);border:1px solid var(--hd-line);border-radius:16px;backdrop-filter:blur(14px) saturate(1.4);-webkit-backdrop-filter:blur(14px) saturate(1.4);box-shadow:0 18px 40px -24px rgba(0,0,0,.8)}
.logo img{height:25px;width:auto}
.mast-tag{font:600 12px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.62);padding-left:14px;border-left:1px solid var(--hd-line)}
.mast-live{margin-left:auto;display:inline-flex;align-items:center;gap:8px;height:34px;padding:0 14px;border-radius:999px;border:1px solid var(--hd-line);font:500 12.5px/1 var(--mono);color:#fff;white-space:nowrap}
.mast-live i{width:8px;height:8px;border-radius:50%;background:var(--off)}
.mast-live.ok i{background:#33d17a;box-shadow:0 0 0 4px rgba(51,209,122,.18);animation:pulse 2.4s infinite}
.mast-live.warn i{background:var(--warn)}

/* Hero oscuro con retícula y halo rojo */
.hero{position:relative;overflow:hidden;background:#0b0a0b;color:#fff;padding:clamp(128px,13vw,170px) var(--gutter) clamp(64px,7vw,96px)}
.hero::before{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);background-size:56px 56px;mask-image:radial-gradient(ellipse 80% 70% at 30% 40%,#000 30%,transparent 80%);-webkit-mask-image:radial-gradient(ellipse 80% 70% at 30% 40%,#000 30%,transparent 80%)}
.hero::after{content:"";position:absolute;width:900px;height:900px;right:-260px;top:-380px;background:radial-gradient(circle,rgba(200,16,46,.42),rgba(140,12,32,.12) 45%,transparent 70%);pointer-events:none}
.hero-in{position:relative;z-index:1;max-width:900px}
.eyebrow{margin:0 0 18px;font:600 12px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--hd-red)}
.hero h1{font-size:clamp(2.3rem,6vw,4.4rem);line-height:1.02;letter-spacing:-.035em;font-weight:800;color:#fff;text-wrap:balance}
.hero h1 span{color:var(--hd-red)}
.lead{margin:22px 0 0;max-width:640px;font-size:clamp(1rem,1.4vw,1.12rem);color:rgba(255,255,255,.74)}
.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin:44px 0 0;max-width:820px;background:var(--hd-line);border:1px solid var(--hd-line);border-radius:16px;overflow:hidden}
.stats div{padding:18px 20px;background:rgba(18,18,20,.88)}
.stats dt{font:500 11.5px/1.2 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:rgba(255,255,255,.55)}
.stats dd{margin:8px 0 0;font:800 clamp(1.6rem,3vw,2.2rem)/1 var(--display);letter-spacing:-.02em;font-variant-numeric:tabular-nums}

/* Filtros */
.band{padding:clamp(40px,5vw,64px) 0 clamp(64px,8vw,104px)}
.bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;margin-bottom:28px}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{height:40px;padding:0 16px;border-radius:10px;border:1px solid var(--line-2);background:#fff;font:600 14px/1 var(--body);color:var(--ink);cursor:pointer;transition:background .2s,color .2s,border-color .2s}
.chip:hover{border-color:var(--ink)}
.chip.is-on{background:var(--ink);color:#fff;border-color:var(--ink)}
.sort{display:inline-flex;align-items:center;gap:10px;font:500 12.5px/1 var(--mono);color:var(--steel);text-transform:uppercase;letter-spacing:.05em}
.sort select{height:40px;padding:0 12px;border-radius:10px;border:1px solid var(--line-2);background:#fff;font:500 14px var(--body);color:var(--ink);text-transform:none;letter-spacing:0}

/* Tarjetas con barra de acento */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,370px),1fr));gap:20px}
.card{position:relative;display:flex;flex-direction:column;padding:26px 24px 22px;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 24px 48px -40px rgba(18,18,20,.45);overflow:hidden;transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
.card::before{content:"";position:absolute;top:0;left:24px;width:44px;height:4px;border-radius:0 0 4px 4px;background:var(--cat)}
.card:hover{transform:translateY(-3px);box-shadow:0 30px 60px -38px rgba(18,18,20,.55)}
.card[data-cat=web]{--cat:var(--c-web)}.card[data-cat=software]{--cat:var(--c-software)}.card[data-cat=ia]{--cat:var(--c-ia)}.card[data-cat=infra]{--cat:var(--c-infra)}
.c-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.c-cat{font:600 11px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cat)}
.card h2{margin-top:10px;font-size:1.42rem;line-height:1.12;letter-spacing:-.02em;font-weight:800}
.c-sub{margin:4px 0 0;font-size:.92rem;color:var(--steel)}
.dot{flex:none;display:inline-flex;align-items:center;gap:7px;height:26px;padding:0 10px;border-radius:999px;background:var(--paper);font:500 11.5px/1 var(--mono);color:var(--steel);white-space:nowrap}
.dot i{width:7px;height:7px;border-radius:50%;background:var(--off)}
.dot.online i{background:var(--ok);box-shadow:0 0 0 3px rgba(31,157,85,.16)}
.dot.parcial i,.dot.sin-publicar i{background:var(--warn)}
.dot.parado i{background:var(--signal)}

.prog{margin:22px 0 0}
.prog-top{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:9px}
.phase{display:inline-flex;align-items:center;height:24px;padding:0 9px;border-radius:7px;font:600 11.5px/1 var(--mono);letter-spacing:.03em}
.phase.produccion{background:rgba(31,157,85,.12);color:#157341}
.phase.desarrollo{background:rgba(47,111,228,.12);color:#1f53b5}
.phase.piloto{background:rgba(139,63,217,.12);color:#6d2bb3}
.phase.pendiente{background:rgba(224,161,0,.16);color:#8a6200}
.phase.pausa{background:rgba(85,86,92,.12);color:var(--steel)}
.pct{font:800 1.7rem/1 var(--display);letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.pct small{font-size:.9rem;font-weight:700;color:var(--steel);margin-left:1px}
.track{position:relative;height:10px;border-radius:999px;background:#ecebe8;overflow:hidden}
.fill{position:absolute;inset:0 auto 0 0;width:0;border-radius:inherit;background:linear-gradient(90deg,var(--signal),var(--hd-red));transition:width 1.3s var(--ease)}
.fill::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);transform:translateX(-100%);animation:shine 2.6s 1.4s var(--ease) 1}
.card[data-fase=pausa] .fill{background:linear-gradient(90deg,#7b7c82,#a3a4aa)}
.card[data-fase=produccion] .fill{background:linear-gradient(90deg,#c8102e,#ff3b55)}
.ticks{display:flex;justify-content:space-between;margin-top:6px;font:500 10.5px/1 var(--mono);color:rgba(85,86,92,.6)}

.c-desc{margin:18px 0 0;font-size:.95rem;color:#3a3b40}
.tags{display:flex;flex-wrap:wrap;gap:6px;margin:14px 0 0;padding:0;list-style:none}
.tags li{padding:5px 9px;border:1px solid var(--line);border-radius:7px;background:var(--paper);font:500 12px/1 var(--mono);color:var(--ink-3)}

.hitos{margin:16px 0 0;border-top:1px solid var(--line)}
.hitos summary{display:flex;align-items:center;gap:10px;padding:13px 0 4px;cursor:pointer;list-style:none;font:600 13px/1 var(--mono);color:var(--ink)}
.hitos summary::-webkit-details-marker{display:none}
.hitos summary::after{content:"+";margin-left:auto;font:500 18px/1 var(--mono);color:var(--steel);transition:transform .25s var(--ease)}
.hitos[open] summary::after{transform:rotate(45deg)}
.hitos summary span{color:var(--steel);font-weight:500}
.hitos ul{margin:8px 0 2px;padding:0;list-style:none}
.hitos li{display:flex;gap:10px;padding:5px 0;font-size:.92rem;color:#3a3b40}
.hitos li::before{content:"";flex:none;width:16px;height:16px;margin-top:3px;border-radius:5px;border:1.5px solid var(--line-2);background:#fff}
.hitos li.ok{color:var(--ink)}
.hitos li.ok::before{border-color:var(--ink);background:var(--ink) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 8.4l2.6 2.5L12 5.5' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/12px no-repeat}

.c-foot{margin-top:auto;padding-top:18px}
.btn{display:flex;align-items:center;justify-content:center;gap:8px;height:46px;border-radius:10px;background:var(--ink);color:#fff;font:600 14px/1 var(--body);transition:background .25s}
.btn:hover{background:var(--signal)}
.btn svg{width:15px;height:15px}
.btn.off{background:transparent;color:var(--steel);border:1px dashed var(--line-2);cursor:default}
.btn.off:hover{background:transparent}
.empty{text-align:center;color:var(--steel);padding:40px 0}

.foot{background:var(--ink);color:rgba(255,255,255,.6);font-size:.88rem}
.foot-in{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px;padding-top:26px;padding-bottom:26px}

@keyframes pulse{50%{box-shadow:0 0 0 7px rgba(51,209,122,0)}}
@keyframes shine{to{transform:translateX(100%)}}
@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.card{animation:rise .6s var(--ease) both;animation-delay:calc(var(--i,0) * 50ms)}

@media (max-width:760px){
  .top{top:10px;padding:0 16px}
  .mast{padding:0 10px 0 14px;height:54px}
  .mast-tag{display:none}
  .hero{padding-left:16px;padding-right:16px}
  .wrap{padding:0 16px}
  .stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .bar{flex-direction:column;align-items:stretch}
  .chips{flex-wrap:nowrap;overflow-x:auto;margin:0 -16px;padding:0 16px 4px;scrollbar-width:none}
  .chip{flex:none}
  .card{padding:22px 18px 18px}
  .card::before{left:18px}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}
