/* 必殺技や擬音の文字に使う、漫画の題字風の書体(使う文字だけを抜き出したもの。assets/fonts/OFL.txt) */
@font-face{font-family:"Reggae One";src:url(assets/fonts/reggae-one-sub.woff2) format("woff2");font-weight:400 900;font-display:swap}
:root{
  --ink:#27364a; --paper:#f6eedb; --wood:#c9a26b; --board:#2f5d50;
  --red:#e5484d; --yellow:#ffcf3f; --green:#3aa675; --line:rgba(39,54,74,.18);
  --font:"Hiragino Maru Gothic ProN","Zen Maru Gothic","Yu Gothic UI","Noto Sans JP",system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;background:#0f1114;color:var(--ink);font-family:var(--font);
  overscroll-behavior:none;-webkit-tap-highlight-color:transparent}
button{font:inherit;color:inherit;border:0;cursor:pointer;touch-action:manipulation}
#app{position:fixed;inset:0;display:flex;flex-direction:column;overflow:hidden;
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}

/* 教室(1人称の3D)と、その上に重ねる表示 */
#stage{position:relative;flex:1 1 auto;min-height:0;background:#111}
#stage canvas{position:absolute;inset:0;display:block;width:100%;height:100%}
#cv{touch-action:none;cursor:grab}
#cv:active{cursor:grabbing}
#vignette{position:absolute;inset:0;pointer-events:none;transition:box-shadow .1s;
  background:radial-gradient(ellipse at 50% 46%,rgba(0,0,0,0) 55%,rgba(8,6,2,.3) 100%)}
#vignette.tele{box-shadow:inset 0 0 0 6px rgba(255,207,63,.85),inset 0 0 50px rgba(255,207,63,.4)}
#vignette.watched{box-shadow:inset 0 0 0 6px rgba(229,72,77,.6),inset 0 0 60px rgba(229,72,77,.38)}
#vignette.danger{box-shadow:inset 0 0 0 10px rgba(229,72,77,.95),inset 0 0 90px rgba(229,72,77,.75);animation:blink .1s infinite alternate}
@keyframes blink{to{opacity:.55}}
#hud{position:absolute;left:0;right:0;top:0;z-index:2;display:grid;grid-template-columns:1fr 1fr 1fr auto auto;gap:8px;align-items:end;
  padding:calc(6px + env(safe-area-inset-top)) calc(10px + env(safe-area-inset-right)) 16px calc(10px + env(safe-area-inset-left));
  background:linear-gradient(rgba(10,14,20,.8),rgba(10,14,20,0));color:#fff;pointer-events:none}
