/* Banner Frenzy - layout, menus and HUD. Art: Tiny Swords by Pixel Frog. */
:root{
  --ink:#10201f;
  --sea:#47aba9;
  --paper-ink:#3a2817;
  --paper-soft:#6b5134;
  --cream:#fff7e4;
  --gold:#ffd35a;
  --blue:#3f8fd8;
  --red:#e0574b;
  --yellow:#e6b93c;
  --purple:#9a6ad0;
  --grey:#7d8591;
  --font:"Jersey 10", ui-rounded, system-ui, sans-serif;
}
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--ink);color:var(--cream);font-family:var(--font);font-synthesis:none;letter-spacing:.02em}
body{display:flex;flex-direction:column;min-height:100%;overflow:hidden;
  -webkit-tap-highlight-color:transparent;touch-action:none;overscroll-behavior:none}
button{font:inherit;color:inherit;cursor:pointer;background:none;border:0;padding:0}
[hidden]{display:none !important}
::selection{background:var(--gold);color:var(--paper-ink)}
a{color:inherit;text-underline-offset:.18em}
:focus-visible{outline:2px solid var(--gold);outline-offset:2px}

#stage{flex:1;display:grid;place-items:center;min-height:0;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) 0 env(safe-area-inset-left)}
#game{
  position:relative;
  width:min(100vw, calc((100dvh - 1.6rem) * 16 / 9));
  aspect-ratio:16/9;
  container-type:size;
  overflow:hidden;
  background:var(--sea);
  user-select:none;-webkit-user-select:none;
  /* one design unit = 1/1280 of the battlefield width, never smaller than a phone can read */
  --u:max(calc(100cqw / 1280), .6px);
  font-size:calc(26 * var(--u));
}
#view{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none}

