.rhythmInvaders{
  display:grid;
  grid-template-rows:minmax(0, 1fr);
  padding:8px;
  padding-top:calc(8px + env(safe-area-inset-top));
  padding-bottom:calc(8px + env(safe-area-inset-bottom));
  background:
    linear-gradient(135deg, rgba(63,169,245,.26), transparent 28%),
    linear-gradient(225deg, rgba(254,122,171,.24), transparent 30%),
    url("/games/rhythm-invaders/assets/darkPurple.png") center/256px 256px repeat,
    #081127;
  color:white;
}

.gameArea{
  min-height:0;
  display:grid;
  grid-template-rows:auto minmax(0, 1fr) auto;
  gap:8px;
}

.topPanel,
.controlsPanel{
  border-radius:18px;
  border:1px solid rgba(255,255,255,.16);
  background:linear-gradient(180deg, rgba(20,31,70,.94), rgba(12,18,41,.90));
  box-shadow:0 18px 42px rgba(0,0,0,.32), inset 0 1px 0 rgba(255,255,255,.12);
  backdrop-filter:blur(8px);
}

.topPanel{
  display:grid;
  grid-template-columns:minmax(280px, .9fr) minmax(0, 1.1fr);
  gap:12px;
  align-items:center;
  padding:10px 14px;
}

#appRoot:fullscreen .topPanel,
#appRoot:-webkit-full-screen .topPanel{
  padding-left:max(14px, min(190px, 28vw));
}

.promptBlock{
  display:grid;
  gap:4px;
  min-width:0;
}

.levelLabel,
.meterLabel{
  width:max-content;
  max-width:100%;
  min-height:30px;
  display:inline-flex;
  align-items:center;
  padding:6px 10px;
  border-radius:999px;
  border:1px solid rgba(255,210,63,.46);
  background:linear-gradient(180deg, rgba(255,210,63,.24), rgba(254,146,29,.18));
  color:#fff2aa;
  font-size:14px;
  font-weight:1000;
  line-height:1;
  text-transform:uppercase;
  letter-spacing:0;
}

.mainPrompt{
  color:white;
  font-size:clamp(31px, 4.8vw, 62px);
  line-height:1.02;
  font-weight:1100;
  text-wrap:balance;
  text-shadow:0 4px 18px rgba(0,0,0,.38);
}

.feedbackLine{
  min-height:24px;
  color:rgba(255,255,255,.80);
  font-size:clamp(15px, 1.5vw, 21px);
  line-height:1.2;
  font-weight:900;
}

.feedbackLine.good{ color:#94f7a4; }
.feedbackLine.bad{ color:#ffb2b5; }

.targetPanel{
  min-width:0;
  display:grid;
  gap:8px;
  padding:10px;
  border-radius:18px;
  border:1px solid rgba(255,255,255,.14);
  background:rgba(255,255,255,.07);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10);
}

.targetHeader{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
}

.waveText{
  color:rgba(255,255,255,.82);
  font-size:16px;
  font-weight:1000;
  white-space:nowrap;
}

.targetRhythm{
  display:grid;
  grid-template-columns:repeat(4, minmax(0, 1fr));
  gap:8px;
}

.targetRhythm[data-beats="3"]{
  grid-template-columns:repeat(3, minmax(0, 1fr));
}

.rhythmChip{
  min-height:58px;
  display:grid;
  grid-template-rows:auto 1fr;
  place-items:center;
  gap:3px;
  padding:7px 6px;
  border-radius:16px;
  border:2px solid rgba(255,255,255,.15);
  background:linear-gradient(180deg, rgba(255,255,255,.16), rgba(255,255,255,.06));
  color:white;
  box-shadow:0 10px 22px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.12);
}

.rhythmChip .beat{
  color:rgba(255,255,255,.62);
  font-size:12px;
  line-height:1;
  font-weight:1000;
}

.rhythmChip .sound{
  color:white;
  font-size:clamp(16px, 1.8vw, 24px);
  line-height:1;
  font-weight:1100;
}

.rhythmChip.rest .sound{ color:#b8c2dd; }
.rhythmChip.titi{
  border-color:rgba(122,201,67,.46);
  background:linear-gradient(180deg, rgba(122,201,67,.22), rgba(63,169,245,.10));
}

.progressTrack{
  height:16px;
  overflow:hidden;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.16);
  background:rgba(0,0,0,.24);
  box-shadow:inset 0 2px 8px rgba(0,0,0,.34);
}

