/* ============ METEORA — console a fosfori ============ */
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url('../vendor/fonts/plex-mono-regular.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url('../vendor/fonts/plex-mono-500.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;src:url('../vendor/fonts/plex-mono-600.woff2') format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:700;font-display:swap;src:url('../vendor/fonts/plex-mono-700.woff2') format('woff2')}
@font-face{font-family:'Oswald';font-style:normal;font-weight:500;font-display:swap;src:url('../vendor/fonts/oswald-500.woff2') format('woff2')}
@font-face{font-family:'Oswald';font-style:normal;font-weight:600;font-display:swap;src:url('../vendor/fonts/oswald-600.woff2') format('woff2')}

:root{
  --bg:#050805;
  --bg-mod:#070d08;
  --phos:#33FF66;
  --phos-hi:#B8FFCE;
  --phos-dim:rgba(51,255,102,.42);
  --phos-faint:rgba(51,255,102,.14);
  --amber:#FFB000;
  --deep:#FF4D3D;
  --txt:#C9F5D6;
  --txt-dim:#6FAE86;
  --line:rgba(51,255,102,.28);
  --glow:0 0 6px rgba(51,255,102,.55);
  --ease-snap:cubic-bezier(.19,1,.22,1);
}

*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{
  background:#020302;
  color:var(--txt);
  font-family:'IBM Plex Mono',monospace;
  font-size:13px;
  overflow:hidden;
  cursor:crosshair;
}
::selection{background:var(--phos);color:#031006}
a{color:var(--phos)}
button{font-family:inherit;color:inherit;background:none;border:none;cursor:pointer}
:focus-visible{outline:1px solid var(--phos);outline-offset:2px}

/* ---------- CRT shell ---------- */
#crt{
  position:relative;height:100vh;display:flex;flex-direction:column;
  background:
    radial-gradient(120% 90% at 50% 40%, rgba(51,255,102,.05), transparent 60%),
    var(--bg);
  padding:10px 12px 6px;
  gap:8px;
}
#crt::before{ /* scanline */
  content:'';position:absolute;inset:0;z-index:90;pointer-events:none;
  background:repeating-linear-gradient(0deg, rgba(0,0,0,.16) 0 1px, transparent 1px 3px);
  mix-blend-mode:multiply;
}
#crt::after{ /* vignette + curvatura suggerita */
  content:'';position:absolute;inset:0;z-index:91;pointer-events:none;
  background:radial-gradient(115% 115% at 50% 50%, transparent 62%, rgba(0,0,0,.42) 100%);
}
@media (prefers-reduced-motion:no-preference){
  #crt{animation:crt-flicker 7s infinite steps(1)}
  @keyframes crt-flicker{
    0%,93%,100%{filter:brightness(1)}
    94%{filter:brightness(1.03)}
    95%{filter:brightness(.985)}
    96%{filter:brightness(1.015)}
  }
}

/* ---------- Boot ---------- */
#boot{
  position:absolute;inset:0;z-index:200;background:#020302;
  display:flex;align-items:flex-start;justify-content:flex-start;
  padding:6vh 8vw;transition:opacity .45s ease;
}
#boot.off{opacity:0;pointer-events:none}
#boot pre{
  font:500 14px/1.75 'IBM Plex Mono',monospace;color:var(--phos);
  text-shadow:var(--glow);white-space:pre-wrap;
}
#boot pre .dim{color:var(--txt-dim)}
#boot pre .ok{color:var(--phos-hi)}
#boot pre .amber{color:var(--amber)}

