:root{color-scheme:dark;--gold:#e6c184;--ink:#081711;--panel:#1b3025;--text:#f3eadd;--muted:#bacab3}
*{box-sizing:border-box}html{background:var(--ink)}body{margin:0;color:var(--text);font:14px/1.5 system-ui,Segoe UI,sans-serif;background:radial-gradient(ellipse at 65% 0%,#2a4031 0%,#0b1a15 65%);min-height:100vh}a{color:var(--gold);text-decoration:none}button,select{font:inherit;cursor:pointer}button,select{touch-action:manipulation}button:focus-visible,select:focus-visible,input:focus-visible,a:focus-visible,canvas:focus-visible{outline:3px solid #ffdc8e;outline-offset:3px}[hidden]{display:none!important}
.director-header{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#142a20;border-bottom:1px solid #567259;padding:14px max(15px,calc((100vw - 1110px)/2));font:800 10px ui-monospace,monospace;letter-spacing:.07em;color:#b6cba9}.back{border:1px solid #6b845e;border-radius:3px;padding:7px 9px}
main{max-width:1110px;margin:0 auto;padding:22px 18px 44px}.director-intro{max-width:720px;margin:0 0 28px}.director-intro .kicker{font:800 11px ui-monospace,monospace;color:#dac185;letter-spacing:.1em}.director-intro h1{font:900 clamp(35px,7vw,64px)/.95 Georgia,serif;margin:12px 0}.director-intro h1 em{color:var(--gold);font-weight:400}.director-intro>p:last-child{color:var(--muted);max-width:640px}
.director-grid{display:grid;grid-template-columns:minmax(280px,390px) minmax(0,470px);align-items:start;gap:24px}.controls,.game-panel{border:1px solid #65826b;background:#14251f;padding:20px;box-shadow:0 12px 30px #030e0c8c}.controls h2{font:900 23px Georgia,serif;color:var(--gold);margin:0 0 20px}.controls label:not(.toggle){display:block;color:#e1cf9e;font:800 10px ui-monospace,monospace;letter-spacing:.09em;margin:15px 0 6px}.controls select{width:100%;background:#24392c;border:1px solid #718a6a;border-radius:4px;color:#f5e9d3;min-height:44px;padding:8px;font:800 11px ui-monospace,monospace}.controls fieldset{margin:20px 0 16px;border:1px solid #5c7456;padding:8px 12px}.controls legend{padding:0 6px;color:#ddc18f;font:800 10px ui-monospace,monospace}.toggle{display:flex;align-items:center;gap:9px;min-height:42px;font:750 12px ui-monospace,monospace;color:#e5dfcf}.toggle input{width:19px;height:19px;accent-color:#bba05c}.main-action{width:100%;min-height:49px;background:#d8bc80;border:1px solid #ffe4a0;border-radius:4px;color:#192c1c;font:900 12px ui-monospace,monospace}.main-action:hover{background:#f2dca7}.extra-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:11px}.extra-actions button,.victory-screen button{min-height:42px;background:#294a35;border:1px solid #879c70;color:#f0e4c9;border-radius:4px;font:800 10px ui-monospace,monospace;padding:8px}.extra-actions button:disabled{opacity:.45}.safety{font:700 10px/1.7 ui-monospace,monospace;color:#c2ac7c;border-top:1px solid #435945;padding-top:12px;margin-top:20px}
.game-panel{max-width:470px;padding:13px}.panel-bar{display:flex;justify-content:space-between;gap:6px;color:#e6c184;font:900 10px ui-monospace,monospace;letter-spacing:.08em;margin-bottom:9px}.panel-bar span{color:#c5d6a9}.readouts{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;background:#1b3328;border:1px solid #547453;padding:9px;margin-bottom:10px}.readouts span{display:flex;flex-direction:column;color:#a9c4a9;font:800 9px ui-monospace,monospace}.readouts strong{color:#ffe3ae;font:900 17px ui-monospace,monospace}.arena{position:relative;aspect-ratio:18/22;max-width:100%;margin:auto;border:2px solid #769370;background:#182921;overflow:hidden}.arena canvas{display:block;aspect-ratio:18/22;width:100%;height:100%;object-fit:fill;image-rendering:pixelated;touch-action:none}.victory-screen{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;padding:22px;text-align:center;color:#fff6dd;background:radial-gradient(ellipse,#544027cc,#190f1adf 70%),linear-gradient(145deg,#4f2b1a,#10161a)}.victory-symbol{font-size:clamp(26px,6vw,48px);color:#ffdd91;animation:spark 1.9s ease-in-out infinite alternate}.victory-screen p{margin:0;font:800 11px ui-monospace,monospace;color:#ffe2a5}.victory-screen h2{font:900 clamp(25px,6vw,36px) Georgia,serif;margin:0;color:#ffe7a9}.victory-screen span{font-size:12px;max-width:260px;color:#e8dec4}.victory-screen button{margin-top:8px;background:#ead095;color:#1f2c20;border-color:#fef0c3}@keyframes spark{to{transform:scale(1.15) rotate(4deg);filter:brightness(1.35)}}.touch{display:flex;flex-direction:column;align-items:center;gap:5px;margin:10px auto}.touch>div{display:flex;gap:6px}.touch button{width:57px;height:44px;border:1px solid #809a75;background:#284635;color:#eed49e;border-radius:5px;font-size:21px;font-weight:900}.status{font:850 11px/1.5 ui-monospace,monospace;color:#edcc9b;text-align:center;min-height:18px;margin:10px 0 2px}.controls-hint{text-align:center;font:750 9px/1.6 ui-monospace,monospace;color:#b8c5ae}.bottom-note{max-width:850px;color:#b2bfae;font-size:12px;margin-top:26px}
@media(max-width:830px){.director-grid{grid-template-columns:minmax(0,1fr)}.controls,.game-panel{width:100%;max-width:510px;margin:0 auto}.director-header>span{display:none}.controls{order:1}.game-panel{order:2}}@media(max-width:410px){main{padding:16px 9px 30px}.controls{padding:14px}.game-panel{padding:8px}.director-header{padding:11px}.director-intro{margin-bottom:18px}.director-intro h1{font-size:36px}.touch button{width:48px;height:40px}.extra-actions{gap:5px}.extra-actions button{font-size:9px;padding:5px}}@media(prefers-reduced-motion:reduce){.victory-symbol{animation:none}}

/* Director-only compact third-column cheat deck; never styles the ranked arcade. */
main{max-width:1270px}
.director-grid{grid-template-columns:minmax(225px,295px) minmax(0,470px) minmax(215px,255px);gap:18px}
.cheat-panel{border:2px solid #b69b69;background:#111e1e;padding:13px;align-self:start;box-shadow:inset 0 0 0 3px #26392f,0 10px 24px #07110eb8}
.cheat-header{border-bottom:2px solid #765c43;padding:1px 0 10px;display:grid;gap:5px}
.cheat-header span{font:800 9px ui-monospace,monospace;color:#b4b9a5;letter-spacing:.08em}
.cheat-header strong{font:900 19px Georgia,serif;color:#f5d695;letter-spacing:.03em}
.cheat-panel>p{color:#aebca6;font:750 9px/1.6 ui-monospace,monospace;letter-spacing:.03em}
.cheat-list{display:grid;gap:7px}
.cheat-list button{width:100%;background:#21332b;border:1px solid #8c7856;color:#ffefcf;display:grid;grid-template-columns:30px 34px 1fr;align-items:center;gap:5px;min-height:70px;padding:7px 4px;text-align:left}
.cheat-list button:hover:not(:disabled){background:#385440;border-color:#ead69f}
.cheat-list button:disabled{opacity:.5}
.cheat-list span{display:grid;gap:2px}
.cheat-list strong{font:850 10px ui-monospace,monospace;color:#ffe0a1}
.cheat-list small{font:650 10px/1.4 ui-monospace,monospace;color:#d1cfb9}
.cheat-list canvas{width:32px;height:32px;image-rendering:pixelated}
kbd{display:inline-grid;place-items:center;min-width:25px;min-height:29px;border:1px solid #d2b37c;border-radius:3px;background:#27382e;color:#fff4c7;font:850 15px ui-monospace,monospace}
.cheat-slot{display:flex;align-items:center;gap:9px;margin-top:13px;padding:9px 5px;border:1px dashed #5c6b57;color:#839781;font:700 9px ui-monospace,monospace}
.cheat-slot kbd{opacity:.6}
.cheat-panel .cheat-message{border-top:1px solid #5c765e;color:#ffcf82;padding-top:8px;min-height:35px}
.cheat-panel .cheat-hint{margin-top:18px}
.cheat-panel .cheat-hint kbd{min-width:17px;min-height:17px;font-size:10px}
/* Landscape finale is a full-screen end card, not a tiny tile in the board. */
.victory-screen{position:fixed;inset:0;z-index:1000;background:#150f1d;display:flex;align-items:end;justify-content:start;isolation:isolate;overflow:hidden}
.victory-art{position:absolute;inset:0;z-index:-2;background-image:var(--director-finale-art,linear-gradient(145deg,#65435d,#1c2737));background-position:center center;background-repeat:no-repeat;background-size:cover;image-rendering:pixelated;animation:finale-arrive 1200ms ease-out both}
.victory-screen:before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(0deg,rgba(8,9,14,.92),transparent 55%),linear-gradient(90deg,rgba(10,9,18,.54),transparent 70%)}
.victory-content{display:flex;flex-direction:column;align-items:start;gap:9px;margin:0 clamp(20px,8vw,125px) clamp(30px,6vh,85px);text-align:left;max-width:620px;padding:0}
.victory-content .victory-caption{font:900 12px ui-monospace,monospace;color:#ffe39b;text-shadow:2px 2px #130f21;letter-spacing:.15em;margin:0}
.victory-screen .victory-content h2{color:#fff0b3;font:900 clamp(32px,5vw,69px)/1 Georgia,serif;letter-spacing:.05em;text-shadow:3px 3px #5b2830,-2px -2px #402139;margin:0}
.victory-won{font:900 clamp(18px,2.8vw,32px) ui-monospace,monospace;color:#fff3cb;letter-spacing:.24em;text-shadow:2px 2px #372035}
.victory-content>span{max-width:500px;color:#fff1d7;text-shadow:2px 2px #17121c;font:800 clamp(12px,1.6vw,17px)/1.6 ui-monospace,monospace}
.victory-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:12px}
.victory-screen .victory-actions button{min-height:44px;font-size:11px}
@keyframes finale-arrive{from{opacity:.35;transform:scale(1.06)}to{opacity:1;transform:scale(1)}}
@media(max-width:1090px){.director-grid{grid-template-columns:minmax(225px,295px) minmax(0,470px);justify-content:center}.cheat-panel{grid-column:2;grid-row:2;width:100%}}
@media(max-width:830px){.director-grid{grid-template-columns:minmax(0,1fr)}.cheat-panel{grid-column:auto;grid-row:auto;order:3;max-width:510px;width:100%;margin:0 auto}.controls{order:1}.game-panel{order:2}}
@media(max-width:580px){.victory-art{background-position:35% center}.victory-content{margin:0 16px 40px}.victory-screen .victory-content h2{font-size:34px}.victory-content>span{font-size:12px}}
@media(prefers-reduced-motion:reduce){.victory-art{animation:none}}

/* Use the specifically composed 9:16 poster on phones; never squeeze desktop art. */
@media (max-width:700px) and (orientation:portrait){
 .victory-screen--hunt .victory-art{
  background-image:var(--director-finale-mobile, var(--director-finale-art));
  background-position:50% 42%;
  background-size:cover;
 }
 /* The portrait artwork already contains THE HIVE REIGNS / YOU WIN in pixels.
    Avoid displaying duplicate lettering over the monster or village. */
 .victory-screen--hunt .victory-content{
  width:100%;
  max-width:none;
  margin:0;
  padding:12px 12px calc(13px + env(safe-area-inset-bottom,0px));
  align-items:center;
  text-align:center;
  gap:8px;
  background:linear-gradient(0deg,rgba(13,11,18,.97),rgba(13,11,18,.89) 65%,transparent);
 }
 .victory-screen--hunt .victory-content h2,
 .victory-screen--hunt .victory-won,
 .victory-screen--hunt .victory-content>span{display:none}
 .victory-screen--hunt .victory-caption{
  font:800 10px/1.3 ui-monospace,monospace;
  letter-spacing:.07em;
  margin:0;
 }
 .victory-screen--hunt .victory-actions{
  display:grid;
  grid-template-columns:1fr 1fr;
  width:100%;
  max-width:420px;
  gap:8px;
  margin:0;
 }
 .victory-screen--hunt .victory-actions button{
  min-height:48px;
  font-size:clamp(9px,2.7vw,11px);
  padding:8px 5px;
  white-space:normal;
 }
}
@media(max-width:360px) and (orientation:portrait){
 .victory-screen--hunt .victory-actions{gap:5px}
 .victory-screen--hunt .victory-actions button{font-size:9px}
}

/* Art fidelity fix: a 160px thumbnail should never be blown up to 1900px.
   The 1200px high-quality source preserves all of the commissioned illustration. */
html.director-finale-open,html.director-finale-open body{
 overflow:hidden;
 overscroll-behavior:none;
}
.victory-screen--hunt{
 align-items:flex-end;
 justify-content:center;
}
.victory-screen--hunt .victory-art{
 image-rendering:auto;
 background-color:#150f1d;
 background-size:contain;
 background-position:center center;
}
.victory-screen--hunt:before{
 background:linear-gradient(0deg,rgba(6,9,17,.9) 0%,rgba(6,9,17,.45) 9%,transparent 25%);
 pointer-events:none;
}
/* Lettering and narrative are already part of the actual poster.
   Keep controls in HTML but never cover the art with a second headline. */
.victory-screen--hunt .victory-content{
 position:relative;
 z-index:1;
 width:100%;
 max-width:none;
 margin:0;
 padding:10px 18px calc(15px + env(safe-area-inset-bottom,0px));
 align-items:center;
 text-align:center;
 gap:8px;
}
.victory-screen--hunt .victory-content h2,
.victory-screen--hunt .victory-won,
.victory-screen--hunt .victory-content>span{
 display:none;
}
.victory-screen--hunt .victory-caption{
 color:#ffe2a2;
 font:800 11px/1.4 ui-monospace,monospace;
 letter-spacing:.09em;
 background:rgba(12,16,24,.82);
 padding:3px 9px;
 border:1px solid #ad8b50;
}
.victory-screen--hunt .victory-actions{
 display:flex;
 flex-wrap:wrap;
 align-items:center;
 justify-content:center;
 gap:10px;
 width:100%;
 max-width:440px;
 margin:0;
}
.victory-screen--hunt .victory-actions button{
 min-height:48px;
 flex:1 1 170px;
 padding:9px 10px;
 font-size:11px;
}
@media (max-width:700px) and (orientation:portrait){
 .victory-screen--hunt .victory-art{
  background-size:contain;
  background-position:center center;
 }
 .victory-screen--hunt .victory-content{
  background:linear-gradient(0deg,rgba(10,12,20,.92),rgba(10,12,20,.7) 70%,transparent);
  padding:9px 10px calc(12px + env(safe-area-inset-bottom,0px));
 }
 .victory-screen--hunt .victory-actions{
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  max-width:420px;
 }
 .victory-screen--hunt .victory-actions button{
  min-width:0;
  min-height:48px;
  font-size:clamp(9px,2.6vw,11px);
 }
}
@media(prefers-reduced-motion:reduce){
 .victory-screen--hunt .victory-art{animation:none}
}
