/* ICEBREAKERS (pages/ice.js): full screen, a tilted plane with depth layers, like the dial.
   Hackers = --ic-h (the player's dye, never gold); Radiant Genesis = gold #ffc94d; its fighters are red. */
:root{--ic-h:#39ff14;--ic-g:#ffc94d;--ic-k:#ff3b5c}
body.ic-on{overflow:hidden}
body.ic-on #main{min-height:0}
body.ic-on #ghostLog{display:none!important}
.ic-sentinel{height:0}
.ic-view{position:fixed;inset:0;z-index:5;overflow:hidden;perspective:1000px;perspective-origin:50% 42%;touch-action:none;user-select:none;-webkit-user-select:none;
  background:radial-gradient(ellipse 80% 60% at 50% 45%,#12100d 0%,#0a0908 70%,#050404 100%);cursor:grab}
.ic-view:active{cursor:grabbing}
.ic-stage{position:absolute;left:50%;top:50%;transform-origin:50% 50%;transform-style:preserve-3d;will-change:transform}
.ic-cv{position:absolute;left:0;top:0;display:block;pointer-events:none}
.ic-ov{position:absolute;left:0;top:0;pointer-events:none}

.ic-hud{position:fixed;inset:0;z-index:7;pointer-events:none;color:#ebe2cf;font-family:var(--mono,"IBM Plex Mono",monospace)}
.ic-hud button{pointer-events:auto;font-family:inherit;cursor:pointer}
/* the one small panel: share of the map, DATA, SQUAD, NARC, camera */
.ic-panel{position:absolute;left:8px;bottom:calc(94px + var(--safe-b,0px));width:262px;padding:6px 7px 5px;background:rgba(10,9,8,.86);border:1px solid rgba(235,226,207,.1);pointer-events:auto}
body.fl-dock .ic-panel{bottom:calc(118px + var(--safe-b,0px))}
.ic-own{display:flex;align-items:center;gap:6px}
.ic-own b{font:800 11px/1 var(--mono,monospace);min-width:30px}
.ic-own b.h{color:var(--ic-h)}.ic-own b.r{color:var(--ic-g);text-align:right}
.ic-tug{flex:1;display:flex;height:5px;background:#1a1916;overflow:hidden;gap:1px}
.ic-tug i{display:block;flex:1 1 0;transition:flex-grow .8s}
.ic-tug .h{background:var(--ic-h)}.ic-tug .n{background:rgba(138,133,120,.25)}.ic-tug .r{background:var(--ic-g)}
.ic-row{display:flex;align-items:stretch;gap:4px;margin-top:6px}
.ic-data{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;line-height:1}
.ic-data b{font:900 15px/1 var(--ui,"Archivo",sans-serif);color:var(--ic-h);white-space:nowrap}
.ic-data small{font-size:7px;letter-spacing:.2em;color:rgba(235,226,207,.4);margin-top:2px}
.ic-hire,.ic-narc{padding:0 7px;min-height:34px;font-size:10px;font-weight:800;letter-spacing:.08em;white-space:nowrap}
.ic-hire i,.ic-narc i{font-style:normal;font-weight:500;opacity:.7;margin-left:2px}
.ic-hire{border:1.5px solid var(--ic-h);background:color-mix(in srgb,var(--ic-h) 18%,#0c0b09);color:var(--ic-h)}
.ic-narc{border:1.5px solid var(--ic-k);background:rgba(255,59,92,.12);color:#ff6b7c}
.ic-hire:active,.ic-narc:active{transform:translateY(1px)}
.ic-hire.off,.ic-narc.off{opacity:.4}
.ic-cam{display:grid;grid-template-columns:repeat(8,1fr);gap:2px;margin-top:5px}
.ic-cam button{height:24px;padding:0;border:1px solid rgba(235,226,207,.14);background:rgba(20,18,15,.9);color:rgba(235,226,207,.8);font-size:12px}
.ic-cam button:active{background:rgba(235,226,207,.16)}
.ic-cnt{margin-top:4px;font-size:8px;letter-spacing:.08em;color:rgba(235,226,207,.3);white-space:pre}
.ic-data.ic-no,.ic-no{animation:ic-no .5s}
@keyframes ic-no{20%,60%{transform:translateX(-4px)}40%,80%{transform:translateX(4px)}}
.ic-emp{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:4px;min-height:28px;padding:0 8px;border:1.5px solid #9fd8ff;background:rgba(120,190,255,.12);color:#cfe8ff;font-size:10px;font-weight:800;letter-spacing:.1em}
.ic-emp i{font-style:normal;font-weight:500;opacity:.75}
.ic-emp.off{opacity:.4}
.ic-cam{grid-template-columns:repeat(10,1fr)!important}
/* the minimap (top right) and the thumbstick (bottom right) */
.ic-mini{position:absolute;right:8px;top:calc(var(--top) + var(--safe-t) + var(--tick) + 46px);border:1px solid rgba(235,226,207,.14);pointer-events:auto;cursor:crosshair}
.ic-stick{position:absolute;right:12px;bottom:calc(100px + var(--safe-b,0px));width:74px;height:74px;border-radius:50%;pointer-events:auto;touch-action:none;cursor:grab;
  background:radial-gradient(circle,rgba(235,226,207,.07) 0 30%,rgba(10,9,8,.8) 31%);border:1px solid rgba(235,226,207,.25)}
body.fl-dock .ic-stick{bottom:calc(124px + var(--safe-b,0px))}
.ic-stick::before{content:"";position:absolute;inset:9px;border-radius:50%;border:1px dashed rgba(235,226,207,.18)}
.ic-stick i{position:absolute;left:50%;top:50%;width:24px;height:24px;margin:-12px 0 0 -12px;border-radius:50%;background:#ebe2cf;box-shadow:0 0 10px rgba(235,226,207,.4);transition:transform .15s}
.ic-stick.on i{transition:none;background:var(--ic-h)}
.ic-ups.one{grid-template-columns:1fr}
/* the running log: tiny and dark */
.ic-log{position:absolute;left:10px;bottom:calc(94px + 150px + var(--safe-b,0px));width:min(320px,70vw);list-style:none;margin:0;padding:0;font-size:8px;line-height:11px;pointer-events:none}
body.fl-dock .ic-log{bottom:calc(118px + 150px + var(--safe-b,0px))}
.ic-log li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgba(235,226,207,.28)}
.ic-log li:first-child{color:rgba(235,226,207,.5)}
.ic-log li time{margin-right:5px;color:rgba(235,226,207,.2)}
/* victory / defeat */
.ic-splash{position:absolute;left:0;right:0;top:36%;text-align:center;pointer-events:none;animation:ic-sp 4.2s ease-out both}
.ic-splash b{display:block;font:900 clamp(26px,7vw,54px)/1 var(--ui,"Archivo",sans-serif);letter-spacing:.04em}
.ic-splash i{display:block;margin-top:8px;font-style:normal;font-size:11px;letter-spacing:.3em;color:rgba(235,226,207,.7)}
.ic-splash em{display:inline-block;margin-top:18px;font-style:normal;font-size:12px;letter-spacing:.34em;padding:6px 12px;border:1px solid currentColor;animation:ic-blink .6s steps(2) 5}
.ic-splash.win b,.ic-splash.win em{color:var(--ic-h);text-shadow:0 0 24px var(--ic-h)}
.ic-splash.lose b,.ic-splash.lose em{color:var(--ic-k);text-shadow:0 0 24px var(--ic-k)}
.ic-splash::before{content:"";position:absolute;left:0;right:0;top:-40px;bottom:-40px;background:linear-gradient(90deg,transparent,rgba(5,4,3,.85) 20%,rgba(5,4,3,.85) 80%,transparent);z-index:-1}
@keyframes ic-sp{0%{opacity:0;transform:scale(1.3)}10%{opacity:1;transform:scale(1)}85%{opacity:1}100%{opacity:0}}
@keyframes ic-blink{50%{opacity:.2}}
.ic-away{position:absolute;left:50%;top:calc(var(--top) + var(--safe-t) + var(--tick) + 60px);transform:translateX(-50%);width:min(420px,calc(100vw - 24px));padding:8px 11px;
  background:rgba(12,11,9,.92);border-left:3px solid var(--ic-h);font-size:10px;letter-spacing:.06em;line-height:1.5}
.ic-away b{display:block;color:var(--ic-h);letter-spacing:.2em;font-size:9px;margin-bottom:2px}
/* the card over the file you tapped */
.ic-pop{position:absolute;left:0;top:0;width:min(270px,calc(100vw - 70px));padding:10px 11px 11px;background:rgba(12,11,9,.95);border:1px solid rgba(235,226,207,.25);
  border-top:3px solid var(--ic-h);pointer-events:auto;box-shadow:0 10px 30px rgba(0,0,0,.6);will-change:transform}
.ic-pop::after{content:"";position:absolute;left:50%;bottom:-7px;width:12px;height:12px;margin-left:-6px;background:rgba(12,11,9,.95);border-right:1px solid rgba(235,226,207,.25);border-bottom:1px solid rgba(235,226,207,.25);transform:rotate(45deg)}
.ic-x{position:absolute;right:4px;top:4px;width:30px;height:30px;border:0;background:none;color:rgba(235,226,207,.7);font-size:14px}
.ic-pn{padding-right:28px}
.ic-pn b{display:block;font-size:14px;letter-spacing:.02em;word-break:break-all}
.ic-pn span{font-size:8px;letter-spacing:.2em}
.ic-pn .o-h{color:var(--ic-h)}.ic-pn .o-r{color:var(--ic-g)}.ic-pn .o-n{color:rgba(235,226,207,.5)}
.ic-ps{margin:5px 0 0;font-size:9px;letter-spacing:.06em;color:rgba(235,226,207,.65);line-height:1.4}
.ic-ups{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:9px}
.ic-up{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 8px 7px;min-height:84px;border:1.5px solid var(--ic-h);background:color-mix(in srgb,var(--ic-h) 14%,#0c0b09);color:var(--ic-h);text-align:left}
.ic-up b{font-size:13px;letter-spacing:.1em}
.ic-up .pips{font-size:11px;letter-spacing:.1em}
.ic-up small{font-size:8px;line-height:1.3;color:rgba(235,226,207,.65);letter-spacing:.02em}
.ic-up i{margin-top:auto;font-style:normal;font-size:9px;font-weight:700;color:#0c0b09;background:var(--ic-h);padding:2px 5px;letter-spacing:.08em}
.ic-up.off{opacity:.5}.ic-up.off i{background:rgba(235,226,207,.4)}
.ic-up.max{border-color:rgba(235,226,207,.3);color:rgba(235,226,207,.6);background:rgba(12,11,9,.9)}.ic-up.max i{background:rgba(235,226,207,.3)}
.ic-pnote{margin-top:7px;font-size:9px;color:rgba(235,226,207,.55)}
.ic-go{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:7px;min-height:44px;padding:0 10px;border:1.5px solid var(--ic-h);background:color-mix(in srgb,var(--ic-h) 18%,#0c0b09);color:var(--ic-h);font-size:12px;letter-spacing:.1em}
.ic-go i{font-style:normal;font-size:9px;color:#ebe2cf}
.ic-go.off{opacity:.5}
@media (max-width:560px){.ic-panel{width:236px}.ic-data b{font-size:14px}.ic-hire,.ic-narc{padding:0 5px;font-size:9px}}
/* round 53: send a chosen unit type at a node you don't hold */
.ic-send{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:4px;margin-top:6px;max-width:320px}
.ic-send button{display:flex;flex-direction:column;align-items:flex-start;gap:1px;padding:5px 7px;border:1px solid var(--ic-h);background:color-mix(in srgb,var(--ic-h) 10%,#0c0b09);color:var(--ic-h);text-align:left;line-height:1.15;cursor:pointer;pointer-events:auto;font-family:inherit}
.ic-send button:active{background:color-mix(in srgb,var(--ic-h) 28%,#0c0b09)}
.ic-send b{font-size:10px;font-weight:800;letter-spacing:.08em;white-space:nowrap}
.ic-send small{font-size:7.5px;color:rgba(235,226,207,.55);letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.ic-send i{font-style:normal;font-size:8px;color:#ebe2cf;opacity:.8;letter-spacing:.1em}
.ic-send button.off{opacity:.4}
/* the node card and the minimap share the top-right corner: the card wins */
.ic-hud:has(#icPop:not([hidden])) .ic-mini{opacity:0;pointer-events:none}
/* round 55: population and packet loss, in a slim line under DATA */
.ic-meta{display:flex;align-items:center;gap:8px;margin:5px 0 6px;font-size:8px;letter-spacing:.14em;color:rgba(235,226,207,.45);white-space:nowrap}
.ic-meta b{font-weight:700;letter-spacing:.04em;font-size:11px;color:#ebe2cf}
.ic-pbar{flex:1;min-width:30px;height:4px;background:rgba(235,226,207,.12);overflow:hidden}
.ic-pbar i{display:block;height:100%;width:0;background:var(--ic-h);transition:width .4s}
.ic-pw.full b{color:var(--ic-k)}
.ic-meta:has(.ic-pw.full) .ic-pbar i{background:var(--ic-k)}
.ic-loss b{color:#ff9a6b}
/* round 56: the battle results card (stays until NEXT SHELL) */
.ic-splash.ic-res{animation:ic-rin .5s ease-out both;pointer-events:auto;top:50%;left:50%;right:auto;transform:translate(-50%,-50%);width:min(420px,calc(100vw - 24px));
  padding:18px 18px 16px;background:rgba(8,7,6,.94);border:1px solid rgba(235,226,207,.14);border-top:3px solid currentColor;z-index:9}
.ic-splash.ic-res::before{display:none}
.ic-splash.ic-res.win{color:var(--ic-h)}.ic-splash.ic-res.lose{color:var(--ic-k)}
.ic-splash.ic-res b{font-size:clamp(22px,6vw,34px)}
.ic-splash.ic-res i{letter-spacing:.14em;font-size:9.5px;line-height:1.5}
.ic-rgrid{display:grid;grid-template-columns:1fr 1fr;gap:3px 16px;margin:14px 0 10px;text-align:left}
.ic-rgrid h6{grid-column:1/-1;margin:8px 0 2px;font:600 8px/1 var(--mono,"IBM Plex Mono",monospace);letter-spacing:.3em;color:rgba(235,226,207,.4);border-bottom:1px solid rgba(235,226,207,.1);padding-bottom:4px}
.ic-rgrid div{display:flex;justify-content:space-between;gap:8px;font-size:10px;color:rgba(235,226,207,.65)}
.ic-rgrid div b{font:700 12px/1.2 var(--mono,"IBM Plex Mono",monospace)!important;color:#ebe2cf;text-shadow:none!important;letter-spacing:0}
.ic-rgrid div.g b{color:var(--ic-h)}.ic-rgrid div.l b{color:#ff8a6b}
.ic-splash.ic-res small{display:block;font-size:9px;letter-spacing:.1em;color:rgba(235,226,207,.45);margin-bottom:10px}
.ic-splash.ic-res button{font:800 12px/1 var(--mono,"IBM Plex Mono",monospace);letter-spacing:.3em;padding:9px 16px;border:1.5px solid currentColor;background:transparent;color:inherit;cursor:pointer}
@keyframes ic-rin{from{opacity:0;transform:translate(-50%,-46%)}to{opacity:1;transform:translate(-50%,-50%)}}
/* self-destruct */
.ic-up.ic-sd{border-color:var(--ic-k);color:#ff6b7c}
.ic-up.ic-sd.armed{background:rgba(255,59,92,.18);animation:ic-sdp 1.2s ease-in-out infinite}
@keyframes ic-sdp{50%{box-shadow:0 0 16px rgba(255,59,92,.75)}}
.ic-splash.ic-res .ic-rgrid div b{color:#ebe2cf;white-space:nowrap}
.ic-splash.ic-res .ic-rgrid div.g b{color:var(--ic-h)}
.ic-splash.ic-res .ic-rgrid div.l b{color:#ff8a6b}
.ic-rgrid div span{min-width:0}
@media (max-width:420px){.ic-rgrid{grid-template-columns:1fr;gap:3px}}
/* round 57: unit-node spawn timer on the card; crews next to UNITS */
.ic-next{margin-top:6px;font-size:9px;letter-spacing:.08em;color:#ebe2cf}
.ic-next span{display:block;margin-bottom:3px}
.ic-next i{display:block;height:3px;background:rgba(235,226,207,.12);overflow:hidden}
.ic-next b{display:block;height:100%;width:0;background:var(--ic-h);transition:width .3s linear}
#icCrew{font-style:normal;font-size:8px;letter-spacing:.06em;color:rgba(235,226,207,.5);margin-left:3px}
/* round 58: fast lane button, turret rebuild */
.ic-up.ic-fast{border-color:#9fe6ff;color:#cff3ff;background:rgba(120,210,255,.1)}
.ic-up.ic-reb{border-color:#999;color:#ddd;background:rgba(255,255,255,.05)}
.ic-up.ic-reb:not(.off){border-color:var(--ic-h);color:var(--ic-h)}
/* round 59: NEW BREACH next to the counts */
.ic-foot{display:flex;align-items:center;justify-content:space-between;gap:8px}
.ic-newb{pointer-events:auto;font:700 8px/1 var(--mono,"IBM Plex Mono",monospace);letter-spacing:.18em;padding:5px 8px;border:1px solid rgba(255,59,92,.45);background:transparent;color:#ff8a9a;cursor:pointer;white-space:nowrap}
.ic-newb.arm{background:rgba(255,59,92,.22);border-color:var(--ic-k);color:#fff}
@media (max-width:560px){.ic-meta{gap:5px;letter-spacing:.05em}.ic-pbar{min-width:14px}#icCrew{margin-left:1px}}
/* round 64: ROOT base slots and the build picker */
.ic-bh{margin:10px 0 5px;font-size:8px;letter-spacing:.24em;color:rgba(235,226,207,.55)}
.ic-bh small{letter-spacing:.06em;font-size:8px;color:rgba(235,226,207,.35);margin-left:6px}
.ic-slots{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.ic-slot{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:6px 7px;border:1px solid rgba(235,226,207,.25);background:rgba(12,11,9,.9);color:#ebe2cf;text-align:left;cursor:pointer;pointer-events:auto;font-family:inherit}
.ic-slot b{font-size:10px;letter-spacing:.06em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.ic-slot i{font-style:normal;font-size:8px;letter-spacing:.08em;color:rgba(235,226,207,.55);white-space:nowrap}
.ic-slot.lock{border-style:dashed;color:rgba(235,226,207,.6)}
.ic-slot:not(.lock):not(.built){border-color:var(--ic-h);color:var(--ic-h)}
.ic-slot.built{border-color:var(--sc);background:color-mix(in srgb,var(--sc) 12%,#0c0b09)}
.ic-slot.built b{color:var(--sc)}
.ic-slot.on{box-shadow:0 0 0 1px #ebe2cf inset}
.ic-slot.off{opacity:.45}
.ic-build button{border-color:var(--sc,var(--ic-h))}
.ic-build button b{color:var(--sc,var(--ic-h))}
.ic-bx{pointer-events:auto;margin-left:6px;font:600 8px/1 var(--mono,"IBM Plex Mono",monospace);letter-spacing:.14em;padding:3px 6px;border:1px solid rgba(235,226,207,.3);background:transparent;color:rgba(235,226,207,.7);cursor:pointer}
/* round 65: meta row without the bar: UNITS on the left, PKT LOSS on the right, inside the panel */
.ic-meta{justify-content:space-between;gap:6px;overflow:hidden}
.ic-meta .ic-loss{margin-left:auto;flex:0 0 auto}
.ic-meta .ic-pw{min-width:0;overflow:hidden;text-overflow:ellipsis}
.ic-panel .ic-data b{font-size:14px!important;letter-spacing:-.01em;overflow:hidden;text-overflow:clip}
.ic-panel .ic-hire,.ic-panel .ic-narc{flex:0 0 auto}
/* round 69: the "?" help panel */
.ic-foot .ic-helpb{pointer-events:auto;margin-left:auto;margin-right:6px;width:22px;height:21px;padding:0;font:800 11px/1 var(--mono,"IBM Plex Mono",monospace);border:1px solid rgba(235,226,207,.35);background:transparent;color:#ebe2cf;cursor:pointer}
.ic-help{position:fixed;inset:0;z-index:12;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(5,4,3,.6);pointer-events:auto}
.ic-help[hidden]{display:none}
.ic-hbox{position:relative;width:min(560px,100%);max-height:78vh;overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 18px 14px;background:rgba(10,9,8,.97);border:1px solid rgba(235,226,207,.18);border-top:3px solid var(--ic-h);color:#ebe2cf;font:400 11px/1.55 var(--mono,"IBM Plex Mono",monospace)}
.ic-hbox h3{margin:0 26px 8px 0;font:800 14px/1.2 var(--mono,"IBM Plex Mono",monospace);letter-spacing:.16em;color:var(--ic-h)}
.ic-hbox h4{margin:12px 0 4px;font-size:9px;letter-spacing:.26em;color:rgba(235,226,207,.55);border-bottom:1px solid rgba(235,226,207,.1);padding-bottom:3px}
.ic-hbox p{margin:0 0 4px;color:rgba(235,226,207,.8)}
.ic-hbox ul{margin:0;padding-left:16px}
.ic-hbox li{margin:3px 0;color:rgba(235,226,207,.78)}
.ic-hbox b{color:#ebe2cf}
.ic-hx{position:absolute;top:10px;right:10px;width:26px;height:26px;border:1px solid rgba(235,226,207,.3);background:transparent;color:#ebe2cf;cursor:pointer;font-size:12px}
/* the DATA column keeps room for its figure and the rate line */
.ic-panel .ic-data{min-width:92px;flex:1 1 92px}
.ic-panel .ic-hire,.ic-panel .ic-narc{padding:0 6px;font-size:9.5px}
#icRate{white-space:nowrap;letter-spacing:.06em;font-size:7.5px;color:rgba(235,226,207,.5)}
@media (max-width:560px){.ic-panel .ic-data{min-width:0;flex:1 1 0}.ic-panel .ic-hire,.ic-panel .ic-narc{padding:0 4px;font-size:9px}}
/* the app's dock tap-strip (#dockhit, z 8, 150px tall) sat over the bottom of our panel in dock / goo / holo modes */
body.fl-dock .ic-hud{z-index:9}
/* round 71: the app skin (skins.js sets html[data-skin] and --skin-bg) colours the game's background */
html[data-skin] .ic-view{background:radial-gradient(ellipse 80% 60% at 50% 45%,color-mix(in srgb,var(--skin-bg) 88%,#fff 12%) 0%,var(--skin-bg) 70%,color-mix(in srgb,var(--skin-bg) 60%,#000 40%) 100%)}
/* round 72: skins that recolour the whole screen (a colour / saturation blend over everything) made RG and the hackers the same colour.
   In Icebreakers the skin keeps its background and textures (scanlines, pixel grid, sheen, hazard tape) but drops that colour wash. */
body.ic-on #skinFx{background:none!important;mix-blend-mode:normal!important;opacity:1!important}
/* round 75: the pixel-art view, GROW, and the battlefield callouts */
.ic-px{position:absolute;left:0;top:0;pointer-events:none;image-rendering:pixelated;image-rendering:crisp-edges}
.ic-pw2{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.ic-pw2 .ic-emp{padding:0 6px}
.ic-grow{border-color:#9dff6b!important;background:rgba(120,255,90,.1)!important;color:#d8ffc8!important}
.ic-says{position:fixed;left:0;top:0;width:100vw;height:100vh;pointer-events:none;z-index:3;overflow:hidden}
.ic-say{position:absolute;left:0;top:0;display:flex;align-items:center;gap:7px;width:max-content;max-width:250px;padding:5px 9px 5px 5px;background:rgba(8,10,9,.94);border:1px solid var(--ic-h,#39ff14);
  box-shadow:0 0 0 1px rgba(0,0,0,.6),0 4px 14px rgba(0,0,0,.5);transform-origin:0 100%;will-change:transform,opacity;font-family:"IBM Plex Mono",ui-monospace,Menlo,monospace}
.ic-say.bad{border-color:#ff2a44;box-shadow:0 0 0 1px rgba(0,0,0,.6),0 0 14px rgba(255,42,68,.35)}
.ic-say.lucy{border-color:#c77dff}
.ic-say canvas{width:36px;height:36px;flex:none;image-rendering:pixelated;border:1px solid rgba(235,226,207,.25);background:#0b1510}
.ic-say div{display:flex;flex-direction:column;gap:2px;min-width:0}
.ic-say b{font-size:9px;letter-spacing:.12em;color:var(--ic-h,#39ff14)}
.ic-say.bad b{color:#ff6b7c}.ic-say.lucy b{color:#d9a6ff}
.ic-say span{font-size:12px;font-weight:700;color:#f3eee2;line-height:1.25}
.ic-say i{position:absolute;right:6px;top:3px;font-style:normal;font-size:7px;letter-spacing:.1em;color:#ff2a44;animation:icLive 1s steps(2) infinite}
@keyframes icLive{50%{opacity:.2}}
/* round 76: the second stick slides the view */
.ic-stick.ic-pan{right:94px}
.ic-stick.ic-pan::after{content:"✥";position:absolute;left:0;right:0;top:-15px;text-align:center;font-size:10px;color:rgba(235,226,207,.45)}
#icStick::after{content:"⟲";position:absolute;left:0;right:0;top:-15px;text-align:center;font-size:10px;color:rgba(235,226,207,.45)}
@media (max-width:560px){.ic-stick{width:64px;height:64px}.ic-stick.ic-pan{right:82px}}
/* round 77: more room for the game, a movable stats panel, the entry menu */
body.ic-on #online,body.ic-on #nPath{display:none!important}
.ic-panel{right:auto;bottom:auto}
.ic-grab{display:flex;align-items:center;gap:6px;margin:-6px -7px 5px;padding:4px 8px;border-bottom:1px solid rgba(235,226,207,.1);background:rgba(235,226,207,.04);
  font-size:8px;letter-spacing:.2em;color:rgba(235,226,207,.55);cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}
.ic-grab span{color:var(--ic-h);letter-spacing:0}.ic-grab i{margin-left:auto;font-style:normal;opacity:.5}
.ic-grab.on{cursor:grabbing;background:rgba(235,226,207,.1)}
.ic-mini{right:auto!important;left:8px;top:auto!important;bottom:calc(98px + var(--safe-b,0px))}
body.fl-dock .ic-mini{bottom:calc(122px + var(--safe-b,0px))}
.ic-log{bottom:calc(98px + 190px + var(--safe-b,0px))!important}
.ic-rm{border-color:rgba(255,107,124,.5)!important}.ic-rm b{color:#ff9aa6}
.ic-menu{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 45%,rgba(6,10,8,.55),rgba(3,4,4,.9));pointer-events:auto}
.ic-menu[hidden]{display:none}
.ic-mbox{display:flex;flex-direction:column;align-items:stretch;gap:10px;min-width:260px;padding:26px 30px 28px;background:rgba(8,10,9,.92);border:1px solid var(--ic-h);box-shadow:0 0 0 3px rgba(0,0,0,.6),0 0 40px rgba(57,255,20,.12)}
.ic-mt{font-family:"Big Shoulders Stencil Display","Chakra Petch",sans-serif;font-weight:900;font-size:38px;letter-spacing:.12em;color:var(--ic-h);text-align:center;text-shadow:3px 3px 0 rgba(0,0,0,.8);image-rendering:pixelated}
.ic-ms{text-align:center;font-size:10px;letter-spacing:.2em;color:rgba(235,226,207,.5);margin:-4px 0 10px}
.ic-mbox button{height:40px;border:1.5px solid rgba(235,226,207,.25);background:rgba(235,226,207,.04);color:#ebe2cf;font-family:inherit;font-size:13px;font-weight:800;letter-spacing:.25em;cursor:pointer}
.ic-mbox button:hover,.ic-mbox button:focus-visible{border-color:var(--ic-h);color:var(--ic-h);background:rgba(57,255,20,.06)}
.ic-mbox button:first-of-type{border-color:var(--ic-h);color:var(--ic-h)}
.ic-help{z-index:31}
.ic-panel{width:284px}
@media (max-width:560px){.ic-panel{width:250px}}
/* round 78: the minimap in its own draggable box */
.ic-minibox{position:absolute;padding:6px 7px 7px;background:rgba(10,9,8,.86);border:1px solid rgba(235,226,207,.1);pointer-events:auto}
.ic-minibox .ic-mini{position:static!important;display:block;margin:0}
.ic-hud:has(#icPop:not([hidden])) .ic-minibox{opacity:0;pointer-events:none}

/* round 81: quieter battlefield callouts, the log bottom right above the footer, one stick at each side */
.ic-say{max-width:170px;gap:5px;padding:3px 7px 3px 3px;box-shadow:none}
.ic-say.bad{box-shadow:none}
.ic-say canvas{width:20px;height:20px}
.ic-say b{font-size:7px;letter-spacing:.1em}
.ic-say span{font-size:9px;font-weight:600;line-height:1.2}
.ic-say i{font-size:6px;top:2px;right:4px}
.ic-stick{--sw:74px;right:calc(var(--sw) * .75);left:auto}
.ic-stick.ic-pan{right:auto;left:calc(var(--sw) * .75)}
@media (max-width:560px){.ic-stick{--sw:64px;right:calc(var(--sw) * .75)}.ic-stick.ic-pan{right:auto;left:calc(var(--sw) * .75)}}
.ic-log{left:auto!important;right:calc(var(--sw,74px) * 1.75 + 14px);bottom:calc(98px + var(--safe-b,0px))!important;width:auto;max-width:min(320px,calc(100vw - (74px * 1.75 + 14px) * 2));text-align:right}
body.fl-dock .ic-log{bottom:calc(122px + var(--safe-b,0px))!important}
.ic-log li time{margin-right:4px}
@media (max-width:560px){.ic-log{right:calc(64px * 1.75 + 10px);max-width:calc(100vw - (64px * 1.75 + 10px) * 2)}}

/* round 82: no header bar in Icebreakers: just INDEX, the name, sync and chat floating over the map; the HUD boxes sit above them */
body.ic-on #ftop,body.ic-on #rtop{background:none!important;border-bottom:0!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:none!important;pointer-events:none}
body.ic-on #ftop>*,body.ic-on #rtop>*{pointer-events:auto}
body.ic-on #ftop .spacer,body.ic-on #rtop .spacer{pointer-events:none}
body.ic-on #radio,body.ic-on #emoteBtn,body.ic-on #who,body.ic-on #rhdg{display:none!important}
body.ic-on .ic-hud,body.fl-dock.ic-on .ic-hud{z-index:22}
/* round 83: hold a buy button to keep buying (no long-press menu or text selection while you do) */
.ic-hire,.ic-send button{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:manipulation}
.ic-hire.ic-held,.ic-send button.ic-held{background:color-mix(in srgb,var(--ic-h) 38%,#0c0b09);box-shadow:0 0 10px color-mix(in srgb,var(--ic-h) 60%,transparent),inset 0 0 0 1px var(--ic-h);animation:icHeld .16s steps(2) infinite}
@keyframes icHeld{50%{transform:translateY(1px)}}
/* round 83: progress to ROOT's next free squad */
.ic-wave{margin:-2px 0 6px;font-size:8px;letter-spacing:.14em;color:rgba(235,226,207,.45);white-space:nowrap}
.ic-wave span{display:flex;justify-content:space-between;margin-bottom:3px}
.ic-wave span b{font-size:10px;letter-spacing:.04em;color:#ebe2cf}
.ic-wave i{display:block;height:4px;background:rgba(235,226,207,.1);overflow:hidden;box-shadow:inset 0 0 0 1px rgba(235,226,207,.06)}
.ic-wave i b{display:block;height:100%;width:0;background:var(--ic-h);transition:width .26s linear;box-shadow:0 0 6px var(--ic-h)}
.ic-wave.soon i b{animation:icWave .3s steps(2) infinite}
.ic-wave.full span b{color:var(--ic-k,#ff3b5c)}
.ic-wave.full i b{background:rgba(235,226,207,.35);box-shadow:none}
@keyframes icWave{50%{filter:brightness(1.8)}}
/* round 83: squad size beside NEXT SQUAD; the ⌂ ROOT shortcut next to EMP / GROW */
.ic-wave span em{font-style:normal;margin-right:auto;margin-left:6px;color:var(--ic-h);letter-spacing:.1em}
.ic-pw2{grid-template-columns:1fr 1fr auto}
.ic-pw2 .ic-root{border-color:var(--ic-h);color:var(--ic-h);background:color-mix(in srgb,var(--ic-h) 14%,#0c0b09);font-weight:800;white-space:nowrap}
/* round 83f: what's in the next squad */
.ic-wavec{display:flex;flex-wrap:wrap;gap:3px 8px;margin-top:4px;font-size:10px;letter-spacing:0;color:var(--ic-h)}
.ic-wavec span{display:inline-flex;align-items:baseline;gap:2px}
.ic-wave .ic-wavec span b{font-size:9px;letter-spacing:0;color:#ebe2cf;font-weight:700}