.legal{display:flex;flex-wrap:wrap;justify-content:center;gap:.2rem 1rem;
  padding:.3rem .8rem calc(.3rem + env(safe-area-inset-bottom));
  font-size:.68rem;letter-spacing:.04em;color:#8fa6a2;min-height:1.6rem;font-family:system-ui,sans-serif}
.legal a{color:inherit;text-decoration:none}
.legal a:hover,.legal a:focus-visible{color:var(--cream)}
/* (2026-10-13: footer on the main menu only) */
body:has(#menu[hidden]) .legal{display:none}

/* ---------- Tiny Swords materials ---------- */
.scroll{
  border-style:solid;border-color:transparent;
  border-width:calc(22 * var(--u)) calc(26 * var(--u)) calc(23 * var(--u));
  border-image:url(/frenzy/assets/paper.png?v=e869d377f2) 44 52 45 fill / calc(22 * var(--u)) calc(26 * var(--u)) calc(23 * var(--u)) stretch;
  color:var(--paper-ink);
  padding:calc(8 * var(--u)) calc(14 * var(--u)) calc(6 * var(--u));
  filter:drop-shadow(0 calc(10 * var(--u)) calc(14 * var(--u)) rgba(10,24,22,.45));
  width:calc(560 * var(--u));max-width:96%;max-height:96%;overflow:auto;
  scrollbar-width:thin;scrollbar-color:var(--paper-soft) transparent;
}
.scroll.wide{width:calc(900 * var(--u))}
.scroll.narrow{width:calc(400 * var(--u))}
#skirmish .scroll{width:calc(860 * var(--u))}

.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.4em;
  min-height:calc(64 * var(--u));min-width:calc(150 * var(--u));
  border-style:solid;border-color:transparent;
  border-width:calc(16 * var(--u)) calc(16 * var(--u)) calc(20 * var(--u));
  border-image:url(/frenzy/assets/btn_blue.png?v=e869d377f2) 47 45 fill / calc(16 * var(--u)) calc(16 * var(--u)) calc(20 * var(--u)) stretch;
  color:#fff;font-weight:400;font-size:1em;line-height:1;
  text-shadow:0 calc(2 * var(--u)) 0 rgba(12,40,60,.8);
  padding:0 calc(8 * var(--u));
  transition:filter .15s ease-out, transform .15s ease-out;
}
.btn.red{border-image-source:url(/frenzy/assets/btn_red.png?v=e869d377f2);text-shadow:0 calc(2 * var(--u)) 0 rgba(70,16,12,.8)}
.btn:hover{filter:brightness(1.08)}
.btn:active{border-image-source:url(/frenzy/assets/btn_blue_down.png?v=e869d377f2);transform:translateY(calc(2 * var(--u)))}
.btn.red:active{border-image-source:url(/frenzy/assets/btn_red_down.png?v=e869d377f2)}
.btn:disabled{filter:grayscale(.9) brightness(.9);cursor:not-allowed;transform:none}
.btn.big{min-width:calc(280 * var(--u));min-height:calc(76 * var(--u));font-size:1.35em}

.ribbon{
  margin:0 auto;display:flex;align-items:center;justify-content:center;width:fit-content;
  height:calc(96 * var(--u));min-width:calc(360 * var(--u));
  border-style:solid;border-color:transparent;border-width:0 calc(90 * var(--u)) 0 calc(91 * var(--u));
  border-image:url(/frenzy/assets/ribbon_blue.png?v=e869d377f2) 0 97 0 98 fill / 0 calc(90 * var(--u)) 0 calc(91 * var(--u)) stretch;
  color:#fff;font-weight:400;line-height:1;letter-spacing:.02em;
  padding-bottom:calc(14 * var(--u));
  text-shadow:0 calc(3 * var(--u)) 0 rgba(20,40,70,.75);
}
.ribbon.red{border-image-source:url(/frenzy/assets/ribbon_red.png?v=e869d377f2);text-shadow:0 calc(3 * var(--u)) 0 rgba(80,20,14,.75)}
.ribbon.black{border-image-source:url(/frenzy/assets/ribbon_black.png?v=e869d377f2)}
.ribbon.sm{height:calc(70 * var(--u));min-width:calc(260 * var(--u));font-size:1.5em;
  border-width:0 calc(66 * var(--u)) 0 calc(66 * var(--u));
  border-image-width:0 calc(66 * var(--u)) 0 calc(66 * var(--u));
  padding-bottom:calc(10 * var(--u));margin-top:calc(-6 * var(--u));margin-bottom:calc(10 * var(--u))}

/* ---------- screens ---------- */
.screen{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:5;
  background:radial-gradient(ellipse at 50% 45%, rgba(16,32,31,0) 30%, rgba(16,32,31,.5) 100%)}
.screen.dim{background:rgba(12,26,26,.55)}
.center{text-align:center}
.row{display:flex;gap:calc(12 * var(--u));flex-wrap:wrap;align-items:center;margin-top:calc(14 * var(--u))}
.row.end{justify-content:flex-end}
.stack{display:flex;flex-direction:column;gap:calc(8 * var(--u));align-items:stretch;margin:calc(8 * var(--u)) auto 0;width:calc(280 * var(--u));max-width:100%}
.scroll p a{color:var(--paper-soft)}

#menu{flex-direction:column}
.menu-col{display:flex;flex-direction:column;align-items:center;gap:calc(14 * var(--u))}
#menu h1{font-size:3.1em;height:calc(128 * var(--u));min-width:calc(560 * var(--u));
  border-width:0 calc(120 * var(--u)) 0 calc(121 * var(--u));
  border-image-width:0 calc(120 * var(--u)) 0 calc(121 * var(--u));
  padding-bottom:calc(20 * var(--u))}
.tag{margin:0;max-width:calc(560 * var(--u));text-align:center;font-size:1.15em;line-height:1.35;
  color:var(--cream);text-shadow:0 calc(2 * var(--u)) calc(4 * var(--u)) rgba(10,24,22,.9)}
#menu h1{font-size:2.8em;height:calc(100 * var(--u));min-width:calc(500 * var(--u));
  border-width:0 calc(104 * var(--u)) 0 calc(105 * var(--u));border-image-width:0 calc(104 * var(--u)) 0 calc(105 * var(--u));
  padding-bottom:calc(17 * var(--u))}