.progressFill{
  width:0%;
  height:100%;
  border-radius:inherit;
  background:linear-gradient(90deg, #3fa9f5, #7ac943, #ffd23f);
  box-shadow:0 0 20px rgba(122,201,67,.38);
  transition:width .25s ease;
}

.playWrap{
  min-height:0;
  position:relative;
  border-radius:22px;
  border:1px solid rgba(255,255,255,.18);
  background:#090f23;
  overflow:hidden;
  box-shadow:0 24px 58px rgba(0,0,0,.38), inset 0 0 0 1px rgba(255,255,255,.06);
}

.playWrap::before{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:
    linear-gradient(90deg, rgba(63,169,245,.18), transparent 18%, transparent 82%, rgba(254,122,171,.18)),
    linear-gradient(180deg, rgba(255,255,255,.10), transparent 18%, transparent 82%, rgba(0,0,0,.20));
  z-index:2;
}

.phaserMount{
  position:absolute;
  inset:0;
}

.phaserMount canvas{
  display:block;
  width:100% !important;
  height:100% !important;
}

.runCallout{
  position:absolute;
  inset:0;
  z-index:5;
  display:grid;
  place-items:center;
  pointer-events:none;
  color:white;
  font-size:clamp(44px, 8vw, 112px);
  line-height:1;
  font-weight:1100;
  text-align:center;
  text-shadow:0 8px 34px rgba(0,0,0,.56), 0 0 34px rgba(63,169,245,.45);
  animation:callout-pop .42s ease-out;
}

.runCallout.good{
  color:#94f7a4;
  text-shadow:0 8px 34px rgba(0,0,0,.56), 0 0 36px rgba(122,201,67,.62);
}

.runCallout.bad{
  color:#ffb2b5;
  text-shadow:0 8px 34px rgba(0,0,0,.56), 0 0 36px rgba(255,29,37,.55);
}

.runCallout.ready{
  color:#fff2aa;
}

@keyframes callout-pop{
  0%{ opacity:0; transform:scale(.78); }
  60%{ opacity:1; transform:scale(1.06); }
  100%{ opacity:1; transform:scale(1); }
}

.controlsPanel{
  display:grid;
  grid-template-columns:minmax(0, 1fr) minmax(340px, .86fr) auto;
  gap:10px;
  align-items:center;
  padding:10px;
}

.laneControls{
  min-width:0;
  display:grid;
  grid-template-columns:repeat(3, minmax(92px, 1fr));
  gap:9px;
}

.laneBtn{
  min-height:76px;
  border-radius:20px;
  border:3px solid rgba(255,255,255,.16);
  background:
    linear-gradient(180deg, rgba(255,255,255,.20), rgba(255,255,255,.06)),
    #101b42;
  color:white;
  box-shadow:0 14px 28px rgba(0,0,0,.28), inset 0 1px 0 rgba(255,255,255,.14);
  cursor:pointer;
  font-size:clamp(22px, 2.4vw, 32px);
  font-weight:1100;
  user-select:none;
  touch-action:manipulation;
}

.laneBtn.active{
  border-color:rgba(255,210,63,.78);
  background:
    linear-gradient(180deg, rgba(255,210,63,.32), rgba(254,146,29,.18)),
    #15255d;
  box-shadow:0 0 0 5px rgba(255,210,63,.18), 0 0 28px rgba(254,146,29,.30), 0 14px 32px rgba(0,0,0,.30);
}

.laneBtn:active{ transform:scale(.99); }

.levelGrid{
  display:grid;
  grid-template-columns:repeat(5, minmax(0, 1fr));
  gap:10px;
  margin:12px 0;
}

.levelChoice{
  min-height:74px;
  padding:11px 12px;
  border-radius:16px;
  border:2px solid rgba(255,255,255,.15);
  background:linear-gradient(180deg, rgba(255,255,255,.16), rgba(255,255,255,.07));
  color:white;
  box-shadow:0 10px 22px rgba(0,0,0,.24), inset 0 1px 0 rgba(255,255,255,.12);
  cursor:pointer;
  font-weight:1100;
  text-align:left;
}

.levelChoice.active{
  border-color:rgba(255,210,63,.70);
  background:linear-gradient(180deg, rgba(255,210,63,.28), rgba(254,146,29,.16));
  box-shadow:0 0 0 4px rgba(255,210,63,.14), 0 14px 26px rgba(0,0,0,.24);
}

.levelChoice span,
.levelChoice small{
  display:block;
}

.levelChoice span{
  font-size:24px;
  line-height:1;
}

.levelChoice small{
  margin-top:6px;
  color:rgba(255,255,255,.74);
  font-size:13px;
  font-weight:900;
}

.rhythmInvaders .pill{
  border-color:rgba(255,255,255,.14);
  background:rgba(255,255,255,.08);
  color:white;
  box-shadow:0 10px 22px rgba(0,0,0,.22), inset 0 1px 0 rgba(255,255,255,.10);
}

.rhythmInvaders .pill .label{ color:rgba(255,255,255,.66); }
.rhythmInvaders .pill .value{ color:white; }

.rhythmInvaders .btn{
  border-color:rgba(255,255,255,.16);
  background:linear-gradient(180deg, rgba(255,255,255,.18), rgba(255,255,255,.07));
  color:white;
  box-shadow:0 12px 24px rgba(0,0,0,.24), inset 0 1px 0 rgba(255,255,255,.12);
}

.rhythmInvaders .btn.primary{
  border-color:rgba(122,201,67,.66);
  background:linear-gradient(180deg, rgba(122,201,67,.38), rgba(63,169,245,.20));
}

.rhythmInvaders .btn.ghost{
  background:rgba(255,255,255,.08);
}

.rhythmInvaders .overlay{
  background:rgba(3,7,20,.72);
  backdrop-filter:blur(7px);
}

.rhythmInvaders .overlayCard{
  border:1px solid rgba(255,255,255,.18);
  background:linear-gradient(180deg, rgba(20,31,70,.96), rgba(11,17,42,.98));
  color:white;
  box-shadow:0 28px 80px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.12);
}

