/* HUD «Эфир» (ui/efir.js): «Ball of Satan» as a TV show. Only while body.efir is set (alive in the round); every other
   arena keeps screens/hud.css as is. Flat plates, 1.5 px lines, no gloss. --you = your side: cyan swat / magenta possessed.
   Desktop geometry = mockup C.png at 1280x720; phone = C-phone.png at 844x390 (+ a portrait fallback). */
#efir{position:absolute;inset:0;pointer-events:none;z-index:3;--you:var(--cyan);font-family:var(--mono);color:var(--ink)}
#efir[data-side=possessed]{--you:var(--mag)}
#efir[data-side=satan]{--you:#ff2b3a}   /* «Сосуд Сатаны»: you are Satan — the lens is his blood-red hit points */
#efir>*{position:absolute}
:where(#efir) .ico{display:block;width:100%;height:100%}
/* the top clock (HUD clean): A · [phase / the big time / «до затмения»] · B + the lit count. No REC, no episode plate,
   no camera corners — the crowd, Satan's strength and the episode are on the Tab board (ui/board-dv.js) */
.ef-bug{left:50%;top:calc(12px + var(--safe-t));transform:translateX(-50%);display:flex;align-items:center;gap:16px;padding:4px 16px 5px;
  background:linear-gradient(rgba(7,5,11,.88),rgba(7,5,11,.72));border:var(--bw) solid var(--line);border-top:0;box-shadow:inset 0 -2px 0 var(--red);white-space:nowrap}
.ef-tm{display:flex;flex-direction:column;align-items:center;min-width:84px}
.ef-tm .ph{font:600 9px/1 var(--mono);letter-spacing:.3em;text-transform:uppercase;color:var(--ink2);padding-left:.3em}
.ef-tm b{font:600 28px/1 var(--disp);letter-spacing:.04em;color:#fff;font-variant-numeric:tabular-nums;margin:2px 0 2px}
.ef-tm small{font:500 9px/1 var(--mono);letter-spacing:.16em;text-transform:lowercase;color:var(--dim)}
#efir[data-ph=eclipse] .ef-tm b,#efir[data-ph=eclipse] .ef-tm .ph{color:var(--red)}
#efir[data-ph=assault] .ef-tm .ph{color:var(--cyan)}
.ef-alts{display:flex;align-items:center;gap:10px}
.ef-alt{display:inline-flex;align-items:center;gap:4px;color:var(--mute)}
.ef-alt .gl{display:block;width:18px;height:18px}
.ef-alt .t{display:flex;flex-direction:column;align-items:flex-start;gap:2px}
.ef-alt .t em{font:700 13px/1 var(--disp);font-style:normal;color:#fff}
.ef-alt.x .t em{color:currentColor;text-decoration:line-through}
.ef-alt b{font:600 9px/1 var(--mono);letter-spacing:.06em;color:currentColor;font-variant-numeric:tabular-nums}
.ef-alt.lit{color:var(--ac,var(--mag))}   /* each altar its own colour, the same as its icon on the map (shared/map-icons.js) */
.ef-alt .t em{color:var(--ac,#fff)}
.ef-alt.lit .gl{filter:drop-shadow(0 0 4px var(--ac,rgba(255,62,165,.55)))}
.ef-alt.x{color:rgba(154,144,168,.5)}
.ef-alt.sealing{color:var(--cyan)}
.ef-lit{font:600 11px/1 var(--disp);text-decoration:none;color:var(--ink2);padding-left:8px;border-left:var(--bw) solid var(--line)}

/* contestant lower third: the HP lens + the card */
.ef-lt{left:calc(28px + var(--safe-l));bottom:calc(22px + var(--safe-b));display:flex;align-items:flex-end}
.ef-lens{position:relative;width:84px;height:84px;flex:none;z-index:2}
.ef-lens svg{position:absolute;inset:0;width:100%;height:100%}
.ef-lens .photo{position:absolute;inset:8px;border-radius:50%;background-size:cover;background-position:center}
#efir[data-frame] .ef-lens .photo{box-shadow:0 0 0 3px var(--frame),0 0 16px var(--frame)}   /* «СПОНСОРЫ ШОУ»: the bought portrait frame */
.ef-lens .hpn{position:absolute;left:50%;bottom:-6px;transform:translateX(-50%);z-index:3;padding:2px 6px;background:var(--bg);border:var(--bw) solid var(--you);
  font:600 15px/1 var(--disp);color:#fff;font-variant-numeric:tabular-nums}
.ef-lens .hpn.wd{border-color:var(--red);color:var(--red)}
.ef-card{margin-left:-16px;padding:6px 10px 7px 24px;background:rgba(7,5,11,.9);border:var(--bw) solid var(--line);border-left:0;box-shadow:inset 0 -2px 0 var(--you);
  display:flex;flex-direction:column;gap:5px;min-width:130px;max-width:180px}
.ef-nm{display:flex;align-items:baseline;gap:10px;min-width:0}
.ef-nm b{font:600 16px/1 var(--disp);letter-spacing:.08em;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:120px}
.ef-row{display:flex;align-items:center;gap:5px;min-height:15px}
.ef-row:empty{display:none}
.ef-pl{display:flex;gap:4px}
.ef-pl span{width:15px;height:15px;color:var(--cyan)} .ef-pl span.off{color:var(--mute)}
.ef-lvn{font:600 12px/1 var(--disp);color:var(--mag);margin-right:4px}
.ef-lvn.ev{color:var(--red);margin-left:6px}   /* a possessed: the evolution stage of his true form */
.ef-pips{display:flex;gap:3px}
.ef-pips i{display:block;width:12px;height:5px;background:rgba(236,230,242,.16)} .ef-pips i.on{background:#fff}
.ef-pips.lvl i.on{background:var(--mag)}
.ef-pips.col{flex-direction:column;gap:4px}
.ef-team{display:flex;gap:6px;margin-top:2px}
.ef-mate{position:relative;width:20px;height:20px;display:grid;place-items:center;background:rgba(7,5,11,.8);border:var(--bw) solid var(--line2);color:var(--you)}
.ef-mate .ico{width:62%;height:62%}
.ef-mate::after{content:"";position:absolute;left:-1.5px;right:-1.5px;bottom:-4px;height:2px;background:var(--you)}
.ef-mate.dead{color:var(--mute)} .ef-mate.dead::after{display:none}
.ef-mate.dead b{position:absolute;inset:0;display:grid;place-items:center;font:600 10px/1 var(--disp);color:#fff;background:rgba(7,5,11,.55)}

/* ability strip + belt */
.ef-strip{left:50%;bottom:calc(22px + var(--safe-b));transform:translateX(-50%);display:flex;align-items:flex-end;gap:9px}
.ef-ab,.ef-bl{display:flex;gap:5px;padding:5px;background:rgba(7,5,11,.72);border:var(--bw) solid var(--line)}
.ef-bl{gap:3px;padding:5px}
.ef-cell{--cw:40px;position:relative;width:var(--cw);height:var(--cw);display:grid;place-items:center;background:rgba(7,5,11,.78);border:var(--bw) solid var(--line2);color:var(--ink)}
.ef-bl .ef-cell{--cw:30px}
.ef-cell>.ico{width:48%;height:48%}
.ef-cell kbd{position:absolute;left:2px;top:2px;padding:1px 2px;font-size:8px;line-height:1;border-width:1px;color:var(--dim);background:rgba(7,5,11,.8)}
.ef-bl .ef-cell kbd{font-size:7px;padding:1px 2px}
.ef-cell kbd.q{left:auto;right:2px;color:var(--cyan)}   /* ninja: Q swaps the form */
.ef-cell sub{position:absolute;right:3px;bottom:2px;font:600 12px/1 var(--disp);color:#fff;font-variant-numeric:tabular-nums}
.ef-cell .cd{position:absolute;inset:0;background:conic-gradient(rgba(7,5,11,.78) var(--p),transparent 0)}
.ef-cell .cdn{position:absolute;inset:0;display:grid;place-items:center;font:600 17px/1 var(--disp);font-style:normal;color:#fff}
.ef-cell .pg{position:absolute;left:0;bottom:0;height:3px;width:var(--p);background:var(--amber)}
.ef-cell.cool>.ico{opacity:.45}
.ef-cell.on{border-color:var(--you);color:var(--you)}
.ef-cell.ctx{border-color:var(--amber);color:var(--amber);box-shadow:0 0 0 1px rgba(255,181,71,.25),inset 0 0 12px rgba(255,181,71,.16)}
.ef-cell.idle{color:var(--mute)}
.ef-cell .lb{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translateX(-50%);padding:2px 5px;background:rgba(7,5,11,.9);border:1px solid rgba(255,181,71,.55);
  font:600 8px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--amber);white-space:nowrap;pointer-events:none}   /* what E does now */
.ef-cell.empty{border-style:dashed;border-color:var(--line);background:rgba(7,5,11,.5)}
.ef-cell.soul{color:var(--amber);border-color:rgba(255,181,71,.55)}

/* big ammo / souls */
.ef-big{right:calc(28px + var(--safe-r));bottom:calc(22px + var(--safe-b))}
.ef-big-in{display:flex;align-items:center;gap:10px;padding:7px 13px 7px 12px;background:rgba(7,5,11,.9);border:var(--bw) solid var(--line);box-shadow:inset 0 -2px 0 var(--you)}
.ef-big-in>.ico{width:30px;height:30px;color:var(--ink2)}
.ef-big-in b{font:600 44px/1 var(--disp);color:#fff;font-variant-numeric:tabular-nums}
.ef-big-in.souls>.ico,.ef-big-in.souls b{color:var(--amber)}

/* the arsenal (ui/efir.js kitHtml, server/kit.js): what he carries over the big number — the one in hand lit, an empty gun
   dim, the digit key on each (hidden with the hints: H); a click = the next one */
.ef-kit{right:calc(28px + var(--safe-r));bottom:calc(22px + 70px + var(--safe-b));display:flex;align-items:center;gap:4px;pointer-events:auto;cursor:pointer}
.ef-kit:empty{display:none}
.ef-kit span{position:relative;width:28px;height:28px;padding:4px;box-sizing:border-box;background:rgba(7,5,11,.86);border:1px solid var(--line);color:var(--ink2)}
.ef-kit span.on{border-color:var(--you);color:#fff;box-shadow:inset 0 -2px 0 var(--you)}
.ef-kit span.e{opacity:.4}
.ef-kit kbd{position:absolute;right:1px;bottom:0;font:600 8px/1 var(--mono);color:var(--dim)}
.ef-kit em{margin-left:6px;font:500 10px/1 var(--mono);font-style:normal;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);white-space:nowrap}
#efir.nohelp .ef-kit kbd,#efir.nohelp .ef-kit em{display:none}

/* the Don's key in your hands (rd.hk): an amber key by the plates / in the phone's ammo row */
.ef-key{display:inline-block;width:18px;height:18px;margin-right:6px;color:var(--amber);vertical-align:middle}

/* phone block (top-left): hidden on desktop */
.ef-pme{display:none}

/* the rest of the screen while the HUD is on: the minimap bottom-left (as in Dota), the lower third right of it, the
   goal on the right (#tasks, screens/tasks.css), no kill feed (the Tab board keeps the score) */
body.efir .hud.tl .me{display:none}
body.efir .hud.tr{display:none}
body.efir #efir .ef-lt{left:calc(28px + 180px + 14px + var(--safe-l))}
html body.efir:not(.touchp) #efir .ef-card{max-width:180px;box-sizing:border-box}
html body.efir:not(.touchp) #efir .ef-strip{left:max(calc(28px + 180px + 14px + 68px + 180px + 14px + var(--safe-l)),calc(50% - 140px));transform:none}   /* right of the lower third, centred when there is room */
body.efir .mmap:not(.full){left:calc(28px + var(--safe-l));top:auto;bottom:calc(22px + var(--safe-b));right:auto;width:180px}
body.efir .mmap:not(.full) .mm-tag{display:none}
.mmap .mm-k{display:none}
body.efir .hud.tl{left:calc(28px + var(--safe-l));bottom:calc(22px + 135px + 12px + var(--safe-b))}
body.efir #chat{bottom:calc(22px + 135px + 40px + var(--safe-b))}
body.efir .alert{top:calc(76px + var(--safe-t))}
html body.efir #nudge{bottom:auto;top:calc(76px + var(--safe-t))}   /* the first-shift nudge: under the clock, not on the strip */
html body.efir:has(#nudge) .alert{top:calc(132px + var(--safe-t))}
/* camera alerts under «Эфир»: one line (no camera tag, no sub) — the place pings the minimap */
body.efir .alert:not(.big) .rec,body.efir .alert:not(.big):not(.wsub) .al-s{display:none}   /* wsub: the ritual's began / complete keep their hint (SOC-186) */
/* the goal (#tasks, ui/objectives.js): the ONE main line on the right, up to two lines, no header / side lines */
body.efir #tasks header,body.efir #tasks li:not(.mn),body.efir #tasks .role{display:none}
body.efir #tasks li.mn{align-items:flex-start}
body.efir #tasks li.mn span{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
html body.efir:not(.touchp) #tasks{left:auto;right:calc(28px + var(--safe-r));top:calc(14px + var(--safe-t));max-width:min(230px,22vw);padding:6px 10px 7px;box-shadow:inset -2px 0 0 var(--cyan)}
html body.efir:not(.touchp) #tasks[data-side=possessed]{box-shadow:inset -2px 0 0 var(--mag)}
html body.efir:not(.touchp) #tasks li.mn{font-size:13px}
html body.efir:not(.touchp) #tasks li.mn b{font-size:11px}
body.touchp.efir #tasks{pointer-events:none}
/* the cell hints: H / the «?» button hides the key tags and the captions (E's «what it does now» stays) */
.ef-help{pointer-events:auto;align-self:flex-end;width:18px;height:18px;padding:0;display:grid;place-items:center;background:rgba(7,5,11,.72);border:var(--bw) solid var(--line);
  font:600 12px/1 var(--mono);color:var(--dim);cursor:pointer}
.ef-help:hover{color:#fff;border-color:var(--line2)}
.ef-help.off,#efir.nohelp .ef-help{color:var(--mute);border-style:dashed}
#efir.nohelp .ef-cell kbd,#efir.nohelp .ef-cell:not(.ctx) .lb{display:none}
.ef-bl:empty{display:none}

/* ================= phone ================= */
body.touchp #efir .ef-lt,body.touchp #efir .ef-strip,body.touchp #efir .ef-big{display:none}
body.touchp #efir .ef-pme{display:flex;align-items:center;gap:8px;left:calc(12px + var(--safe-l));top:calc(10px + var(--safe-t))}
.ef-lens.sm{width:50px;height:50px}
.ef-lens.sm .photo{inset:5px}
.ef-lens.sm .hpn{bottom:-7px;padding:1px 4px;font-size:12px}
.ef-col{display:flex;flex-direction:column;justify-content:center;gap:4px;padding:5px 8px;min-height:40px;box-sizing:border-box;background:rgba(7,5,11,.86);border:var(--bw) solid var(--line)}
.ef-am{display:flex;align-items:center;gap:6px}
.ef-am-n{display:flex;align-items:center;gap:6px}
.ef-am-n>.ico{width:17px;height:17px;color:var(--ink2)}
.ef-am-n b{font:600 23px/1 var(--disp);color:#fff;font-variant-numeric:tabular-nums}
.ef-am-n.souls>.ico,.ef-am-n.souls b{color:var(--amber)}
.ef-am .ef-pips{gap:2px} .ef-am .ef-pips i{width:7px;height:3px}
.ef-am .ef-pl span{width:12px;height:12px}
.ef-col.nf{pointer-events:auto;cursor:pointer;touch-action:none;box-shadow:inset 0 0 0 1px var(--cyan)}   /* ninja: tap = katana <-> shurikens */
.ef-col.nf:active{background:rgba(53,230,255,.12)}
.ef-kit.p{position:static;gap:4px;padding:3px 5px;border:1px solid var(--line);touch-action:none}   /* phone: a chip in the ammo row — the next weapon's icon + «2/5»; a tap = that one */
.ef-kit.p>.ico{width:18px;height:18px;color:var(--ink2)}
.ef-kit.p b{font:600 13px/1 var(--mono);color:var(--ink2)}
.ef-kit.p:active{background:rgba(53,230,255,.12)}
.ef-fsw:empty{display:none}.ef-fsw{font:500 11px/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--cyan)}   /* ninja: «тап · сюрикены» under the number */
/* phone: smaller boxes, but no text under ~11 px */
body.touchp #efir .ef-bug{top:calc(4px + var(--safe-t));gap:7px;padding:3px 9px 4px}
body.touchp .ef-tm{min-width:0}
body.touchp .ef-tm .ph{font-size:11px;letter-spacing:.1em;padding-left:.1em}
body.touchp .ef-tm b{font-size:20px;margin:1px 0}
body.touchp .ef-tm small{font-size:11px;letter-spacing:0}
body.touchp .ef-alts{gap:6px}
body.touchp .ef-alt{gap:2px} body.touchp .ef-alt .gl{width:12px;height:12px} body.touchp .ef-alt .t{gap:1px} body.touchp .ef-alt .t em{font-size:11px} body.touchp .ef-alt b{font-size:11px;letter-spacing:0}
body.touchp .ef-lit{font-size:11px;padding-left:5px}
/* the sides' score under the clock: phone only (desktop has it on the Tab board) */
.ef-sc{display:none}
body.touchp .ef-sc:not(:empty){display:flex;align-items:center;gap:5px;margin-top:3px;font:600 11px/1 var(--mono);font-variant-numeric:tabular-nums;color:var(--ink2)}
#efir[data-dawn="1"] .ef-sc:not(:empty){display:flex;align-items:center;gap:5px;margin-top:3px;font:600 11px/1 var(--mono);font-variant-numeric:tabular-nums;color:var(--ink2)}   /* «живых N из M» is the dawn goal: on the PC too */
body.touchp .ef-sc i{display:inline-flex;align-items:center;gap:3px;font-style:normal}
body.touchp .ef-sc .ico{width:11px;height:11px}
body.touchp .ef-tm .ef-sc b{font:600 12px/1 var(--mono);margin:0;color:inherit}
body.touchp .ef-sc .sw{color:var(--cyan)} body.touchp .ef-sc .ps{color:var(--mag)} body.touchp .ef-sc u{text-decoration:none;color:var(--mute)}
/* the seal's ritual (SOC-154): a thin bar under the clock with its «no SATAN» mark, «РИТУАЛ 37 %» beside it — both sides */
.ef-rit{display:none}
.ef-rit:not(:empty){display:flex;align-items:center;gap:6px;margin-top:4px}
.ef-rit .bar{position:relative;width:64px;height:4px;background:rgba(236,230,242,.16)}
.ef-rit .bar::before{content:'';position:absolute;left:0;top:0;bottom:0;width:var(--p);background:var(--mag)}
.ef-rit .bar::after{content:'';position:absolute;left:var(--m);top:-2px;width:2px;height:8px;background:var(--ink2)}
.ef-rit .bar.full::before{background:var(--red)} .ef-rit .bar.low::before{background:var(--dim)}
.ef-rit em{font:600 9px/1 var(--mono);font-style:normal;letter-spacing:.12em;color:var(--ink2);font-variant-numeric:tabular-nums;white-space:nowrap}
.ef-rit em.full{color:var(--red)}
body.touchp .ef-sc .ef-rit.p{display:flex;align-items:center;gap:3px;margin:0 0 0 6px}
body.touchp .ef-rit .bar{width:24px;height:3px}
body.touchp .ef-rit em{font-size:9px;letter-spacing:0}
/* phone: the minimap small top-left (the move stick owns the bottom-left), the lens + ammo top-right, the menu under it
   (a column in landscape, a row in portrait), no kill feed */
body.touchp #efir .ef-pme{left:auto;right:calc(12px + var(--safe-r))}
html body.touchp.efir .mmap:not(.full){left:calc(12px + var(--safe-l));right:auto;top:calc(10px + var(--safe-t));bottom:auto;width:92px}
html body.touchp.efir .mmap:not(.full) .mm-tag{display:none}
html body.touchp.efir #topbar{top:calc(70px + var(--safe-t));right:calc(12px + var(--safe-r));flex-direction:column}
html body.touchp.efir #tasks{top:calc(88px + var(--safe-t));padding:4px 7px 5px}
html body.touchp.efir #tasks li.mn{font-size:11.5px}
html body.touchp.efir .alert{top:calc(60px + var(--safe-t))}
html body.touchp.efir #nudge{bottom:auto;top:calc(60px + var(--safe-t))}
html body.touchp.efir:has(#nudge) .alert{top:calc(124px + var(--safe-t))}
/* right thumb: АТАКА 92 px in the corner, ОСОБОЕ 66 px left of it, the ninja's satellites on the arc above */
html body.touchp.efir #fireBtn{width:92px;height:92px;right:calc(12px + var(--safe-r));bottom:calc(20px + var(--safe-b));border-width:2px;background:rgba(7,5,11,.6);box-shadow:inset 0 0 18px rgba(255,181,71,.15)}
html body.touchp.efir #spBtn{--sz:66px;right:calc(128px + var(--safe-r));bottom:calc(22px + var(--safe-b))}
html body.touchp.efir #spBtn .lb{display:none}
html body.touchp.efir #fireBtn::before,html body.touchp.efir #spBtn::before{position:absolute;left:50%;top:calc(100% + 4px);transform:translateX(-50%);font:500 8.5px/1 var(--mono);letter-spacing:.18em;
  color:var(--ink2);white-space:nowrap;text-shadow:0 1px 2px #000;pointer-events:none;text-transform:lowercase}
html body.touchp.efir #fireBtn::before{content:"атака"}
html body.touchp.efir #fireBtn[data-efl]:not([data-efl=""])::before{content:attr(data-efl);white-space:nowrap}   /* a possessed: «свайп-захват» / «захват 8» */
html body.touchp.efir #spBtn::before{content:"особое"}
html body.touchp.efir #spBtn[data-cd]:not([data-cd=""])::before{content:attr(data-cd)}
html body.touchp.efir #spBtn[data-efl]:not([data-efl=""])::before{content:attr(data-efl);color:var(--amber)}   /* in focus: ЗАРАЗИТЬ / КАЧНУТЬСЯ / ВЗЯТЬ ... */   /* techno-guru: «свет 12» takes the caption's place */
html body.touchp.efir #spBtn[data-cd]:not([data-cd=""])::after{content:none}
html body.touchp.efir #sprBtn{--sz:46px;right:calc(131px + var(--safe-r));bottom:calc(120px + var(--safe-b))}
html body.touchp.efir #smokeBtn,html body.touchp.efir #grbBtn{--sz:46px;right:calc(79px + var(--safe-r));bottom:calc(148px + var(--safe-b))}
html body.touchp.efir #lepBtn{--sz:46px;right:calc(14px + var(--safe-r));bottom:calc(132px + var(--safe-b))}
html body.touchp.efir #howlBtn{--sz:46px;right:calc(140px + var(--safe-r));bottom:calc(120px + var(--safe-b))}
html body.touchp.efir #splBtn{--sz:46px;right:calc(206px + var(--safe-r));bottom:calc(30px + var(--safe-b))}
html body.touchp.efir #chat{top:calc(216px + var(--safe-t))}   /* under the camera alert, left of the centre (hotfix/phone-feed) */
/* portrait (the owner plays like this, 390x844 / 430x932): top = the clock, then the minimap left and the lens + ammo
   right, the menu row under the lens, the goal under the minimap; bottom = the stick left, АТАКА / ОСОБОЕ / the arc right */
@media (orientation:portrait){
  html body.touchp.efir .mmap:not(.full){top:calc(78px + var(--safe-t))}   /* 16 px lower: the score line under the clock */
  html body.touchp.efir #efir .ef-pme{top:calc(78px + var(--safe-t))}
  html body.touchp.efir #topbar{top:calc(138px + var(--safe-t));flex-direction:row}
  html body.touchp.efir #tasks,html body.touchp.efir:has(#nudge) #tasks{top:calc(158px + var(--safe-t))}
  html body.touchp.efir #chat{top:calc(216px + var(--safe-t))}
  html body.touchp.efir #nudge{bottom:auto;top:calc(248px + var(--safe-t))}
  html body.touchp.efir .alert{top:calc(254px + var(--safe-t))}
  html body.touchp.efir:has(#nudge) .alert{top:calc(334px + var(--safe-t))}
  html body.touchp.efir .hud.tl{top:auto;bottom:calc(128px + var(--safe-b));left:calc(12px + var(--safe-l));transform:none}
}
/* phone landscape in the round: v0.12.2 puts the nudge / alerts under its canvas plate (panels.css / hud.css dvround) */
@media (orientation:landscape){
  html body.touchp.efir.dvround #nudge{top:calc(60px + var(--safe-t))}html body.touchp.efir.dvround:has(#nudge) .alert{top:calc(124px + var(--safe-t))}
}

/* the Tab board in «Ball of Satan» (ui/board-dv.js): the round summary + two tables, K/D/A per side */
#board.dv{width:min(620px,94vw)}
#board.dv>.brow.bh,#board.dv>#lbList,#board.dv #online,#board.dv footer>span:not(#ping){display:none}
#boardDv[hidden]{display:none}
.bd-sum{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px;padding:7px 10px;margin-bottom:10px;background:rgba(7,5,11,.6);border:var(--bw) solid var(--line)}
.bd-sum span{display:inline-flex;align-items:baseline;gap:5px}
.bd-sum em{font:500 9px/1 var(--mono);font-style:normal;letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.bd-sum b{font:600 14px/1 var(--disp);color:#fff;font-variant-numeric:tabular-nums}
.bd-sum .sc{margin-left:auto}
/* v0.13.8: your humans killed; the leader — SATAN comes into you («ты притягиваешь тьму») */
.bd-dark{margin:-4px 0 10px;padding:5px 10px;font:500 10px/1.3 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);border-left:var(--bw) solid var(--line)}
.bd-dark.lead{color:#ff3b4e;border-left-color:#ff3b4e}
.bd-sum .sc b.sw{color:var(--cyan)} .bd-sum .sc b.ps{color:var(--mag)} .bd-sum .sc i{font-style:normal;color:var(--dim)}
.bd-sides{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.bd-side header{display:flex;align-items:baseline;justify-content:space-between;padding:0 6px 6px;border-bottom:2px solid var(--cyan)}
.bd-side.possessed header{border-bottom-color:var(--mag)}
.bd-side header b{font:600 13px/1 var(--disp);letter-spacing:.12em;text-transform:uppercase;color:var(--cyan)}
.bd-side.possessed header b{color:var(--mag)}
.bd-side header span{font:500 10px/1 var(--mono);color:var(--dim)}
.bd-h,.bd-side li{display:grid;grid-template-columns:minmax(0,1fr) 2.4em 2.4em 2.4em;gap:5px;align-items:center;padding:4px 6px}
.bd-h{padding-top:6px;padding-bottom:3px;font:500 9px/1 var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
.bd-h span:nth-child(n+2),.bd-side li b{text-align:right}
.bd-side ol{margin:0;padding:0;list-style:none}
.bd-side li{border-bottom:1px solid var(--line)}
.bd-side li .n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:500 12.5px/1 var(--disp);letter-spacing:.05em;text-transform:uppercase;color:var(--ink)}
.bd-side li .n em{margin-left:5px;font:500 8px/1 var(--mono);font-style:normal;letter-spacing:.14em;color:var(--mute)}
.bd-side li b{font:600 13px/1 var(--disp);color:var(--ink2);font-variant-numeric:tabular-nums}
.bd-side li b.k{color:#fff}
.bd-side li.me{box-shadow:inset 3px 0 0 var(--cyan);background:rgba(53,230,255,.06)}
.bd-side.possessed li.me{box-shadow:inset 3px 0 0 var(--mag);background:rgba(255,62,165,.06)}
.bd-side li.none .n{color:var(--mute)}
@media (max-width:560px){.bd-sides{grid-template-columns:1fr}.bd-sum{gap:5px 12px}}
body.touchp .bd-sum em,body.touchp .bd-h,body.touchp .bd-side li .n em,body.touchp .bd-side header span{font-size:11px;letter-spacing:.06em}   /* phone: no text under ~11 px */
body.touchp .bd-side li .n,body.touchp .bd-side li b{font-size:13px}

/* the full map's legend in «Ball of Satan» (ui/minimap.js legend(): the goal icons' silhouettes + words) */
.mm-legend{position:absolute;right:14px;bottom:14px;padding:8px 10px;background:rgba(7,5,11,.88);border:var(--bw) solid var(--line);pointer-events:none;font:500 11px/1.2 var(--mono);color:var(--ink2)}
.mm-legend[hidden]{display:none}
.mm-legend ul{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(2,auto);gap:5px 14px}
.mm-legend li{display:flex;align-items:center;gap:6px;white-space:nowrap}
.mm-legend svg{width:14px;height:14px;flex:none}
.mm-legend p{margin:7px 0 0;display:flex;align-items:center;gap:6px;color:var(--dim)}
.mm-legend p i{display:inline-block;width:10px;height:10px;border-radius:50%;border:1.5px solid #fff4dc}
.mm-legend p i.s{border-color:rgba(236,230,242,.4);margin-left:8px}

/* «Чистый экран» (ui/clean-screen.js): in the round nothing on screen unless Tab / Y / the eye is held (body.peek) —
   the sticks and АТАКА / ОСОБОЕ stay; a 150 ms fade */
body.clean :is(#efir,#tasks,#mmap:not(.full),#camAlert,#chat:not(:focus-within),.hud.tl,.hud.tr,#nudge,#topbar,#chatBtn,.kfb,#sideHint){transition:opacity .15s ease,visibility 0s}
body.clean:not(.peek) :is(#efir,#tasks,#mmap:not(.full),#camAlert,#chat:not(:focus-within),.hud.tl,.hud.tr,#nudge,#topbar,#chatBtn,.kfb,#sideHint){opacity:0;visibility:hidden;transition:opacity .15s ease,visibility 0s .15s}
/* phone (Grisha: «весь интерфейс спрятался в глаз»): the minimum to play stays without a touch — the clock + phase + the
   altars + the score (.ef-bug), the lens + plates / evolution + ammo / souls (.ef-pme), the minimap in its corner; the goal
   arrow is on the canvas. The eye brings the rest: the board, the tasks, the menu, the chat, the alerts */
body.touchp.clean:not(.peek) :is(#efir,#mmap:not(.full)){opacity:1;visibility:visible}
body.touchp.clean:not(.peek) #efir > :not(.ef-bug,.ef-pme){opacity:0;visibility:hidden}
/* «Дожить до рассвета»: the clock «до рассвета» + «живых N из M» ARE the goal — one strip on top stays on the PC too, the rest hides as before */
body.clean:not(.peek) #efir[data-dawn="1"]{opacity:1;visibility:visible}
body.clean:not(.peek) #efir[data-dawn="1"] > :not(.ef-bug){opacity:0;visibility:hidden}
#eyeBtn{display:none}
body.touchp:is(.clean,.efir) #eyeBtn{display:grid;place-items:center;position:absolute;z-index:7;left:calc(8px + var(--safe-l));top:40%;width:44px;height:44px;padding:0;
  background:rgba(7,5,11,.35);border:1px solid rgba(236,230,242,.22);border-radius:50%;color:rgba(236,230,242,.6);pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none}
body.touchp.clean.peek #eyeBtn{background:rgba(7,5,11,.7);color:#fff;border-color:rgba(236,230,242,.6)}
#eyeBtn svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8}
#cleanHint{position:absolute;left:50%;bottom:28%;transform:translateX(-50%);z-index:6;padding:7px 12px;background:rgba(7,5,11,.78);border:var(--bw) solid var(--line);
  font:500 12px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink2);pointer-events:none;white-space:nowrap}
#cleanHint[hidden]{display:none}
@media (prefers-reduced-motion:reduce){body.clean :is(#efir,#tasks,#mmap,#camAlert,#chat,.hud.tl,#nudge,#topbar,#chatBtn,.kfb){transition:none!important}}
/* «Ball of Satan», Dust 2: the doctor's Гидра (feat/doctor; public/fx/doctor.js). The item cell (X) in the strip, the
   effect chip by the plates (the boost mint, the crash grey-blue, a ring running down), the phone's item button over АТАКА */
.ef-cell.item{color:#7dffcf;border-color:rgba(125,255,207,.6);box-shadow:inset 0 0 12px rgba(125,255,207,.14)}
.ef-cell.item .lb{border-color:rgba(125,255,207,.55);color:#7dffcf}
.ef-hy{--c:#7dffcf;position:relative;display:inline-flex;align-items:center;gap:4px;height:18px;padding:0 6px 0 3px;margin-left:6px;border:1px solid var(--c);color:var(--c);background:linear-gradient(90deg,rgba(125,255,207,.22) var(--p),rgba(7,5,11,.7) 0);font:600 11px/1 var(--mono)}
.ef-hy.crash{--c:#8aa0c8;background:linear-gradient(90deg,rgba(138,160,200,.22) var(--p),rgba(7,5,11,.7) 0)}
.ef-hy .ico{width:13px;height:13px}
.ef-hy b{font:600 13px/1 var(--disp);color:#fff;font-variant-numeric:tabular-nums}
.ef-hy em{font-style:normal;letter-spacing:.14em;text-transform:uppercase;font-size:8.5px}
body.touchp #efir .ef-hy{margin-left:2px;height:16px}
#itemBtn{display:none}
body.touchp.efir #itemBtn:not([hidden]){display:flex;position:fixed;z-index:30;width:58px;height:58px;right:calc(29px + var(--safe-r,0px));bottom:calc(128px + var(--safe-b,0px));align-items:center;justify-content:center;border:2px solid #7dffcf;border-radius:50%;background:rgba(7,5,11,.6);color:#7dffcf;box-shadow:inset 0 0 14px rgba(125,255,207,.18)}
body.touchp.efir #itemBtn svg{width:28px;height:28px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
body.touchp.efir #itemBtn.on{background:rgba(125,255,207,.3)}
body.touchp.efir #itemBtn .n{position:absolute;right:4px;bottom:2px;font:600 12px/1 var(--disp);font-style:normal;color:#fff}
body.touchp.efir #itemBtn::before{content:attr(data-efl);position:absolute;left:50%;top:calc(100% + 4px);transform:translateX(-50%);font:500 8.5px/1 var(--mono);letter-spacing:.18em;color:#7dffcf;white-space:nowrap}
/* SOC-163: one blow from death — the hit count round the portrait (and lean's number) blinks red */
#efir .hpn.last,#efir .ef-hp.last{color:#ff2e55;animation:efLast .8s ease-in-out infinite}
@keyframes efLast{50%{opacity:.35}}