#menu .tag{max-width:calc(820 * var(--u))}
#menu h1{white-space:nowrap}
#menu .menu-col{gap:calc(8 * var(--u))}
.menu-buttons{display:flex;flex-direction:column;gap:calc(8 * var(--u));margin-top:calc(6 * var(--u))}
.home{position:absolute;left:calc(22 * var(--u));top:calc(18 * var(--u));font-size:.95em;
  color:var(--cream);text-decoration:none;padding:.3em .6em;border-radius:.3em;background:rgba(16,32,31,.55)}
.home:hover{background:rgba(16,32,31,.8)}

/* campaign */
/* every campaign card is the same size and shape, locked or not, one-line name or two (2026-09-28) */
.battles{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));grid-auto-rows:1fr;gap:calc(8 * var(--u))}
.battles li{display:flex;min-width:0}
.battles button{width:100%;height:calc(140 * var(--u));min-width:0;flex-direction:column;align-items:flex-start;justify-content:flex-start;
  gap:calc(2 * var(--u));padding:calc(1 * var(--u)) calc(3 * var(--u)) calc(14 * var(--u));text-align:left;font-weight:400;font-size:.9em}
.battles .name{min-height:2.2em;display:block}
.battles .best{min-height:1.1em;display:block}
.region{margin:calc(12 * var(--u)) 0 calc(6 * var(--u));font-size:1.15em;font-weight:400;color:var(--paper-ink)}
.campside{display:flex;align-items:center;gap:calc(16 * var(--u));flex-wrap:wrap}
.campside p{margin:0;font-size:.9em;color:var(--paper-soft)}
.campdiff{margin-top:calc(8 * var(--u))}
.campdiff .lbl{font-size:1.05em}
.battles .num{font-size:.8em;opacity:.85}
.battles .name{font-weight:400;font-size:1.05em;line-height:1.1}
.battles .foes{display:flex;gap:calc(4 * var(--u));margin-top:auto;min-height:calc(18 * var(--u))}
.battles .foes i{width:calc(16 * var(--u));height:calc(18 * var(--u));display:block;
  clip-path:polygon(0 0,100% 0,100% 62%,50% 100%,0 62%);box-shadow:inset 0 0 0 calc(2 * var(--u)) rgba(0,0,0,.35)}
.battles .best{font-size:.75em;opacity:.9}
.foe-red{background:var(--red)}.foe-yellow{background:var(--yellow)}.foe-purple{background:var(--purple)}

/* skirmish */
fieldset{border:0;margin:0 0 calc(7 * var(--u));padding:0;display:flex;align-items:center;gap:calc(14 * var(--u))}
legend{float:left;width:calc(120 * var(--u));font-weight:400;font-size:1.05em}
.chips{display:flex;gap:calc(6 * var(--u))}
.chips.wrap{flex-wrap:wrap}
.chips button{min-width:calc(92 * var(--u));min-height:calc(52 * var(--u))}
.chips button[aria-pressed="false"]{filter:saturate(.25) brightness(.8)}
.chips button, #pct button{
  display:inline-flex;align-items:center;justify-content:center;
  border-style:solid;border-color:transparent;
  border-width:calc(14 * var(--u)) calc(14 * var(--u)) calc(17 * var(--u));
  border-image:url(/frenzy/assets/btn_blue.png?v=e869d377f2) 47 45 fill / calc(14 * var(--u)) calc(14 * var(--u)) calc(17 * var(--u)) stretch;
  color:#fff;font-weight:400;text-shadow:0 calc(2 * var(--u)) 0 rgba(12,40,60,.8)}

/* how to */
.howto{display:grid;grid-template-columns:repeat(3,1fr);gap:calc(22 * var(--u))}
.howto h3{margin:0 0 .3em;font-size:1.15em}
.howto p{margin:0 0 .55em;font-size:.9em;line-height:1.35;color:var(--paper-ink)}
.keys{font-size:.8em;color:var(--paper-soft);margin:.4em 0 0}

/* ---------- HUD ---------- */
#hud{position:absolute;inset:0;pointer-events:none;z-index:3}
#hud button{pointer-events:auto}
.hud-top{position:absolute;left:calc(14 * var(--u));right:calc(18 * var(--u));top:calc(12 * var(--u));
  display:flex;justify-content:space-between;align-items:flex-start}