.meter .lbl{display:block;font-size:10px;line-height:1.3;opacity:.9;white-space:nowrap;text-shadow:0 1px 2px #000}
.meter .lbl b{font-size:12px}
.bar{position:relative;height:8px;border-radius:4px;background:rgba(255,255,255,.22);overflow:hidden}
.bar i{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:4px;background:var(--yellow)}
.bar em{position:absolute;top:0;bottom:0;width:2px;left:70%;background:#fff;opacity:.7}
#m-full .bar i{background:var(--green)}
#m-susp .bar i{background:var(--red)}
#mute,#bgm{width:32px;height:32px;border-radius:8px;background:rgba(255,255,255,.16);font-size:15px;pointer-events:auto}
#bgm{color:#fff;font-weight:900}
#bgm.off{opacity:.4;text-decoration:line-through}
#front{position:absolute;right:calc(10px + env(safe-area-inset-right));top:calc(50px + env(safe-area-inset-top));z-index:2;
  padding:6px 10px;border-radius:999px;background:rgba(16,20,28,.72);color:#fff;font-size:11px;font-weight:800;border:1px solid rgba(255,255,255,.3)}
#banner{position:absolute;left:0;right:0;top:36%;text-align:center;font-weight:900;font-size:30px;
  color:#fff;text-shadow:0 3px 0 var(--ink),0 0 18px rgba(0,0,0,.6);pointer-events:none;letter-spacing:.04em}

/* 操作パネル */
#panel,#prep{flex:0 0 auto;padding:6px 10px calc(10px + env(safe-area-inset-bottom));background:var(--paper);
  border-top:3px solid var(--ink)}
#tip{height:20px;font-size:12px;line-height:20px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#tip.warn{color:var(--red);font-weight:800}
#actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(44px,1fr));gap:5px;margin:4px 0 6px}
.act{position:relative;min-width:0;height:46px;border-radius:10px;background:#fff;border:2px solid var(--ink);
  font-size:10.5px;font-weight:800;line-height:1.15;display:flex;flex-direction:column;align-items:center;justify-content:center;white-space:nowrap}
.act .cnt{position:absolute;left:3px;top:2px;font:800 10px/1 var(--font);font-style:normal;color:var(--red)}
.act.kill.hot .cnt{color:#fff}
.act .ic{font-size:17px;line-height:1}
.act kbd{position:absolute;right:3px;top:2px;font:700 9px/1 var(--font);opacity:.45}
.act[disabled]{opacity:.32;cursor:default}
.act.hot{background:var(--yellow);animation:pulse .45s infinite alternate}
.act.kill.hot{background:var(--red);color:#fff}
.act.gone{display:none}
.act.aim,.gad.aim{background:var(--yellow);border-color:var(--red);box-shadow:0 0 0 3px rgba(229,72,77,.45);animation:pulse .45s infinite alternate}
@keyframes pulse{to{transform:scale(1.05)}}
#bento{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;padding:5px;border-radius:12px;background:#3b2a23}
.food{position:relative;height:46px;border-radius:8px;background:#fdf8ec;overflow:hidden;
  display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:9px;font-weight:700}
.food .ic{font-size:20px;line-height:1.1}
.food .rem{position:absolute;left:0;right:0;bottom:0;height:4px;background:var(--green);transform-origin:left}
.food .tag{position:absolute;right:2px;top:1px;font-size:9px}
.food.sel{outline:3px solid var(--yellow);outline-offset:-3px}
.food.empty{opacity:.3}
#eat{width:100%;margin-top:6px;height:62px;border-radius:14px;background:var(--red);color:#fff;
  box-shadow:0 5px 0 #9c2a2e;display:flex;flex-direction:column;align-items:center;justify-content:center;touch-action:none}
#eat .big{font-size:20px;font-weight:900;letter-spacing:.04em}
#eat .sub{font-size:11px;opacity:.9}
#eat.down{transform:translateY(4px);box-shadow:0 1px 0 #9c2a2e}
#eat.danger{background:#7a1f22}

/* 休み時間 */
#prep-head{margin-bottom:6px}
.prep-title{font-weight:900;font-size:16px}
.prep-title span{font-size:11px;font-weight:700;margin-left:6px;color:var(--red)}
#prep .bar{background:var(--line);margin:4px 0 2px}
#prep-bar{background:var(--red)}
.prep-left{font-size:12px}
#gadgets{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.gad{position:relative;text-align:left;padding:6px 8px 7px 40px;min-height:50px;border-radius:10px;background:#fff;
  border:2px solid var(--ink);overflow:hidden}
.gad .ic{position:absolute;left:8px;top:50%;transform:translateY(-50%);font-size:24px}
.gad .nm{display:block;font-size:12px;font-weight:900;line-height:1.25;padding-right:26px}
.gad .ds{display:block;font-size:10px;line-height:1.3;opacity:.8}
.gad .cost{position:absolute;right:6px;top:4px;font-size:10px;font-weight:800;color:var(--red)}
.gad .prog{position:absolute;left:0;bottom:0;height:4px;width:0;background:var(--green)}
.gad.done{background:#dff3e8;border-color:var(--green)}
.gad[disabled]{opacity:.45}
.gad.done[disabled],.gad.busy[disabled]{opacity:1}
#prep-done{width:100%;margin-top:8px;height:46px;border-radius:12px;background:var(--ink);color:#fff;font-weight:900;font-size:15px}

/* タイトルと結果(うしろに教室が見える) */
.overlay{position:absolute;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;
  padding:16px;background:rgba(15,20,28,.6);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);overflow:auto}
.card{width:100%;max-width:380px;padding:22px 20px;border-radius:18px;background:var(--paper);text-align:center;
  border:3px solid var(--ink);box-shadow:0 8px 0 rgba(0,0,0,.35)}
.kicker{font-size:12px;font-weight:800;color:var(--red);letter-spacing:.08em}
h1{font-size:54px;line-height:1.05;font-weight:900;margin:6px 0 10px;letter-spacing:.04em}
h2{font-size:34px;line-height:1.15;font-weight:900;margin:6px 0 8px;text-wrap:balance}
.lead{font-size:14px;line-height:1.7}
.lead strong{color:var(--red)}
.how{margin:14px 0;padding:10px 12px 10px 30px;text-align:left;font-size:12.5px;line-height:1.7;
  background:#fff;border-radius:12px;border:2px dashed var(--line)}
.primary{width:100%;height:54px;border-radius:14px;background:var(--red);color:#fff;font-size:19px;font-weight:900;
  box-shadow:0 5px 0 #9c2a2e}
.primary[disabled]{opacity:.55}
.primary:active{transform:translateY(4px);box-shadow:0 1px 0 #9c2a2e}
.ghost{width:100%;height:54px;border-radius:14px;background:#fff;border:2px solid var(--ink);font-size:15px;font-weight:900}
.row{display:grid;grid-template-columns:1.3fr 1fr;gap:8px;margin-top:14px}
.collect{margin-top:10px;font-size:12px;font-weight:700;opacity:.8}
.collect:empty{display:none}
#r-stats{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:12px}
#r-stats div{padding:6px;border-radius:10px;background:#fff}
#r-stats dt{font-size:10px;opacity:.7}
#r-stats dd{font-size:18px;font-weight:900}
#r-list{list-style:none;margin-top:8px;display:flex;flex-wrap:wrap;gap:4px;justify-content:center}
#r-list li{font-size:10px;padding:2px 7px;border-radius:99px;background:#fff;border:1px solid var(--line)}
#r-list li.lock{opacity:.4}
#r-list li.now{background:var(--yellow);border-color:var(--ink);font-weight:800}
.fail h2{color:var(--red)}

/* 横長の画面: 操作パネルを横1列にして、教室を広く見せる */
@media (min-aspect-ratio:1/1) and (min-width:720px){
  #panel{padding:4px max(14px,calc((100vw - 980px)/2)) calc(8px + env(safe-area-inset-bottom))}
  #controls{display:grid;grid-template-columns:1fr 200px;gap:10px;align-items:stretch}
  #actions{margin:2px 0 6px}
  #eat{margin-top:2px;height:auto;min-height:100px}
  #prep{padding-left:max(14px,calc((100vw - 980px)/2));padding-right:max(14px,calc((100vw - 980px)/2))}
  #gadgets{grid-template-columns:repeat(5,1fr)}
  #prep-done{max-width:360px;display:block;margin-left:auto;margin-right:auto}
}
@media (max-width:340px){
  #gadgets{gap:5px}
  .gad{padding:5px 6px 6px 30px;min-height:46px}
  .gad .ic{left:5px;font-size:19px}
  .gad .nm{font-size:11px;padding-right:22px}
  .gad .ds{font-size:9px}
  .gad .cost{right:4px;font-size:9px}
  #actions{gap:4px}
  .act{font-size:9.5px}
  .act .ic{font-size:15px}
  .food{font-size:8px}
  .food .ic{font-size:17px}
  #eat .big{font-size:18px}
  #tip{font-size:11px}
  h1{font-size:44px}
  .how{font-size:11.5px;padding-left:26px}
}
/* 背の低い画面(小さめのスマホ): 仕掛けのカードを詰める */
@media (max-height:700px) and (max-aspect-ratio:1/1){
  .gad{min-height:42px;padding-top:4px;padding-bottom:5px}
  .gad .ds{font-size:9px}
  #eat{height:54px}
  .food{height:42px}
}
[hidden]{display:none!important}
@media (hover:none){.act kbd{display:none}}