/* ---------- Header ---------- */
#topbar{
  display:flex;align-items:center;gap:20px;
  border:1px solid var(--line);
  background:linear-gradient(180deg, rgba(51,255,102,.07), rgba(51,255,102,.02));
  padding:7px 14px;flex:0 0 auto;
}
.brand{display:flex;align-items:center;gap:12px;min-width:0}
.brand-mark{
  width:26px;height:26px;border:1.5px solid var(--phos);border-radius:50%;
  position:relative;flex:0 0 auto;box-shadow:var(--glow), inset 0 0 6px rgba(51,255,102,.5);
}
.brand-mark::before{content:'';position:absolute;inset:7px;border-radius:50%;background:var(--phos)}
.brand-mark::after{content:'';position:absolute;inset:-6px;border-radius:50%;border:1px solid var(--phos-dim)}
.brand-txt h1{
  font:600 24px/1 'Oswald',sans-serif;letter-spacing:.34em;color:var(--phos-hi);
  text-shadow:var(--glow);
}
.brand-txt .sub{font-size:9.5px;letter-spacing:.14em;color:var(--txt-dim);display:block;margin-top:2px}
.source{
  display:flex;align-items:center;gap:8px;margin-left:auto;
  font-weight:600;font-size:11px;letter-spacing:.12em;white-space:nowrap;
}
.led{width:9px;height:9px;border-radius:50%;background:#333;flex:0 0 auto}
.led.live{background:var(--phos);box-shadow:0 0 8px var(--phos)}
.led.archive{background:var(--amber);box-shadow:0 0 8px var(--amber)}
@media (prefers-reduced-motion:no-preference){
  .led.live{animation:led-pulse 2s infinite}
  @keyframes led-pulse{0%,100%{opacity:1}50%{opacity:.45}}
}
#src-label{color:var(--txt-dim)}
#src-label.live{color:var(--phos-hi)}
#src-label.archive{color:var(--amber)}
.clocks{display:flex;gap:16px}
.clock{display:flex;flex-direction:column;align-items:flex-end}
.clock .tz{font-size:9px;letter-spacing:.2em;color:var(--txt-dim)}
.clock .hh{font-weight:600;font-size:15px;color:var(--phos);text-shadow:var(--glow);font-variant-numeric:tabular-nums}

/* ---------- Grid ---------- */
#grid{flex:1 1 auto;display:flex;gap:8px;min-height:0}
.col{display:flex;flex-direction:column;gap:8px;min-height:0}
#col-left{flex:0 0 236px}
#col-right{flex:0 0 288px}
#mod-map{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}

/* ---------- Modules ---------- */
.module{
  border:1px solid var(--line);background:var(--bg-mod);
  position:relative;display:flex;flex-direction:column;min-height:0;
}
.module::before,.module::after{ /* tacche angolari */
  content:'';position:absolute;width:7px;height:7px;pointer-events:none;
}
.module::before{top:-1px;left:-1px;border-top:2px solid var(--phos);border-left:2px solid var(--phos)}
.module::after{bottom:-1px;right:-1px;border-bottom:2px solid var(--phos);border-right:2px solid var(--phos)}
.module.grow{flex:1 1 0}
.mod-head{
  display:flex;align-items:baseline;gap:8px;
  padding:6px 10px 5px;border-bottom:1px dashed var(--phos-faint);flex:0 0 auto;
}
.mod-head h2{
  font:500 12.5px/1 'Oswald',sans-serif;letter-spacing:.22em;color:var(--txt);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.mod-id{font-size:8.5px;letter-spacing:.12em;color:var(--txt-dim);border:1px solid var(--phos-faint);padding:1px 4px}

/* ---------- Counters / odometer ---------- */
#mod-counters{padding-bottom:10px}
.counter-big{display:flex;flex-direction:column;align-items:center;padding:12px 0 6px}
.counter-cap{font-size:9px;letter-spacing:.22em;color:var(--txt-dim);margin-top:5px}
.counter-row{display:flex;justify-content:space-evenly;gap:6px;padding-top:6px}
.counter-sm{display:flex;flex-direction:column;align-items:center}
.odo{display:flex;gap:2px}
.odo .digit{
  width:22px;height:34px;overflow:hidden;position:relative;
  background:linear-gradient(180deg,#0a140c, #0d1a10 45%, #08120a);
  border:1px solid var(--phos-faint);
  box-shadow:inset 0 4px 6px rgba(0,0,0,.6), inset 0 -4px 6px rgba(0,0,0,.6);
}
.odo .digit .reel{
  display:flex;flex-direction:column;align-items:center;
  transition:transform .6s var(--ease-snap);
  font-weight:700;font-size:21px;line-height:34px;color:var(--phos);text-shadow:var(--glow);
  font-variant-numeric:tabular-nums;
}
.odo-sm .digit{width:16px;height:25px}
.odo-sm .digit .reel{font-size:15px;line-height:25px}
.counter-sm.amber .digit .reel{color:var(--amber);text-shadow:0 0 6px rgba(255,176,0,.55)}
@media (prefers-reduced-motion:reduce){.odo .digit .reel{transition:none}}

/* ---------- Canvas ---------- */
canvas{display:block;width:100%;height:100%}
#mod-histo canvas,#mod-spark canvas{flex:1 1 0;min-height:0}
#mod-timeline canvas{flex:1 1 0;min-height:0;cursor:ew-resize}

/* ---------- Legend ---------- */
.legend{list-style:none;padding:8px 12px 4px;font-size:10.5px;color:var(--txt-dim)}
.legend li{display:flex;align-items:center;gap:8px;padding:2.5px 0}
.legend .dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto}
.dot.d0{background:var(--phos);box-shadow:0 0 5px var(--phos)}
.dot.d1{background:var(--amber);box-shadow:0 0 5px var(--amber)}
.dot.d2{background:var(--deep);box-shadow:0 0 5px var(--deep)}
.legend-mag{padding:2px 12px 9px;font-size:10.5px;color:var(--txt-dim);display:flex;align-items:center;gap:8px}
.mini-circles{display:inline-flex;align-items:center;gap:5px}
.mini-circles i{border:1px solid var(--phos-dim);border-radius:50%;display:inline-block}
.mini-circles .c1{width:5px;height:5px}
.mini-circles .c2{width:10px;height:10px}
.mini-circles .c3{width:16px;height:16px}

/* ---------- Map ---------- */
#mod-map .mod-head{justify-content:flex-start}
.map-readout{margin-left:auto;font-size:10px;color:var(--txt-dim);letter-spacing:.08em;white-space:nowrap}
#map-wrap{flex:1 1 auto;position:relative;min-height:0}
#cv-map{position:absolute;inset:0;cursor:crosshair}
#map-tip{
  position:absolute;z-index:5;pointer-events:none;
  background:rgba(5,10,6,.92);border:1px solid var(--phos-dim);
  padding:4px 8px;font-size:10.5px;color:var(--phos-hi);white-space:nowrap;
  text-shadow:none;box-shadow:0 0 12px rgba(0,0,0,.7);
}

/* ---------- Top 10 ---------- */
#top10{list-style:none;overflow-y:auto;flex:1 1 0;padding:4px 0;scrollbar-width:thin;scrollbar-color:var(--phos-dim) transparent}
#top10 li{border-bottom:1px dashed var(--phos-faint)}
#top10 li:last-child{border-bottom:none}
#top10 button{
  display:grid;grid-template-columns:20px 46px 1fr;gap:2px 6px;align-items:center;
  width:100%;text-align:left;padding:4px 10px;transition:background .15s ease;
}
#top10 button:hover,#top10 li.sel button{background:var(--phos-faint)}
#top10 .rank{font-size:9px;color:var(--txt-dim)}
#top10 .mag{font-weight:700;font-size:15px;color:var(--phos);text-shadow:var(--glow);font-variant-numeric:tabular-nums}
#top10 li.big .mag{color:var(--amber);text-shadow:0 0 6px rgba(255,176,0,.55)}
#top10 .place{font-size:10.5px;line-height:1.3;color:var(--txt);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
#top10 .when{font-size:9px;color:var(--txt-dim);grid-column:3}
#mod-top10 .scroll-hint{
  position:absolute;left:1px;right:1px;bottom:0;z-index:3;text-align:center;
  font-size:8.5px;font-weight:600;letter-spacing:.2em;color:var(--amber);
  padding:14px 0 3px;pointer-events:none;
  background:linear-gradient(180deg, transparent, rgba(7,13,8,.96) 62%);
}