.tools{display:flex;gap:calc(6 * var(--u))}
.sq{min-width:calc(56 * var(--u));min-height:calc(56 * var(--u));font-size:.95em;
  display:inline-flex;align-items:center;justify-content:center;
  border-style:solid;border-color:transparent;
  border-width:calc(13 * var(--u)) calc(13 * var(--u)) calc(16 * var(--u));
  border-image:url(/frenzy/assets/btn_blue.png?v=e869d377f2) 47 45 fill / calc(13 * var(--u)) calc(13 * var(--u)) calc(16 * var(--u)) stretch;
  color:#fff;font-weight:400;text-shadow:0 calc(2 * var(--u)) 0 rgba(12,40,60,.8)}
.sq:active{border-image-source:url(/frenzy/assets/btn_blue_down.png?v=e869d377f2)}
.ico[data-i="sound"]{width:calc(26 * var(--u));height:calc(26 * var(--u));display:block;
  background:url(/frenzy/assets/sound.png?v=e869d377f2) center/contain no-repeat}
#btnSound.off .ico{opacity:.35;filter:grayscale(1)}
#btnSound.off{filter:saturate(.3) brightness(.85)}
.ico[data-i="pause"]{width:calc(16 * var(--u));height:calc(18 * var(--u));display:block;
  border-left:calc(5 * var(--u)) solid #fff;border-right:calc(5 * var(--u)) solid #fff;
  filter:drop-shadow(0 calc(2 * var(--u)) 0 rgba(12,40,60,.8))}
#clock{font-size:1.25em;font-weight:400;color:#fff;font-variant-numeric:tabular-nums;
  text-shadow:0 calc(2 * var(--u)) 0 rgba(10,24,22,.85);padding-top:calc(6 * var(--u))}

#pct{position:absolute;left:calc(14 * var(--u));top:50%;transform:translateY(-50%);
  display:flex;flex-direction:column;gap:calc(6 * var(--u))}
#pct button{min-width:calc(76 * var(--u));min-height:calc(64 * var(--u));font-size:1.05em}
#pct button small{font-size:.7em;margin-left:1px}
#pct button[aria-checked="false"]{filter:saturate(.25) brightness(.78)}
#pct button[aria-checked="true"]{transform:translateX(calc(6 * var(--u)))}

#power{position:absolute;left:50%;bottom:calc(12 * var(--u));transform:translateX(-50%);
  width:calc(620 * var(--u));height:calc(26 * var(--u));display:flex;
  border-radius:calc(6 * var(--u));overflow:hidden;
  box-shadow:0 0 0 calc(3 * var(--u)) rgba(16,32,31,.85), 0 calc(6 * var(--u)) calc(10 * var(--u)) rgba(10,24,22,.35)}
#power span{display:flex;align-items:center;justify-content:center;min-width:0;overflow:hidden;
  font-size:.8em;font-weight:400;color:#fff;text-shadow:0 1px 0 rgba(0,0,0,.6);
  transition:flex-grow .6s cubic-bezier(.16,1,.3,1);font-variant-numeric:tabular-nums}
.t1{background:var(--blue)}.t2{background:var(--red)}.t3{background:var(--yellow)}.t4{background:var(--purple)}.t0{background:var(--grey)}

#actions{position:absolute;z-index:4;display:flex;flex-direction:column;gap:calc(4 * var(--u));
  pointer-events:auto;width:calc(176 * var(--u))}
#actions button{display:flex;justify-content:space-between;align-items:center;min-height:calc(50 * var(--u));
  border-style:solid;border-color:transparent;
  border-width:calc(11 * var(--u)) calc(12 * var(--u)) calc(14 * var(--u));
  border-image:url(/frenzy/assets/btn_blue.png?v=e869d377f2) 47 45 fill / calc(11 * var(--u)) calc(12 * var(--u)) calc(14 * var(--u)) stretch;
  color:#fff;font-size:.88em;font-weight:400;text-shadow:0 calc(2 * var(--u)) 0 rgba(12,40,60,.8);padding:0 calc(4 * var(--u))}
