/* ===== GODS PUSH ===== */
:root{
  --bg:#0a0714;
  --ink:#f4ecff;
  --dim:#a89bc4;
  --gold:#ffcf5c;
  --gold-d:#c99418;
  --red:#ff5d73;
  --line:rgba(255,255,255,.10);

  --c1:#6fd3ff;  /* 精霊体 */
  --c2:#7bf0a8;  /* 受肉体 */
  --c3:#c79bff;  /* 童子 */
  --c4:#ffd24a;  /* GODS */
}

*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
/* hidden属性を必ず効かせる。
   .screen や .topbar に display:flex を書いているため、これが無いと
   ブラウザ標準の [hidden]{display:none} が負けて全画面が同時に出る。 */
[hidden]{display:none !important}
html,body{height:100%}
body{
  background:
    radial-gradient(120% 80% at 50% -10%, #2a1746 0%, transparent 60%),
    radial-gradient(90% 60% at 50% 110%, #1b1030 0%, transparent 60%),
    var(--bg);
  color:var(--ink);
  font-family:"Hiragino Kaku Gothic ProN","Yu Gothic UI","Noto Sans JP",system-ui,sans-serif;
  overscroll-behavior:none;
  touch-action:manipulation;
  -webkit-user-select:none;
  user-select:none;
}
#app{
  min-height:100svh;
  display:flex;flex-direction:column;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}
main{flex:1;display:flex;flex-direction:column;min-height:0}

/* ---------- HUD ---------- */
.topbar{
  display:flex;align-items:center;gap:10px;
  /* 右端は音のオンオフボタン(38px)ぶん空ける。残り秒数が隠れるため。 */
  padding:8px calc(clamp(10px,3vw,20px) + 46px) 8px clamp(10px,3vw,20px);
  border-bottom:1px solid var(--line);
  background:rgba(10,7,20,.75);
  backdrop-filter:blur(8px);
}
.hud-item{display:flex;align-items:baseline;gap:6px}
.hud-label{font-size:10px;letter-spacing:.14em;color:var(--dim)}
.hud-value{font-size:22px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1}
.hud-combo .hud-value{color:var(--gold);text-shadow:0 0 12px rgba(255,207,92,.55)}
.hud-combo.pop{animation:pop .3s ease}
.hud-time{margin-left:auto;flex:1;max-width:230px;align-items:center}
.timer-bg{flex:1;height:8px;border-radius:99px;background:rgba(255,255,255,.10);overflow:hidden}
.timer-bar{height:100%;width:100%;border-radius:99px;background:linear-gradient(90deg,var(--gold),#ff8a5c);transition:width .1s linear}
.timer-bar.low{background:linear-gradient(90deg,var(--red),#ff9a3c);animation:blink .6s infinite}
.hud-sec{font-size:13px;font-weight:700;color:var(--dim);font-variant-numeric:tabular-nums;min-width:2.2em;text-align:right}
@keyframes blink{50%{opacity:.45}}
@keyframes pop{0%{transform:scale(1)}40%{transform:scale(1.35)}100%{transform:scale(1)}}

/* ---------- screens ---------- */
.screen{flex:1;min-height:0;display:flex;flex-direction:column}
.screen-center{
  align-items:center;justify-content:center;text-align:center;
  gap:clamp(10px,2.2vh,18px);
  padding:clamp(16px,4vw,28px) clamp(16px,5vw,28px) clamp(24px,5vh,40px);
  overflow-y:auto;
}

/* ---------- title ---------- */
.logo-wrap{position:relative;display:flex;flex-direction:column;align-items:center}
.logo-art{
  width:min(46vw,180px);height:auto;
  filter:drop-shadow(0 10px 26px rgba(0,0,0,.6));
  animation:float 4s ease-in-out infinite;
}
@keyframes float{50%{transform:translateY(-8px)}}
.logo{
  margin-top:-4px;
  font-size:clamp(34px,10vw,56px);font-weight:900;letter-spacing:.04em;line-height:1;
  background:linear-gradient(180deg,#fff6d8,var(--gold) 45%,var(--gold-d));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.logo span{display:block;font-size:.62em;letter-spacing:.34em;margin-left:.34em}
.lead{font-size:clamp(13px,3.6vw,16px);line-height:1.7;color:#e6dcff}
.lead b{color:var(--gold)}

.rank-guide{list-style:none;display:grid;gap:6px;width:min(100%,340px)}
.rk{
  display:flex;align-items:center;justify-content:space-between;
  padding:8px 14px;border-radius:12px;
  background:rgba(255,255,255,.05);border:1px solid var(--line);
  font-size:13px;font-weight:700;
}
.rk-pt{font-size:16px;font-weight:900;font-variant-numeric:tabular-nums}
.rk-pt::after{content:"pt";font-size:10px;font-weight:700;margin-left:2px;opacity:.65}
.rk1{border-color:rgba(111,211,255,.5)} .rk1 .rk-name,.rk1 .rk-pt{color:var(--c1)}
.rk2{border-color:rgba(123,240,168,.5)} .rk2 .rk-name,.rk2 .rk-pt{color:var(--c2)}
.rk3{border-color:rgba(199,155,255,.5)} .rk3 .rk-name,.rk3 .rk-pt{color:var(--c3)}
.rk4{border-color:rgba(255,210,74,.65);background:rgba(255,210,74,.10)} .rk4 .rk-name,.rk4 .rk-pt{color:var(--c4)}

.note{font-size:11.5px;line-height:1.6;color:var(--dim)}
.best{font-size:12px;color:var(--dim);letter-spacing:.08em}
.best span{color:var(--gold);font-weight:800;font-size:15px}

/* ---------- buttons ---------- */
.btn{
  border:0;cursor:pointer;font-family:inherit;font-weight:800;
  padding:14px 34px;border-radius:99px;font-size:17px;letter-spacing:.06em;
  transition:transform .12s ease;
}
.btn:active{transform:scale(.95)}
.btn-primary{
  color:#2a1a00;
  background:linear-gradient(180deg,#ffe9a8,var(--gold) 55%,#e8a81f);
  box-shadow:0 8px 24px rgba(255,180,60,.34),inset 0 1px 0 rgba(255,255,255,.7);
}
.btn-ghost{color:var(--ink);background:rgba(255,255,255,.07);border:1px solid var(--line)}

/* ---------- 音のオンオフ ---------- */
.mute-btn{
  position:fixed;z-index:20;
  top:calc(env(safe-area-inset-top) + 8px);
  right:calc(env(safe-area-inset-right) + 10px);
  width:38px;height:38px;border-radius:50%;
  border:1px solid var(--line);
  background:rgba(20,13,36,.72);color:var(--gold);
  font-size:17px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  backdrop-filter:blur(6px);
  transition:transform .12s ease,opacity .2s ease;
}
.mute-btn:active{transform:scale(.9)}
.mute-btn.off{color:var(--dim);opacity:.6}

/* ---------- board ---------- */
.board-wrap{
  flex:1;min-height:0;position:relative;
  display:flex;align-items:center;justify-content:center;
  padding:8px;
}
.board{
  --gap:clamp(5px,1.6vw,12px);
  --cell:min( (96vw - 4 * var(--gap)) / 5 , (100svh - 120px - 5 * var(--gap)) / 6 , 88px );
  display:grid;
  grid-template-columns:repeat(5,var(--cell));
  grid-auto-rows:var(--cell);
  gap:var(--gap);
}

.cell{
  position:relative;border-radius:50%;border:0;padding:0;cursor:pointer;
  background:radial-gradient(circle at 32% 28%, #241a3a, #140d24 70%);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.07), 0 3px 8px rgba(0,0,0,.45);
  overflow:hidden;
  font-family:inherit;
}
.cell img{
  position:absolute;inset:6%;width:88%;height:88%;object-fit:contain;
  opacity:0;transform:scale(.55);
  transition:opacity .10s ease,transform .16s cubic-bezier(.2,1.5,.4,1);
  pointer-events:none;
}
.cell.lit img{opacity:1;transform:scale(1)}
.cell.lit{animation:litIn .18s ease}
@keyframes litIn{from{transform:scale(.86)}to{transform:scale(1)}}

.cell.lit.t1{background:radial-gradient(circle at 50% 45%, rgba(111,211,255,.55), #0f1a2c 72%);box-shadow:0 0 0 2px var(--c1),0 0 22px rgba(111,211,255,.55)}
.cell.lit.t2{background:radial-gradient(circle at 50% 45%, rgba(123,240,168,.55), #0f2418 72%);box-shadow:0 0 0 2px var(--c2),0 0 22px rgba(123,240,168,.55)}
.cell.lit.t3{background:radial-gradient(circle at 50% 45%, rgba(199,155,255,.58), #1c1030 72%);box-shadow:0 0 0 2px var(--c3),0 0 26px rgba(199,155,255,.6)}
.cell.lit.t4{background:radial-gradient(circle at 50% 45%, rgba(255,210,74,.65), #2a1c00 72%);box-shadow:0 0 0 3px var(--c4),0 0 34px rgba(255,210,74,.8)}
.cell.lit.t4::before{
  content:"";position:absolute;inset:-30%;
  background:conic-gradient(from 0deg, transparent, rgba(255,225,140,.5), transparent 55%);
  animation:spin 1.1s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg)}}

.cell.hit{animation:hitPulse .32s ease}
@keyframes hitPulse{0%{transform:scale(1)}35%{transform:scale(1.22)}100%{transform:scale(1)}}
.cell.bad{animation:shake .3s ease}
@keyframes shake{25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}

/* ---------- fx ---------- */
.fx-layer{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.pop-score{
  position:absolute;transform:translate(-50%,-50%);
  font-size:clamp(18px,5.5vw,26px);font-weight:900;
  text-shadow:0 2px 10px rgba(0,0,0,.8);
  animation:rise .8s ease-out forwards;white-space:nowrap;
}
.pop-score small{display:block;font-size:.48em;letter-spacing:.1em;opacity:.9}
@keyframes rise{
  0%{opacity:0;transform:translate(-50%,-50%) scale(.6)}
  20%{opacity:1;transform:translate(-50%,-70%) scale(1.1)}
  100%{opacity:0;transform:translate(-50%,-150%) scale(1)}
}
.p1{color:var(--c1)} .p2{color:var(--c2)} .p3{color:var(--c3)} .p4{color:var(--c4)} .pm{color:var(--red)}

.countdown{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:clamp(70px,22vw,130px);font-weight:900;color:var(--gold);
  text-shadow:0 6px 30px rgba(0,0,0,.7);
  background:rgba(10,7,20,.55);backdrop-filter:blur(3px);
  z-index:5;
}
.countdown span{animation:cd .8s ease-out}
@keyframes cd{0%{transform:scale(1.9);opacity:0}30%{opacity:1}100%{transform:scale(1);opacity:1}}

/* ---------- result ---------- */
.res-title{font-size:clamp(20px,6vw,28px);letter-spacing:.22em;color:var(--dim);font-weight:800}
.res-rankname{font-size:clamp(17px,5vw,22px);font-weight:900;color:var(--gold);letter-spacing:.04em}
.res-score{
  font-size:clamp(52px,16vw,84px);font-weight:900;line-height:1;
  font-variant-numeric:tabular-nums;
  background:linear-gradient(180deg,#fff7dc,var(--gold) 55%,var(--gold-d));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.res-score small{font-size:.24em;letter-spacing:.1em;margin-left:.2em}
.res-new{color:var(--gold);font-weight:800;font-size:14px;animation:blink 1s infinite}
.res-stats{
  list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:6px;
  width:min(100%,340px);
}
.res-stats li{
  background:rgba(255,255,255,.05);border:1px solid var(--line);border-radius:10px;
  padding:8px 4px;display:flex;flex-direction:column;gap:2px;
}
.res-stats span{font-size:10px;color:var(--dim);letter-spacing:.06em}
.res-stats b{font-size:19px;font-variant-numeric:tabular-nums}
.res-btns{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms !important;animation-iteration-count:1 !important}
}
