:root{
  --bg:#050b17;
  --panel:rgba(8,16,36,.78);
  --panel2:rgba(12,24,52,.92);
  --line:rgba(85,184,255,.28);
  --line2:rgba(196,107,255,.28);
  --text:#f3f8ff;
  --muted:#a9b7d8;
  --cyan:#4ee7ff;
  --blue:#2b99ff;
  --gold:#ffd15a;
  --orange:#ff8a4a;
  --pink:#ff68d8;
  --purple:#c46bff;
  --danger:#ff5b7b;
  --radius:18px;
  --safe-top:env(safe-area-inset-top,0px);
  --safe-bottom:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  min-height:100dvh;
  overflow:hidden;
  color:var(--text);
  font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;
  background:
    radial-gradient(900px 520px at 50% -10%, rgba(78,231,255,.18), transparent 58%),
    radial-gradient(800px 640px at 100% 50%, rgba(196,107,255,.13), transparent 62%),
    radial-gradient(680px 540px at 0% 100%, rgba(255,138,74,.08), transparent 60%),
    var(--bg);
  -webkit-font-smoothing:antialiased;
  touch-action:manipulation;
}
body::before{
  content:"";
  position:fixed;
  inset:0;
  pointer-events:none;
  opacity:.13;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='144' height='124' viewBox='0 0 144 124'%3E%3Cg fill='none' stroke='%2357dfff' stroke-opacity='.22' stroke-width='1'%3E%3Cpath d='M36 2h72l36 60-36 60H36L0 62 36 2Z'/%3E%3C/g%3E%3C/svg%3E");
  background-size:86px 74px;
  mask-image:radial-gradient(circle at center,#000 50%,transparent 100%);
}
button{font:inherit;color:inherit}
.game-shell{
  width:min(1180px,100%);
  height:100dvh;
  margin:0 auto;
  padding:calc(10px + var(--safe-top)) 12px calc(12px + var(--safe-bottom));
  display:grid;
  grid-template-rows:auto auto auto minmax(0,1fr) auto;
  gap:9px;
}
.topbar,.hud-card,.charge-row,.side-card,.arena-wrap,.runbar,.dialog-card{
  border:1px solid var(--line);
  background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.012)),var(--panel);
  box-shadow:0 22px 70px rgba(0,0,0,.38), inset 0 0 0 1px rgba(255,255,255,.025);
}
.topbar{
  display:grid;
  grid-template-columns:58px 1fr 58px;
  align-items:center;
  gap:10px;
  border-radius:20px;
  padding:8px 10px;
}
.hex-button{
  border:1px solid rgba(86,184,255,.46);
  background:rgba(8,18,39,.72);
  border-radius:16px;
  min-height:50px;
  cursor:pointer;
  font-weight:950;
  box-shadow:0 0 20px rgba(78,231,255,.12), inset 0 0 14px rgba(255,255,255,.045);
}
.hex-button:active,.nova-button:active,.primary-action:active,.secondary-action:active{transform:translateY(1px)}
.hex-button.icon{font-size:1.65rem}
.title-block{text-align:center;min-width:0}
.title-block p{margin:0;color:var(--muted);font-size:.72rem;font-weight:900;letter-spacing:.16em;text-transform:uppercase}
.title-block h1{
  margin:2px 0 0;
  font-size:clamp(1.45rem,4.5vw,2.8rem);
  line-height:1;
  letter-spacing:.12em;
  text-shadow:0 0 18px rgba(80,221,255,.46),0 0 46px rgba(92,135,255,.16);
}
.hud-grid{display:grid;grid-template-columns:1.35fr 1fr 1.1fr;gap:9px}
.hud-card{border-radius:18px;padding:10px 14px;min-height:84px}
.label{display:block;font-size:.77rem;font-weight:950;letter-spacing:.15em;text-transform:uppercase;color:var(--muted)}
.label.gold{color:var(--gold)}.label.cyan{color:var(--cyan)}
.hud-card strong{display:block;line-height:1;font-variant-numeric:tabular-nums}
.score-card strong{font-size:clamp(1.95rem,4.5vw,3.6rem)}
.combo-card strong{font-size:clamp(1.9rem,4.2vw,3.3rem);color:var(--gold);text-shadow:0 0 22px rgba(255,209,90,.28)}
.hud-card small{display:block;margin-top:6px;color:var(--muted);font-weight:850}
.combo-card small{color:var(--gold);min-height:1.1em}
.hearts{display:flex;gap:7px;align-items:center;margin:11px 0 4px;min-height:24px}
.heart{
  width:19px;height:19px;display:block;
  clip-path:polygon(50% 96%,42% 86%,20% 67%,7% 51%,2% 33%,7% 17%,20% 6%,36% 5%,50% 18%,64% 5%,80% 6%,93% 17%,98% 33%,93% 51%,80% 67%,58% 86%);
  background:#1d2945;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.06);
}
.heart.full{background:linear-gradient(180deg,#6ff5ff,#20bdf5);filter:drop-shadow(0 0 8px rgba(90,238,255,.52))}
.charge-row{
  border-radius:18px;
  padding:9px 13px;
  display:grid;
  grid-template-columns:auto minmax(0,1fr) 58px;
  align-items:center;
  gap:10px;
}
.charge-row span{font-weight:950;text-transform:uppercase;color:var(--purple);letter-spacing:.11em;font-size:.78rem}
.charge-track{height:20px;border-radius:999px;overflow:hidden;background:rgba(31,21,57,.92);border:1px solid rgba(196,107,255,.34);position:relative}
.charge-track::after{
  content:"";position:absolute;inset:0;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.13) 0 14px,transparent 14px 25px);
  opacity:.6;mix-blend-mode:screen;
}
#chargeFill{height:100%;width:0;background:linear-gradient(90deg,#f38cff,#a655ff 70%,#5b1c72);box-shadow:0 0 24px rgba(211,123,255,.52)}
.charge-row strong{font-variant-numeric:tabular-nums;text-align:right}
.play-grid{
  display:grid;
  grid-template-columns:minmax(174px,220px) minmax(0,1fr) minmax(174px,220px);
  gap:10px;
  min-height:0;
}
.side-card{
  border-radius:24px;
  padding:15px 13px;
  display:flex;
  flex-direction:column;
  justify-content:flex-end;
  gap:11px;
  min-height:0;
}
.kicker{font-size:.73rem;text-transform:uppercase;letter-spacing:.15em;color:var(--cyan);font-weight:950;text-align:center}
.kicker.purple{color:var(--purple)}
.side-card h2{margin:0;text-align:center;font-size:1.35rem}
.side-card p{margin:0;color:#d3def7;line-height:1.38;text-align:center;font-size:.94rem}
.side-card b{color:#fff}
.side-card small{color:var(--muted);text-align:center}
.mini-diagram{height:104px;border-radius:17px;background:rgba(8,17,39,.72);border:1px solid rgba(85,184,255,.2);position:relative;overflow:hidden}
.meteor-mini{
  position:absolute;left:16px;top:45px;width:40px;height:28px;
  background:radial-gradient(circle at 64% 50%,#ffd07b 0 24%,#ff894b 25% 45%,#5a271c 46% 100%);
  clip-path:polygon(0 50%,20% 20%,54% 0,100% 24%,87% 68%,52% 100%,16% 82%);
  filter:drop-shadow(0 0 9px rgba(255,139,74,.65));
}
.meteor-mini::before{
  content:"";position:absolute;left:-42px;top:7px;width:52px;height:12px;
  background:linear-gradient(90deg,transparent,rgba(255,139,74,.8));filter:blur(2px);
}
.shield-mini{
  position:absolute;left:83px;top:22px;width:44px;height:66px;
  border-radius:4px 44px 44px 4px;background:linear-gradient(180deg,rgba(98,238,255,.95),rgba(39,132,255,.8));
  box-shadow:0 0 18px rgba(80,221,255,.5);
  transform:skewX(-8deg);
}
.spark-mini{
  position:absolute;right:17px;top:42px;width:46px;height:22px;
  background:linear-gradient(90deg,#7beaff,#299aff);
  clip-path:polygon(0 50%,70% 0,100% 50%,70% 100%);
  filter:drop-shadow(0 0 12px rgba(80,221,255,.75));
}
.milestones{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.milestones span{display:grid;place-items:center;height:38px;border-radius:14px;border:1px solid rgba(85,184,255,.25);background:rgba(8,18,41,.6);font-weight:950}
.milestones span:nth-child(1){color:var(--cyan)}.milestones span:nth-child(2){color:#8beaff}.milestones span:nth-child(3){color:var(--gold)}.milestones span:nth-child(4){color:var(--purple)}
.arena-wrap{
  position:relative;
  border-radius:32px;
  overflow:hidden;
  padding:8px;
  min-height:0;
}
#gameCanvas{display:block;width:100%;height:100%;min-height:360px;touch-action:none;border-radius:24px}
.touch-hint{
  position:absolute;left:50%;bottom:15px;transform:translateX(-50%);
  padding:8px 14px;border-radius:999px;background:rgba(5,11,26,.7);
  border:1px solid rgba(85,184,255,.26);color:#dceaff;font-weight:850;
  font-size:.88rem;text-align:center;pointer-events:none;transition:opacity .35s ease;max-width:92%;
}
.nova-button{
  border:1px solid rgba(196,107,255,.5);
  border-radius:24px;
  background:radial-gradient(circle at 50% 30%,rgba(255,255,255,.17),transparent 40%),linear-gradient(180deg,rgba(79,28,98,.96),rgba(30,15,48,.96));
  color:#fff;cursor:pointer;padding:18px 10px;display:grid;place-items:center;gap:6px;
  box-shadow:0 0 24px rgba(196,107,255,.18), inset 0 0 18px rgba(255,255,255,.055);
}
.nova-button:disabled{opacity:.55;cursor:not-allowed}
.nova-button.ready{opacity:1;box-shadow:0 0 36px rgba(223,137,255,.48), inset 0 0 24px rgba(255,255,255,.12)}
.nova-icon{font-size:3rem;color:#f1b4ff;text-shadow:0 0 20px rgba(224,133,255,.75)}
.nova-button span:last-child{font-size:1.5rem;font-weight:950;letter-spacing:.11em;text-transform:uppercase}
.runbar{
  border-radius:18px;padding:9px 14px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:13px;
  color:#aee9ff;font-weight:950;text-transform:uppercase;letter-spacing:.08em;
}
.runbar strong{font-size:1.9rem;color:#fff;padding-left:5px}
.wave-track{height:12px;border-radius:999px;background:rgba(10,21,44,.9);overflow:hidden;border:1px solid rgba(85,184,255,.22)}
#waveFill{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--cyan),var(--purple))}
.game-dialog{border:0;padding:0;background:transparent;color:inherit;max-width:min(720px,92vw)}
.game-dialog::backdrop{background:rgba(2,6,18,.76);backdrop-filter:blur(8px)}
.dialog-card{border-radius:24px;padding:24px 22px}
.eyebrow{margin:0 0 6px;color:var(--cyan);font-weight:950;letter-spacing:.16em;text-transform:uppercase;font-size:.74rem}
.dialog-card h2{margin:0 0 8px;font-size:2rem}
.dialog-card p{color:#d7e2fa;line-height:1.5}
.guide-list{margin:14px 0 18px;color:#dce6fa;line-height:1.5;padding-left:20px}
.dialog-actions{display:flex;flex-wrap:wrap;gap:10px}
.primary-action,.secondary-action{border:0;border-radius:15px;padding:13px 17px;font-weight:950;cursor:pointer}
.primary-action{background:linear-gradient(135deg,var(--cyan),var(--blue));color:#031426}
.secondary-action{background:#101d3b;color:#fff;border:1px solid rgba(85,184,255,.28)}
.note{font-size:.86rem;color:var(--muted)!important}
@media (max-width:960px){
  .game-shell{padding-inline:10px;gap:8px}
  .play-grid{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) auto auto}
  .arena-wrap{order:1;min-height:48vh}
  .left-card{order:2}
  .right-card{order:3}
  .side-card{padding:13px;gap:9px}
  .left-card .mini-diagram{display:none}
  .side-card p{font-size:.9rem}
}
@media (max-width:720px){
  .topbar{grid-template-columns:48px 1fr 48px;padding:7px 8px}
  .hex-button{min-height:44px;border-radius:14px}
  .title-block h1{font-size:clamp(1.12rem,7vw,1.7rem)}
  .title-block p{font-size:.62rem}
  .hud-grid{grid-template-columns:1fr;gap:7px}
  .hud-card{min-height:0;padding:9px 12px;border-radius:16px}
  .score-card strong,.combo-card strong{font-size:2rem}
  .hearts{margin:7px 0 2px}
  .charge-row{grid-template-columns:1fr 58px;grid-template-areas:"label percent" "track track";gap:7px}
  .charge-row span{grid-area:label}
  .charge-track{grid-area:track;height:18px}
  .charge-row strong{grid-area:percent}
  #gameCanvas{min-height:330px}
  .runbar{grid-template-columns:1fr;gap:6px;text-align:center}
  .side-card{display:none}
  .arena-wrap{min-height:46vh}
}
@media (max-height:720px) and (orientation:landscape){
  .side-card{display:none}
  .play-grid{grid-template-columns:1fr}
  .hud-grid{grid-template-columns:repeat(3,1fr)}
  .hud-card{min-height:0}
  #gameCanvas{min-height:270px}
}

/* v4 mobile polish: keep the arena as the focal point and make Nova reachable */
.mobile-nova-button{
  display:none;
  position:absolute;
  right:14px;
  bottom:56px;
  z-index:8;
  width:74px;
  height:74px;
  border-radius:24px;
  border:1px solid rgba(196,107,255,.55);
  background:radial-gradient(circle at 50% 28%,rgba(255,255,255,.18),transparent 38%),linear-gradient(180deg,rgba(79,28,98,.96),rgba(30,15,48,.96));
  color:#fff;
  cursor:pointer;
  box-shadow:0 0 24px rgba(196,107,255,.28), inset 0 0 18px rgba(255,255,255,.08);
  place-items:center;
  grid-template-rows:1fr auto;
  gap:0;
  padding:8px 6px 10px;
}
.mobile-nova-button span{
  font-size:2rem;
  line-height:1;
  color:#f1b4ff;
  text-shadow:0 0 18px rgba(224,133,255,.78);
}
.mobile-nova-button b{
  font-size:.78rem;
  letter-spacing:.08em;
}
.mobile-nova-button:disabled{
  opacity:.42;
  filter:saturate(.75);
}
.mobile-nova-button.ready{
  opacity:1;
  box-shadow:0 0 38px rgba(223,137,255,.58), inset 0 0 24px rgba(255,255,255,.13);
  animation:novaPulse 1.05s ease-in-out infinite alternate;
}
@keyframes novaPulse{from{transform:scale(1)}to{transform:scale(1.045)}}

@media (max-width:720px){
  .game-shell{
    padding:calc(6px + var(--safe-top)) 7px calc(8px + var(--safe-bottom));
    gap:5px;
    grid-template-rows:auto auto auto minmax(0,1fr) auto;
  }
  .topbar{
    min-height:44px;
    grid-template-columns:38px 1fr 38px;
    border-radius:14px;
    padding:5px 6px;
  }
  .hex-button{
    min-height:36px;
    width:36px;
    border-radius:12px;
    font-size:1.2rem;
  }
  .title-block h1{
    font-size:clamp(1rem,5.6vw,1.45rem);
    letter-spacing:.07em;
  }
  .title-block p{
    display:none;
  }
  .hud-grid{
    grid-template-columns:1fr 0.82fr 1fr;
    gap:5px;
  }
  .hud-card{
    padding:6px 7px;
    border-radius:12px;
  }
  .label{
    font-size:.58rem;
    letter-spacing:.08em;
  }
  .score-card strong,
  .combo-card strong{
    font-size:clamp(1.08rem,5.2vw,1.55rem);
    margin-top:2px;
  }
  .hud-card small{
    margin-top:2px;
    font-size:.62rem;
    line-height:1.05;
  }
  .hearts{
    gap:3px;
    margin:4px 0 0;
    min-height:16px;
  }
  .heart{
    width:13px;
    height:13px;
  }
  .charge-row{
    padding:5px 8px;
    border-radius:12px;
    grid-template-columns:auto 1fr 40px;
    grid-template-areas:"label track percent";
    gap:6px;
  }
  .charge-row span{
    font-size:.56rem;
    letter-spacing:.07em;
  }
  .charge-track{
    height:13px;
  }
  .charge-row strong{
    font-size:.7rem;
  }
  .play-grid{
    display:block;
    min-height:0;
  }
  .arena-wrap{
    height:100%;
    min-height:0;
    border-radius:20px;
    padding:5px;
  }
  #gameCanvas{
    min-height:0;
    height:100%;
    border-radius:16px;
  }
  .side-card{
    display:none!important;
  }
  .mobile-nova-button{
    display:grid;
  }
  .touch-hint{
    bottom:13px;
    font-size:.72rem;
    padding:6px 10px;
  }
  .runbar{
    padding:5px 8px;
    border-radius:13px;
    grid-template-columns:auto 1fr auto;
    gap:7px;
    font-size:.64rem;
    letter-spacing:.04em;
  }
  .runbar strong{
    font-size:1rem;
  }
  .wave-track{
    height:8px;
  }
}
@media (max-height:740px) and (max-width:720px){
  .hud-card small{display:none}
  .charge-row{display:none}
  .mobile-nova-button{width:66px;height:66px;bottom:42px}
}

/* v5 mobile arena-first layout: overlay the UI so the shield field owns the screen */
@media (max-width:720px){
  html,body{
    overflow:hidden;
  }
  .game-shell{
    position:relative;
    display:block;
    height:100dvh;
    width:100%;
    padding:0;
    gap:0;
    overflow:hidden;
    background:#050b17;
  }
  .play-grid{
    position:absolute;
    inset:0;
    display:block!important;
    min-height:0;
    z-index:1;
  }
  .arena-wrap{
    position:absolute;
    inset:0;
    height:100%;
    width:100%;
    min-height:0!important;
    padding:0;
    border-radius:0;
    border:0;
    background:transparent;
    box-shadow:none;
  }
  #gameCanvas{
    width:100%;
    height:100%;
    min-height:0!important;
    border-radius:0;
  }
  .topbar{
    position:absolute;
    top:6px;
    left:7px;
    right:7px;
    z-index:12;
    min-height:38px;
    padding:4px 5px;
    grid-template-columns:36px 1fr 36px;
    border-radius:14px;
    background:linear-gradient(180deg,rgba(9,17,39,.84),rgba(7,13,30,.72));
    backdrop-filter:blur(8px);
  }
  .hex-button{
    width:34px;
    min-height:34px;
    height:34px;
    border-radius:12px;
    font-size:1.05rem;
  }
  .title-block h1{
    font-size:clamp(.92rem,5vw,1.25rem);
    letter-spacing:.05em;
  }
  .title-block p{
    display:none;
  }
  .hud-grid{
    position:absolute;
    top:48px;
    left:7px;
    right:7px;
    z-index:11;
    display:grid;
    grid-template-columns:1fr .74fr .92fr;
    gap:5px;
  }
  .hud-card{
    min-height:0;
    padding:6px 7px;
    border-radius:13px;
    background:rgba(8,16,36,.68);
    backdrop-filter:blur(8px);
  }
  .label{
    font-size:.54rem;
    letter-spacing:.07em;
  }
  .score-card strong,
  .combo-card strong{
    font-size:clamp(1rem,5vw,1.42rem);
    margin-top:1px;
  }
  .hud-card small{
    display:none;
  }
  .hearts{
    margin:4px 0 0;
    gap:3px;
    min-height:15px;
  }
  .heart{
    width:13px;
    height:13px;
  }
  .charge-row{
    display:none!important;
  }
  .side-card{
    display:none!important;
  }
  .runbar{
    position:absolute;
    left:7px;
    right:7px;
    bottom:8px;
    z-index:11;
    display:grid;
    grid-template-columns:auto 1fr auto;
    gap:8px;
    align-items:center;
    padding:7px 9px;
    border-radius:14px;
    background:rgba(8,16,36,.70);
    backdrop-filter:blur(8px);
    font-size:.66rem;
    letter-spacing:.05em;
    text-align:left;
  }
  .runbar strong{
    font-size:1.08rem;
  }
  .wave-track{
    height:8px;
  }
  .mobile-nova-button{
    display:grid;
    right:12px;
    bottom:56px;
    width:74px;
    height:74px;
    z-index:14;
    border-radius:24px;
  }
  .touch-hint{
    bottom:62px;
    left:10px;
    right:90px;
    transform:none;
    max-width:none;
    padding:7px 10px;
    font-size:.72rem;
    text-align:left;
    border-radius:14px;
  }
}
@media (max-height:740px) and (max-width:720px){
  .hud-grid{
    top:46px;
  }
  .mobile-nova-button{
    width:68px;
    height:68px;
    bottom:48px;
  }
  .mobile-nova-button span{
    font-size:1.8rem;
  }
  .touch-hint{
    bottom:52px;
    right:84px;
  }
}
