/* =============================================================================
 * retro.css — TACTICAL-OS 96. A Windows-9x-style desktop + late-90s GeoCities
 * page styling for the app windows. Original homage (no MS trademarks/assets).
 * ===========================================================================*/
*{box-sizing:border-box}
:root{
  --face:#c0c0c0; --face-d:#9a9a9a; --hi:#ffffff; --sh:#808080; --dk:#000;
  --desk:#0a8a8a; --title:#000080; --title2:#1084d0; --title-i:#808080;
  --sans:"MS Sans Serif", Tahoma, "Segoe UI", system-ui, sans-serif;
  --mono:"Courier New", monospace;
}
html,body{height:100%}
body{margin:0;font-family:var(--sans);font-size:12px;color:#000;background:var(--desk);overflow:hidden;
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
/* drag/resize handles + chrome must not start a text selection or scroll on touch */
.win .tbar,.win .grip,.win .rz,.dicon,#taskbar,#startbtn,#startmenu,#mascot,#tray{touch-action:none;-webkit-user-select:none;user-select:none}

/* ---------- bevels ---------- */
.raised{border:2px solid;border-color:var(--hi) var(--sh) var(--sh) var(--hi);background:var(--face)}
.sunken{border:2px solid;border-color:var(--sh) var(--hi) var(--hi) var(--sh);background:#fff}

/* ---------- BOOT ---------- */
#boot{position:fixed;inset:0;z-index:9999;background:#000;color:#cfcfcf;font-family:var(--mono);font-size:15px;padding:28px;cursor:pointer;overflow:hidden}
#bootgun{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
#boot pre{margin:0;white-space:pre-wrap;position:relative;z-index:1}
#boot .cur{background:#cfcfcf;color:#000}
/* OS message + loading bar live at the bottom of the boot screen, under the rifle */
#bootos{position:absolute;left:0;right:0;bottom:7vh;z-index:1;display:flex;flex-direction:column;align-items:center;gap:13px;pointer-events:none}
#bootos .logo{font-family:var(--sans);font-weight:800;font-size:42px;color:#fff;text-shadow:2px 2px 0 #000,0 0 18px #00000080;letter-spacing:1px}
#bootos .logo b{color:#ff3b3b}
#bootos .sub{font-family:var(--mono);color:#d7fffb;font-size:12px;letter-spacing:3px;text-shadow:0 1px 3px #000}
#bootos .pbar{width:min(360px,80vw);height:20px;background:#c0c0c0;border:2px solid;border-color:#808080 #fff #fff #808080;padding:2px}
#bootos .pbar i{display:block;height:100%;width:0;background:repeating-linear-gradient(90deg,#000080 0 14px,#1084d0 14px 16px);transition:width .12s linear}

/* ---------- DESKTOP ---------- */
/* the orca poster minus the orca: horizontal sunset stripe bands on black,
   teal -> red -> orange -> gold, as thin venetian-blind bars */
#desktop{position:fixed;inset:0 0 34px 0;overflow:hidden;background:#000;
  background-image:
    repeating-linear-gradient(180deg,transparent 0 7px,#000 7px 22px),
    linear-gradient(180deg,rgba(31,138,153,.42) 0%,rgba(31,138,153,.42) 28%,rgba(255,59,59,.42) 42%,rgba(255,59,59,.42) 60%,rgba(244,162,97,.42) 76%,rgba(255,209,102,.42) 100%)}
/* gentle vignette so icon labels stay legible over the stripes */
#desktop::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(130% 130% at 50% 40%,transparent 40%,#000a)}

/* ---------- WILD HYPE BANNERS (ported from JARS, reskinned) ---------- */
#bg-banners{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0;
  transform:rotate(-4deg) scale(1.18);mix-blend-mode:screen}
.bg-row{position:absolute;left:0;right:0;white-space:nowrap}
.bg-row__track{display:inline-flex;white-space:nowrap;font-family:var(--sans);font-weight:900;font-style:italic;
  -webkit-text-stroke:2px #000;color:#ffe600;text-shadow:4px 4px 0 #ff2d2d;
  animation:scroll-x 18s linear infinite;will-change:transform}
.bg-row.rev .bg-row__track{animation-direction:reverse;color:#00e5ff;text-shadow:4px 4px 0 #ff2d2d}
@keyframes scroll-x{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){.bg-row__track{animation-duration:60s!important}}
.dicon{position:absolute;z-index:2;width:88px;text-align:center;color:#fff;cursor:pointer;padding:6px 2px;border:1px dotted transparent}
.dicon:hover{background:#0000ff22}
.dicon.sel{background:#0000ff44;border:1px dotted #fff}
.dicon .gi{font-size:34px;line-height:40px;filter:drop-shadow(1px 1px 0 #0006)}
.dicon .lbl{font-size:11px;text-shadow:1px 1px 0 #000;margin-top:2px;word-wrap:break-word}

/* ---------- WINDOWS ---------- */
.win{position:absolute;min-width:240px;min-height:120px;background:var(--face);border:2px solid;
  border-color:var(--hi) var(--sh) var(--sh) var(--hi);box-shadow:2px 2px 0 #00000040;display:flex;flex-direction:column}
.win.max{left:0!important;top:0!important;width:100%!important;height:100%!important}
.win .tbar{display:flex;align-items:center;gap:5px;height:22px;padding:0 3px 0 5px;
  background:linear-gradient(90deg,var(--title),var(--title2));color:#fff;font-weight:700;cursor:default;flex:none}
.win.blur .tbar{background:linear-gradient(90deg,#808080,#b5b5b5)}
.win .tbar .ti{font-size:13px}
.win .tbar .tt{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:.3px}
.win .tbar .tb{width:18px;height:16px;display:grid;place-items:center;font-size:11px;font-weight:800;color:#000;
  background:var(--face);border:2px solid;border-color:var(--hi) var(--sh) var(--sh) var(--hi);cursor:pointer;line-height:1}
.win .tbar .tb:active{border-color:var(--sh) var(--hi) var(--hi) var(--sh)}
.win .wbody{flex:1;margin:3px;border:2px solid;border-color:var(--sh) var(--hi) var(--hi) var(--sh);background:#fff;overflow:auto;position:relative}
.win .wbody.plain{background:var(--face);border:0;margin:0;padding:0}
.win iframe{width:100%;height:100%;border:0;display:block;background:#000}
/* corner resize handles — subtle glowing red triangles tucked in each corner.
   the box is the (invisible) grab zone; the ::after is the visual triangle. */
.win .grip,.win .rz.ne,.win .rz.nw,.win .rz.sw{position:absolute;z-index:8;width:20px;height:20px;background:none}
.win .grip{right:0;bottom:0;cursor:nwse-resize}
.win .rz.ne{top:0;right:0;cursor:nesw-resize}
.win .rz.nw{top:0;left:0;cursor:nwse-resize}
.win .rz.sw{bottom:0;left:0;cursor:nesw-resize}
.win .grip::after,.win .rz.ne::after,.win .rz.nw::after,.win .rz.sw::after{
  content:"";position:absolute;width:11px;height:11px;background:#ff3b3b;opacity:.55;filter:drop-shadow(0 0 2.5px #ff3b3b)}
.win .grip::after{right:1px;bottom:1px;clip-path:polygon(100% 0,100% 100%,0 100%)}
.win .rz.ne::after{right:1px;top:1px;clip-path:polygon(0 0,100% 0,100% 100%)}
.win .rz.nw::after{left:1px;top:1px;clip-path:polygon(0 0,100% 0,0 100%)}
.win .rz.sw::after{left:1px;bottom:1px;clip-path:polygon(0 0,0 100%,100% 100%)}
/* invisible edge grab zones — resize by dragging any edge */
.win .rz{position:absolute;z-index:7}
.win .rz.n{top:-4px;left:14px;right:14px;height:9px;cursor:ns-resize}
.win .rz.s{bottom:-4px;left:14px;right:14px;height:9px;cursor:ns-resize}
.win .rz.e{right:-4px;top:40px;bottom:14px;width:9px;cursor:ew-resize}
.win .rz.w{left:-4px;top:40px;bottom:14px;width:9px;cursor:ew-resize}
/* fat touch targets on phones */
@media (pointer:coarse){
  /* same red-triangle handles, just a bigger invisible grab zone for thumbs */
  .win .grip,.win .rz.ne,.win .rz.nw,.win .rz.sw{width:30px;height:30px}
  .win .grip::after,.win .rz.ne::after,.win .rz.nw::after,.win .rz.sw::after{width:13px;height:13px}
  .win .rz.n,.win .rz.s{height:16px}.win .rz.e,.win .rz.w{width:16px}
  /* fat, tappable titlebar buttons (min / maximize / close) */
  .win .tbar{height:36px;gap:7px;padding:0 5px 0 7px}
  .win .tbar .ti{font-size:17px}
  .win .tbar .tt{font-size:13px}
  .win .tbar .tb{width:32px;height:28px;font-size:16px}
}
/* while dragging/resizing, shield iframes so they don't swallow pointer events */
body.wm-drag .win iframe{pointer-events:none}
body.wm-drag{cursor:default}

/* ---------- TASKBAR ---------- */
#taskbar{position:fixed;left:0;right:0;bottom:0;height:34px;z-index:500;display:flex;align-items:center;gap:5px;padding:3px 4px;
  background:var(--face);border-top:2px solid var(--hi)}
#startbtn{display:flex;align-items:center;gap:6px;height:26px;padding:0 9px;font-weight:800;cursor:pointer;
  background:var(--face);border:2px solid;border-color:var(--hi) var(--sh) var(--sh) var(--hi)}
#startbtn.on{border-color:var(--sh) var(--hi) var(--hi) var(--sh)}
#startbtn .htm{font-weight:800;font-size:12px;color:#fff;background:linear-gradient(135deg,#ff3b3b,#7e1414);padding:2px 5px;border-radius:2px}
#tasks{flex:1;display:flex;gap:4px;overflow:hidden}
#tasks .task{min-width:120px;max-width:170px;height:26px;display:flex;align-items:center;gap:5px;padding:0 7px;cursor:pointer;
  font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:var(--face);border:2px solid;border-color:var(--hi) var(--sh) var(--sh) var(--hi)}
#tasks .task.active{border-color:var(--sh) var(--hi) var(--hi) var(--sh);background:#dedede;font-weight:700}
#tray{display:flex;align-items:center;gap:8px;height:26px;padding:0 10px;border:2px solid;border-color:var(--sh) var(--hi) var(--hi) var(--sh)}
#tray .clk{font-size:11px}
#tray .cd{font-family:var(--mono);font-size:11px;color:#a00000;font-weight:700}
#tray .d3{cursor:pointer;font-weight:800;font-size:11px;color:#777;border:1px solid #9a9a9a;border-radius:3px;padding:1px 6px;letter-spacing:1px}
#tray .d3.on{color:#fff;background:linear-gradient(90deg,#ff2d2d 0 50%,#2d8bff 50% 100%);border-color:#fff}

/* ---------- START MENU ---------- */
#startmenu{position:fixed;left:4px;bottom:36px;z-index:600;width:230px;display:none;background:var(--face);
  border:2px solid;border-color:var(--hi) var(--sh) var(--sh) var(--hi);box-shadow:2px 2px 0 #00000040}
#startmenu.on{display:flex}
#startmenu .rail{width:30px;background:linear-gradient(180deg,#1084d0,#000080);writing-mode:vertical-rl;transform:rotate(180deg);
  color:#fff;font-weight:800;font-size:18px;text-align:center;padding:10px 0;letter-spacing:2px}
#startmenu .items{flex:1;padding:3px}
#startmenu .mi{display:flex;align-items:center;gap:9px;padding:6px 8px;cursor:pointer;font-size:13px}
#startmenu .mi:hover{background:var(--title);color:#fff}
#startmenu .mi .gi{font-size:20px;width:24px;text-align:center}
#startmenu .sep{height:0;border-top:1px solid var(--sh);border-bottom:1px solid var(--hi);margin:3px 2px}

/* ---------- ORCA mascot (bottom-right buddy) ---------- */
#mascot{position:fixed;right:14px;bottom:44px;z-index:450;width:96px;cursor:pointer;user-select:none;
  display:flex;flex-direction:column;align-items:flex-end;gap:6px}
#mascot .orca{width:84px;height:84px;object-fit:cover;background:#000;
  border:2px solid;border-color:#fff #808080 #808080 #fff;box-shadow:2px 2px 0 #00000055,0 4px 10px #0007;
  animation:orca-bob 3.4s ease-in-out infinite;pointer-events:none}
#mascot:hover .orca{animation-duration:1.1s}
@keyframes orca-bob{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-7px) rotate(2deg)}}
#mascot .bubble{position:absolute;right:84px;bottom:46px;max-width:230px;
  background:#fffbe6;color:#000;border:2px solid;border-color:#fff #808080 #808080 #fff;
  box-shadow:2px 2px 0 #00000040;padding:8px 11px;font-size:12px;line-height:1.4;
  opacity:0;transform:translateY(6px) scale(.96);transition:.18s;pointer-events:none}
#mascot .bubble.on{opacity:1;transform:translateY(0) scale(1)}
#mascot .bubble::after{content:"";position:absolute;right:-9px;bottom:12px;border:7px solid transparent;border-left-color:#fffbe6}
#mascot .bubble b{color:#a00000}

/* ---------- buttons / form (retro) ---------- */
.btn{font-family:var(--sans);font-size:12px;padding:4px 12px;cursor:pointer;background:var(--face);
  border:2px solid;border-color:var(--hi) var(--sh) var(--sh) var(--hi)}
.btn:active{border-color:var(--sh) var(--hi) var(--hi) var(--sh)}
.field{font-family:var(--sans);font-size:12px;padding:3px 5px;border:2px solid;border-color:var(--sh) var(--hi) var(--hi) var(--sh);background:#fff}

/* ============================================================================
 * GEOCITIES page styling (the hoff96 reference) — used inside app windows
 * ==========================================================================*/
.geo{background:#000;color:#fff;font-family:var(--sans);font-size:13px;min-height:100%}
.geo a{color:#ffff66}
.rainbow{padding:3px;background:linear-gradient(90deg,#ff0040,#ff8a00,#ffe600,#33ff66,#00e5ff,#b56cff,#ff0040);
  background-size:300% 100%;animation:rb 6s linear infinite}
@keyframes rb{to{background-position:300% 0}}
.geo-inner{background:#101018;border:2px solid #000}
.geo-head{display:flex;gap:10px;align-items:center;padding:10px;background:radial-gradient(120% 140% at 0% 0%,#3a2150,#0a0a14)}
.geo-mark{font-family:var(--sans);font-weight:800;font-size:13px;color:#fff;background:linear-gradient(135deg,#ff3b3b,#7e1414);padding:8px 10px;border-radius:4px;text-align:center;line-height:1.1}
.geo-mark small{display:block;font-size:8px;color:#ffd}
.geo-h1{font-size:30px;font-weight:800;color:#ffe600;text-shadow:2px 2px 0 #c0392b}
.geo-h1 b{color:#00e5ff}
.geo-tag{color:#7fff9f;font-size:12px}
.geo-nav{display:flex;flex-wrap:wrap;gap:3px;padding:5px;background:#1b1b2e}
.geo-nav a{display:block;padding:4px 12px;color:#fff;text-decoration:none;font-weight:700;font-size:12px;
  background:#202048;border:2px solid;border-color:#5a5a9a #101028 #101028 #5a5a9a}
.geo-nav a:hover{background:#ff3b3b}
.geo-marquee{overflow:hidden;white-space:nowrap;background:#000080;color:#ffe600;font-weight:700;padding:4px 0;border-top:1px solid #00f;border-bottom:1px solid #00f}
.geo-marquee b{display:inline-block;padding-left:100%;animation:mq 14s linear infinite}
@keyframes mq{to{transform:translateX(-100%)}}
.geo-cols{display:grid;grid-template-columns:150px 1fr;gap:10px;padding:10px}
.geo-side .box{border:2px solid #5a5a9a;margin-bottom:10px;background:#0c0c18}
.geo-side .bt{background:#000080;color:#ffe600;font-weight:700;font-size:11px;padding:3px 6px;text-align:center}
.geo-side .bc{padding:7px;font-size:11px;color:#cfe;text-align:center}
.uc{background:repeating-linear-gradient(45deg,#000 0 10px,#ffd400 10px 20px);height:16px;margin:6px 0;border:1px solid #fff}
.blink{animation:bl 1s steps(1) infinite}@keyframes bl{50%{opacity:0}}
.geo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.kit{border:3px solid;border-color:#7a7aff #202048 #202048 #7a7aff;background:#16162a;padding:8px;text-align:center}
.kit .kimg{height:74px;display:grid;place-items:center;background:#000;border:1px solid #444;margin-bottom:6px;font-size:34px}
.kit .knm{color:#ffe600;font-weight:800;font-size:14px;text-shadow:1px 1px 0 #c0392b}
.kit .kpr{color:#7fff9f;font-size:12px;margin:2px 0 6px}
.kit .kb{display:inline-block;padding:4px 10px;color:#fff;font-weight:800;font-size:11px;cursor:pointer;text-decoration:none;
  background:linear-gradient(#ff5a5a,#b3160f);border:2px solid;border-color:#ff9b9b #5e0a06 #5e0a06 #ff9b9b}
.kit .kb:active{border-color:#5e0a06 #ff9b9b #ff9b9b #5e0a06}
.fire{height:18px;margin:8px 0;background:repeating-linear-gradient(90deg,#ff3b00,#ffd400 8px,#ff3b00 16px);
  -webkit-mask:repeating-linear-gradient(90deg,#000 0 6px,transparent 6px 12px);mask:repeating-linear-gradient(90deg,#000 0 6px,transparent 6px 12px)}
.geo-deals{text-align:center;color:#ffe600;font-weight:800;font-size:18px;text-shadow:2px 2px 0 #c0392b;padding:6px}
.geo-foot{padding:10px;font-size:11px;color:#9ad;text-align:center;background:#0c0c18;border-top:2px solid #5a5a9a}
.counter{display:inline-flex;gap:2px;margin:6px 0}
.counter span{background:#000;color:#33ff66;font-family:var(--mono);font-weight:700;padding:2px 4px;border:1px solid #0f0}
.badge{display:inline-block;font-size:9px;padding:3px 5px;margin:2px;border:1px solid #888;background:#202048;color:#cfe}
.star{color:#ffe600}
