  :root{
    --mustard:#E1A730; --brown:#6B4423; --orange:#D2691E;
    --olive:#7C7A3A; --cream:#F0E6CE; --rust:#A2432B; --teal:#2E6E6A;
    --ink:#231a10;
  }
  *{box-sizing:border-box;}
  html,body{margin:0;height:100%;overflow:hidden;background:#120d07;font-family:"Courier New",ui-monospace,monospace;color:var(--cream);}
  @supports (height:100dvh){ html,body{height:100dvh;} }
  #scene{position:fixed;inset:0;}
  /* CRT / grain overlay */
  #grain{position:fixed;inset:0;pointer-events:none;z-index:5;
    background:
      radial-gradient(ellipse at center, rgba(0,0,0,0) 55%, rgba(0,0,0,.55) 100%),
      repeating-linear-gradient(0deg, rgba(0,0,0,.06) 0px, rgba(0,0,0,.06) 1px, transparent 2px, transparent 3px);
    mix-blend-mode:multiply;opacity:.7;}

  /* ---------- HUD ---------- */
  #hud{position:fixed;top:0;left:0;right:0;z-index:10;display:flex;justify-content:space-between;
    align-items:flex-start;pointer-events:none;
    padding:calc(14px + env(safe-area-inset-top)) calc(16px + env(safe-area-inset-right)) 14px calc(16px + env(safe-area-inset-left));}
  .hud-card{background:rgba(35,26,16,.82);border:2px solid var(--mustard);border-radius:10px;
    padding:10px 14px;backdrop-filter:blur(3px);box-shadow:0 6px 20px rgba(0,0,0,.5);pointer-events:auto;}
  #missionCard{max-width:min(62vw,640px);}
  #missionCard .lvl{color:var(--mustard);font-weight:bold;letter-spacing:1px;font-size:12px;text-transform:uppercase;}
  #missionCard .mission{font-size:clamp(15px,2vw,20px);margin-top:4px;line-height:1.3;color:#fff;}
  #missionCard .hint{font-size:11px;opacity:.7;margin-top:6px;}
  #progressCard{text-align:right;font-size:12px;min-width:120px;}
  #progressCard b{color:var(--mustard);font-size:22px;display:block;}
  #levelDots{margin-top:6px;letter-spacing:3px;}
  .dot{opacity:.3;transition:opacity .15s,transform .1s;}
  .dot.done{opacity:1;color:var(--mustard);} .dot.cur{opacity:1;color:#fff;}
  /* debug controls: only visible when the page is opened with ?debug */
  .btn.skip{display:none;margin-top:8px;font-size:11px;padding:5px 9px;background:rgba(226,167,48,.18);
    color:var(--mustard);border:1px solid var(--mustard);font-weight:normal;letter-spacing:.5px;}
  .btn.skip:hover{background:rgba(226,167,48,.32);}
  body.debug .btn.skip{display:inline-block;}
  body.debug .dot{cursor:pointer;}
  body.debug .dot:hover{opacity:.8;transform:scale(1.3);}

  /* ---------- Chat panel ---------- */
  #chat{position:fixed;right:calc(14px + env(safe-area-inset-right));
    bottom:calc(14px + env(safe-area-inset-bottom) + var(--vv-bottom-gap,0px));
    z-index:10;width:min(94vw,420px);max-height:min(74dvh,74vh,620px);
    background:rgba(24,18,10,.9);border:2px solid var(--brown);border-radius:14px;
    display:flex;flex-direction:column;box-shadow:0 10px 40px rgba(0,0,0,.6);overflow:hidden;}
  #chatHead{display:flex;flex-shrink:0;align-items:center;gap:8px;padding:8px 12px;background:linear-gradient(90deg,var(--rust),var(--brown));border-bottom:2px solid var(--mustard);}
  #chatHead .badge{width:12px;height:12px;border-radius:50%;background:#6a6;box-shadow:0 0 8px #6a6;}
  #chatHead .badge.think{background:var(--mustard);box-shadow:0 0 10px var(--mustard);animation:pulse .8s infinite alternate;}
  #chatHead .badge.speak{background:var(--orange);box-shadow:0 0 10px var(--orange);}
  @keyframes pulse{to{transform:scale(1.5);}}
  #chatHead .title{font-weight:bold;font-size:13px;color:#fff;flex:1;}
  #chatHead .mute{cursor:pointer;font-size:14px;opacity:.85;user-select:none;}
  #log{padding:10px 12px;flex:1 1 auto;min-height:0;max-height:min(38vh,300px);overflow-y:auto;font-size:14px;line-height:1.4;display:flex;flex-direction:column;gap:8px;}
  .msg{padding:7px 10px;border-radius:10px;max-width:88%;white-space:pre-wrap;word-wrap:break-word;}
  .msg.ai{background:#3a2b18;border:1px solid var(--brown);align-self:flex-start;border-bottom-left-radius:2px;}
  .msg.me{background:var(--teal);color:#eafffb;align-self:flex-end;border-bottom-right-radius:2px;}
  .msg.sys{background:transparent;color:#c9a24a;align-self:center;font-size:12px;text-align:center;font-style:italic;max-width:100%;}
  .msg.judge{background:rgba(20,40,38,.55);border:1px dashed var(--teal);color:#bfe9e2;align-self:center;
    max-width:94%;font-size:12.5px;font-style:italic;text-align:center;padding:6px 10px;}
  .msg.judge .jlabel{font-style:normal;font-weight:bold;color:#6fd0c4;letter-spacing:.5px;font-size:11px;}
  .msg.judge .jbar{height:5px;background:rgba(255,255,255,.12);border-radius:3px;margin:5px auto 2px;overflow:hidden;}
  .msg.judge .jbar>i{display:block;height:100%;background:linear-gradient(90deg,var(--teal),var(--mustard));transition:width .5s;}
  .msg.judge .jpct{font-style:normal;font-size:10.5px;opacity:.75;letter-spacing:.5px;}
  #inputRow{display:flex;flex-shrink:0;gap:6px;padding:8px;border-top:2px solid var(--brown);background:rgba(0,0,0,.25);}
  #inputRow input{flex:1;min-width:0;background:#120d07;border:1px solid var(--brown);color:var(--cream);
    padding:10px;border-radius:8px;font-family:inherit;font-size:16px;}
  #inputRow input:focus{outline:none;border-color:var(--mustard);}
  .btn{background:var(--mustard);color:var(--ink);border:none;padding:0 14px;border-radius:8px;
    font-weight:bold;cursor:pointer;font-family:inherit;font-size:14px;transition:transform .06s;}
  .btn:active{transform:translateY(1px);}
  .btn.mic{background:var(--rust);color:#fff;width:46px;padding:0;font-size:17px;}
  .btn.mic.listening{background:#c0392b;animation:pulse .7s infinite alternate;}
  .btn:disabled{opacity:.4;cursor:not-allowed;}

  /* ---------- Overlays ---------- */
  .overlay{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;
    background:radial-gradient(ellipse at center,rgba(40,28,12,.85),rgba(10,7,3,.96));padding:20px;}
  #winOverlay{background:transparent;}
  .panel{background:#1b140b;border:3px solid var(--mustard);border-radius:16px;max-width:560px;width:100%;
    padding:26px 30px;box-shadow:0 20px 60px rgba(0,0,0,.7);}
  .start-layout{display:flex;gap:18px;align-items:stretch;width:min(100%,1040px);max-height:calc(100vh - 40px);}
  .start-layout>.panel{max-width:none;overflow-y:auto;}
  .start-panel{flex:1;min-width:0;}
  .leaderboard-panel{flex:0 0 300px;width:300px;}
  .leaderboard-panel h2{margin-bottom:4px;}
  .leaderboard-sub{font-size:12px;opacity:.65;margin:0 0 16px;}
  .leaderboard-list{margin:0;padding-left:28px;font-size:13px;}
  .leaderboard-list li{padding:9px 0 9px 4px;border-bottom:1px solid rgba(225,167,48,.2);}
  .leaderboard-row{display:flex;justify-content:space-between;gap:8px;}
  .leaderboard-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:none;border:0;color:var(--cream);
    cursor:pointer;font:inherit;padding:0;text-align:left;}
  .leaderboard-name:hover{color:var(--mustard);text-decoration:underline;}
  .leaderboard-score{color:var(--mustard);white-space:nowrap;font-size:11px;}
  .leaderboard-empty{opacity:.6;font-style:italic;list-style:none;margin-left:-28px;}
  .panel h1{margin:0 0 4px;font-size:30px;color:var(--mustard);letter-spacing:1px;}
  .panel h2{margin:0 0 14px;font-size:15px;color:var(--orange);font-weight:normal;letter-spacing:2px;text-transform:uppercase;}
  .panel p{font-size:14px;line-height:1.55;opacity:.92;}
  .panel label{display:block;font-size:12px;text-transform:uppercase;letter-spacing:1px;color:var(--mustard);margin:14px 0 4px;}
  .panel input,.panel select{width:100%;background:#0d0904;border:1px solid var(--brown);color:var(--cream);
    padding:11px;border-radius:8px;font-family:inherit;font-size:16px;}
  .panel input:focus{outline:none;border-color:var(--mustard);}
  .panel .big{width:100%;margin-top:18px;padding:14px;font-size:16px;}
  .row2{display:flex;gap:10px;} .row2>div{flex:1;}
  .note{font-size:11px;opacity:.6;margin-top:8px;line-height:1.4;}
  .err{color:#ff8a6a;font-size:13px;margin-top:10px;min-height:16px;}
  .missions-list{font-size:13px;line-height:1.6;margin:10px 0 0;padding-left:18px;opacity:.9;}
  #winPanel h1{color:#8fe38f;}
  .quote{background:#0d0904;border-left:3px solid var(--mustard);padding:10px 12px;margin:14px 0;font-size:14px;font-style:italic;color:#fff;}
  .history-panel{max-width:760px;max-height:calc(100vh - 40px);overflow-y:auto;}
  .history-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;}
  .history-close{background:none;border:0;color:var(--cream);cursor:pointer;font-size:30px;line-height:1;padding:0;}
  .history-close:hover{color:var(--mustard);}
  .history-level-list{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:4px 0 16px;}
  .history-level-card{display:flex;flex-direction:column;gap:4px;min-height:76px;padding:9px 7px;border:1px solid var(--brown);border-radius:8px;background:#3a2b18;color:var(--cream);cursor:pointer;font:inherit;text-align:left;}
  .history-level-card:hover,.history-level-card.active{border-color:var(--mustard);background:#4b351d;}
  .history-level-card.uncleared{opacity:.42;}
  .history-level-card.active{opacity:1;box-shadow:0 0 0 1px var(--mustard);}
  .history-level-card strong{color:var(--mustard);font-size:12px;}
  .history-level-card span{font-size:11px;line-height:1.2;}
  .history-level-card small{font-size:10px;opacity:.7;margin-top:auto;}
  .history-message-panel{border-top:1px solid rgba(225,167,48,.35);padding-top:12px;}
  .history-message-panel h3{color:var(--mustard);font-size:14px;margin:0 0 10px;}
  .history-message{display:flex;flex-direction:column;gap:3px;padding:8px 10px;margin:6px 0;border-radius:8px;background:#3a2b18;border:1px solid var(--brown);
    white-space:pre-wrap;word-wrap:break-word;font-size:13px;line-height:1.4;}
  .history-message.player{background:var(--teal);border-color:var(--teal);margin-left:12%;}
  .history-message.ai{margin-right:12%;}
  .history-message b{font-size:10px;letter-spacing:.5px;color:var(--mustard);text-transform:uppercase;}
  .history-message.player b{color:#d9fffa;}
  .history-empty{font-size:12px;opacity:.6;font-style:italic;}
  .hidden{display:none!important;}
  .spinner{width:58px;height:58px;border-radius:50%;border:5px solid rgba(226,167,48,.18);
    border-top-color:var(--mustard);margin:0 auto;animation:spin .9s linear infinite;}
  @keyframes spin{to{transform:rotate(360deg);}}
  #loadingOverlay .cap{margin-top:18px;color:var(--mustard);letter-spacing:2px;text-transform:uppercase;font-size:13px;}
  #loadingOverlay .sub{margin-top:6px;color:var(--cream);opacity:.55;font-size:11px;}
  a{color:var(--mustard);}
  @media (max-width:800px){
    .start-layout{flex-direction:column;overflow-y:auto;}
    .start-layout>.panel{overflow:visible;}
    .leaderboard-panel{flex:0 0 auto;width:100%;}
    .history-level-list{grid-template-columns:repeat(2,minmax(0,1fr));}
  }
  /* Short viewports (most phones in portrait, especially with browser chrome
     eating into the visible height): shrink the HUD and log so the chat input
     and mic button are always on-screen without scrolling. */
  @media (max-height:700px){
    #hud{padding-top:calc(8px + env(safe-area-inset-top));padding-bottom:8px;}
    .hud-card{padding:7px 10px;}
    #missionCard .mission{font-size:clamp(13px,2vw,16px);margin-top:2px;}
    #missionCard .hint{margin-top:3px;}
    #chat{max-height:min(80dvh,80vh,560px);}
    #log{max-height:min(26vh,220px);}
  }