#actions button[data-act="up"]{border-image-source:url(/frenzy/assets/btn_red.png?v=e869d377f2);text-shadow:0 calc(2 * var(--u)) 0 rgba(70,16,12,.8)}
#actions button:disabled{filter:grayscale(.9) opacity(.75);cursor:not-allowed}
#actions .cost{font-size:.85em;opacity:.95;display:inline-flex;align-items:center;gap:calc(3 * var(--u))}
#actions .cost::after{content:"";width:calc(9 * var(--u));height:calc(12 * var(--u));background:currentColor;
  clip-path:polygon(0 0,100% 0,100% 62%,50% 100%,0 62%)}
#actions .cost:empty::after{display:none}
#actions .note{margin:0;font-size:.72em;line-height:1.25;color:#fff;text-align:center;
  text-shadow:0 1px 0 #000, 0 0 calc(6 * var(--u)) rgba(0,0,0,.8)}

/* rival taunts, top left beside the pause buttons */
#taunt{position:absolute;left:calc(214 * var(--u));top:calc(12 * var(--u));z-index:4;display:flex;align-items:center;
  gap:calc(8 * var(--u));pointer-events:none;max-width:calc(620 * var(--u))}
#taunt .face{flex:none;width:calc(78 * var(--u));height:calc(78 * var(--u));border-radius:calc(12 * var(--u));
  background:#f4e3c1 url(/frenzy/assets/portraits.png?v=e869d377f2) 0 0/600% 100% no-repeat;
  box-shadow:0 0 0 calc(4 * var(--u)) var(--team, #7d8591), 0 calc(6 * var(--u)) calc(12 * var(--u)) rgba(10,24,22,.4)}
#taunt .bubble{position:relative;display:flex;flex-direction:column;gap:calc(2 * var(--u));
  border-style:solid;border-color:transparent;border-width:calc(14 * var(--u)) calc(16 * var(--u));
  border-image:url(/frenzy/assets/paper.png?v=e869d377f2) 44 52 45 fill / calc(14 * var(--u)) calc(16 * var(--u)) stretch;
  color:var(--paper-ink);font-size:.92em;line-height:1.15;padding:0 calc(4 * var(--u));
  filter:drop-shadow(0 calc(6 * var(--u)) calc(8 * var(--u)) rgba(10,24,22,.35))}
#taunt .who{font-weight:400;font-size:.8em;color:var(--paper-soft);letter-spacing:.04em}
#taunt.pop{animation:taunt-in .45s cubic-bezier(.16,1,.3,1) both}
@keyframes taunt-in{from{opacity:0;transform:translateX(calc(-24 * var(--u))) scale(.92)}to{opacity:1;transform:none}}

#toast{position:absolute;left:50%;bottom:calc(56 * var(--u));transform:translateX(-50%);z-index:4;
  max-width:calc(640 * var(--u));text-align:center;font-size:.92em;line-height:1.25;color:#fff;
  background:rgba(16,32,31,.82);padding:.5em 1em;border-radius:.4em;pointer-events:none;
  opacity:0;transition:opacity .35s ease-out}
#toast.on{opacity:1}

#loading{position:absolute;inset:0;display:grid;place-items:center;z-index:9;background:var(--sea);
  color:#fff;font-size:1.4em;text-shadow:0 2px 0 rgba(10,24,22,.6)}
#rotate{position:fixed;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;
  background:var(--ink);color:var(--cream);font-size:1.2rem;padding:2rem;text-align:center}

@media (max-height:500px){
  .legal{font-size:.55rem;min-height:1.1rem;padding-top:.1rem;padding-bottom:calc(.1rem + env(safe-area-inset-bottom))}
  #game{width:min(100vw, calc((100dvh - 1.1rem) * 16 / 9))}
}
@media (prefers-reduced-motion: reduce){
  #menu h1{animation:none}
  #taunt.pop{animation:none}
  .btn, #power span, #toast{transition:none}
}

/* ---------- shared site menu (/assets/menu.js, 2026-10-01) ----------
   Continue, Start New Game, Load Game, Skirmish, How to play, Settings, Credits, Exit, drawn with the game's own
   blue and red Tiny Swords buttons. Load, Settings and Credits open on a paper scroll. */
#mainMenu{--vm-gap:calc(6 * var(--u));--vm-width:calc(340 * var(--u));--vm-accent:var(--blue);
  --vm-danger:#b8352a;--vm-muted:var(--paper-soft);margin-top:calc(2 * var(--u))}