.rhythmInvaders .overlay.firstScreen{
  background:
    linear-gradient(135deg, rgba(63,169,245,.28), transparent 32%),
    linear-gradient(225deg, rgba(254,122,171,.24), transparent 34%),
    url("/games/rhythm-invaders/assets/darkPurple.png") center/256px 256px repeat,
    #081127;
}

.rhythmInvaders .overlay.firstScreen .overlayCard{
  background:transparent;
  border:0;
  box-shadow:none;
}

.rhythmInvaders .overlayTitle{
  color:white;
  text-shadow:0 4px 18px rgba(0,0,0,.36);
}

.rhythmInvaders .overlayText{
  color:rgba(255,255,255,.82);
}

.rhythmInvaders .overlayStatus{
  border-color:rgba(255,210,63,.38);
  background:rgba(255,210,63,.14);
  color:#fff3b8;
}

.rhythmInvaders .guideBadge{
  border-color:rgba(255,210,63,.42);
  background:rgba(255,210,63,.16);
  color:#fff2aa;
}

.rhythmInvaders .guideLead,
.rhythmInvaders .guideList{
  color:rgba(255,255,255,.82);
}

.rhythmInvaders .guideHeading{
  color:white;
}

.rhythmInvaders .guidePanel{
  border-color:rgba(255,255,255,.14);
  background:rgba(255,255,255,.07);
}

@media (max-width:1080px){
  .topPanel,
  .controlsPanel{
    grid-template-columns:1fr;
  }

  .hudRight{
    justify-content:stretch;
  }

  .hudRight .btn{
    flex:1 1 auto;
  }

  .levelGrid{
    grid-template-columns:repeat(2, minmax(0, 1fr));
  }
}

@media (max-width:680px){
  .rhythmInvaders{ padding:6px; }

  #appRoot:fullscreen .topPanel,
  #appRoot:-webkit-full-screen .topPanel{
    padding-left:max(10px, min(136px, 39vw));
  }

  .topPanel{ padding:8px; }
  .mainPrompt{ font-size:clamp(30px, 8vw, 46px); }
  .targetRhythm{ gap:6px; }
  .rhythmChip{ min-height:48px; }
  .controlsPanel{ padding:8px; }
  .laneControls{ grid-template-columns:1fr 1fr 1fr; gap:6px; }
  .laneBtn{ min-height:62px; font-size:20px; }
  .levelGrid{ grid-template-columns:1fr; }
}

@media (max-height:650px){
  .topPanel{ padding-top:6px; padding-bottom:6px; }
  .mainPrompt{ font-size:clamp(27px, 7vh, 46px); }
  .feedbackLine{ min-height:18px; font-size:14px; }
  .rhythmChip{ min-height:42px; }
  .laneBtn{ min-height:56px; }
  .controlsPanel{ gap:7px; }
}