/* ---------- Detail ---------- */
#mod-detail{flex:0 0 auto}
#detail-body{padding:10px 12px 12px;min-height:148px}
.detail-empty{
  display:flex;align-items:center;justify-content:center;text-align:center;
  color:var(--txt-dim);font-size:10.5px;letter-spacing:.1em;line-height:1.8;
}
.detail-place{font:500 14px/1.35 'Oswald',sans-serif;letter-spacing:.06em;color:var(--phos-hi);margin-bottom:8px}
.detail-grid{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;font-size:11px}
.detail-grid dt{color:var(--txt-dim);font-size:9.5px;letter-spacing:.14em;align-self:baseline}
.detail-grid dd{font-variant-numeric:tabular-nums}
.detail-grid .dmag{font-weight:700;font-size:16px;color:var(--phos);text-shadow:var(--glow)}
.detail-grid .dmag.big{color:var(--amber);text-shadow:0 0 6px rgba(255,176,0,.55)}
.detail-link{display:inline-block;margin-top:9px;font-size:10px;letter-spacing:.1em;color:var(--phos);text-decoration:none;border-bottom:1px dashed var(--phos-dim)}
.detail-link:hover{color:var(--phos-hi)}

/* ---------- Bottom ---------- */
#bottombar{flex:0 0 auto;display:flex;flex-direction:column;gap:5px}
#mod-timeline{height:96px}
.tl-controls{margin-left:auto;display:flex;align-items:center;gap:8px}
.btn{
  display:inline-flex;align-items:center;gap:6px;
  border:1px solid var(--phos-dim);padding:3px 9px;
  font-size:10px;font-weight:600;letter-spacing:.14em;color:var(--phos);
  transition:background .15s ease, box-shadow .15s ease;
}
.btn:hover{background:var(--phos-faint);box-shadow:var(--glow)}
.btn.on{background:var(--phos);color:#031006;box-shadow:0 0 10px rgba(51,255,102,.7)}
.ico-play{width:0;height:0;border-left:7px solid currentColor;border-top:4.5px solid transparent;border-bottom:4.5px solid transparent}
.btn.on .ico-play{border-left:none;border-right:none;border-top:none;border-bottom:none;width:7px;height:9px;border-left:2.5px solid currentColor;border-right:2.5px solid currentColor}
.ico-audio{width:10px;height:10px;position:relative}
.ico-audio::before{content:'';position:absolute;left:0;top:3px;border-left:4px solid currentColor;border-top:2px solid transparent;border-bottom:2px solid transparent;height:0}
.ico-audio::after{content:'';position:absolute;left:4px;top:0;width:5px;height:9px;border:1.5px solid currentColor;border-left:none;border-radius:0 6px 6px 0}
.ico-audio.off::after{opacity:.25}
.tl-cursor-label{font-size:10.5px;color:var(--phos-hi);font-variant-numeric:tabular-nums;letter-spacing:.06em;min-width:150px;text-align:right}

/* ---------- Ticker ---------- */
#tickerline{
  height:22px;overflow:hidden;border:1px solid var(--line);background:var(--bg-mod);
  position:relative;
}
#ticker-inner{
  position:absolute;white-space:nowrap;line-height:20px;font-size:10.5px;color:var(--txt-dim);
  will-change:transform;
}
#ticker-inner b{color:var(--phos);font-weight:600}
#ticker-inner .tk-amber{color:var(--amber)}
#ticker-inner .tk-live{color:var(--phos-hi);font-weight:700;letter-spacing:.1em}
@media (prefers-reduced-motion:reduce){#ticker-inner{animation:none !important;transform:none !important}}

/* ---------- Signature ---------- */
#signature{
  display:flex;justify-content:space-between;align-items:center;
  font-size:9px;color:var(--txt-dim);padding:1px 2px 0;letter-spacing:.1em;
}
#signature a{color:var(--txt-dim);text-decoration:none}
#signature a:hover{color:var(--phos)}

/* ---------- Responsive ---------- */
@media (max-width:1240px){
  #col-left{flex-basis:206px}
  #col-right{flex-basis:250px}
  .brand-txt h1{font-size:20px;letter-spacing:.26em}
  .clocks{gap:10px}
  .clock .hh{font-size:13px}
}
@media (min-width:1700px){
  body{font-size:14px}
  #col-left{flex-basis:280px}
  #col-right{flex-basis:340px}
  .odo .digit{width:26px;height:40px}
  .odo .digit .reel{font-size:25px;line-height:40px}
  .odo-sm .digit{width:18px;height:28px}
  .odo-sm .digit .reel{font-size:17px;line-height:28px}
  #mod-timeline{height:112px}
}