#mainMenu .btn.big{min-width:0;min-height:calc(50 * var(--u));font-size:1.08em;
  border-width:calc(11 * var(--u)) calc(14 * var(--u)) calc(15 * var(--u));
  border-image-width:calc(11 * var(--u)) calc(14 * var(--u)) calc(15 * var(--u))}
#mainMenu .btn.big .vm-sub{font-size:.62em;margin-top:.15em;opacity:.92}
#mainMenu .btn.big:disabled{filter:grayscale(.9) brightness(.85);opacity:.7}
#mainMenu[data-vm-view="load"],#mainMenu[data-vm-view="replace"]{--vm-width:calc(580 * var(--u))}
#mainMenu[data-vm-view="settings"],#mainMenu[data-vm-view="credits"]{--vm-width:calc(430 * var(--u))}
#mainMenu .vm-panel{
  border-style:solid;border-color:transparent;
  border-width:calc(22 * var(--u)) calc(26 * var(--u)) calc(23 * var(--u));
  border-image:url(/frenzy/assets/paper.png?v=e869d377f2) 44 52 45 fill / calc(22 * var(--u)) calc(26 * var(--u)) calc(23 * var(--u)) stretch;
  color:var(--paper-ink);padding:calc(6 * var(--u)) calc(14 * var(--u)) calc(4 * var(--u));
  filter:drop-shadow(0 calc(10 * var(--u)) calc(14 * var(--u)) rgba(10,24,22,.45))}
#mainMenu .vm-panel .btn{min-height:calc(56 * var(--u));font-size:1.05em}
#mainMenu .vm-slot-btn{padding:0 calc(14 * var(--u));font-size:.92em}
#mainMenu .vm-del{font-weight:400}
#mainMenu .vm-credits .vm-note a{color:var(--paper-soft)}
.vm-h{font-weight:400;color:var(--paper-ink)}
.vm-slider{font-size:1.05em}
.pause-settings{--vm-accent:var(--blue);--vm-gap:calc(8 * var(--u));--vm-width:100%;margin-top:calc(4 * var(--u))}
.pause-settings .vm-back{min-height:calc(56 * var(--u))}

/* Main menu (2026-10-01): the banner unfurls across the top of the screen, then the name appears;
   the buttons sit centred below it. No tagline, and no small print under Continue or Start New Game.
   #menu scrolls as a last resort so nothing is ever cut off. */
#menu{overflow-y:auto;justify-content:flex-start;scrollbar-width:none}
#menu .menu-col{display:flex;flex-direction:column;align-items:center;width:100%;min-height:100%;
  padding:calc(16 * var(--u)) 0 calc(14 * var(--u));gap:calc(8 * var(--u))}
#menu h1{flex:none;margin:0 auto;
  /* --rends = the two ribbon tails together; the banner opens to fit the name with a little room each side */
  --rends:calc(209 * var(--u));--rw:calc(var(--rends) + 6em);width:var(--rw);min-width:0;
  animation:banner-grow 1.1s cubic-bezier(.65,0,.35,1) .2s both}
