:root{
  --bg:#05070a;
  --bg2:#0a0e14;
  --panel:rgba(13,18,26,.82);
  --line:rgba(120,150,180,.14);
  --txt:#dfe7ef;
  --dim:#a7b3c2;
  --red:#ff3b30;
  --amber:#ffb340;
  --cyan:#39d5e8;
  --green:#35d07f;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html{background:var(--bg)}
body{
  background:radial-gradient(1200px 600px at 50% -10%,#0b1220 0%,var(--bg) 60%) fixed,var(--bg);
  color:var(--txt);
  font-family:var(--sans);
  min-height:100vh;
  -webkit-font-smoothing:antialiased;
}

/* ---------- header ---------- */
#topbar{
  position:sticky;top:0;z-index:1000;
  display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:10px 14px;
  background:#05070a;
  border-bottom:1px solid var(--line);
}
.brand{display:flex;align-items:center;gap:10px}
.brand img{border-radius:10px;box-shadow:0 0 14px rgba(255,179,64,.35)}
.brand h1{font-size:19px;letter-spacing:2px;font-weight:800}
.brand h1 span{color:var(--amber);font-weight:400}
.brand p{font-size:11px;color:var(--dim);letter-spacing:1px;text-transform:uppercase}
.status{text-align:right;font-family:var(--mono)}
.clock{font-size:20px;font-weight:700;letter-spacing:1px;color:#fff}
.upd{font-size:11px;color:var(--dim)}
.upd b{color:var(--cyan)}
.srcs{display:flex;gap:10px;justify-content:flex-end;margin-top:4px;font-size:10px;color:var(--dim)}
#statusline{display:flex;justify-content:center;padding:4px 12px;border-bottom:1px solid var(--line);background:rgba(5,7,10,.55)}
#statusline .srcs{display:flex;flex-wrap:wrap;gap:4px 12px;justify-content:center;margin-top:0;font-size:10px;color:var(--dim)}
.src i{display:inline-block;width:7px;height:7px;border-radius:50%;background:#555;margin-right:4px}
.src.ok i{background:var(--green);box-shadow:0 0 6px var(--green)}
.src.err i{background:var(--red);box-shadow:0 0 6px var(--red)}
.hidden{display:none!important}


/* ---------- layout ---------- */
main{max-width:1400px;margin:0 auto;padding:12px 14px 110px}
/* Escritorio grande: aprovechar el ancho (la barra inferior es fija) */
@media(min-width:1500px){
  main,#stats,.whatis,footer{max-width:1760px}
}
#mapwrap,#mapwrap-av,#mapwrap-clima{position:relative;border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-top:12px;
  box-shadow:0 0 40px rgba(57,213,232,.06),0 10px 40px rgba(0,0,0,.5)}
#map,#map-av,#map-clima{height:54vh;min-height:340px;background:#05070a;z-index:1}
#layertoggles{position:absolute;top:10px;right:10px;z-index:500;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;max-width:72%}
#layertoggles button{
  font-family:var(--mono);font-size:11px;letter-spacing:.5px;
  background:rgba(10,14,20,.85);color:var(--dim);
  border:1px solid var(--line);border-radius:8px;padding:6px 10px;cursor:pointer;
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
}
#layertoggles button.on{color:var(--cyan);border-color:rgba(57,213,232,.5)}
.leaflet-container{font-family:var(--sans)}
.leaflet-control-attribution{background:rgba(5,7,10,.7)!important;color:#5a6a7d!important;font-size:9px!important}
.leaflet-control-attribution a{color:#7b8ea3!important}

/* ---------- threat markers ---------- */
.mk{position:relative;width:22px;height:22px}
.mk .dot{position:absolute;inset:6px;border-radius:50%;z-index:2}
/* v122: el pulso infinito en cada marcador castiga el scroll/movimiento del mapa;
   solo pulsan los importantes (rojos), el resto anillo estático */
.mk .ring{position:absolute;inset:0;border-radius:50%;border:2px solid;opacity:.9}
.mk-high .dot{background:var(--red);box-shadow:0 0 10px var(--red)}
.mk-high .ring{border-color:var(--red);animation:pulse 2s ease-out infinite}
.mk-medium .dot{background:var(--amber);box-shadow:0 0 10px var(--amber)}
.mk-medium .ring{border-color:var(--amber)}
.mk-low .dot{background:#9aa6b5;box-shadow:0 0 8px #9aa6b5}
.mk-low .ring{border-color:#9aa6b5;opacity:.5}
.mk-alert{position:relative;width:16px;height:16px}
.mk-alert .dot{position:absolute;inset:5px;border-radius:50%;z-index:2}
.mk-alert .ring{position:absolute;inset:0;border-radius:50%;border:2px solid;opacity:.85}
.mk-alert-red .dot{background:var(--red);box-shadow:0 0 8px var(--red)}
.mk-alert-red .ring{border-color:var(--red);animation:pulse 2.4s ease-out infinite}
.mk-alert-amber .dot{background:var(--amber);box-shadow:0 0 8px var(--amber)}
.mk-alert-amber .ring{border-color:var(--amber)}
/* v307: focos FIRMS (satélite NASA) en el mapa de Rusia */
.mk-fire .dot{background:#ff7b00;box-shadow:0 0 8px #ff7b00}
.mk-fire .ring{border-color:#ff7b00;animation:pulse 3.2s ease-out infinite}
@keyframes pulse{0%{transform:scale(.4);opacity:1}100%{transform:scale(1.25);opacity:0}}
.mk-arrow{width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;
  border-bottom:16px solid rgba(255,255,255,.85);filter:drop-shadow(0 0 4px rgba(0,0,0,.8))}
.mk-wp{position:relative;width:12px;height:12px;border-radius:50%;background:var(--cyan);
  box-shadow:0 0 10px var(--cyan);border:2px solid #062a30}
.mk-wp::after{content:"";position:absolute;inset:-2px;border-radius:50%;
  border:2px solid var(--cyan);opacity:.35} /* v123: estático, sin sonar infinito */
/* interception polylines: línea discontinua estática (v123: la animación
   stroke-dashoffset obligaba a re-renderizar el SVG en cada frame) */
.flow{}
.eta-tip{background:rgba(8,10,14,.92)!important;border:1px solid rgba(255,59,48,.6)!important;
  color:#ffd7d4!important;font-family:var(--mono);font-size:11px;border-radius:8px;
  box-shadow:0 0 16px rgba(255,59,48,.25)}
.eta-tip:before{display:none}
.leaflet-popup-content-wrapper{background:#0c1118;color:var(--txt);border:1px solid var(--line);border-radius:10px}
.leaflet-popup-content{font-family:var(--sans);font-size:13px;line-height:1.55;margin:12px 14px}
.leaflet-popup-content b.t{font-family:var(--mono);letter-spacing:.5px}
.leaflet-popup-tip{background:#0c1118;border:1px solid var(--line)}
/* Tarjeta de información del avión (popup al pinchar) */
.avcard{min-width:196px;font-size:12px}
/* Ficha persistente del avión seleccionado (sobre el mapa de aviones) */
#plane-card{position:absolute;top:10px;left:10px;z-index:600;max-width:min(300px,82vw);
  background:rgba(10,14,20,.93);backdrop-filter:blur(10px);
  border:1px solid var(--line);border-radius:12px;padding:12px 14px 10px;
  box-shadow:0 8px 30px rgba(0,0,0,.55)}
#plane-card-close{position:absolute;top:2px;right:8px;background:none;border:none;
  color:var(--dim);font-size:20px;line-height:1;cursor:pointer;padding:10px;min-width:44px;min-height:44px}
#plane-card-close:hover{color:#fff}
#plane-card .avcard{min-width:0}
.avstale{margin-top:8px;font-size:11px;color:var(--amber);font-family:var(--mono)}
.avcard .avhead{font-weight:700;font-size:15px;color:#fff;margin-bottom:6px;letter-spacing:.05em;font-family:var(--mono)}
.avcard .avr{display:flex;justify-content:space-between;gap:14px;padding:2.5px 0;color:#8b98a8}
.avcard .avr b{color:#dfe7f2;font-weight:600;font-variant-numeric:tabular-nums}
.avcard .avr b.sqk-special{color:#ff7070}
.avcard .avemg{background:rgba(255,60,60,.14);border:1px solid rgba(255,60,60,.55);color:#ff7070;font-weight:700;font-size:11px;letter-spacing:.06em;padding:5px 8px;border-radius:6px;margin-bottom:6px;text-align:center}
.avmil{display:inline-block;font-size:10px;font-weight:700;letter-spacing:1px;padding:3px 8px;border-radius:4px;margin:6px 0 2px}
.avmil.mil{color:#ff7070;background:rgba(255,80,80,.12);border:1px solid rgba(255,80,80,.45)}
.avmil.civ{color:#7ee2a8;background:rgba(80,255,160,.07);border:1px solid rgba(80,255,160,.3)}
.miltag{font-size:9px;font-weight:700;color:#ff7070;border:1px solid rgba(255,80,80,.5);border-radius:3px;padding:1px 4px;margin-left:6px;letter-spacing:1px;vertical-align:2px}
/* Selector de idioma */
.langsel{background:rgba(255,255,255,.06);color:var(--txt);border:1px solid var(--line);border-radius:8px;font-size:12px;padding:5px 6px;margin-left:8px;cursor:pointer}
.langsel option{background:#0c1118}

/* ---------- interception strip ---------- */
#intercept-strip{margin-top:12px}
#intercept-strip h2{font-family:var(--mono);font-size:12px;letter-spacing:2px;color:var(--red);
  text-transform:uppercase;margin-bottom:8px}
#intercept-cards{display:flex;gap:10px;overflow-x:auto;padding-bottom:6px;scroll-snap-type:x mandatory}
.icard{flex:0 0 260px;scroll-snap-align:start;
  background:linear-gradient(160deg,rgba(255,59,48,.14),rgba(10,14,20,.9));
  border:1px solid rgba(255,59,48,.55);border-radius:12px;padding:12px;
  box-shadow:0 0 24px rgba(255,59,48,.18)}
.icard .k{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--red)}
.icard .t{font-size:15px;font-weight:700;margin:4px 0}
.icard .eta{font-family:var(--mono);font-size:22px;color:#fff;margin:6px 0}
.icard .eta small{font-size:11px;color:var(--dim)}
.icard .d{font-family:var(--mono);font-size:11px;color:var(--dim)}
.icard .est{font-size:10px;color:var(--dim);font-style:italic}

/* ---------- radar sweep (anclado al mapa, se mueve con él) ---------- */
.leaflet-radar-pane{pointer-events:none}
.radar-sweep{width:1400px;height:1400px;border-radius:50%;pointer-events:none;
  background:conic-gradient(from 0deg at 50% 50%, rgba(57,213,232,.18) 0deg, transparent 55deg, transparent 360deg);
  -webkit-mask-image:radial-gradient(circle at 50% 50%, #000 52%, transparent 70%);
  mask-image:radial-gradient(circle at 50% 50%, #000 52%, transparent 70%);
  will-change:transform; /* v122: capa GPU propia para que el giro no repinte */
  animation:sweep 9s linear infinite}
@keyframes sweep{to{transform:rotate(360deg)}}

/* ---------- stats command bar ---------- */
#stats,#ru-stats{max-width:1400px;margin:12px auto 0;padding:0 14px;display:grid;
  grid-template-columns:1fr 1fr;gap:10px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 12px;
  /* v217: sin backdrop-filter: en móvil obligaba a repintar el desenfoque en cada
     fotograma del scroll (tirones); con el fondo al 82% el blur apenas se notaba */}
.stat .k{display:block;font-family:var(--mono);font-size:10px;letter-spacing:2px;
  color:var(--dim);text-transform:uppercase}
.stat .v{display:block;font-family:var(--mono);font-size:28px;font-weight:700;color:#fff;line-height:1.25}
.stat .v.small{font-size:17px;padding-top:4px}
.stat.danger{border-color:rgba(255,59,48,.5)}
.stat.danger .v{color:var(--red);text-shadow:0 0 14px rgba(255,59,48,.5)}

/* ---------- panels ---------- */
.panels{display:grid;grid-template-columns:1fr;gap:12px;margin-top:12px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px;
  /* v217: sin backdrop-filter por la misma razón que .stat (scroll fluido en móvil) */
  transition:transform .25s ease,border-color .25s ease,box-shadow .25s ease}
.card:hover{transform:translateY(-2px);border-color:rgba(57,213,232,.35);
  box-shadow:0 8px 30px rgba(0,0,0,.5),0 0 24px rgba(57,213,232,.08)}
.card h2{font-family:var(--mono);font-size:12px;letter-spacing:2px;text-transform:uppercase;
  color:var(--dim);margin-bottom:10px;display:flex;align-items:center;gap:8px}
.card h2::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--cyan);
  box-shadow:0 0 8px var(--cyan);animation:live 2s ease-in-out infinite}
@keyframes live{0%,100%{opacity:1}50%{opacity:.25}}
.card.collapsible>h2{cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent}
.card.collapsible>h2::after{content:"▾";margin-left:auto;color:var(--cyan);transition:transform .25s ease}
.card.collapsible.open>h2::after{transform:rotate(180deg)}
.card.collapsible .collapse-body{display:none}
.card.collapsible.open .collapse-body{display:block;animation:fadein .25s ease}
.card.collapsible:not(.open)>h2{margin-bottom:0}
@keyframes fadein{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.count{font-size:11px;background:rgba(57,213,232,.12);color:var(--cyan);border:1px solid rgba(57,213,232,.35);
  border-radius:20px;padding:1px 9px}
/* filters */
#filters{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.chip{font-family:var(--mono);font-size:11px;color:var(--dim);background:rgba(255,255,255,.03);
  border:1px solid var(--line);border-radius:20px;padding:5px 11px;cursor:pointer}
.chip.on{color:var(--cyan);border-color:rgba(57,213,232,.5);background:rgba(57,213,232,.08)}
.list{display:flex;flex-direction:column;gap:8px;max-height:340px;overflow-y:auto}
.list.flat{max-height:none;overflow-y:visible}
.titem{display:flex;gap:10px;align-items:center;background:rgba(255,255,255,.025);
  border:1px solid var(--line);border-radius:10px;padding:9px 10px;font-size:13px;cursor:pointer}
.titem:hover{border-color:rgba(57,213,232,.35)}
.titem .pip{flex:0 0 10px;width:10px;height:10px;border-radius:50%}
.pip.high{background:var(--red);box-shadow:0 0 8px var(--red)}
.pip.medium{background:var(--amber);box-shadow:0 0 8px var(--amber)}
.pip.low{background:#9aa6b5}
.titem .meta{font-family:var(--mono);font-size:11px;color:var(--dim)}
.titem .grow{flex:1;min-width:0}
.titem .tag{font-family:var(--mono);font-size:10px;color:var(--red);border:1px solid rgba(255,59,48,.5);
  border-radius:6px;padding:2px 6px;white-space:nowrap}
.aitem{display:flex;gap:10px;align-items:center;background:rgba(255,255,255,.025);
  border:1px solid var(--line);border-radius:10px;padding:9px 10px;font-size:13px}
.aitem .lvl{font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:1px;
  border-radius:6px;padding:3px 8px;flex:0 0 auto}
.lvl.red{background:rgba(255,59,48,.15);color:var(--red);border:1px solid rgba(255,59,48,.5)}
.lvl.yellow{background:rgba(255,179,64,.12);color:var(--amber);border:1px solid rgba(255,179,64,.5)}
.lvl.alert{background:rgba(96,165,250,.12);color:#60a5fa;border:1px solid rgba(96,165,250,.5)}
.aitem .meta{font-family:var(--mono);font-size:11px;color:var(--dim)}
.src2{font-family:var(--mono);font-size:10px;font-weight:700;color:#4ade80;background:rgba(74,222,128,.1);
  border:1px solid rgba(74,222,128,.4);border-radius:6px;padding:2px 6px;white-space:nowrap}
.empty{color:var(--dim);font-size:13px;padding:12px;text-align:center;border:1px dashed var(--line);border-radius:10px}

/* tension */
.trow{display:flex;align-items:center;gap:10px;margin-bottom:8px;font-size:13px;cursor:pointer;
  border-radius:8px;padding:2px 4px;margin-left:-4px;margin-right:-4px}
.trow:hover{background:rgba(57,213,232,.06)}
.trow .cname{flex:0 0 110px;font-weight:600}
.trow .bar{flex:1;height:8px;background:rgba(255,255,255,.06);border-radius:6px;overflow:hidden}
.trow .fill{height:100%;border-radius:6px;transition:width .8s ease}
.trow .val{flex:0 0 34px;text-align:right;font-family:var(--mono);font-size:12px}
.note{font-size:11px;color:var(--dim);margin-top:8px;line-height:1.5}

/* timeline */
#timeline{display:flex;flex-direction:column;gap:0;max-height:340px;overflow-y:auto}
.ev{display:flex;gap:10px;padding:8px 2px;border-left:2px solid var(--line);padding-left:12px;
  position:relative;font-size:13px}
.ev:before{content:"";position:absolute;left:-5px;top:12px;width:8px;height:8px;border-radius:50%;background:var(--dim)}
.ev.red:before{background:var(--red);box-shadow:0 0 8px var(--red)}
.ev.amber:before{background:var(--amber);box-shadow:0 0 8px var(--amber)}
.ev.cyan:before{background:var(--cyan)}
.ev time{font-family:var(--mono);font-size:11px;color:var(--dim);flex:0 0 46px}

/* install */
#sec-install{margin-top:12px}
#sec-install p{font-size:14px;color:var(--dim);margin-bottom:10px}
.btn{font-family:var(--mono);font-size:14px;letter-spacing:1px;cursor:pointer;
  background:linear-gradient(160deg,#ffb340,#ff8a3d);color:#1a0e00;border:none;border-radius:10px;
  padding:12px 22px;font-weight:700;box-shadow:0 0 20px rgba(255,179,64,.35)}
.howto{margin-top:12px;display:flex;flex-direction:column;gap:8px;font-size:13px;color:var(--dim)}
.howto strong{color:var(--txt)}

/* footer */
footer{max-width:1400px;margin:0 auto;padding:18px 14px 40px;color:var(--dim);font-size:12px;line-height:1.7}
footer a{color:var(--cyan)}
footer strong{color:var(--amber)}
.credit{margin-top:8px;font-family:var(--mono);font-size:11px}

/* news */
.nitem{display:flex;flex-direction:column;gap:5px;background:rgba(255,255,255,.025);
  border:1px solid var(--line);border-radius:10px;padding:9px 10px;font-size:13px;
  color:var(--txt);text-decoration:none}
.nitem:hover{border-color:rgba(57,213,232,.4)}
.nitem .ntitle{line-height:1.45}
.nitem .nmeta{font-family:var(--mono);font-size:11px;color:var(--dim)}
.nitem mark{background:rgba(255,179,64,.28);color:#ffd9a8;border-radius:3px;padding:0 2px}
.unver{align-self:flex-start;font-family:var(--mono);font-size:9px;letter-spacing:1px;font-weight:700;
  color:#1a1206;background:var(--amber);border-radius:6px;padding:2px 6px}
.badges{display:flex;gap:6px;flex-wrap:wrap}
.now{font-family:var(--mono);font-size:9px;letter-spacing:1px;font-weight:700;
  color:#1a0e00;background:var(--amber);border-radius:6px;padding:2px 6px;
  box-shadow:0 0 10px rgba(255,179,64,.5);animation:live 1.6s ease-in-out infinite}

@media(min-width:900px){
  #stats{grid-template-columns:repeat(4,1fr)}
  .panels{grid-template-columns:1fr 1fr}
  #map,#map-av,#map-clima{height:62vh}
  .brand h1{font-size:22px}
  /* DÍA en dos columnas: En directo a la izquierda, resto a la derecha */
  #tab-dia{display:grid;grid-template-columns:1.15fr 1fr;gap:14px;align-items:start}
  #sec-narr{grid-row:1/span 3}
  #sec-narr #narrfeed{max-height:none;overflow:visible}
}

/* Toast de actualización */
#toast{position:fixed;left:50%;bottom:calc(88px + env(safe-area-inset-bottom));transform:translate(-50%,20px);background:#0d1117;border:1px solid #f59e0b;color:#fbbf24;font:600 13px/1.4 inherit;padding:10px 18px;border-radius:10px;opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;z-index:9999}
#toast.show{opacity:1;transform:translate(-50%,0)}

/* Insignia de canal en Último minuto */
.badges .ch{display:inline-block;font-size:10px;letter-spacing:.08em;color:#67e8f9;border:1px solid rgba(103,232,249,.4);border-radius:20px;padding:2px 8px;margin-left:6px;vertical-align:middle}

/* ---------- compartir por WhatsApp ---------- */
.share{flex:0 0 auto;font-family:var(--mono);font-size:13px;line-height:1;
  background:rgba(255,255,255,.04);color:var(--dim);
  border:1px solid var(--line);border-radius:8px;padding:5px 8px;cursor:pointer}
.share:hover{color:var(--green);border-color:rgba(53,208,127,.5)}
.imgbtn{flex:0 0 auto;display:inline-flex;align-items:center;line-height:1;
  background:rgba(255,255,255,.04);color:var(--dim);
  border:1px solid var(--line);border-radius:8px;padding:6px 8px;cursor:pointer}
.imgbtn:hover{color:var(--cyan);border-color:rgba(57,213,232,.5)}
.imgbtn svg{display:block}
#sec-day h2{display:flex;align-items:center;gap:10px}
.linkbtn{background:none;border:none;color:var(--cyan);font-family:var(--mono);
  font-size:11px;letter-spacing:.5px;cursor:pointer;padding:2px 4px;margin-left:auto}
.linkbtn:hover{text-decoration:underline}
#sec-inbox h2{display:flex;align-items:center;gap:10px}
.titem.unread{background:rgba(255,69,58,.06);border:1px solid rgba(255,69,58,.25);border-radius:10px}
.nwrap{position:relative}
.nwrap .share{position:absolute;top:8px;right:8px;z-index:2}

/* ---------- botón TV + modo TV ---------- */
#btn-tv{align-self:center;font-family:var(--mono);font-size:11px;letter-spacing:1px;
  background:rgba(10,14,20,.85);color:var(--dim);
  border:1px solid var(--line);border-radius:8px;padding:8px 12px;cursor:pointer;flex:0 0 auto}
#btn-tv.on{color:var(--cyan);border-color:rgba(57,213,232,.5)}
body.tv-mode .panels,
body.tv-mode #sec-install,
body.tv-mode footer,
body.tv-mode #tabbar,
body.tv-mode .tab .card,
body.tv-mode #intercept-strip,
body.tv-mode .attr{display:none}
body.tv-mode main{max-width:none}
body.tv-mode #map,body.tv-mode #map-av,body.tv-mode #map-clima{height:72vh}
body.tv-mode .clock{font-size:44px;letter-spacing:2px}
body.tv-mode .brand h1{font-size:28px}
body.tv-mode .stat .v{font-size:52px}
body.tv-mode .stat .v.small{font-size:30px}

/* ---------- botones de cabecera ---------- */
.hright{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.hbtns{display:flex;gap:6px}
.actionrow{display:contents}
.hbtns button{font-family:var(--mono);font-size:11px;letter-spacing:1px;
  background:rgba(10,14,20,.85);color:var(--dim);
  border:1px solid var(--line);border-radius:8px;padding:8px 12px;cursor:pointer}
#tg-sound{color:#ff7b7b;border-color:rgba(255,93,93,.45);background:rgba(255,93,93,.07)}
/* v197: estado ON inconfundible (antes ON y OFF casi no se distinguían) */
#tg-sound.on{color:#fff;font-weight:800;border-color:#ff6b6b;background:#c62f2f;
  box-shadow:0 0 18px rgba(255,60,60,.8),inset 0 0 8px rgba(255,255,255,.15);animation:sirenpulse 1.6s infinite}
@keyframes sirenpulse{0%,100%{box-shadow:0 0 14px rgba(255,60,60,.6)}50%{box-shadow:0 0 26px rgba(255,60,60,.95)}}
#btn-push{font-family:var(--mono);font-size:12px;letter-spacing:1px;cursor:pointer;
  background:rgba(255,179,64,.08);color:var(--amber);
  border:1px solid rgba(255,179,64,.5);border-radius:10px;padding:8px 14px}
#btn-push.on{color:var(--green);border-color:rgba(53,208,127,.5);background:rgba(53,208,127,.08)}
.hbtns a.tglink{font-family:var(--mono);font-size:11px;letter-spacing:1px;text-decoration:none;
  background:rgba(10,14,20,.85);color:var(--cyan);
  border:1px solid rgba(57,213,232,.4);border-radius:8px;padding:8px 12px;
  display:inline-flex;align-items:center;gap:6px}
.hbtns a.tglink svg{width:12px;height:12px;fill:var(--cyan)}
footer .ver{font-size:10px;color:var(--dim);opacity:.7;letter-spacing:1px}
/* v197: marca de traducción automática más discreta (antes parecía un fallo: [EN]) */
.trtag{font-size:9px;color:var(--dim);opacity:.55;margin-left:6px;letter-spacing:1px;white-space:nowrap}
@media(max-width:640px){.hbtns a.tglink{font-size:10px;padding:6px 8px;letter-spacing:0}}
.hbtns a.donlink{font-family:var(--mono);font-size:11px;font-weight:700;letter-spacing:1px;text-decoration:none;
  background:linear-gradient(180deg,#ffc964,#f0a22e);color:#221503;white-space:nowrap;
  border:1px solid #ffd98a;border-radius:8px;padding:8px 14px;
  display:inline-flex;align-items:center;gap:6px;
  box-shadow:0 0 14px rgba(255,180,60,.45),inset 0 1px 0 rgba(255,255,255,.35);
  animation:donGlow 2.8s ease-in-out infinite}
@keyframes donGlow{0%,100%{box-shadow:0 0 10px rgba(255,180,60,.35),inset 0 1px 0 rgba(255,255,255,.35)}
  50%{box-shadow:0 0 22px rgba(255,180,60,.7),inset 0 1px 0 rgba(255,255,255,.35)}}
@media(max-width:640px){.hbtns a.donlink{font-size:10px;padding:7px 10px;letter-spacing:.5px}}

#btn-push:disabled{opacity:.5;cursor:wait}

/* ---------- resumen diario ---------- */
.dayline{font-size:14px;color:var(--dim);line-height:1.7}
.dayline b{color:var(--txt);font-family:var(--mono)}

/* ---------- gráfica 24 h ---------- */
#hist-canvas{width:100%;height:100px;display:block}

/* ================= VIGÍA v8: pestañas + acabado ================= */
body{padding-bottom:88px}

/* ---------- arranque cinematográfico ---------- */
#boot{position:fixed;inset:0;z-index:10000;background:#05070a;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;
  transition:opacity .5s ease}
#boot.done{opacity:0;pointer-events:none}
.boot-stage{position:relative;width:220px;height:220px}
.boot-radar{position:absolute;inset:0;border-radius:50%;
  background:conic-gradient(from 0deg, rgba(57,213,232,.28) 0deg, transparent 60deg, transparent 360deg);
  animation:sweep 2.2s linear infinite}
.boot-stage img{position:absolute;left:50%;top:50%;width:84px;height:84px;border-radius:20px;
  transform:translate(-50%,-50%);box-shadow:0 0 30px rgba(255,179,64,.4)}
.boot-name{font-size:26px;letter-spacing:6px;font-weight:800}
.boot-name span{color:var(--amber);font-weight:400}
.boot-sub{font-family:var(--mono);font-size:11px;letter-spacing:4px;color:var(--dim);
  animation:live 1.2s ease-in-out infinite}

/* ---------- resplandor ambiental de alerta ---------- */
#alert-glow{position:fixed;inset:0;z-index:900;pointer-events:none;opacity:0;transition:opacity .8s;
  box-shadow:inset 0 0 110px rgba(255,59,48,.32), inset 0 0 26px rgba(255,59,48,.16)}
/* v122: brillo estático (la animación infinita a pantalla completa generaba tirones) */
body.has-intercept #alert-glow{opacity:1}

/* ---------- pestañas ---------- */
.tab:not(.hidden){animation:tabIn .28s ease}
@keyframes tabIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
#tabbar{position:fixed;left:0;right:0;bottom:0;z-index:1000;display:flex;
  background:#05070a;
  border-top:1px solid var(--line);
  padding:6px 8px calc(6px + env(safe-area-inset-bottom))}
#tab-ind{position:absolute;top:6px;bottom:calc(6px + env(safe-area-inset-bottom));left:4px;
  width:calc(20% - 8px);border-radius:12px;z-index:0;
  background:rgba(57,213,232,.10);border:1px solid rgba(57,213,232,.35);
  box-shadow:0 0 18px rgba(57,213,232,.14), inset 0 0 12px rgba(57,213,232,.06);
  transition:left .32s cubic-bezier(.4,0,.2,1), width .32s cubic-bezier(.4,0,.2,1)}
#tabbar button{position:relative;z-index:1;flex:1;background:none;border:none;color:var(--dim);
  font-family:var(--mono);font-size:9px;letter-spacing:.4px;text-transform:uppercase;white-space:nowrap;
  display:flex;flex-direction:column;align-items:center;gap:4px;padding:9px 1px;cursor:pointer;overflow:hidden;
  transition:color .25s}
#tabbar button svg{width:23px;height:23px}
#tabbar button.on{color:var(--cyan)}
#tabbar button:not(.on):hover{color:#c6d2de}

/* ---------- stats de aviones ---------- */
#av-stats{margin:12px auto 0;padding:0 14px;display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(min-width:900px){#av-stats{grid-template-columns:repeat(3,1fr)}}

/* ---------- leyenda de mapas ---------- */
#mapwrap-newsradar{position:relative}
#map-newsradar{height:38vh;min-height:240px;background:#05070a;z-index:1}
.lg-rn{background:#ffb000}.lg-rt{background:#00e5ff}
#newsradar-empty{text-align:center;color:#8b98a8;font-size:12px;padding:10px 12px}
#newsradar-empty.hidden{display:none}
.mk-radar{width:16px;height:16px;border-radius:50%;position:relative;cursor:pointer}
.mk-radar.rk-news{background:rgba(255,176,0,.9);box-shadow:0 0 0 3px rgba(255,176,0,.22);color:#ffb000}
.mk-radar.rk-tg{background:rgba(0,229,255,.9);box-shadow:0 0 0 3px rgba(0,229,255,.22);color:#00e5ff}
.mk-radar::after{content:'';position:absolute;inset:-4px;border-radius:50%;border:1px solid currentColor;animation:rkping 2.2s ease-out infinite}
@keyframes rkping{0%{transform:scale(.55);opacity:.8}100%{transform:scale(1.5);opacity:0}}
.nwrap.flash{animation:flashHi 1.8s ease}
@keyframes flashHi{0%,100%{background-color:transparent}30%{background-color:rgba(255,176,0,.16)}}
.maplegend{position:absolute;left:10px;bottom:10px;z-index:500;display:flex;gap:12px;
  font-family:var(--mono);font-size:10px;color:var(--dim);
  background:rgba(5,7,10,.75);border:1px solid var(--line);border-radius:8px;padding:6px 10px;
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.maplegend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px}
.lg-cy{background:var(--cyan);box-shadow:0 0 6px var(--cyan)}
.lg-am{background:var(--amber);box-shadow:0 0 6px var(--amber)}
.lg-mil{background:#ff5d5d;box-shadow:0 0 6px #ff5d5d}
.lg-fire{background:radial-gradient(circle,#ff7a3d,#ff3b30);box-shadow:0 0 6px rgba(255,90,40,.9)}
.lg-storm{background:transparent;border:2px solid var(--cyan)}
.lg-quake{background:radial-gradient(circle,#c9a0ff,#8b5cf6);box-shadow:0 0 6px rgba(139,92,246,.9)}
.lg-flood{background:radial-gradient(circle,#7fd4ff,#2f7bff);box-shadow:0 0 6px rgba(47,123,255,.9)}
.lg-volcano{background:radial-gradient(circle,#ffb02e,#ff5d00);box-shadow:0 0 6px rgba(255,93,0,.9)}
.lg-rain{background:linear-gradient(180deg,#7fd4ff,#2f7bff);border-radius:2px;box-shadow:0 0 6px rgba(47,123,255,.9)}
.lg-meteo{background:radial-gradient(circle,#ffd60a,#ff9500);box-shadow:0 0 6px rgba(255,149,0,.9)}

/* ---------- marcadores clima ---------- */
.mk-fire{width:16px;height:16px;border-radius:50%;
  background:radial-gradient(circle,#ff7a3d 0%,#ff3b30 70%);
  box-shadow:0 0 12px rgba(255,90,40,.9);animation:pulse 1.8s ease-out infinite}
.mk-storm{width:18px;height:18px;border-radius:50%;border:3px solid;background:rgba(5,7,10,.55)}
.mk-quake{width:16px;height:16px;border-radius:50%;
  background:radial-gradient(circle,#c9a0ff 0%,#8b5cf6 70%);
  box-shadow:0 0 12px rgba(139,92,246,.9)}
.mk-volcano{width:16px;height:16px;border-radius:50%;
  background:radial-gradient(circle,#ffd7a8 0%,#ff7847 60%,#d63c1e 100%);
  box-shadow:0 0 12px rgba(255,110,60,.9)}
.mk-flood{width:16px;height:16px;border-radius:50%;
  background:radial-gradient(circle,#7fd4ff 0%,#2f7bff 70%);
  box-shadow:0 0 12px rgba(47,123,255,.9)}
.mk-volcano{width:16px;height:16px;border-radius:50%;
  background:radial-gradient(circle,#ffb02e 0%,#ff5d00 70%);
  box-shadow:0 0 12px rgba(255,93,0,.9);animation:pulse 1.8s ease-out infinite}

/* ---------- esqueletos de carga ---------- */
.skel{height:46px;border-radius:10px;margin-bottom:8px;
  background:linear-gradient(90deg,rgba(255,255,255,.04) 25%,rgba(255,255,255,.10) 50%,rgba(255,255,255,.04) 75%);
  background-size:200% 100%;animation:shimmer 1.3s linear infinite}
@keyframes shimmer{to{background-position:-200% 0}}

/* ---------- stats críticas con borde luminoso ---------- */
.stat.crit{border-color:rgba(255,59,48,.65);box-shadow:0 0 20px rgba(255,59,48,.22)}
.stat.crit .v{text-shadow:0 0 16px rgba(255,59,48,.6)}

/* ---------- pulido tipográfico ---------- */
.clock,.stat .v,.eta,#av-alt,#av-gs{font-variant-numeric:tabular-nums}
.cdot{animation:blink 1s steps(1) infinite}
@keyframes blink{50%{opacity:.2}}

/* ---------- micro-interacciones ---------- */
button{transition:transform .12s ease,border-color .2s,color .2s,background .2s}
button:active{transform:scale(.95)}
#tabbar button:active{transform:scale(.97)}

/* ---------- clima: listas ---------- */
.aitem .grow{flex:1;min-width:0}
.lvl.orange{background:rgba(255,138,61,.13);color:#ff9a4d;border:1px solid rgba(255,138,61,.5)}
.attr{font-family:var(--mono);font-size:10px;letter-spacing:1px;color:var(--dim);
  text-align:center;margin:12px 0 4px}
.fireitem{cursor:pointer}

/* ---------- movimiento reducido ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  #alert-glow{display:none}
  #boot{transition:none}
}

/* ---------- mapa de noticias geolocalizadas ---------- */

/* v9: aviones como siluetas */
.planes-canvas{position:absolute;top:0;left:0;}

/* v16: cabecera compacta en móvil */
@media(max-width:600px){
  #topbar{padding:8px 10px;gap:8px;position:static}
  .brand img{width:32px;height:32px}
  .brand h1{font-size:15px;letter-spacing:1px}
  .brand p{display:none}
  .clock{font-size:15px}
  .upd{font-size:10px}
  #statusline .srcs{gap:4px 10px;font-size:9px}
  .hbtns{gap:8px;flex-wrap:wrap;justify-content:flex-end}
  .hbtns button{font-size:10px;padding:8px 10px;letter-spacing:0}
  #btn-push{font-size:10px;padding:8px 10px}
  .langsel{font-size:11px;margin-left:0}
}

/* ---------- v23: calor, capas clima, panel países push, live, delta ---------- */
.mk-heat{border-radius:50%;pointer-events:none;mix-blend-mode:screen}
#layertoggles-clima{position:absolute;top:10px;right:10px;z-index:500;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;max-width:72%}
#layertoggles-clima button{
  font-family:var(--mono);font-size:11px;letter-spacing:.5px;
  background:rgba(10,14,20,.85);color:var(--dim);
  border:1px solid var(--line);border-radius:8px;padding:6px 10px;cursor:pointer;
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
}
#layertoggles-clima button.on{color:var(--amber);border-color:rgba(255,179,64,.5)}
#push-panel{display:flex;align-items:center;gap:10px;padding:8px 14px;
  background:rgba(10,14,20,.92);border-bottom:1px solid var(--line);flex-wrap:wrap}
#push-panel .pk{font-family:var(--mono);font-size:11px;color:var(--dim);letter-spacing:.5px}
#push-chips{display:flex;gap:6px;flex-wrap:wrap}
.live{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:11px;
  color:var(--dim);border:1px solid var(--line);border-radius:8px;padding:6px 10px;
  background:rgba(10,14,20,.85);white-space:nowrap}
.live i{width:7px;height:7px;border-radius:50%;background:#3ddc84;box-shadow:0 0 8px #3ddc84;animation:blink 2s infinite}
.live b{color:#e6edf3;font-weight:700}
.delta{font-family:var(--mono);font-size:11px;margin-top:2px;display:block}
.delta .up{color:#3ddc84}
.delta .down{color:var(--red)}
.delta .eq{color:var(--dim)}

#beta{display:flex;align-items:center;justify-content:center;gap:10px;padding:6px 12px;background:rgba(255,176,0,.08);border-bottom:1px solid rgba(255,176,0,.35);color:#ffb000;font-size:12px;letter-spacing:.4px;text-align:center}
#beta.hidden{display:none}
#massattack{display:flex;align-items:center;justify-content:center;padding:7px 12px;background:rgba(255,45,45,.12);border-bottom:1px solid rgba(255,45,45,.55);color:#ff5b5b;font-size:12.5px;font-weight:700;letter-spacing:.6px;text-align:center}
#massattack.hidden{display:none}
#beta-x{background:none;border:1px solid rgba(255,176,0,.4);color:#ffb000;border-radius:4px;min-width:36px;height:36px;line-height:1;cursor:pointer;font-size:16px;padding:0 6px}

/* ---------- páginas de info (acerca/contacto/faq) ---------- */
body.infopage{padding-bottom:0;display:flex;flex-direction:column;min-height:100vh}
.pagetop{display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:12px 18px;background:rgba(5,7,10,.92);border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:50}
.pagetop .brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:#fff;
  font-family:var(--mono);letter-spacing:2px;font-size:15px}
.pagetop .brand b{color:var(--amber);font-weight:600}
.pagetop .pright{display:flex;align-items:center;gap:12px}
.backlink{font-family:var(--mono);font-size:11px;letter-spacing:1px;color:var(--dim);text-decoration:none}
.backlink:hover{color:var(--cyan)}
.pagewrap{max-width:720px;width:100%;margin:0 auto;padding:30px 18px 44px;flex:1}
.pagewrap h1{font-size:23px;letter-spacing:1px;color:var(--amber);margin-bottom:18px;
  font-family:var(--mono)}
.pagewrap .card{background:var(--panel);border:1px solid var(--line);border-radius:12px;
  padding:18px 20px;margin:0 0 14px}
.pagewrap .card h2{font-size:14px;letter-spacing:2px;color:var(--cyan);margin-bottom:10px;
  font-family:var(--mono);text-transform:uppercase}
.pagewrap .card p{font-size:14.5px;line-height:1.65;color:var(--txt)}
.pagewrap .card p+p{margin-top:10px}
.pagewrap .card.warn{border-color:rgba(255,179,64,.45);background:rgba(255,179,64,.05)}
.pagewrap .card.warn h2{color:var(--amber)}
.pagewrap .card.dim p{color:var(--dim);font-size:13px}
.pagewrap .ctabtn{margin-top:16px}
.tglink.big{font-size:13px;padding:12px 18px}
.tglink.big svg{width:16px;height:16px}
details.card.faq summary{cursor:pointer;font-size:14.5px;font-weight:600;color:var(--txt);
  list-style:none;display:flex;justify-content:space-between;align-items:center;gap:10px}
details.card.faq summary::-webkit-details-marker{display:none}
details.card.faq summary::after{content:"+";color:var(--amber);font-size:20px;font-family:var(--mono)}
details.card.faq[open] summary::after{content:"\2212"}
details.card.faq summary:hover{color:var(--amber)}
details.card.faq p{margin-top:12px}
.pagefoot{text-align:center;padding:22px 12px;border-top:1px solid var(--line);
  color:var(--dim);font-size:12px;font-family:var(--mono);letter-spacing:1px}
.pagefoot a{color:var(--dim);text-decoration:none;margin:0 12px}
.pagefoot a:hover{color:var(--cyan)}
.footnav{display:flex;gap:20px;justify-content:center;margin-bottom:12px;flex-wrap:wrap}
.footnav a{color:var(--dim);font-size:12px;letter-spacing:1px;text-decoration:none;font-family:var(--mono)}
.footnav a:hover{color:var(--cyan)}
@media(max-width:640px){.pagewrap h1{font-size:19px}.backlink{display:none}}

/* ---------- nowline: frase en lenguaje normal ---------- */
.nowline{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;
  font-family:var(--mono);font-size:13px;letter-spacing:1px;text-align:center;
  padding:10px 14px;border-radius:10px;margin:0 0 12px;border:1px solid var(--line)}
.lvlrow{display:flex;align-items:center;gap:8px}
.eurow{display:flex;align-items:center;gap:10px}
.lvlwhere{font-size:10.5px;letter-spacing:1.4px;color:#8b98a8;text-transform:uppercase}
.nowline i{width:9px;height:9px;border-radius:50%;flex:none}
.nowline.calm{color:var(--green);border-color:rgba(53,208,127,.35);background:rgba(53,208,127,.06)}
.nowline.calm i{background:var(--green);box-shadow:0 0 8px var(--green)}
.nowline.alert{color:#ffc9c2;border-color:rgba(255,59,48,.55);background:rgba(255,59,48,.08)}
.nowline.alert i{background:var(--red);box-shadow:0 0 10px var(--red);animation:blink 1.2s infinite}
/* v197: nivel elevado sin interceptaciones (amenazas sobre Ucrania, Europa en calma) */
.nowline.warn{color:var(--amber);border-color:rgba(255,179,64,.45);background:rgba(255,179,64,.06)}
.nowline.warn i{background:var(--amber);box-shadow:0 0 8px var(--amber)}
.lvlbadge{font-size:10.5px;font-weight:700;letter-spacing:1.2px;padding:3px 10px;border-radius:20px;border:1px solid;flex:none;text-transform:uppercase;font-family:var(--mono)}
.lvlbadge.lvl0{color:var(--green);border-color:rgba(53,208,127,.4);background:rgba(53,208,127,.08)}
.lvlbadge.lvl1{color:#ffd166;border-color:rgba(255,209,102,.45);background:rgba(255,209,102,.08)}
.lvlbadge.lvl2{color:#ffb000;border-color:rgba(255,176,0,.45);background:rgba(255,176,0,.08)}
.lvlbadge.lvl3{color:#ff8c42;border-color:rgba(255,140,66,.5);background:rgba(255,140,66,.1)}
.lvlbadge.lvl4{color:#ff5b5b;border-color:rgba(255,45,45,.65);background:rgba(255,45,45,.12);animation:blink 1.2s infinite}
/* v177: invitación a compartir al subir el nivel */
.shareprompt{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;
  margin:8px 12px 0;padding:9px 12px;border-radius:10px;font-size:13px;color:#ffd9a0;
  border:1px solid rgba(255,179,64,.5);background:rgba(255,179,64,.08)}
.shareprompt.hidden{display:none}
.shareprompt button{cursor:pointer}
#shareprompt-btn{background:#ffb340;border:0;border-radius:8px;color:#1a1206;font-weight:700;padding:6px 14px;font-size:13px}
#shareprompt-x{background:none;border:0;color:#ffd9a0;font-size:17px;line-height:1;padding:4px 6px}
}
/* ---------- nudge: el botón push late en la primera visita ---------- */
#btn-push.nudge{animation:pushglow 1.6s ease-in-out infinite;border-color:rgba(255,179,64,.9)}
@keyframes pushglow{0%,100%{box-shadow:0 0 0 rgba(255,179,64,0)}50%{box-shadow:0 0 16px rgba(255,179,64,.8)}}

/* ---------- v53: whatis / skeleton / menú móvil / beta link ---------- */
.whatis{max-width:1400px;margin:10px auto 0;padding:8px 14px;font-size:12px;color:var(--dim);text-align:center;letter-spacing:.3px}
.whatis a{color:var(--cyan,#39d5e8);text-decoration:none;border-bottom:1px dotted currentColor}
.betalnk{color:inherit;text-decoration:none}
.betalnk:hover{text-decoration:underline}
#mapwrap{position:relative}
#mapglow{position:absolute;inset:0;z-index:500;pointer-events:none;opacity:0;transition:opacity .8s}
#mapglow.lvl1{opacity:1;background:radial-gradient(ellipse at 50% 45%, rgba(0,0,0,0) 55%, rgba(255,209,102,.10) 100%)}
#mapglow.lvl2{opacity:1;background:radial-gradient(ellipse at 50% 45%, rgba(0,0,0,0) 50%, rgba(255,176,0,.16) 100%)}
#mapglow.lvl3{opacity:1;background:radial-gradient(ellipse at 50% 45%, rgba(0,0,0,0) 45%, rgba(255,110,40,.22) 100%)}
#mapglow.lvl4{opacity:1;background:radial-gradient(ellipse at 50% 45%, rgba(0,0,0,0) 40%, rgba(255,45,45,.30) 100%)}
/* v123: sin glowpulse — animar filter:brightness() sobre todo el mapa obligaba a
   re-filtrar cada frame y era la mayor causa de tirones al manipular el radar */
/* Mapa de amenazas: fondo azul noche en vez de gris plano */
#map .leaflet-tile-pane{filter:brightness(.92) sepia(.45) hue-rotate(165deg) saturate(2.6)}
.mapskel{position:absolute;inset:0;z-index:600;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(110deg,#0a0e14 30%,#101824 45%,#0a0e14 60%);background-size:200% 100%;
  animation:skel 1.6s linear infinite;color:var(--dim);font-size:13px;letter-spacing:1px}
.mapskel.hidden{display:none}
@keyframes skel{to{background-position:-200% 0}}
#btn-more{display:none;background:var(--panel);border:1px solid var(--line);border-radius:8px;color:#fff;
  font-size:16px;line-height:1;padding:6px 10px;cursor:pointer}
.moredrop{display:contents}
@media(max-width:640px){
  #btn-more{display:block}
  .hbtns{position:relative}
  /* --- rediseño cabecera móvil: marca+idioma+⋯ / fila de acción gemela --- */
  #topbar{flex-wrap:wrap}
  .hright{flex:1}
  #actionrow{display:flex;gap:8px;flex:1 1 100%;margin-top:8px}
  #actionrow button{flex:1;min-height:40px;font-size:12px;font-weight:700;letter-spacing:1px}
  #statusline{flex-wrap:wrap;gap:4px 14px}
  #statusline .status{display:flex;gap:8px;align-items:baseline;text-align:left}
  #statusline .clock{font-size:11px}
  #statusline .upd{font-size:9px}
  .moredrop a{justify-content:center;text-align:center}
  .moredrop{display:none;position:absolute;top:calc(100% + 6px);right:0;z-index:900;
    background:#0d141d;border:1px solid var(--line);border-radius:10px;padding:8px;
    flex-direction:column;gap:8px;min-width:120px}
  .moremenu.open .moredrop{display:flex}
  .moredrop .langsel{width:100%}
}

/* ============ Mini-tour de bienvenida ============ */
#tour{position:fixed;inset:0;z-index:2000;background:rgba(3,6,10,.72);backdrop-filter:blur(3px);
  display:flex;align-items:center;justify-content:center;padding:20px}
#tour.hidden{display:none}
.tour-card{max-width:340px;width:100%;background:#0d1622;border:1px solid #2a3b52;border-radius:16px;
  padding:22px 20px;text-align:center;box-shadow:0 12px 50px rgba(0,0,0,.6)}
.tour-dots{display:flex;gap:8px;justify-content:center;margin-bottom:14px}
.tour-dots i{width:8px;height:8px;border-radius:50%;background:#2a3b52}
.tour-dots i.on{background:#f5b942}
.tour-card h3{margin:0 0 10px;font-size:17px;color:#fff}
.tour-card p{margin:0 0 18px;font-size:13.5px;line-height:1.55;color:#b9c6d8}
.tour-btns{display:flex;gap:10px;justify-content:center}
.tour-btns button{font-family:var(--mono,monospace);font-size:12px;letter-spacing:1px;border-radius:8px;
  padding:10px 18px;cursor:pointer;border:1px solid #2a3b52;background:#16202e;color:#cfd9e6}
#tour-next{background:linear-gradient(180deg,#ffc964,#f0a22e);border-color:#ffd98a;color:#221503;font-weight:700}
.dayvs{margin-top:6px;font-size:12px;color:#8fa1b8;font-family:var(--mono,monospace)}
#streak-line b{color:var(--txt)}
.streak-new{color:#ffd166;font-weight:700;margin-bottom:2px}
.dayrec{margin-top:6px;font-size:12.5px;color:#d8b25c}

/* ============ Narración en directo ============ */
#sec-narr .livedot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#ff3b30;
  box-shadow:0 0 8px #ff3b30;animation:blink 1.6s infinite;vertical-align:1px}
#narrfeed{display:flex;flex-direction:column;gap:9px;max-height:320px;overflow-y:auto}
.narr{display:flex;gap:10px;align-items:flex-start;font-size:13px;line-height:1.45;color:#dfe7f2}
.narr .nic{font-size:15px;line-height:1.3;flex:none}
.narr time{display:block;font-family:var(--mono,monospace);font-size:11px;color:#8fa1b8;margin-bottom:1px}
.narr-empty{font-size:13px;color:#8fa1b8}

/* ============ Radio VIGÍA ============ */
#sec-narr .radiobtn{margin-left:auto;flex:none;background:rgba(57,213,232,.10);
  border:1px solid rgba(57,213,232,.45);color:var(--cyan);border-radius:20px;
  padding:5px 13px;font-size:11px;font-family:var(--mono,monospace);letter-spacing:1px;
  cursor:pointer;text-transform:uppercase}
#sec-narr .radiobtn.on{background:var(--cyan);color:#04121a;font-weight:700;
  box-shadow:0 0 12px rgba(57,213,232,.5)}
#radiobar{position:fixed;left:12px;right:12px;bottom:calc(72px + env(safe-area-inset-bottom));
  z-index:1002;display:flex;align-items:center;gap:10px;background:rgba(8,10,14,.96);
  border:1px solid rgba(255,59,48,.45);border-radius:14px;padding:8px 12px;
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  box-shadow:0 6px 24px rgba(0,0,0,.55)}
#radiobar.hidden{display:none}
#radiobar .livedot{flex:none;width:9px;height:9px;border-radius:50%;background:#ff3b30;
  box-shadow:0 0 8px #ff3b30;animation:blink 1.6s infinite}
#radiobar-tx{flex:1;min-width:0;font-size:12.5px;color:#dfe7f2;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;font-family:var(--mono,monospace)}
#radiobar button{flex:none;width:38px;height:38px;border-radius:10px;border:1px solid var(--line);
  background:#141d2b;color:#dfe7f2;font-size:15px;cursor:pointer}
#radiobar button:active{transform:scale(.94)}
/* Con la radio en marcha, el botón del chat sube para no tapar los controles */
#chat-fab{transition:bottom .25s ease}
body.radio-on #chat-fab{bottom:calc(148px + env(safe-area-inset-bottom))}
body.ipop #chat-fab{bottom:calc(158px + env(safe-area-inset-bottom))} /* v222: no tapar el botón del chat con la ventanita de instalar */

/* ============ Chat en directo ============ */
#chat-fab{position:fixed;right:14px;bottom:calc(76px + env(safe-area-inset-bottom));z-index:1100;width:54px;height:54px;border-radius:50%;background:#0d1622;border:1px solid var(--cyan,#35d0e0);color:var(--cyan,#35d0e0);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 18px rgba(0,0,0,.5)}
#chat-fab svg{width:26px;height:26px}
#chat-fab:active{transform:scale(.94)}
#chat-badge{position:absolute;top:-5px;right:-5px;min-width:20px;height:20px;border-radius:11px;background:#ff3b30;color:#fff;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 5px;box-shadow:0 2px 8px rgba(0,0,0,.55);border:2px solid #0d1622}
#chat-badge.hidden{display:none}
#chat-panel{position:fixed;right:10px;left:10px;bottom:calc(140px + env(safe-area-inset-bottom));z-index:1101;max-width:420px;margin-left:auto;background:#0b1220;border:1px solid #223148;border-radius:14px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 10px 40px rgba(0,0,0,.6)}
#chat-panel.hidden{display:none}
.chat-head{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#0d1626;border-bottom:1px solid #223148}
.chat-head b{font-size:14px;color:#fff;flex:1}
#chat-online{font-size:11px;color:#35d0e0}
#chat-x{background:none;border:none;color:#8fa3bd;font-size:22px;cursor:pointer;line-height:1;padding:0 4px}
#chat-msgs{height:300px;max-height:44vh;overflow-y:auto;padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.cmsg{font-size:13px;line-height:1.45;word-wrap:break-word}
.cmsg .cn{font-weight:600}
.cmsg .ct{color:#5b6b82;font-size:11px;margin-left:6px}
.cmsg .cb{color:#dbe4f0;margin-top:1px}
.cmsg .cb a{color:#35d0e0}
.cmsg.mine{text-align:right}
.cmsg.mine .cn{color:#35d0e0!important}
.cmsg.mine .cb{display:inline-block;text-align:left;background:#12324a;border:1px solid #1e4a6b;border-radius:12px 4px 12px 12px;padding:5px 10px;margin-top:3px;max-width:100%}
.chat-empty{color:#5b6b82;font-size:13px;text-align:center;margin:auto 0;padding:20px 0}
.chat-input{display:flex;gap:6px;padding:8px;border-top:1px solid #223148;background:#0d1626}
.chat-input textarea{background:#060b14;border:1px solid #223148;border-radius:8px;color:#dbe4f0;font-size:13px;padding:9px 10px;outline:none;flex:1;min-width:0;resize:none;font-family:inherit;line-height:1.4}
.chat-input input{background:#060b14;border:1px solid #223148;border-radius:8px;color:#dbe4f0;font-size:13px;padding:9px 10px;outline:none}
#chat-nickrow{padding:8px 8px 0;background:#0d1626}
#chat-nickrow.hidden{display:none}
#chat-akey.hidden{display:none}
#chat-login{position:absolute;inset:0;top:44px;background:#0b1220;z-index:6;display:flex;align-items:center;justify-content:center;padding:20px}
#chat-login.hidden{display:none}
#chat-login-x{background:none;border:none;color:#8fa3bd;font-size:20px;cursor:pointer;position:absolute;top:8px;right:12px}
#chat-login-x.hidden{display:none}
.chlogin-card{width:100%;max-width:280px;text-align:center;position:relative}
.chlogin-t{font-size:16px;font-weight:700;color:#fff;margin-bottom:4px}
.chlogin-s{font-size:13px;color:#8fa3bd;margin-bottom:14px}
.chlogin-card input{width:100%;box-sizing:border-box;background:#0f1a2e;border:1px solid #2c3f58;color:#e8eef7;border-radius:10px;padding:10px 12px;font-size:15px;text-align:center}
.chlogin-card input:focus{outline:none;border-color:#35d0e0}
#chat-login-go{width:100%;margin-top:10px;background:#35d0e0;border:none;color:#062a30;font-weight:700;font-size:15px;border-radius:10px;padding:11px;cursor:pointer}
#chat-login-err{color:#ff7b7b;font-size:12px;min-height:18px;margin-top:8px}
#chat-login-adminlink{background:none;border:none;color:#5a6d87;font-size:12px;margin-top:10px;cursor:pointer;text-decoration:underline}
#chat-login-akeyrow{display:flex;gap:8px;margin-top:10px}
#chat-login-akeyrow.hidden{display:none}
#chat-login-admingo{background:#c0392b;border:none;color:#fff;font-weight:700;border-radius:10px;padding:0 16px;cursor:pointer}
.cdel{background:none;border:none;color:#5a6d87;font-size:12px;cursor:pointer;margin-left:6px;padding:0 2px}
.cdel:hover{color:#ff7b7b}
#chat-akey{margin-top:6px}
.cadm{font-size:10px;font-weight:700;color:#fff;background:#c0392b;border-radius:4px;padding:1px 5px;margin-left:6px;letter-spacing:.5px;vertical-align:1px}
#chat-nickrow input{width:100%;background:#060b14;border:1px solid #223148;border-radius:8px;color:#dbe4f0;font-size:13px;padding:9px 10px;outline:none}
#chat-nickrow input:focus,.chat-input textarea:focus{border-color:#35d0e0}
.chbtn{background:none;border:none;color:#5b6b82;font-size:15px;cursor:pointer;padding:0 4px;line-height:1}
.chloginbtn{font-size:11px;font-weight:700;border:1px solid #2c4a63;border-radius:8px;padding:2px 8px;margin-left:6px}
.chbtn:hover{color:#35d0e0}
#chat-me{display:flex;align-items:center;gap:4px;padding:6px 12px;font-size:12px;color:#8fa3bd;background:#0d1626;border-bottom:1px solid #223148}
#chat-me b{color:#35d0e0}
#chat-quote{display:flex;align-items:center;gap:8px;padding:7px 12px;background:#0e1a2c;border-top:1px solid #223148;font-size:12px;color:#8fa3bd}
#chat-quote.hidden{display:none}
#chat-quote-tx{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#chat-quote-tx b{color:#35d0e0}
#chat-quote-x{background:none;border:none;color:#8fa3bd;font-size:16px;cursor:pointer;line-height:1;padding:0 2px}
.cmsg{position:relative}
.cmsg.grp{margin-top:-5px}
.cmsg.grp .cn,.cmsg.grp .ct,.cmsg.grp .creply{display:none}
.creply{position:absolute;top:0;right:0;background:none;border:none;color:#3d4f68;font-size:13px;cursor:pointer;padding:2px 4px;line-height:1;opacity:0;transition:opacity .15s}
.cmsg:hover .creply{opacity:1}
@media(hover:none){.creply{opacity:.55}}
.creply:hover{color:#35d0e0}
.cq{border-left:2px solid #35d0e0;background:rgba(53,208,224,.07);border-radius:0 8px 8px 0;padding:4px 8px;margin:3px 0;font-size:12px;color:#8fa3bd}
.cq b{display:block;color:#35d0e0;font-size:11px}
.cq span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmsg.mine .cq{margin-left:auto}
#chat-send{background:#12324a;border:1px solid #35d0e0;color:#35d0e0;border-radius:8px;font-size:13px;padding:0 12px;cursor:pointer;flex:none}
#chat-send:active{transform:scale(.96)}
.chat-note{font-size:11px;color:#5b6b82;text-align:center;padding:4px 0 8px}
@media(min-width:700px){
  #chat-panel{left:auto;right:18px;bottom:150px}
  #chat-fab{bottom:24px;right:20px}
}

/* v113: tinte ambiental sutil según el nivel de amenaza (v122: estático, sin animación
   infinita — una capa fija a pantalla completa animando fuerza a recomponer toda la
   pantalla en cada frame y produce tirones al hacer scroll) */
body::after{content:"";position:fixed;inset:0;z-index:1300;pointer-events:none;opacity:0;transition:opacity 1.4s ease;background:radial-gradient(ellipse at 50% 45%, rgba(0,0,0,0) 55%, rgba(255,60,40,.16) 100%)}
body[data-lvl="1"]::after{opacity:.4}
body[data-lvl="2"]::after{opacity:.7}
body[data-lvl="3"]::after{opacity:1}
body[data-lvl="4"]::after{opacity:1}
/* v113: destello en el borde al detectarse amenaza nueva rumbo a Europa */
#euflash{position:fixed;inset:0;z-index:1299;pointer-events:none;opacity:0;background:radial-gradient(ellipse at 50% 50%, rgba(0,0,0,0) 60%, rgba(255,45,45,.6) 100%)}
#euflash.go{animation:euflashgo 2.4s ease-out}
@keyframes euflashgo{0%{opacity:0}12%{opacity:1}100%{opacity:0}}

/* ============ v116: Europa en alerta sobre el mapa de amenazas ============ */
.mk-eu{position:relative;width:26px;height:26px;pointer-events:auto}
.mk-eu .eu-dot{position:absolute;left:50%;top:50%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%}
.mk-eu.watch .eu-dot{background:#ffb340;box-shadow:0 0 8px #ffb340}
.mk-eu.alert .eu-dot{background:#ff3b30;box-shadow:0 0 10px #ff3b30}
.mk-eu .eu-code{position:absolute;left:50%;top:100%;transform:translateX(-50%);font-size:9px;font-weight:800;color:#c6d2de;text-shadow:0 1px 3px #000;white-space:nowrap;margin-top:1px}
.mk-eu.alert .eu-code{color:#ffb3b3}
.mk-eu .eu-ring{position:absolute;left:50%;top:50%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;border:2px solid #ff3b30;opacity:.6} /* v123: estático */
.eu-arc{}

/* ================= v117: franja de actividad en directo ================= */
#livestrip,#ru-livestrip{display:flex;align-items:center;justify-content:center;gap:8px;
  padding:5px 12px;font-family:var(--mono);font-size:11px;letter-spacing:.6px;
  color:var(--dim);background:rgba(8,12,18,.9);border-bottom:1px solid var(--line);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#livestrip.hidden,#ru-livestrip.hidden{display:none}
.ls-dot{width:7px;height:7px;border-radius:50%;background:#35d07f;flex:none;
  box-shadow:0 0 8px rgba(53,208,127,.9);animation:ls-pulse 2s ease-in-out infinite}
@keyframes ls-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.8)}}
#ls-tx{overflow:hidden;text-overflow:ellipsis}

/* ================= v117: botón compartir (icono) ================= */
#btn-share.iconbtn{display:inline-flex;align-items:center;justify-content:center;
  width:34px;height:34px;padding:0;align-self:center}
#btn-share.iconbtn svg{width:16px;height:16px}

/* ================= v117: aviso beta sutil en el pie ================= */
.betaline{font-size:11px;color:rgba(255,176,0,.55);letter-spacing:.4px;margin:6px 0 0}

/* ================= v124: modal ÚLTIMA HORA ================= */
#breaking{position:fixed;inset:0;z-index:3000;display:flex;align-items:center;justify-content:center;
  padding:20px;background:rgba(3,5,8,.82)}
#breaking.hidden{display:none}
#breaking .box{max-width:520px;width:100%;background:#0b0f16;border:1px solid rgba(255,69,58,.55);
  border-radius:16px;padding:26px 24px;position:relative;text-align:center;
  box-shadow:0 0 60px rgba(255,69,58,.25),0 20px 60px rgba(0,0,0,.6)}
#breaking .kicker{display:inline-block;font-size:12px;font-weight:800;letter-spacing:2px;color:#fff;
  background:#ff453a;border-radius:6px;padding:5px 12px;margin-bottom:14px}
#breaking .hedge{font-size:13px;color:#8b98a8;margin-bottom:8px}
#breaking .txt{font-size:19px;font-weight:700;line-height:1.5;color:#f2f5f8;margin-bottom:12px;
  text-transform:uppercase} /* v126: el titular sale siempre en mayúsculas */
#breaking .unv{display:inline-block;font-size:11px;font-weight:800;letter-spacing:1px;color:#1a1206;background:#ffb340;
  border-radius:6px;padding:4px 10px;margin-bottom:14px}
#breaking .src{display:block;font-size:12px;color:#35d0e0;margin-bottom:16px;word-break:break-all}
#breaking .close{position:absolute;top:10px;right:10px;width:36px;height:36px;border-radius:50%;
  border:1px solid var(--line);background:#141b26;color:#c6d2de;font-size:18px;cursor:pointer;line-height:1}
#breaking .okbtn{background:#ff453a;color:#fff;border:none;border-radius:10px;padding:12px 34px;
  font-size:15px;font-weight:800;cursor:pointer}

/* ================= v125: modo zoom fluido =================
   El barrido del radar (capa de 1400px girando) y los anillos pulsantes
   obligaban a la GPU a recomponer todo en cada frame del pellizco.
   Durante el zoom se pausan/ocultan; al soltar, vuelven solos. */
.radar-sweep{transition:opacity .3s}
#map.zooming .radar-sweep{animation-play-state:paused;opacity:0;visibility:hidden}
/* v219: visibility:hidden (no basta opacity:0) para que la textura de 900px salga
   del compositor durante el gesto; si no, el zoom/pellizco va a tirones en móvil */
#map.zooming .ring{animation-play-state:paused}
body.zooming #mapglow{visibility:hidden}
/* v135: lo mismo durante el arrastre (los anillos y el barrido seguían
   animando al mover el mapa con el dedo, y eso lagueaba el arrastre) */
#map.moving .radar-sweep{animation-play-state:paused;visibility:hidden} /* v219: idem al arrastrar */
#map.moving .ring{animation-play-state:paused}

/* ================= v128: zoom sin esconder marcadores =================
   Durante el pellizco se quita el recorte de esquinas redondeadas del
   contenedor: enmascarar con bordes redondeados obliga a la GPU del móvil
   a recomponer todo el mapa en cada frame. Los marcadores siguen visibles. */
#mapwrap.zooming{border-radius:0}

/* ================= v158: popup de instalación PWA para visitantes nuevos ================= */
#ipop{position:fixed;inset:0;z-index:10000;display:flex;align-items:flex-end;justify-content:center;background:rgba(2,6,12,.6);opacity:0;pointer-events:none;transition:opacity .3s}
#ipop.show{opacity:1;pointer-events:auto}
.ipop-card{width:100%;max-width:430px;background:#0d1420;border:1px solid #1e2a3d;border-bottom:0;border-radius:18px 18px 0 0;padding:22px 20px calc(20px + env(safe-area-inset-bottom));text-align:center;transform:translateY(30px);transition:transform .3s;position:relative}
#ipop.show .ipop-card{transform:translateY(0)}
.ipop-x{position:absolute;top:10px;right:14px;background:none;border:0;color:#8494ab;font-size:22px;cursor:pointer;padding:4px 8px}
.ipop-icon{font-size:40px;margin-bottom:8px}
.ipop-t{font-size:17px;font-weight:800;color:#e6edf3;margin-bottom:6px}
.ipop-d{font-size:13px;color:#8494ab;margin-bottom:16px;line-height:1.45}
.ipop-btn{display:block;width:100%;background:#35d0e0;border:0;border-radius:12px;color:#04222a;font-size:15px;font-weight:800;padding:13px;cursor:pointer;margin-bottom:8px}
.ipop-no{background:none;border:0;color:#8494ab;font-size:13px;cursor:pointer;padding:6px}
@media(min-width:500px){#ipop{align-items:center}.ipop-card{border-bottom:1px solid #1e2a3d;border-radius:18px}}
/* v206: SIMULACRO local — prueba del sistema de alerta (solo en este dispositivo) */
.drill-tag{display:inline-block;background:#ff3b30;color:#fff;font-size:10px;font-weight:800;letter-spacing:.06em;border-radius:6px;padding:2px 7px;margin-right:4px;vertical-align:1px}
#drill-banner{position:fixed;top:0;left:0;right:0;z-index:9999;display:flex;align-items:center;justify-content:space-between;gap:10px;background:repeating-linear-gradient(45deg,#7a0d0d,#7a0d0d 14px,#5c0808 14px,#5c0808 28px);color:#fff;font-size:13px;padding:9px 12px;box-shadow:0 2px 12px rgba(0,0,0,.5)}
#drill-banner button{background:#fff;color:#7a0d0d;border:0;border-radius:10px;font-weight:800;font-size:13px;padding:7px 14px;cursor:pointer}
body.drilling{padding-top:42px}
#drill-modal{position:fixed;inset:0;z-index:10000;display:flex;align-items:center;justify-content:center;background:rgba(4,8,16,.82);padding:18px}
.drill-box{max-width:430px;width:100%;background:#101a2c;border:2px solid #ff3b30;border-radius:18px;padding:24px 22px;color:#e8eef7;box-shadow:0 8px 40px rgba(255,59,48,.25)}
.drill-kicker{color:#ff3b30;font-weight:800;letter-spacing:.08em;font-size:13px;margin-bottom:8px}
.drill-box h2{margin:0 0 10px;font-size:20px}
.drill-box p{font-size:14px;line-height:1.5;margin:0 0 10px;color:#c6d2e3}
.drill-box p b,.drill-box li b{color:#fff}
.drill-note{font-size:13px;color:#9fb0c7}
.drill-btns{display:flex;gap:10px;margin-top:16px}
.drill-go{flex:1;background:#ff3b30;border:0;border-radius:12px;color:#fff;font-size:15px;font-weight:800;padding:13px;cursor:pointer}
.drill-cancel{flex:1;background:none;border:1px solid #3a4a63;border-radius:12px;color:#9fb0c7;font-size:15px;font-weight:700;padding:13px;cursor:pointer}
.drill-check{list-style:none;margin:0 0 4px;padding:0;font-size:14px;line-height:1.5;color:#c6d2e3}
.drill-check li{margin-bottom:8px}
#drill-count{color:#ff3b30;font-size:18px}
/* v221: ventanita para instalar la PWA */
.installprompt{position:fixed;left:12px;right:12px;bottom:14px;z-index:6000;display:flex;align-items:center;gap:10px;
  padding:12px 14px;border-radius:14px;font-size:13px;color:#e8f0ff;
  border:1px solid rgba(90,160,255,.45);background:rgba(10,18,32,.96);box-shadow:0 8px 30px rgba(0,0,0,.5)}
.installprompt.hidden{display:none}
.installprompt .ip-ico{font-size:22px}
#installprompt-tx{flex:1;line-height:1.35}
#installprompt-btn{background:#3b82f6;border:0;border-radius:9px;color:#fff;font-weight:700;padding:8px 16px;font-size:13px;cursor:pointer;white-space:nowrap}
#installprompt-x{background:none;border:0;color:#9fb3d9;font-size:18px;line-height:1;padding:4px 6px;cursor:pointer}
@media(min-width:640px){.installprompt{left:auto;right:18px;bottom:18px;max-width:380px}}

/* v240: franja de expansión (aviso arriba, cerrable y recordada) */
#expandbar{position:relative;background:#f5b921;color:#1a1405;font-size:13px;font-weight:600;line-height:1.35;text-align:center;padding:7px 36px 7px 10px}
#expandbar .eb-tx{display:inline-block;max-width:900px}
#expand-x{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:none;border:0;font-size:15px;line-height:1;color:#1a1405;padding:4px 7px;cursor:pointer}


/* ===== v243: selector de sala + habitación «Hacia Rusia» ===== */
#tab-escenarios{width:100%;max-width:760px;margin:0 auto;padding:12px 12px 30px;box-sizing:border-box}
.scen-top{display:flex;margin-bottom:10px}
.scen-back{background:rgba(255,255,255,.03);border:1px solid var(--line);color:var(--txt);border-radius:9px;padding:6px 12px;font-family:var(--sans);font-size:12.5px;font-weight:600;cursor:pointer}
/* v283: botón «← Escenarios» de Rusia: rojo, con aire arriba */
#russia-room .scen-top{margin:16px 2px 10px}
#ru-scen{background:rgba(57,213,232,.10);border:1px solid rgba(57,213,232,.5);color:#a5ecfa;border-radius:999px;padding:9px 18px;font-size:13px;font-weight:700;letter-spacing:.04em;box-shadow:0 3px 14px rgba(57,213,232,.18)}
.scen-h{font-family:var(--sans);font-size:19px;font-weight:800;letter-spacing:.3px;margin:2px 0 4px}
.scen-sub{color:var(--dim);font-size:13px;margin:0 0 16px}
.scen-card{display:block;width:100%;text-align:left;border:1px solid var(--line);background:rgba(255,255,255,.03);border-radius:12px;padding:14px;margin:0 0 10px;cursor:pointer;color:var(--txt);font-family:var(--sans);box-sizing:border-box}
.scen-n{display:block;font-weight:800;font-size:16px;letter-spacing:.4px;text-transform:uppercase}
.scen-d{display:block;color:var(--dim);font-size:12.5px;margin-top:3px}
.scen-chip{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.6px;border-radius:999px;padding:2px 8px;margin-top:9px;background:rgba(255,255,255,.06);color:#8ea3b5}
.scen-chip.now{background:rgba(70,200,120,.15);color:#5fd68a}
.scen-chip.go{background:rgba(245,185,66,.15);color:#f5b942}
.scen-card.off{opacity:.55;cursor:default}
#map-ru .leaflet-tile-pane{filter:brightness(.92) sepia(.45) hue-rotate(165deg) saturate(2.6)}
#ru-stats{margin-top:0;margin-bottom:12px;padding:0}
.lg-ru{display:inline-block;width:9px;height:9px;border-radius:50%;background:#ff3b30;box-shadow:0 0 8px #ff3b30;margin-right:5px}
.lg-rd{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--amber);box-shadow:0 0 8px var(--amber);margin-right:5px}
#sec-ru{margin-top:12px}
.ru-item{align-items:flex-start}
.ru-item .ru-tx{margin:6px 0 0;font-size:12.5px;color:var(--txt);line-height:1.5}
.ru-item .ru-orig{margin:4px 0 0;font-size:11px;color:var(--dim);line-height:1.45}
.ru-src{font-size:10.5px;color:var(--dim);text-decoration:none;white-space:nowrap}
.ru-pop-tx{margin:6px 0 0;font-size:12px;line-height:1.5}
.ru-none{color:var(--dim);font-size:13px;padding:8px 2px}
#tabbar button{position:relative}
.tab-new{position:absolute;top:0;right:calc(50% - 17px);background:var(--amber);color:#1a1206;font-size:8.5px;font-weight:800;letter-spacing:.6px;border-radius:999px;padding:2px 6px;box-shadow:0 1px 6px rgba(255,176,32,.5)} /* v298: NEW fijo y un poco más visible */
@media (max-width:380px){.tab-new{font-size:7px;padding:1px 4px;letter-spacing:.3px;right:calc(50% - 14px)}} /* v302: en pantallas de 320 px el distintivo NEW no roza el icono */
#russia-room{width:100%;max-width:1760px;margin:0 auto;padding:8px 12px 24px;box-sizing:border-box}
#mapwrap-ru{position:relative;border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 0 40px rgba(57,213,232,.06),0 10px 40px rgba(0,0,0,.5)}
#map-ru{position:relative;height:54vh;min-height:340px;background:#05070a;border:1px solid var(--line);border-radius:14px;overflow:hidden;z-index:1;box-shadow:0 0 40px rgba(57,213,232,.06),0 10px 40px rgba(0,0,0,.5)}
.ru-stat{font-family:var(--mono);font-size:12px;color:var(--dim);margin:10px 2px 4px}
.ru-legend{display:flex;gap:6px;flex-wrap:wrap;margin:4px 0 12px}
.ru-chip{font-family:var(--mono);font-size:9px;letter-spacing:.8px;border-radius:6px;padding:2px 6px;align-self:flex-start;white-space:nowrap;border:1px solid;background:transparent}
.ru-chip.c1{color:#ffb020;border-color:rgba(255,176,32,.5)}
.ru-chip.c2{color:#ff5a48;border-color:rgba(255,90,72,.5)}
.ru-foot{display:flex;justify-content:flex-end;margin-top:7px}
.ru-chip.c1{background:var(--amber);color:#1a1206}
.ru-chip.c2{background:#ff7a1a;color:#180c00}
.ru-est{font-family:var(--mono);font-size:9px;letter-spacing:1px;font-weight:700;border-radius:6px;padding:2px 6px;border:1px solid var(--line);color:var(--dim);align-self:flex-start}
.ru-est.e-misiles,.ru-est.e-defensa{color:#ffb0a8;border-color:rgba(255,120,100,.4)}
.ru-est.e-derribo{color:#ffd9a8;border-color:rgba(255,179,64,.4)}
.ru-n{font-family:var(--mono);font-size:10px;color:var(--dim);align-self:center}
#ru-cards{display:flex;flex-direction:column;gap:8px}
.ru-card{display:flex;flex-direction:column;gap:5px;background:rgba(255,255,255,.025);border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:13px;color:var(--txt)}
.ru-head{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.ru-head b{font-size:14px}
.ru-reg{color:var(--dim);font-size:12px}
.ru-ago{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--dim)}
.ru-vec{font-family:var(--mono);font-size:11px;color:#ffd9a8}
.ru-tx{margin:0;line-height:1.45}
.ru-orig{margin:0;line-height:1.45;color:var(--dim);font-size:12px}
.ru-src{font-family:var(--mono);font-size:11px;color:#7fd7e8;text-decoration:none;align-self:flex-start}
.ru-src:hover{text-decoration:underline}
.ru-none{color:var(--dim);font-size:13px;padding:14px 4px}
.ru-mkwrap{background:none;border:none}
.ru-dot{display:block;width:14px;height:14px;border-radius:50%;border:2px solid rgba(0,0,0,.55)}
.ru-dot.c1{background:var(--amber);box-shadow:0 0 10px rgba(255,179,64,.8)}
.ru-dot.c2{background:#ff7a1a;box-shadow:0 0 12px rgba(255,122,26,.9)}
.leaflet-popup-content .ru-card{border:none;background:none;padding:0}

/* v278: identidad propia de la sala Rusia (acento rojo, distinto de Europa) */
#ru-livestrip .ls-dot{background:#ff3b30;box-shadow:0 0 8px rgba(255,59,48,.9)}
/* v291: franja «En directo» de Rusia con insignia y números en grande */
#ru-livestrip{justify-content:flex-start;gap:10px;padding:4px 10px;overflow:hidden;
  background:linear-gradient(90deg,rgba(255,59,48,.18),rgba(255,59,48,.05) 55%,rgba(8,12,18,.92));
  border-bottom:1px solid rgba(255,90,72,.4)}
.ru-live-badge{display:inline-flex;align-items:center;gap:5px;flex:none;background:#e0342b;color:#fff;
  font-weight:700;font-size:9px;letter-spacing:1px;padding:2px 8px;border-radius:999px;
  box-shadow:0 0 12px rgba(224,52,43,.35)}
.ru-live-badge .ls-dot{background:#fff;box-shadow:0 0 6px rgba(255,255,255,.95);width:5px;height:5px}
.ru-ls-stat{display:inline-flex;align-items:baseline;gap:4px;flex:none}
.ru-ls-stat b{font-family:var(--mono);font-size:13px;line-height:1;color:#fff}
.ru-ls-stat span{font-family:var(--sans);font-size:9px;font-weight:600;letter-spacing:.8px;text-transform:uppercase;color:var(--dim)}
.ru-ls-sep{width:1px;align-self:stretch;flex:none;background:rgba(255,255,255,.14)}
/* v305: las 8 pijadas de la sala Rusia */
/* 1: la franja pulsa con el color del nivel cuando sube (solo visual, sin sonido) */
#ru-livestrip.pulse{animation:ruPulse 1s ease 3}
@keyframes ruPulse{0%{box-shadow:0 0 0 0 var(--pc,rgba(255,176,0,.55))}100%{box-shadow:0 0 0 16px transparent}}
/* 2: tinte ambiental de la sala según el nivel (body::after lo usa Europa) */
body[data-rulvl]::before{content:"";position:fixed;inset:0;z-index:1298;pointer-events:none;opacity:0;transition:opacity 1.4s ease}
body[data-rulvl="0"]::before{opacity:.5;background:radial-gradient(ellipse at 50% 30%,rgba(53,208,127,.10),transparent 70%)}
body[data-rulvl="1"]::before{opacity:.6;background:radial-gradient(ellipse at 50% 30%,rgba(255,209,102,.10),transparent 70%)}
body[data-rulvl="2"]::before{opacity:.7;background:radial-gradient(ellipse at 50% 30%,rgba(255,176,0,.12),transparent 70%)}
body[data-rulvl="3"]::before{opacity:.85;background:radial-gradient(ellipse at 50% 30%,rgba(255,140,66,.14),transparent 70%)}
body[data-rulvl="4"]::before{opacity:1;background:radial-gradient(ellipse at 50% 30%,rgba(255,60,40,.16),transparent 70%)}
/* 3: cinta continua con los últimos avisos */
.ru-ticker{background:rgba(8,12,18,.92);border-bottom:1px solid var(--line);overflow:hidden;white-space:nowrap;padding:6px 0}
.ru-ticker-track{display:inline-block;animation:ruTick 26s linear infinite;font-size:11.5px;color:var(--dim)}
.ru-ticker-track b{color:var(--tx);font-weight:600}
.ru-ticker-track .tk{margin:0 20px}
@keyframes ruTick{from{transform:translateX(0)}to{transform:translateX(-50%)}}
/* 5: insignia RÉCORD dorada */
.ru-rec{display:none;font-size:9px;font-weight:800;letter-spacing:1px;color:#1a1206;background:linear-gradient(135deg,#ffd166,#ffb020);border-radius:8px;padding:3px 8px;flex:none;box-shadow:0 0 12px rgba(255,176,32,.5)}
.ru-rec.show{display:inline-block;animation:blink 1.6s infinite}
/* 4: mini-gráfico del nivel en 24 h */
.ru-spark{display:flex;align-items:flex-end;gap:3px;height:58px;background:rgba(8,12,18,.6);border:1px solid var(--line);border-radius:10px;padding:8px;margin-top:6px}
.ru-spark i{flex:1;border-radius:2px;min-height:3px}
/* 6: racha de días en actividad alta */
.ru-racha{margin:8px 0;background:rgba(255,176,32,.08);border:1px solid rgba(255,176,0,.4);color:#ffb000;border-radius:10px;padding:8px 10px;font-size:12px;font-weight:700}
/* 7: versus Europa/Rusia en Escenarios */
.scen-vs{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;margin:2px 4px 8px;padding:10px;background:var(--card);border:1px solid var(--line);border-radius:12px;font-size:12px;color:var(--dim)}
.scen-vs .vs-sep{opacity:.5}
/* 8: los marcadores nuevos "caen" en el mapa */
.mk-alert.mk-drop{animation:mkDrop .55s cubic-bezier(.2,.9,.3,1.15)}
@keyframes mkDrop{from{transform:translateY(-46px);opacity:0}to{transform:translateY(0);opacity:1}}
.ru-ls-upd{margin-left:auto;flex:none;font-family:var(--mono);font-size:9px;color:var(--dim);overflow:hidden;text-overflow:ellipsis}
/* v292: botón del radar de lluvia y el tiempo por ciudades (Rusia) */
.ru-clima-bar{display:flex;justify-content:flex-end;gap:6px;margin:6px 0 2px}
.ru-radar-btn{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.04);border:1px solid var(--line);color:var(--dim);border-radius:999px;padding:4px 11px;font-size:11px;font-weight:600;letter-spacing:.4px;cursor:pointer}
.ru-radar-btn::before{content:'';width:7px;height:7px;border-radius:50%;background:currentColor;opacity:.55}
.ru-radar-btn.on{color:#9fd8ff;border-color:rgba(77,163,255,.55);background:rgba(77,163,255,.12)}
.ru-radar-btn.on::before{opacity:1;box-shadow:0 0 7px rgba(77,163,255,.9)}
.ru-wx{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 10px}
.ru-wx:empty{display:none}
.ru-wx .wx{display:inline-flex;align-items:center;gap:5px;background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:999px;padding:3px 9px;font-size:11px;color:var(--dim)}
.ru-wx .wx b{color:var(--txt);font-weight:600}
.ru-wx .wx i{font-style:normal}
.ru-sec{border-left:3px solid rgba(255,90,72,.45)}
.ru-day-nums{display:flex;gap:10px}
.ru-day-nums>div{flex:1;background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:10px;padding:9px 6px;text-align:center}
.ru-day-nums b{display:block;font-size:20px;line-height:1.15}
.ru-day-nums span{font-family:var(--mono);font-size:9px;letter-spacing:1px;color:var(--dim);text-transform:uppercase}

/* v279: paneles y barra propios de la sala Rusia */
.ru-pane{display:none}
.ru-pane.on{display:block}
#ru-tabbar{position:fixed;left:0;right:0;bottom:0;z-index:1001;display:flex;
  background:#0a0507;border-top:1px solid rgba(255,90,72,.25);
  padding:6px 8px calc(6px + env(safe-area-inset-bottom))}
#ru-tabbar button{flex:1;background:none;border:none;color:var(--dim);
  font-family:var(--mono);font-size:9px;letter-spacing:.4px;text-transform:uppercase;white-space:nowrap;
  display:flex;flex-direction:column;align-items:center;gap:4px;padding:9px 1px;cursor:pointer}
#ru-tabbar button svg{width:23px;height:23px}
#ru-tabbar button.on{color:#ff5a48}
#mapwrap-ru-av{position:relative;border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-bottom:10px}
#map-ru-av{height:46vh;min-height:300px;background:#05070a;z-index:1}

/* v280: panel Día/Aviones/Clima de Rusia completos */
.ru-nowline{font-family:var(--mono);font-size:12px;color:#ffb3ab;margin:0 0 10px}
.ru-chart{display:flex;align-items:flex-end;gap:3px;height:64px;margin:12px 0 2px}
.ru-chart .bar{flex:1;background:linear-gradient(180deg,#ff5a48,#8c1d12);border-radius:3px 3px 0 0;min-height:2px}
.ru-chart .bar.now{background:linear-gradient(180deg,#ffb020,#8c5a0b)}
.ru-chart-x{font-family:var(--mono);font-size:9px;color:var(--dim);margin-bottom:8px}
.ru-subh{font-family:var(--mono);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:var(--dim);margin:14px 0 8px}
.ru-top-item{display:flex;justify-content:space-between;background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:6px;font-size:13px}
.ru-top-item b{font-family:var(--mono);color:#ff8a70}
#mapwrap-ru-clima{position:relative;border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-bottom:10px}
#map-ru-clima{height:38vh;min-height:260px;background:#05070a;z-index:1}
#ru-av-nums{margin-bottom:10px}
.ru-clima-h{font-family:var(--mono);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:var(--dim);margin:12px 0 6px}
/* v284: Escenarios sin hueco negro (fuera Oriente Medio) y escritorio sin espacios muertos */
.scen-card{position:relative;overflow:hidden}
.scen-card[data-scen="eu"]{background:linear-gradient(135deg,rgba(57,213,232,.22),rgba(25,80,150,.14) 55%,rgba(255,255,255,.03));border:1px solid rgba(57,213,232,.55);box-shadow:0 8px 30px rgba(57,213,232,.18)}
.scen-card[data-scen="ru"]{background:linear-gradient(135deg,rgba(255,84,60,.24),rgba(150,28,28,.14) 55%,rgba(255,255,255,.03));border:1px solid rgba(255,96,82,.6);box-shadow:0 8px 30px rgba(224,49,49,.22)}
.scen-card::after{content:"◉";position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:58px;line-height:1;opacity:.16;pointer-events:none}
.scen-card[data-scen="eu"]::after{color:#39d5e8}
.scen-card[data-scen="ru"]::after{color:#ff5040}
/* v297: distintivo NUEVO en la tarjeta de Rusia (la novedad de Escenarios) */
.scen-new{position:absolute;top:10px;right:12px;z-index:1;background:var(--amber);color:#1a1206;font-size:9px;font-weight:800;letter-spacing:.8px;border-radius:999px;padding:3px 8px;box-shadow:0 2px 10px rgba(255,176,32,.45)}
.scen-n{font-size:19px;font-weight:800;letter-spacing:.02em}
.scen-d{font-size:13.5px;color:#ccd9e4}
.scen-chip{font-weight:800;letter-spacing:.08em}
#tab-escenarios{display:flex;flex-direction:column;min-height:calc(100dvh - 218px);min-height:calc(100svh - 218px)} /* svh: alto estable al hacer scroll (con dvh las tarjetas se estiraban/encogían) */
#tab-escenarios .scen-card{flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;min-height:96px}
@media (min-width:1024px){
  #tab-escenarios{max-width:1180px;margin:0 auto;padding:26px 24px 48px;min-height:0;display:block}
  #tab-escenarios .scen-card{display:inline-block;width:calc(50% - 9px);min-height:148px;padding:26px 24px;vertical-align:top}
  #tab-escenarios .scen-card[data-scen="eu"]{margin-right:18px}
  #tab-escenarios .scen-h{font-size:25px}
  #russia-room{max-width:1180px;margin:0 auto;padding:0 24px 48px}
  #map-ru{height:440px}
  #ru-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:start}
}

/* ================= v309 · tanda retención 2 ================= */
/* Fila de chips bajo la nowline (racha, hoy-vs-ayer, compartir, ayuda) */
.homechips{display:flex;gap:8px;overflow-x:auto;padding:10px 2px 2px;scrollbar-width:none}
.homechips::-webkit-scrollbar{display:none}
.hchip{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:11px;
  color:var(--dim);background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:6px 12px;cursor:pointer;
  transition:border-color .2s,transform .2s}
.hchip:hover{border-color:rgba(57,213,232,.4);transform:translateY(-1px)}
.hchip b{color:var(--txt);font-weight:700}
.hchip.hot b{color:var(--amber)}
.hchip.help{margin-left:auto}
/* Banner "únete a Telegram" */
.tgjoin{display:flex;align-items:center;gap:10px;background:linear-gradient(135deg,rgba(57,213,232,.10),rgba(57,213,232,.03));
  border:1px solid rgba(57,213,232,.35);border-radius:12px;padding:10px 12px;margin-top:10px;font-size:13px}
.tgjoin .tg-t{font-weight:700}
.tgjoin .tg-p{color:var(--dim);font-size:12px}
.tgjoin .grow{flex:1;min-width:0}
.tgjoin button{font-family:var(--mono);font-size:11px;border-radius:18px;padding:6px 12px;cursor:pointer;border:1px solid var(--line);
  background:rgba(255,255,255,.04);color:var(--txt)}
.tgjoin .tg-ok{background:var(--cyan);border-color:var(--cyan);color:#04121a;font-weight:700}
.tgjoin .tg-x{background:none;border:none;color:var(--dim);font-size:16px;padding:4px 8px}
/* Modal genérico (pre-push, ayuda push, glosario): misma estética que el tour */
.modal-ov{position:fixed;inset:0;z-index:3000;display:flex;align-items:center;justify-content:center;
  background:rgba(3,5,8,.78);padding:18px;animation:fadein .2s ease}
.modal-card{background:var(--bg2);border:1px solid rgba(57,213,232,.35);border-radius:16px;max-width:420px;width:100%;
  padding:20px;box-shadow:0 20px 60px rgba(0,0,0,.6),0 0 30px rgba(57,213,232,.08);animation:popin .25s ease}
@keyframes popin{from{transform:scale(.94);opacity:0}to{transform:scale(1);opacity:1}}
.modal-card h3{font-size:16px;letter-spacing:1px;margin-bottom:8px}
.modal-card p{font-size:13px;color:var(--dim);line-height:1.55;margin-bottom:10px}
.modal-card p b{color:var(--txt)}
.modal-card .ex{background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:10px;
  padding:10px 12px;font-size:12px;margin-bottom:12px;color:var(--dim)}
.modal-btns{display:flex;gap:10px}
.modal-btns button{flex:1;font-family:var(--mono);font-size:13px;font-weight:700;border-radius:12px;padding:11px;cursor:pointer;border:1px solid var(--line)}
.modal-go{background:var(--cyan);border-color:var(--cyan);color:#04121a}
.modal-no{background:rgba(255,255,255,.04);color:var(--txt)}
.modal-card ol{margin:0 0 10px 18px;font-size:13px;color:var(--dim);line-height:1.7}
.modal-card ol b{color:var(--txt)}
/* Glosario */
.gloss-list{display:flex;flex-direction:column;gap:8px;max-height:50vh;overflow-y:auto;margin-bottom:12px}
.gloss-item{background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:12.5px}
.gloss-item b{color:var(--cyan);font-family:var(--mono);font-size:12px;display:block;margin-bottom:3px}
.gloss-item span{color:var(--dim);line-height:1.5}
.gloss-q{margin-left:auto;background:rgba(57,213,232,.08);border:1px solid rgba(57,213,232,.4);color:var(--cyan);
  border-radius:50%;width:22px;height:22px;font-size:13px;font-weight:700;cursor:pointer;line-height:1}
/* Esqueletos de carga (evitan el "0 / vacío" falso) */
.skelrow{border-radius:10px;padding:14px 12px;margin-bottom:8px;
  background:linear-gradient(100deg,rgba(255,255,255,.03) 40%,rgba(255,255,255,.07) 50%,rgba(255,255,255,.03) 60%);
  background-size:200% 100%;animation:shimmer 1.4s infinite linear;border:1px solid var(--line)}
@keyframes shimmer{to{background-position:-200% 0}}
/* Noticia destacada */
.topnews{border:1px solid rgba(255,179,64,.4);border-radius:14px;padding:14px;margin-bottom:12px;
  background:linear-gradient(135deg,rgba(255,179,64,.08),rgba(255,179,64,.02))}
.topnews .tn-k{font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--amber);text-transform:uppercase;margin-bottom:6px}
.topnews .tn-t{font-size:15px;font-weight:600;line-height:1.45;margin-bottom:6px}
.topnews .tn-m{font-size:11px;color:var(--dim)}
/* Ayer en VIGÍA + dato curioso */
.yday-line{font-size:13.5px;line-height:1.6}
.yday-line b{color:var(--amber)}
.fact-line{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line);font-size:12.5px;color:var(--dim);line-height:1.55}
.fact-line b{color:var(--cyan);font-family:var(--mono);font-size:11px;letter-spacing:1px;display:block;margin-bottom:4px}
/* Mapa de calor del mes */
.heat-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-top:4px}
.heat-cell{aspect-ratio:1;border-radius:6px;background:rgba(255,255,255,.04);border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;font-size:9px;color:var(--dim);font-family:var(--mono);min-height:30px}
.heat-cell.h1{background:rgba(53,208,127,.25);border-color:rgba(53,208,127,.4);color:#c9f5dd}
.heat-cell.h2{background:rgba(255,179,64,.28);border-color:rgba(255,179,64,.45);color:#ffe3b3}
.heat-cell.h3{background:rgba(255,59,48,.32);border-color:rgba(255,59,48,.5);color:#ffc9c4}
.heat-cell.today{outline:2px solid var(--cyan);outline-offset:1px}
.heat-leg{display:flex;gap:10px;font-size:10px;color:var(--dim);margin-top:8px;font-family:var(--mono)}
.heat-leg i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}
/* Encuesta del día */
.poll-q{font-size:14px;font-weight:600;margin-bottom:12px;line-height:1.5}
.poll-opts{display:flex;gap:10px;margin-bottom:4px}
.poll-opts button{flex:1;font-size:14px;font-weight:700;border-radius:12px;padding:12px;cursor:pointer;
  border:1px solid var(--line);background:rgba(255,255,255,.04);color:var(--txt);transition:transform .15s}
.poll-opts button:active{transform:scale(.96)}
.poll-opts button.py{border-color:rgba(53,208,127,.5)}
.poll-opts button.pn{border-color:rgba(255,59,48,.5)}
.poll-bar{margin-top:8px}
.poll-row{display:flex;align-items:center;gap:8px;font-size:12px;margin-bottom:6px}
.poll-row .pl{width:34px;font-family:var(--mono);color:var(--dim)}
.poll-row .bar{flex:1;height:10px;border-radius:6px;background:rgba(255,255,255,.06);overflow:hidden}
.poll-row .bar i{display:block;height:100%;border-radius:6px;transition:width .8s ease}
.poll-row .pv{width:44px;text-align:right;font-family:var(--mono);color:var(--dim)}
.poll-thanks{font-size:12px;color:var(--green);margin-top:8px}
.poll-foot{font-size:10.5px;color:var(--dim);margin-top:8px;font-family:var(--mono)}
/* Ajustes push: modo + pruebas */
.push-tests{display:flex;gap:8px;margin-top:8px}
.push-tests button{flex:0 1 auto;font-family:var(--mono);font-size:9px;border-radius:8px;padding:4px 10px;cursor:pointer;opacity:.75;
  border:1px solid var(--line);background:rgba(255,255,255,.04);color:var(--txt)}
/* Frase "qué está pasando": siempre en una sola línea */
#nowline-text{font-size:12.5px;line-height:1.5;white-space:nowrap}

/* ================= v309b · franja en dos tonos + En directo compacto ================= */

#narrfeed{max-height:210px}
.narr{gap:8px;font-size:12.5px;line-height:1.4}

/* v309: plan B — aviso cuando NEPTUN cae */
#neptun-down{display:flex;gap:10px;align-items:flex-start;background:rgba(255,176,0,.12);border:1px solid rgba(255,176,0,.45);color:#ffd166;border-radius:12px;padding:10px 12px;margin:8px 12px 0;font-size:13px}
#neptun-down.hidden{display:none}
#neptun-down b{color:#ffb000}
#neptun-down span{font-size:18px;line-height:1.2}
