@import url("tokens.css");

* { margin:0; padding:0; box-sizing:border-box; }

  html,body{width:100%;height:100%;height:100dvh;overflow:hidden;background:#02060b;font-family:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,'Courier New',monospace;}
  body.is-mobile #gameCanvas{cursor:none;}
  body.is-mobile #reticle{display:none !important;}
  #gameCanvas{display:block;position:absolute;inset:0;width:100%;height:100%;z-index:1;cursor:crosshair;}
  #grade{position:fixed;inset:0;pointer-events:none;z-index:7;box-shadow:inset 0 0 120px rgba(0,0,0,var(--vignette));}
  #grain{position:absolute;inset:0;pointer-events:none;opacity:var(--grain-opacity);mix-blend-mode:overlay;}
  #gpuFxCanvas{position:fixed;inset:0;z-index:6;width:100%;height:100%;pointer-events:none;display:block;}

  /* ===== LEADERBOARD ===== */
  #leaderboard {
    position:relative; width:100%; box-sizing:border-box;
    margin:14px 0 16px; padding:12px 14px;
    user-select:none;
    text-align:left;
    background:rgba(3,10,18,.92);
    border:1px solid rgba(84,217,255,.24);
    border-radius:var(--radius-md);
    box-shadow:0 8px 32px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.05);
  }
  .lb-header {
    display:flex; align-items:center; justify-content:space-between;
    margin-bottom:8px; padding-bottom:5px; border-bottom:1px solid var(--hairline-soft);
  }
  #leaderboard .title {
    font-size:8.5px; letter-spacing:2px; color:var(--cyan);
    text-transform:uppercase; font-weight:bold;
  }
  #leaderboardRows {
    max-height:175px; overflow-y:auto; padding-right:2px;
  }
  #leaderboardRows::-webkit-scrollbar { width:4px; }
  #leaderboardRows::-webkit-scrollbar-thumb { background:rgba(84,217,255,.25); border-radius:2px; }
  #leaderboardRows .lb-row {
    display:flex; justify-content:space-between; align-items:center; gap:8px;
    padding:3px 4px; color:var(--text-muted);
    font-size:9px; line-height:1.3;
    border-radius:3px;
    transition:color var(--duration-normal) var(--ease-out), background-color var(--duration-normal) var(--ease-out);
    opacity: 0;
    animation: lbRowIn 250ms var(--ease-out) forwards;
  }
  #leaderboardRows .lb-row:nth-child(1) { animation-delay: 550ms; }
  #leaderboardRows .lb-row:nth-child(2) { animation-delay: 580ms; }
  #leaderboardRows .lb-row:nth-child(3) { animation-delay: 610ms; }
  #leaderboardRows .lb-row:nth-child(4) { animation-delay: 640ms; }
  #leaderboardRows .lb-row:nth-child(5) { animation-delay: 670ms; }
  #leaderboardRows .lb-row:nth-child(6) { animation-delay: 700ms; }
  #leaderboardRows .lb-row:nth-child(7) { animation-delay: 730ms; }

  @keyframes lbRowIn {
    from { opacity: 0; transform: translateX(8px); }
    to   { opacity: 1; transform: translateX(0); }
  }

  /* Brief highlight flash on the player's own row */
  #leaderboardRows .lb-row.current {
    color:var(--text-primary); font-weight:bold;
    background:rgba(84,217,255,.14); border-radius:3px; padding:3px 6px; margin:0 -2px;
    box-shadow:0 0 10px rgba(84,217,255,.25);
    border:1px solid rgba(84,217,255,.35);
    animation: lbRowIn 250ms var(--ease-out) forwards,
               lbCurrentFlash 600ms var(--ease-out) 900ms forwards;
  }
  /* F1: Define the missing keyframe (was referenced but never declared — silently broken) */
  @keyframes lbCurrentFlash {
    0%   { background: rgba(84,217,255,.40); box-shadow: 0 0 18px rgba(84,217,255,.55); }
    100% { background: rgba(84,217,255,.14); box-shadow: 0 0 10px rgba(84,217,255,.25); }
  }
  .lb-left {
    display:flex; align-items:center; gap:6px; overflow:hidden;
  }
  .lb-flag {
    font-size:12px; line-height:1; display:inline-block;
  }
  .lb-name {
    letter-spacing:1px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:180px;
    color:var(--text-primary); font-weight:600;
  }
  .lb-score {
    font-variant-numeric:tabular-nums; font-weight:bold; color:#ffb454; font-size:10px;
  }
  #leaderboardRows .lb-row .rank {
    display:inline-flex; align-items:center; justify-content:center;
    width:18px; height:14px; border-radius:3px;
    font-size:7.5px; font-weight:bold;
    background:var(--hairline-soft); color:var(--text-muted);
  }
  #leaderboardRows .lb-row:nth-child(1) .rank { background:rgba(255,180,84,.25); color:var(--accent); }
  #leaderboardRows .lb-row:nth-child(2) .rank { background:rgba(226,232,240,.20); color:#e2e8f0; }
  #leaderboardRows .lb-row:nth-child(3) .rank { background:rgba(217,119,6,.22); color:#d97706; }

  /* Pilot Identification Hero Card */
  .pilotHeroCard {
    margin:12px auto 14px; padding:12px 16px; max-width:480px; width:100%;
    background:linear-gradient(135deg, rgba(84,217,255,.12) 0%, rgba(8,20,32,.75) 100%);
    border:1.5px solid rgba(84,217,255,.5); border-radius:var(--radius-md);
    box-shadow:0 6px 24px rgba(0,0,0,.45), 0 0 16px rgba(84,217,255,.15), inset 0 1px 0 rgba(255,255,255,.08);
    text-align:left;
  }
  .pilotHeroTop {
    display:flex; align-items:center; justify-content:space-between; gap:8px;
    margin-bottom:8px; font-size:8.5px; letter-spacing:1.5px;
  }
  .pilotHeroLabel {
    color:var(--accent); font-weight:bold; text-transform:uppercase;
  }
  .pilotNameInputHero {
    width:100%; box-sizing:border-box; background:#040d16; border:1.5px solid rgba(84,217,255,.5);
    color:#ffb454; font-family:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,'Courier New',monospace; font-size:14px; font-weight:bold;
    letter-spacing:3px; padding:7px 12px; border-radius:4px; text-transform:uppercase;
    transition:border-color var(--duration-normal) var(--ease-out), box-shadow var(--duration-normal) var(--ease-out), background-color var(--duration-normal) var(--ease-out), color var(--duration-normal) var(--ease-out);
  }
  .pilotNameInputHero:focus {
    outline:none; border-color:var(--cyan); box-shadow:0 0 16px rgba(84,217,255,.65);
    background:#061628; color:#fff;
  }
  .pilotNameInputHero::placeholder {
    color:rgba(255,255,255,.32); font-size:11px; font-weight:normal; letter-spacing:1.5px;
  }

  /* ===== OVERLAYS ===== */
  .overlayCard{
    position:relative; width:min(620px,calc(100% - 28px)); padding:28px 28px;
    border:1px solid var(--hairline); border-radius:var(--radius-lg);
    background:var(--glass-strong);
    box-shadow:0 24px 80px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.04);
    font-family:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,'Courier New',monospace; color:#fff; text-align:center;
  }
  .overlayCard::before{
    content:''; position:absolute; inset:6px; border-radius:10px;
    pointer-events:none; opacity:.55;
    background:
      linear-gradient(var(--accent),var(--accent)) left top/14px 1px no-repeat,
      linear-gradient(var(--accent),var(--accent)) left top/1px 14px no-repeat,
      linear-gradient(var(--accent),var(--accent)) right top/14px 1px no-repeat,
      linear-gradient(var(--accent),var(--accent)) right top/1px 14px no-repeat,
      linear-gradient(var(--accent),var(--accent)) left bottom/14px 1px no-repeat,
      linear-gradient(var(--accent),var(--accent)) left bottom/1px 14px no-repeat,
      linear-gradient(var(--accent),var(--accent)) right bottom/14px 1px no-repeat,
      linear-gradient(var(--accent),var(--accent)) right bottom/1px 14px no-repeat;
  }
  .overlayCard::after{
    content:''; position:absolute; inset:0; border-radius:var(--radius-lg);
    pointer-events:none; opacity:.4;
    background:linear-gradient(180deg,transparent 0%,rgba(160,220,255,.04) 45%,rgba(255,200,120,.08) 50%,rgba(160,220,255,.04) 55%,transparent 100%);
    background-size:100% 220%; background-position:0 -60%;
    animation:sheenSweep 4s linear infinite;
  }
  @keyframes sheenSweep{from{background-position:0 -60%}to{background-position:0 160%}}

  #score.pulse{animation:scorePulse .3s ease-out;}
  @keyframes scorePulse{
    0%{transform:translateY(0) scale(1)}
    30%{transform:translateY(-3px) scale(1.08);color:#ffd9a0;text-shadow:0 0 20px var(--accent-glow),0 0 40px rgba(255,180,84,.3);}
    100%{transform:translateY(0) scale(1)}
  }

  /* ===== TOP BANNER / HUD ===== */
  #topBanner{
    position:absolute; top:10px; left:50%; transform:translateX(-50%);
    z-index:25; display:flex; align-items:center; gap:10px;
    min-height:32px; padding:5px 12px;
    border:1px solid var(--hairline);
    border-radius:var(--radius-md);
    background:linear-gradient(145deg,rgba(7,19,32,.95),rgba(6,13,22,.88));
    box-shadow:0 6px 24px rgba(0,0,0,.38), inset 0 1px 0 rgba(255,255,255,.04);
    color:#fff; font:700 11px/1 'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,'Courier New',monospace;
    pointer-events:none; user-select:none;
    white-space:nowrap;
  }
  #topBanner .bannerItem{display:flex; align-items:center; gap:6px;}
  #topBanner .bannerLabel{
    font-size:7.5px; letter-spacing:1.8px; color:var(--text-dim);
    text-transform:uppercase;
  }
  #topBanner #score{
    font-size:17px; letter-spacing:1.2px; font-weight:800;
    text-shadow:0 0 12px var(--cyan-glow);
    color:var(--text-primary);
    min-width:60px;
  }
  #topBanner #wave{
    font-size:13px; color:var(--cyan); font-weight:700;
    background:rgba(84,217,255,.08); padding:2px 6px;
    border-radius:4px; border:1px solid rgba(84,217,255,.12);
  }
  #topBanner #hpText{font-size:11px; color:var(--success); font-weight:700;}
  #topBanner #streakProgress{
    font-size:11px; color:var(--accent); font-weight:700;
    text-shadow:0 0 8px var(--accent-glow);
    transition:transform var(--duration-fast) var(--ease-out);
  }
  #topBanner .bannerSep{width:1px;height:18px;background:var(--hairline-soft);}
  #topBanner .miniBar{
    width:68px;height:6px;border-radius:3px;
    background:rgba(15,25,32,.9);overflow:hidden;
    border:1px solid var(--hairline-soft);
    box-shadow:inset 0 1px 2px rgba(0,0,0,.4);
  }
  #topBanner #hpBar{
    width:100%;height:100%;
    background:linear-gradient(90deg,#22c55e,#4ade80);
    box-shadow:0 0 8px rgba(74,222,128,.4);
    /* F2: scaleX instead of width - GPU compositor only, no layout/paint */
    transform:scaleX(1); transform-origin:left center;
    transition:transform var(--duration-normal) var(--ease-in-out), background-color 300ms var(--ease-in-out);
    border-radius:3px;
  }
  #topBanner .samMiniBar{
    width:64px;height:6px;border-radius:3px;
    background:rgba(15,25,32,.9);overflow:hidden;
    border:1px solid var(--hairline-soft);
    box-shadow:inset 0 1px 2px rgba(0,0,0,.4);
  }
  #topBanner #missileBar{
    width:100%;height:100%;
    background:linear-gradient(90deg,#0ea5e9,#38bdf8);
    box-shadow:0 0 8px rgba(56,189,248,.4);
    /* F3: scaleX instead of width - GPU compositor only */
    transform:scaleX(0); transform-origin:left center;
    transition:transform var(--duration-fast) var(--ease-in-out);
    border-radius:3px;
  }
  #topBanner #missileCountdown{
    font-size:10px; font-weight:700; min-width:38px; text-align:center;
    letter-spacing:.5px;
  }
  #topBanner .samItem{gap:6px;}

  #topBanner .nukeMiniBar{
    width:68px;height:6px;border-radius:3px;
    background:rgba(15,25,32,.9);overflow:hidden;
    border:1px solid var(--hairline-soft);
    box-shadow:inset 0 1px 2px rgba(0,0,0,.4);
  }
  #topBanner #nukeBar{
    width:100%;height:100%;
    background:linear-gradient(90deg,#ea580c,#f59e0b);
    box-shadow:0 0 8px rgba(245,158,11,.45);
    /* F4: scaleX instead of width - GPU compositor only */
    transform:scaleX(1); transform-origin:left center;
    transition:transform var(--duration-fast) var(--ease-in-out);
    border-radius:3px;
  }
  #topBanner.critical #hpBar{
    background:linear-gradient(90deg,#dc2626,#ef4444);
    box-shadow:0 0 12px rgba(239,68,68,.7);
    animation:criticalPulse 0.9s var(--ease-in-out) infinite;
  }
  @keyframes criticalPulse{
    0%,100%{opacity:1;filter:brightness(1)}
    50%{opacity:0.75;filter:brightness(1.4)}
  }
  #topBanner .nukeItem{
    gap:6px;
  }
  #topBanner .nukeItem.ready #nukeText{
    animation:nukeReadyPulse 1.1s ease-in-out infinite;
  }
  @keyframes nukeReadyPulse{
    0%,100%{filter:brightness(1)}
    50%{filter:brightness(1.4);text-shadow:0 0 12px rgba(245,158,11,1)}
  }
  #topBanner.critical #hpText{
    color:#ff5555;
    text-shadow:0 0 8px rgba(255,85,85,.8);
  }

  /* ===== SOUND TOAST ===== */
  #soundToast{
    position:absolute;left:50%;bottom:calc(20px + env(safe-area-inset-bottom, 0px));transform:translateX(-50%);
    z-index:55;padding:6px 14px;border-radius:var(--radius-sm);
    background:var(--glass-strong);border:1px solid var(--hairline);
    color:var(--text-muted);font:9px 'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,'Courier New',monospace;
    letter-spacing:1.5px;opacity:0;transition:opacity 250ms var(--ease-out), transform 250ms var(--ease-out);
    pointer-events:none;
  }
  #soundToast.show{opacity:1;transform:translateX(-50%) translateY(-4px);}

  /* ===== GAME OVER ===== */
  #gameOver{
    position:absolute;inset:0;z-index:50;
    display:none;align-items:center;justify-content:center;
    background:rgba(2,5,10,.94);
    overflow-y:auto;padding:20px 12px;
  }
  #gameOverCard{
    text-align:center;color:#fff;font-family:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,'Courier New',monospace;
    padding:32px 36px;border-radius:var(--radius-lg);
    background:var(--glass-strong);
    border:1px solid rgba(255,74,58,.35);
    box-shadow:0 24px 80px rgba(0,0,0,.75),0 0 60px rgba(255,60,20,.18);
    animation:gameOverIn var(--duration-overlay) var(--ease-overlay);
    max-width:540px;width:100%;margin:auto;
    position:relative;
  }
  @keyframes gameOverIn{
    from{opacity:0;transform:scale(.92) translateY(8px)}
    to{opacity:1;transform:scale(1) translateY(0)}
  }
  .gameOverTitle{
    font-size:clamp(24px,7vw,40px);letter-spacing:.12em;margin:2px 0 6px;
    color:var(--danger);text-shadow:0 0 30px rgba(255,74,58,.65),0 0 60px rgba(255,40,20,.3);
    animation:gameOverPulse 2s ease-in-out infinite;
  }
  @keyframes gameOverPulse{
    0%,100%{text-shadow:0 0 30px rgba(255,74,58,.65),0 0 60px rgba(255,40,20,.3)}
    50%{text-shadow:0 0 44px rgba(255,74,58,.85),0 0 80px rgba(255,40,20,.45)}
  }
  .gameOverSub{
    font-size:10px;letter-spacing:2.5px;color:rgba(255,180,160,.75);margin-bottom:14px;
    text-transform:uppercase;
  }
  .finalScoreBox{
    margin:10px 0 16px;padding:12px 16px;
    background:rgba(255,74,58,.06);border:1px solid rgba(255,74,58,.22);
    border-radius:var(--radius-md);
  }
  .finalScoreLabel{
    font-size:9px;letter-spacing:2.5px;color:rgba(255,180,160,.7);margin-bottom:3px;
    text-transform:uppercase;
  }
  .finalScoreVal{
    font-size:32px;font-weight:900;letter-spacing:3px;color:#fff;
    text-shadow:0 0 20px rgba(255,180,84,.5);line-height:1.1;
  }
  .newRecordBadge{
    display:inline-block;margin-top:6px;font-size:9px;letter-spacing:2px;font-weight:bold;
    color:#54d9ff;background:rgba(84,217,255,.12);border:1px solid rgba(84,217,255,.35);
    padding:3px 10px;border-radius:12px;animation:pulseSlow 1.5s infinite;
  }
  @keyframes pulseSlow{
    0%,100%{transform:scale(1);opacity:.9}
    50%{transform:scale(1.04);opacity:1}
  }
  .alertBadge{
    display:inline-block;font-size:8.5px;letter-spacing:2px;color:var(--danger);
    padding:3px 10px;border:1px solid rgba(255,74,58,.35);
    border-radius:var(--radius-sm);background:rgba(255,74,58,.1);
    margin-bottom:8px;text-transform:uppercase;
  }
  .gameOverStats{
    display:grid;grid-template-columns:repeat(4,1fr);gap:8px;
    margin:12px 0 16px;text-align:center;
  }
  @media(max-width:520px){.gameOverStats{grid-template-columns:repeat(2,1fr);}}
  
  .statCard{
    background:rgba(18,8,12,.7);border:1px solid rgba(255,74,58,.2);
    border-radius:var(--radius-sm);padding:9px 6px;
    display:flex;flex-direction:column;gap:3px;
    opacity: 0;
    transform: translateY(6px);
    animation: statFadeIn 300ms var(--ease-out) forwards;
  }
  .statCard:nth-child(1) { animation-delay: 350ms; }
  .statCard:nth-child(2) { animation-delay: 400ms; }
  .statCard:nth-child(3) { animation-delay: 450ms; }
  .statCard:nth-child(4) { animation-delay: 500ms; }

  @keyframes statFadeIn {
    from { opacity: 0; transform: translateY(6px); }
    to   { opacity: 1; transform: translateY(0); }
  }
  .statLabel{font-size:8px;letter-spacing:1.2px;color:rgba(255,180,160,.65);text-transform:uppercase;}
  .statVal{font-size:15px;font-weight:bold;color:#ffb454;letter-spacing:1px;}
  .restartBtn{
    width:100%;margin:10px 0 10px;padding:14px 18px;
    background:linear-gradient(90deg,#ff4a3a,#ff9428);
    box-shadow:0 0 24px rgba(255,80,40,.4);
    color:#fff;
  }
  .gameOverPrompt{
    font-size:8.5px;letter-spacing:1.8px;color:var(--text-dim);margin-top:4px;
    text-transform:uppercase;
  }

  /* ===== START SCREEN ===== */
  #startScreen{
    position:absolute;inset:0;z-index:48;
    display:flex;align-items:center;justify-content:center;
    background:rgba(2,8,15,.92);
    overflow-y:auto;padding:20px 12px;
  }
  #startScreen {
    transition: opacity var(--duration-normal) var(--ease-out), transform var(--duration-normal) var(--ease-out);
  }
  #startScreen.exiting {
    opacity: 0;
    transform: scale(0.97);
    pointer-events: none;
  }
  #startScreen::before{
    content:'';position:absolute;inset:0;
    background:
      radial-gradient(ellipse 700px 450px at 50% 50%,rgba(255,180,84,.05) 0%,transparent 70%),
      repeating-linear-gradient(0deg,transparent 0px,transparent 3px,rgba(84,217,255,.015) 3px,rgba(84,217,255,.015) 4px);
    animation:scanlines 8s linear infinite;pointer-events:none;
  }
  @keyframes scanlines{from{background-position:0 0}to{background-position:0 100px}}
  .startCard{
    max-width:740px;width:100%;margin:auto;
    padding:28px 34px;animation:startCardIn 500ms var(--ease-overlay);
    position:relative;border:1px solid rgba(84,217,255,.22);
    box-shadow:0 24px 80px rgba(0,0,0,.7),0 0 50px rgba(84,217,255,.07);
  }
  @keyframes startCardIn{
    from{opacity:0;transform:scale(.92) translateY(16px)}
    to{opacity:1;transform:scale(1) translateY(0)}
  }
  .startHeaderRow{
    display:flex;align-items:center;justify-content:space-between;
    margin-bottom:10px;flex-wrap:wrap;gap:8px;
  }
  .startBeacon{
    display:inline-flex;align-items:center;gap:6px;font-size:8.5px;letter-spacing:2px;color:var(--cyan);
    padding:4px 10px;border:1px solid rgba(84,217,255,.25);
    border-radius:var(--radius-sm);background:rgba(84,217,255,.06);
  }
  .beaconDot{
    width:6px;height:6px;border-radius:50%;background:#4ade80;
    box-shadow:0 0 8px #4ade80;animation:beaconPulse 1.4s infinite;
  }
  @keyframes beaconPulse{
    0%,100%{opacity:1;transform:scale(1)}
    50%{opacity:.35;transform:scale(.75)}
  }
  .versionPill{
    font-size:8.5px;letter-spacing:1.5px;color:var(--accent);
    padding:4px 10px;border:1px solid rgba(255,180,84,.25);
    border-radius:var(--radius-sm);background:rgba(255,180,84,.06);
  }
  .startTitle{
    display:flex;align-items:center;justify-content:center;gap:12px;
    font-size:clamp(24px,7vw,44px);letter-spacing:.12em;margin-bottom:2px;
    color:var(--accent);
    text-shadow:0 0 30px var(--accent-glow),0 0 60px rgba(255,120,40,.3);
    animation:titleGlow 3s ease-in-out infinite;
  }
  .titleIcon{
    display:inline-flex;align-items:center;justify-content:center;
    font-size:38px;filter:drop-shadow(0 0 16px var(--accent-glow));
    line-height:1;margin-right:2px;
  }
  @keyframes titleGlow{
    0%,100%{text-shadow:0 0 30px var(--accent-glow),0 0 60px rgba(255,120,40,.3)}
    50%{text-shadow:0 0 40px rgba(255,180,84,.75),0 0 80px rgba(255,120,40,.45)}
  }
  .startSub{
    font-size:10.5px;letter-spacing:3px;color:var(--text-muted);margin-bottom:12px;
    text-transform:uppercase;
  }
  /* V55.4: graphics advisory (software rendering / integrated GPU) */
  .gpuAdvisory{display:flex;align-items:flex-start;gap:8px;margin:10px 0 4px;padding:8px 10px;border:1px solid rgba(84,217,255,.45);border-radius:8px;background:rgba(84,217,255,.08);color:#bfefff;font:11px/1.45 "Courier New",monospace;letter-spacing:.02em;text-align:left;}
  .gpuAdvisory--warn{border-color:rgba(255,180,84,.6);background:rgba(255,180,84,.10);color:#ffd9a3;}
  .gpuAdvisory__icon{flex:none;font-size:13px;line-height:1.2;}
  .gpuAdvisory__close{flex:none;margin-left:auto;background:none;border:0;color:inherit;opacity:.75;cursor:pointer;font-size:12px;padding:0 2px;}
  .gpuAdvisory__close:hover,.gpuAdvisory__close:focus-visible{opacity:1;}
  .startRecordBanner{
    display:inline-block;font-size:9.5px;letter-spacing:1.8px;color:var(--accent);
    padding:4px 12px;border:1px solid rgba(255,180,84,.3);
    border-radius:12px;background:rgba(255,180,84,.08);margin-bottom:14px;
  }
  .startBriefing{
    font-size:11px;line-height:1.55;color:rgba(200,225,245,.85);margin-bottom:14px;
    border-left:3px solid var(--cyan);padding:10px 14px;text-align:left;
    background:rgba(84,217,255,.04);border-radius:0 var(--radius-sm) var(--radius-sm) 0;
  }
  .threatIntelGrid{
    display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px;text-align:left;
  }
  @media(max-width:640px){.threatIntelGrid{grid-template-columns:1fr;}}
  .threatCard{
    background:rgba(8,18,30,.7);border:1px solid rgba(130,205,245,.16);
    border-radius:var(--radius-sm);padding:8px 10px;
    display:flex;flex-direction:column;gap:3px;
  }
  .threatHeader{display:flex;justify-content:space-between;align-items:center;}
  .threatName{font-size:9px;font-weight:bold;color:var(--cyan);letter-spacing:1px;}
  .threatTag{font-size:7.5px;padding:2px 5px;border-radius:3px;letter-spacing:1px;font-weight:bold;}
  .threatTag.drone{background:rgba(84,217,255,.15);color:var(--cyan);border:1px solid rgba(84,217,255,.3);}
  .threatTag.missile{background:rgba(255,180,84,.15);color:var(--accent);border:1px solid rgba(255,180,84,.3);}
  .threatTag.heavy{background:rgba(255,74,58,.18);color:#ff7060;border:1px solid rgba(255,74,58,.35);}
  .threatTag.bomber{background:rgba(217,58,43,.18);color:#ff9d8a;border:1px solid rgba(217,58,43,.38);}
  .threatTag.carrier{background:rgba(14,165,233,.20);color:#bae6fd;border:1px solid rgba(14,165,233,.42);}
  .threatTag.walker{background:rgba(148,163,184,.20);color:#cbd5e1;border:1px solid rgba(148,163,184,.42);}
  .threatDesc{font-size:8.5px;color:var(--text-muted);line-height:1.35;}

  .controlsGrid{
    display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:18px;text-align:left;
  }
  @media(max-width:640px){.controlsGrid{grid-template-columns:repeat(2,1fr);}}
  .controlBox{
    background:rgba(6,18,30,.7);border:1px solid var(--hairline-soft);
    border-radius:var(--radius-sm);padding:8px 10px;
    transition:border-color var(--duration-normal) var(--ease-out),background-color var(--duration-normal) var(--ease-out);
  }
  .ctrlKey{
    display:block;font-size:9.5px;font-weight:bold;color:var(--accent);
    letter-spacing:1px;margin-bottom:2px;
  }
  .ctrlDesc{
    display:block;font-size:8.5px;color:var(--text-muted);line-height:1.3;
  }
  .launchBtn{
    width:100%;padding:14px 18px;font:bold 12.5px/1 'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,'Courier New',monospace;
    letter-spacing:3.5px;color:#050d15;
    background:linear-gradient(90deg,#ff9d3b,#ffcd63);
    border:none;border-radius:var(--radius-md);cursor:pointer;
    box-shadow:0 0 24px rgba(255,160,50,.4),inset 0 1px 0 rgba(255,255,255,.4);
    transition:transform var(--duration-fast) var(--ease-out),box-shadow var(--duration-normal),background-color var(--duration-normal);
    position:relative;overflow:hidden;
  }
  .launchBtn::after{
    content:'';position:absolute;inset:0;
    background:linear-gradient(90deg,transparent 30%,rgba(255,255,255,.15) 50%,transparent 70%);
    transform:translateX(-100%);transition:transform 0.5s var(--ease-in-out);
  }
  .launchBtn:active{transform:scale(.985);}
  .startFooter{
    font-size:8.5px;letter-spacing:1.8px;color:var(--text-dim);margin-top:10px;text-align:center;
  }
  .startCornerMeta{
    position:fixed;bottom:12px;right:14px;z-index:60;
    font-size:8.5px;letter-spacing:1.5px;color:rgba(148,163,184,.75);
    font-family:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,'Courier New',monospace;text-transform:uppercase;
    display:inline-flex;align-items:center;gap:6px;
    background:rgba(7,19,32,.90);padding:4px 9px;border-radius:var(--radius-sm);
    border:1px solid rgba(84,217,255,.18);
    pointer-events:none;
  }
  .startCornerMeta .metaDot{
    width:5px;height:5px;border-radius:50%;background:var(--cyan);
    box-shadow:0 0 6px var(--cyan);
  }

  /* ===== RETICLE ===== */
  #reticle{
    position:fixed;inset:0;pointer-events:none;z-index:15;
  }
  #reticleRing{
    position:absolute;top:0;left:0;width:36px;height:36px;
    margin-left:-18px;margin-top:-18px;
    border:1.5px solid rgba(84,217,255,.4);
    border-radius:50%;
    transition:border-color var(--duration-normal), transform 100ms var(--ease-out);
    will-change:transform;
  }
  #reticleRing i{
    position:absolute;inset:50% 50% 50% 50%;
    width:4px;height:4px;margin:-2px;
    background:rgba(84,217,255,.6);border-radius:50%;
    box-shadow:0 0 6px rgba(84,217,255,.4);
  }
  #reticle.on #reticleRing{border-color:rgba(84,217,255,.7);}
  #reticle.on #reticleRing i{background:rgba(84,217,255,.9);}

  /* ===== GRAIN OVERLAY ===== */
  #grain{
    width:100%;height:100%;
    background-repeat:repeat;
    animation:grainShift .5s steps(4) infinite;
  }
  @keyframes grainShift{
    0%{transform:translate(0,0)}
    25%{transform:translate(-2px,1px)}
    50%{transform:translate(1px,-2px)}
    75%{transform:translate(-1px,-1px)}
    100%{transform:translate(0,0)}
  }

  /* ===== RESPONSIVE ===== */
  @media(max-width:780px){
    #topBanner{top:8px;max-width:calc(100% - 16px);gap:7px;padding:4px 8px;}
    #topBanner .bannerSep{height:14px;}
    #topBanner .bannerLabel{font-size:6.5px;letter-spacing:1px;}
    #topBanner #score{font-size:14px;}
    #topBanner .miniBar{width:48px;}
    #topBanner .samMiniBar{width:46px;}
    #leaderboard{width:100%;padding:8px 10px;margin:10px 0 12px;}
    #leaderboard .title{font-size:7.5px;}
    #leaderboardRows .lb-row{font-size:8px;}
    .lb-name{max-width:110px;}
    .startTitle{font-size:32px;letter-spacing:5px;}
    .titleIcon{font-size:26px;}
    .startCard{padding:24px 20px;}
    .controlsGrid{gap:8px;}
    .controlBox{padding:8px 10px;}
  }
  @media(max-width:480px){
    .controlsGrid{grid-template-columns:repeat(2,1fr);}
    #topBanner{gap:5px;}
    #topBanner .miniBar,
    #topBanner .samMiniBar,
    #topBanner .nukeMiniBar,
    #topBanner .fpsItem{display:none;}
    #topBanner #score{min-width:0;flex-shrink:1;}
  }

  /* Phone landscape */
  @media (max-height: 500px) and (orientation: landscape) {
    #topBanner { top: 4px; padding: 3px 8px; min-height: 26px; }
    #topBanner .bannerLabel { font-size: 5.5px; }
    #topBanner #score { font-size: 12px; }
    .waveIntro { top: 18%; }
    .waveIntro__num { font-size: 24px; }
  }

  /* Very small phones (< 400px) */
  @media (max-width: 400px) {
    #topBanner { gap: 4px; padding: 3px 6px; }
    #topBanner .bannerSep { display: none; }
    #topBanner .waveItem { display: none; }
    .startCard { padding: 16px 12px; }
    .startTitle { font-size: 22px; letter-spacing: 3px; }
    .pilotNameInputHero { font-size: 12px; padding: 5px 8px; }
  }

  /* Single scroller: the overlay screen scrolls; the card itself does not. */
  .overlayCard { overflow: visible; }

  /* ===== VIRTUAL JOYSTICK (MOBILE) ===== */
  .joystick {
    position: fixed;
    bottom: calc(24px + env(safe-area-inset-bottom, 0px));
    left: calc(24px + env(safe-area-inset-left, 0px));
    z-index: 40;
    pointer-events: auto;
    user-select: none;
    -webkit-user-select: none;
    touch-action: none;
    opacity: 0.50;
    transition: opacity var(--duration-normal) var(--ease-out);
  }
  .joystick.active { opacity: 0.80; }

  .joystick__ring {
    position: relative;
    width: 120px;
    height: 120px;
    border: 1px dashed rgba(84, 217, 255, 0.35);
    border-radius: 50%;
    background: rgba(7, 19, 32, 0.22);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    box-shadow: 0 0 12px rgba(84, 217, 255, 0.08),
                inset 0 0 16px rgba(0, 0, 0, 0.3);
  }

  .joystick__deadzone {
    position: absolute;
    top: 50%; left: 50%;
    width: 36px; height: 36px;
    margin: -18px 0 0 -18px;
    border: 1px solid rgba(84, 217, 255, 0.10);
    border-radius: 50%;
    pointer-events: none;
  }

  .joystick__thumb {
    position: absolute;
    top: 50%; left: 50%;
    width: 44px; height: 44px;
    margin: -22px 0 0 -22px;
    background: radial-gradient(circle, rgba(255, 180, 84, 0.50) 0%, rgba(255, 140, 50, 0.25) 100%);
    border: 1.5px solid rgba(255, 180, 84, 0.60);
    border-radius: 50%;
    box-shadow: 0 0 10px rgba(255, 180, 84, 0.35);
    will-change: transform;
    pointer-events: none;
  }



  /* ===== ORIENTATION HINT ===== */
  .orientHint {
    position: fixed;
    top: 56px;
    left: 50%;
    transform: translateX(-50%);
    background: rgba(7, 19, 32, 0.88);
    border: 1px solid var(--cyan);
    border-radius: 20px;
    padding: 6px 14px;
    color: var(--cyan);
    font-size: 11px;
    letter-spacing: 1px;
    z-index: 60;
    display: flex;
    align-items: center;
    gap: 6px;
    box-shadow: 0 4px 16px rgba(0,0,0,0.5);
    pointer-events: auto;
    cursor: pointer;
    animation: orientFade 3.5s ease forwards;
  }
  @keyframes orientFade {
    0% { opacity: 0; transform: translate(-50%, -10px); }
    15% { opacity: 1; transform: translate(-50%, 0); }
    75% { opacity: 1; transform: translate(-50%, 0); }
    100% { opacity: 0; transform: translate(-50%, -10px); pointer-events: none; }
  }

  /* === Audio-reactive HUD pulse (V21) === */
  :root { --hud-pulse: 0; }
  #reticleRing { transform: scale(calc(1 + var(--hud-pulse) * 0.04)); transform-origin: 50% 50%; }
  #topBanner::after {
    content:''; position:absolute; inset:-2px; border-radius:inherit; z-index:-1;
    box-shadow:0 0 24px rgba(84,217,255,.28);
    opacity:calc(var(--hud-pulse) * 1);
    pointer-events:none;
  }
  #hpBar, #missileBar, #nukeBar { filter: saturate(calc(1 + var(--hud-pulse) * 0.25)) brightness(calc(1 + var(--hud-pulse) * 0.08)); }

  /* === Wave intro banner (V21, non-blocking) === */
  .waveIntro {
    position: absolute; top: 32%; left: 50%;
    transform: translateX(-50%);
    font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, 'Courier New', monospace;
    letter-spacing: 6px;
    color: var(--text-primary);
    text-shadow: 0 0 24px var(--cyan-glow);
    pointer-events: none;
    opacity: 0;
    text-align: center;
    z-index: 30;
  }
  .waveIntro__num { font-size: 38px; font-weight: bold; }
  .waveIntro__sub { font-size: 11px; color: var(--text-muted); margin-top: 6px; letter-spacing: 4px; }
  .waveIntro.show { animation: waveIntroFade 3.0s var(--ease-in-out) forwards; }
  @keyframes waveIntroFade {
    0%   { opacity: 0; transform: translateX(-50%) scale(0.92); }
    20%  { opacity: 1; transform: translateX(-50%) scale(1.0); }
    60%  { opacity: 1; transform: translateX(-50%) scale(1.0); }
    100% { opacity: 0; transform: translateX(-50%) scale(1.04); }
  }

  /* ===== LOW-QUALITY DOM DEGRADATION (driven by body.q-low, set in setTier) ===== */
  body.q-low #grain{ display:none; }
  body.q-low #topBanner,
  body.q-low .overlayCard,
  body.q-low #gameOver,
  body.q-low #startScreen,
  body.q-low .startCornerMeta,
  body.q-low .joystick__ring{
    backdrop-filter:none;
    -webkit-backdrop-filter:none;
  }

  /* Respect reduced-motion: disable decorative and movement-based animations,
     preserve state-indicating feedback that only uses opacity/filter/color. */
  @media (prefers-reduced-motion: reduce){
    /* Disable decorative movement loops */
    #startScreen::before { animation: none !important; }
    .overlayCard::after { animation: none !important; }
    #grain { animation: none !important; }
    .beaconDot { animation: none !important; }
    .startTitle { animation: none !important; }
    .gameOverTitle { animation: none !important; }

    /* Disable entrance/exit motion (keep elements visible) */
    .statCard { animation: none !important; opacity: 1 !important; transform: none !important; }
    #leaderboardRows .lb-row { animation: none !important; opacity: 1 !important; transform: none !important; }
    #leaderboardRows .lb-row.current { animation: none !important; }
    .startCard { animation: none !important; }
    #gameOverCard { animation: none !important; }
    .waveIntro.show { animation: none !important; /* F14: removed opacity:1 — JS handles hide via display:none */ }
    .orientHint { animation: none !important; opacity: 1; }

    /* F15: Suppress infinite criticalPulse for reduced-motion users — keep danger colour, drop flicker */
    #topBanner.critical #hpBar { animation: none !important; }

    /* Reduce score pulse to color-only (remove translateY movement) */
    @keyframes scorePulse {
        0%   { color: inherit; text-shadow: none; }
        30%  { color: #ffd9a0; text-shadow: 0 0 20px rgba(255,180,84,.55), 0 0 40px rgba(255,180,84,.3); }
        100% { color: inherit; text-shadow: none; }
    }
  }

  /* ===== A11Y: screen-reader-only text + focus visibility ===== */
  .sr-only{
    position:absolute;width:1px;height:1px;padding:0;margin:-1px;
    overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;
  }
  button:focus-visible,
  input:focus-visible,
  .versionPill:focus-visible{
    outline:2px solid var(--cyan);outline-offset:2px;border-radius:var(--radius-sm);
  }

  /* ===== F5-F7: Hover transforms gated for pointer devices only =====
     Touch devices fire :hover on tap and never release — buttons would
     stay "stuck" in hover state. Gate all transform/visual hover effects
     behind @media (hover: hover) and (pointer: fine). */
  @media (hover: hover) and (pointer: fine) {
    .restartBtn:hover {
      background: linear-gradient(90deg,#ff6050,#ffaa40);
      box-shadow: 0 0 34px rgba(255,100,50,.6);
    }
    .controlBox:hover {
      border-color: var(--hairline);
      background: rgba(8,22,36,.85);
    }
    .launchBtn:hover {
      transform: scale(1.015);
      background: linear-gradient(90deg,#ffa84d,#ffe07d);
      box-shadow: 0 0 36px rgba(255,170,60,.6), inset 0 1px 0 rgba(255,255,255,.5);
    }
    .launchBtn:hover::after { transform: translateX(100%); }
  }

  /* ===== WEAPONS LAB / TUNING DASHBOARD STYLES ===== */
  .startActionRow {
    display: flex;
    gap: 12px;
    width: 100%;
    margin-top: 6px;
  }
  .startActionRow .launchBtn {
    flex: 2;
  }
  .weaponsLabBtn {
    flex: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 12px 18px;
    background: linear-gradient(135deg, rgba(84, 217, 255, 0.16), rgba(7, 19, 32, 0.90));
    border: 1px solid rgba(84, 217, 255, 0.45);
    border-radius: var(--radius-sm);
    color: var(--cyan);
    font-family: inherit;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 1.5px;
    text-decoration: none;
    text-transform: uppercase;
    cursor: pointer;
    transition: all var(--duration-fast) var(--ease-out);
    box-shadow: 0 0 16px rgba(84, 217, 255, 0.15);
  }
  .weaponsLabBtn:hover {
    background: linear-gradient(135deg, rgba(84, 217, 255, 0.32), rgba(7, 19, 32, 0.98));
    border-color: var(--cyan);
    color: #fff;
    box-shadow: 0 0 26px rgba(84, 217, 255, 0.40);
    transform: translateY(-1px);
  }
  .customTuningBadge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 6px;
    padding: 4px 12px;
    font-size: 9.5px;
    font-weight: 800;
    letter-spacing: 1.4px;
    color: var(--amber);
    background: rgba(255, 180, 84, 0.12);
    border: 1px solid rgba(255, 180, 84, 0.45);
    border-radius: 999px;
    text-decoration: none;
    cursor: pointer;
    transition: all 0.2s ease;
  }
  .customTuningBadge:hover {
    background: rgba(255, 180, 84, 0.25);
    border-color: var(--amber);
    box-shadow: 0 0 14px var(--amber-glow);
    color: #fff;
  }
  .bannerItem.labItem {
    text-decoration: none;
    cursor: pointer;
    transition: all 0.15s ease;
  }
  .bannerItem.labItem:hover {
    border-color: var(--cyan);
    background: rgba(84, 217, 255, 0.12);
  }
  .bannerItem.btnItem {
    background: transparent;
    border: none;
    color: inherit;
    font-family: inherit;
    cursor: pointer;
    padding: 0 4px;
    border-radius: var(--radius-sm);
    transition: all 0.15s ease;
  }
  .bannerItem.btnItem:hover {
    color: var(--cyan);
    background: rgba(84, 217, 255, 0.12);
  }
  .bannerItem.btnItem:focus-visible {
    outline: 1.5px solid var(--cyan);
    outline-offset: 1px;
  }
  .bannerItem.pauseItem {
    font-weight: 700;
  }
  .bannerItem.audioToggleItem {
    font-weight: 700;
  }
  @media (max-width: 600px) {
    .startActionRow {
      flex-direction: column;
    }
  }