#menu h1 .name{display:inline-block;animation:name-in 1.4s ease-in-out 1.2s both}
/* both tails show from the start, joined in the middle; the middle then grows outward and the name fades in */
@keyframes banner-grow{from{width:calc(var(--rends) + .8em)}to{width:var(--rw)}}
@keyframes name-in{from{opacity:0}to{opacity:1}}
#mainMenu{margin:auto 0;--vm-width:calc(330 * var(--u));--vm-gap:calc(5 * var(--u))}
#mainMenu .btn.big{min-height:calc(46 * var(--u));font-size:1em}
#mainMenu [data-vm="continue"] .vm-sub,#mainMenu [data-vm="new"] .vm-sub{display:none}
#menu .vim-live--frenzy{right:auto;left:calc(22 * var(--u))}
#mainMenu[data-vm-view="load"],#mainMenu[data-vm-view="replace"]{--vm-width:calc(560 * var(--u))}
#mainMenu[data-vm-view="settings"],#mainMenu[data-vm-view="credits"]{--vm-width:calc(430 * var(--u))}
@media (prefers-reduced-motion: reduce){#menu h1,#menu h1 .name{animation:none}}
/* phones held sideways are too short for banner + nine buttons in one column: banner top left, buttons on the right */
@container (max-height: 460px){
  #menu .menu-col{display:grid;grid-template-columns:auto auto;justify-content:center;align-items:start;
    column-gap:calc(40 * var(--u));padding:calc(12 * var(--u)) calc(24 * var(--u))}
  #menu h1{grid-column:1;grid-row:1;margin:calc(10 * var(--u)) 0 0}
  #mainMenu{grid-column:2;grid-row:1;margin:0;align-self:center}
  #menu .menu-col:has(#mainMenu:is([data-vm-view="load"],[data-vm-view="replace"])) > h1{display:none}
  #menu .menu-col:has(#mainMenu:is([data-vm-view="load"],[data-vm-view="replace"])) #mainMenu{grid-column:1 / span 2}
}
/* phones held upright: the live battle fills the screen height and the menu sits over it */
body.portrait-menu #stage{overflow:hidden}
body.portrait-menu #game{width:calc((100dvh - 4.4rem) * 16 / 9)}
body.portrait-menu .legal{position:relative;z-index:11;background:var(--ink)}
body.portrait-menu #menu{position:fixed;inset:0 0 4.4rem;z-index:10;overflow:auto;justify-content:flex-start;
  padding:max(1rem, env(safe-area-inset-top)) 1rem 1rem;background:rgba(16,32,31,.45);font-size:16px;--u:.62px}
body.portrait-menu #menu .menu-col{display:flex;margin:auto 0}
body.portrait-menu #menu h1{--rends:6.8rem;min-width:0;width:auto;max-width:100%;font-size:2.2em;white-space:nowrap;height:4.6rem;
  border-width:0 3.4rem 0 3.4rem;border-image-width:0 3.4rem 0 3.4rem;padding-bottom:.7rem}
body.portrait-menu #mainMenu{width:min(19rem, 100%);--vm-width:19rem}
body.portrait-menu #mainMenu .btn.big{min-height:2.9rem;font-size:1.2em}

/* vm-mute room (2026-10-04): the site-wide mute button from /assets/menu.js sits in the top right corner. */
.hud-top{right:calc(18 * var(--u) + 52px)}

#taunt { left: 50%; transform: translateX(-50%); top: calc(12 * var(--u)); max-width: min(60vw, 620px); padding-right: 28px; }
#taunt.pop { animation: taunt-center .3s ease-out both; }
@keyframes taunt-center { from { opacity: 0; transform: translate(-50%, -12px); } to { opacity: 1; transform: translate(-50%, 0); } }
#dismissTaunt { pointer-events: auto; position: absolute; top: -3px; right: 0; width: 30px; height: 30px; border: 0; border-radius: 4px; background: #26312d; color: white; font: 26px/1 sans-serif; cursor: pointer; }
#skillsHud { position: absolute; left: 50%; bottom: 12px; transform: translateX(-50%); display: flex; gap: 8px; pointer-events: auto; }
#skillsHud .btn { font-size: 20px; min-height: 42px; }
.store-scroll { width: min(940px, 94vw); max-height: 94vh; overflow: auto; }
#skillList { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
.skill-card { display: flex; align-items: start; gap: 12px; background: rgba(91, 63, 35, .08); padding: 12px; }
.skill-card canvas { width: 72px; height: 72px; flex: none; image-rendering: pixelated; }
.skill-card h3 { margin: 0; font-size: 26px; }
.skill-card h3 small { display: block; font-size: 18px; }
.skill-card p { font-size: 20px; margin: 6px 0; }
.skill-card .btn { font-size: 20px; }
#storeBalance, #overTime { font-size: 32px; margin: 12px 0; }
#overReward { font-size: 23px; }
@media (max-width: 700px) { #skillList { grid-template-columns: 1fr; } .store-scroll { padding: 24px; } #taunt { max-width: 64vw; } #taunt .face { display: none; } }
@media (prefers-reduced-motion: reduce) { #taunt.pop { animation: none; } }
