﻿/* ============================================================
   DWARF FORTRESS ASCII EXPORTER  —  CRT TERMINAL STYLESHEET
   ============================================================ */
:root{
  /* map palette colour keys (per-cell) live in JSON; these are CHROME vars */
  --fg:#00ff37;      /* primary terminal foreground            */
  --fg-dim:#0c8d0c;  /* dim chrome lines                       */
  --fg-bright:#baffba;
  --accent:#ffd000;  /* headers / highlights                   */
  --accent2:#00eaff;
  --bg:#000000;
  --panel:#020602;
  --border:#168716;
  --border2:#074607;
  --glow:rgba(0,255,55,.9);
  --glow-soft:rgba(0,255,55,.30);
  --mono:none;       /* monochrome map tint flag handled in JS  */
}
/* --- THEMES: recolour the chrome only; map colours handled in JS --- */
body.theme-df{ --fg:#00ff37; --fg-dim:#0c8d0c; --fg-bright:#baffba; --accent:#ffd000; --accent2:#00eaff; --border:#168716; --border2:#074607; --glow:rgba(0,255,55,.9); --glow-soft:rgba(0,255,55,.30); }
body.theme-phosphor{ --fg:#33ff66; --fg-dim:#0f7a35; --fg-bright:#d6ffe0; --accent:#9dff00; --accent2:#33ff66; --border:#1c8a3e; --border2:#0a4a22; --glow:rgba(51,255,102,.9); --glow-soft:rgba(51,255,102,.30); }
body.theme-amber{ --fg:#ffb000; --fg-dim:#8a5d00; --fg-bright:#ffe7a8; --accent:#ffe000; --accent2:#ff7b00; --border:#8a5d00; --border2:#3d2900; --glow:rgba(255,176,0,.9); --glow-soft:rgba(255,176,0,.30); }
body.theme-ice{ --fg:#66e0ff; --fg-dim:#1c6f8a; --fg-bright:#d6f6ff; --accent:#ffffff; --accent2:#00aaff; --border:#1c6f8a; --border2:#0a3a4a; --glow:rgba(102,224,255,.9); --glow-soft:rgba(102,224,255,.30); }

*{box-sizing:border-box}
html,body{height:100%;margin:0;background:#000;color:var(--fg);
  font-family:"Cascadia Mono","Lucida Console",Consolas,"Courier New",monospace;overflow:hidden}

/* --- global CRT atmosphere over everything --- */
body:before{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:60;
  background:
    radial-gradient(circle at 50% -8%,var(--glow-soft),transparent 40%),
    radial-gradient(circle at 50% 112%,rgba(0,80,255,.10),transparent 46%),
    linear-gradient(rgba(255,255,255,.03) 50%,rgba(0,0,0,.12) 50%);
  background-size:auto,auto,100% 4px;
  mix-blend-mode:screen;opacity:.5;
}
body:after{content:"";position:fixed;inset:0;pointer-events:none;z-index:59;
  box-shadow:inset 0 0 160px rgba(0,0,0,.95), inset 0 0 50px var(--glow-soft)}

/* ====================== BOOT SEQUENCE ====================== */
.boot{position:fixed;inset:0;z-index:200;background:#000;display:flex;align-items:center;justify-content:center;
  transition:opacity .6s ease;overflow:hidden}
body:not(.booting) .boot{opacity:0;pointer-events:none}
.boot-inner{width:min(900px,92vw);padding:20px}
.boot-art{margin:0 0 10px;color:var(--fg);font-size:clamp(7px,1.05vw,13px);line-height:1.05;
  text-shadow:0 0 8px var(--glow),0 0 18px var(--glow-soft);white-space:pre}
.boot-log{margin:0;color:var(--fg-bright);font-size:13px;line-height:1.5;white-space:pre-wrap;min-height:220px}
.boot-log .ok{color:var(--fg)}.boot-log .warn{color:var(--accent)}
.boot-prompt{margin-top:18px;color:var(--accent);font-size:15px;letter-spacing:.06em;animation:blink 1s steps(2) infinite}
@keyframes blink{50%{opacity:0}}
.boot-scan{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(rgba(255,255,255,.05) 50%,rgba(0,0,0,.18) 50%);background-size:100% 3px;mix-blend-mode:screen;opacity:.6}

/* ====================== PAGE LAYOUT ====================== */
.df-page{height:100%;display:grid;grid-template-rows:auto auto minmax(0,1fr) minmax(150px,26vh);gap:8px;padding:10px;background:#000}
.df-top{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:stretch;
  border:1px solid var(--border);background:linear-gradient(180deg,#060e06,#000);padding:8px 12px;
  box-shadow:0 0 0 1px #001c00 inset,0 0 30px var(--glow-soft) inset}
.brand-block{min-width:0}
.banner-line{margin:0;color:var(--fg-dim);font-size:10px;line-height:1;white-space:nowrap;overflow:hidden}
.eyebrow{margin:3px 0;color:var(--accent);font-size:11px;letter-spacing:.1em;text-transform:uppercase}
h1{margin:0;color:var(--fg);font-size:clamp(20px,2.5vw,36px);line-height:1;letter-spacing:.04em;text-transform:uppercase;position:relative;
  text-shadow:0 0 10px var(--glow),0 0 26px var(--glow-soft)}
/* chromatic aberration on the title */
h1:before,h1:after{content:attr(data-text);position:absolute;left:0;top:0;width:100%;overflow:hidden;opacity:.55;pointer-events:none}
h1:before{color:#ff003c;transform:translate(-1.5px,0);mix-blend-mode:screen;animation:rgbx 4s infinite}
h1:after{color:#00d0ff;transform:translate(1.5px,0);mix-blend-mode:screen;animation:rgbx 4s infinite reverse}
@keyframes rgbx{0%,100%{transform:translate(-1.5px,0)}50%{transform:translate(1.5px,.5px)}}
.subtitle{margin:6px 0 2px;color:var(--fg-bright);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top-readout{display:grid;gap:6px;align-content:center;min-width:200px}
.top-readout span{display:block;border:1px solid var(--border2);background:#000;padding:7px 10px;color:var(--accent2);
  text-align:right;box-shadow:0 0 12px var(--glow-soft) inset;text-shadow:0 0 6px currentColor}

/* ---- tab + theme bar ---- */
.tabbar{display:flex;gap:8px;align-items:center;border:1px solid var(--border);background:#010701;padding:6px 8px;flex-wrap:wrap}
.tab-spacer{flex:1 1 auto}
.theme-label{color:var(--accent);font-size:11px;margin-left:4px}
button{font:inherit;background:#020902;color:var(--fg);border:1px solid var(--border);padding:6px 10px;cursor:pointer;
  text-transform:uppercase;box-shadow:0 0 0 1px #001900 inset;transition:background .1s,color .1s,box-shadow .1s}
button:hover{background:#0a220a;color:#fff;box-shadow:0 0 14px var(--glow-soft)}
button.active,.tab.active{background:#0a3a0a;color:#fff;border-color:var(--fg);text-shadow:0 0 8px var(--fg)}
.theme-btn{font-size:11px;padding:5px 8px}
button.ghost{border-color:var(--border2);color:var(--fg-bright);font-size:11px}
button.disabled{opacity:.35;pointer-events:none}
.live-badge{font-size:11px;color:var(--fg-dim);letter-spacing:.04em;white-space:nowrap}
.live-badge.on{color:var(--fg);text-shadow:0 0 8px var(--glow);animation:blink 1.4s steps(2) infinite}
.live-badge.warn{color:var(--accent)}
.live-badge.off{color:#ff3b3b;text-shadow:0 0 8px rgba(255,59,59,.6)}

/* ---- terminal main ---- */
.df-terminal{min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;border:1px solid var(--border);background:#000;
  box-shadow:0 0 0 1px #001900 inset,0 0 50px var(--glow-soft)}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:7px 8px;border-bottom:1px solid var(--border);
  background:linear-gradient(180deg,#041504,#000);color:var(--fg-bright);font-size:13px}
.toolbar label{display:flex;align-items:center;gap:5px;white-space:nowrap}
.slider-label{min-width:178px}
input[type=range]{width:120px;accent-color:var(--fg)}input[type=checkbox]{accent-color:var(--fg)}

.screen-frame{position:relative;min-height:0;margin:8px;border:1px solid var(--border2);background:#000;
  box-shadow:0 0 0 1px #001900 inset,0 0 40px var(--glow-soft) inset}
.screen-title{position:absolute;top:-10px;left:18px;z-index:6;background:#000;padding:0 8px;color:var(--accent);font-size:12px;
  text-transform:uppercase;letter-spacing:.1em;text-shadow:0 0 8px var(--glow-soft)}
.corner{position:absolute;z-index:6;color:var(--fg);background:#000;font-size:18px;line-height:18px;text-shadow:0 0 8px var(--fg)}
.corner-tl{left:-2px;top:-2px}.corner-tr{right:-2px;top:-2px}.corner-bl{left:-2px;bottom:-2px}.corner-br{right:-2px;bottom:-2px}

.map-wrap{position:absolute;inset:10px;overflow:hidden;background:#000;cursor:grab}
.map-wrap:active{cursor:grabbing}
/* CRT screen curvature on the canvas */
body.crt .map-wrap{border-radius:14px}
body.crt #asciiCanvas{transform:scale(1.012);filter:saturate(1.08) contrast(1.05)}
#asciiCanvas{display:block;width:100%;height:100%;background:#000;image-rendering:pixelated}

#scanlines{position:absolute;inset:0;pointer-events:none;z-index:3;
  background:linear-gradient(rgba(255,255,255,.04) 50%,rgba(0,0,0,.14) 50%);background-size:100% 3px;mix-blend-mode:screen;opacity:.5}
.scan-off #scanlines{display:none}
#scanRoll{position:absolute;left:0;right:0;top:0;height:160px;pointer-events:none;z-index:4;will-change:transform;
  background:linear-gradient(rgba(255,255,255,.08),rgba(255,255,255,0));mix-blend-mode:screen;opacity:.35;animation:roll 7s linear infinite}
.scan-off #scanRoll{display:none}
@keyframes roll{0%{transform:translateY(-160px)}100%{transform:translateY(72vh)}}
.flicker{position:absolute;inset:0;pointer-events:none;z-index:5;background:var(--fg);opacity:0;mix-blend-mode:screen;animation:scrflick 5s infinite steps(60)}
@keyframes scrflick{0%,96%{opacity:0}97%{opacity:.015}98%{opacity:.005}99%{opacity:.02}100%{opacity:0}}
.vignette{position:absolute;inset:0;pointer-events:none;z-index:5;
  box-shadow:inset 0 0 90px rgba(0,0,0,.85),inset 0 0 18px var(--glow-soft)}
body.crt .vignette{border-radius:14px}

.reticle-hud{position:absolute;top:6px;left:8px;z-index:7;color:var(--accent2);font-size:13px;background:rgba(0,0,0,.55);
  padding:2px 6px;border:1px solid var(--border2);text-shadow:0 0 6px currentColor;pointer-events:none}

/* ---- minimap radar ---- */
.minimap{position:absolute;right:8px;bottom:8px;z-index:8;border:1px solid var(--border);background:#000;padding:3px 3px 0;
  box-shadow:0 0 14px var(--glow-soft);cursor:crosshair}
.minimap canvas{display:block;image-rendering:pixelated;width:170px;height:auto;max-height:170px}
.minimap-cap{text-align:center;color:var(--accent);font-size:9px;letter-spacing:.18em;padding:1px 0 2px}

/* ---- status + ticker ---- */
.terminal-status{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--border);background:#020702}
.terminal-status pre{margin:0;min-height:52px;max-height:86px;overflow:auto;padding:8px 10px;white-space:pre-wrap;
  color:var(--fg-bright);border-right:1px solid var(--border2);font-size:13px;line-height:1.4}
.terminal-status pre:last-child{border-right:0;color:var(--accent)}
.ticker{border-top:1px solid var(--border);background:#000;overflow:hidden;height:24px;display:flex;align-items:center}
.ticker-track{white-space:nowrap;color:var(--accent2);font-size:13px;text-shadow:0 0 6px currentColor;will-change:transform;animation:tick 38s linear infinite;padding-left:100%}
@keyframes tick{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}

/* ---- info panels ---- */
.info-grid{min-height:0;display:grid;grid-template-columns:minmax(280px,1fr) minmax(420px,2fr);gap:8px}
.panel{min-height:0;overflow:auto;border:1px solid var(--border);background:linear-gradient(180deg,#030803,#000);padding:9px;
  box-shadow:0 0 22px var(--glow-soft) inset}
.panel h2{margin:0 0 8px;color:var(--accent);font-size:13px;letter-spacing:.08em;text-transform:uppercase;
  text-shadow:0 0 8px var(--glow-soft)}
.legend-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:6px}
.legend-item,.plan-item{display:grid;gap:7px;border:1px solid var(--border2);background:#000;padding:7px;color:var(--fg-bright);font-size:13px;line-height:1.3}
.legend-item{grid-template-columns:58px 1fr}
.plan-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:6px}
.plan-item{grid-template-columns:120px 60px 1fr}
.glyph{color:#fff;text-align:center;font-weight:bold;text-shadow:0 0 8px currentColor;font-size:17px}
.plan-item b{color:var(--fg);font-weight:normal}
.muted{color:var(--fg-dim)}.hide{display:none!important}

/* ---- help overlay ---- */
.help{position:fixed;inset:0;z-index:120;background:rgba(0,0,0,.78);display:flex;align-items:center;justify-content:center}
.help-card{width:min(640px,92vw);border:1px solid var(--fg);background:#020802;padding:18px 20px;
  box-shadow:0 0 30px var(--glow-soft),0 0 0 1px #001900 inset}
.help-card h2{margin:0 0 14px;color:var(--accent);letter-spacing:.08em;text-shadow:0 0 8px var(--glow-soft)}
.help-cols{display:grid;grid-template-columns:1fr 1fr;gap:8px 22px;color:var(--fg-bright);font-size:13px}
.help-cols b{color:var(--accent2);display:inline-block;min-width:64px}
#helpClose{margin-top:18px}

@media(max-width:980px){
  .df-page{grid-template-rows:auto auto minmax(0,1fr) 200px}
  .df-top{grid-template-columns:1fr}.top-readout{grid-template-columns:repeat(3,1fr);min-width:0}.top-readout span{text-align:left}
  .info-grid{grid-template-columns:1fr}.plan{display:none}.terminal-status{grid-template-columns:1fr}
}
