:root{
  --pink:#ff7eb3; --pink-soft:#ffd6e7; --pink-bg:#fff0f6;
  --mint:#9ee7c9; --lav:#c9b6ff; --sky:#a9d8ff; --sun:#ffe08a;
  --plum:#3a2a3f; --charcoal:#2b2030; --blood:#ff4d6d;
  --ink:#3a2a3f; --ink-soft:#8a7a90;
  --good:#3ecf8e; --bad:#ff4d6d;
  --cell:#fffdfe; --given:#ffe3ef; --sel:#ffd34d;
  --shadow:0 6px 0 rgba(58,42,63,.18);
  --r:18px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:"Baloo 2","Segoe UI Rounded","Comic Sans MS",system-ui,sans-serif;
  color:var(--ink);
  background:
    radial-gradient(120% 80% at 50% -10%,rgba(255,126,179,.35),transparent 55%),
    radial-gradient(100% 90% at 100% 110%,rgba(201,182,255,.45),transparent 60%),
    linear-gradient(160deg,#f7dcec 0%,#e7d6f5 45%,#3a2a3f 160%);
  background-attachment:fixed;
  overflow-x:hidden;
  user-select:none;-webkit-user-select:none;
}
#app{max-width:520px;margin:0 auto;min-height:100%;
  min-height:100dvh;display:flex;flex-direction:column;position:relative}

/* ---------- screens ---------- */
.screen{display:none;flex-direction:column;flex:1;padding:18px;gap:14px;align-items:center}
.screen.active{display:flex}
#screen-game.active{padding:10px 10px 0;gap:8px}

/* ---------- title ---------- */
.title-art{font-size:74px;margin-top:8vh;animation:bob 2.4s ease-in-out infinite;
  width:130px;height:130px;display:flex;align-items:center;justify-content:center;
  filter:drop-shadow(0 6px 8px rgba(58,42,63,.3))}
.title-art svg{width:130px;height:130px}
@keyframes bob{0%,100%{transform:translateY(0) rotate(-4deg)}50%{transform:translateY(-12px) rotate(4deg)}}
.game-title{font-size:48px;line-height:.95;text-align:center;color:var(--pink);
  text-shadow:0 3px 0 #fff,0 6px 0 rgba(255,158,196,.4);letter-spacing:1px}
.tagline{color:var(--ink-soft);font-size:15px;margin-bottom:14px}
.best-stats{margin-top:18px;color:var(--ink-soft);font-size:14px;text-align:center;line-height:1.7}
.mute-toggle{position:absolute;top:14px;right:14px;background:#fff;border:none;
  width:42px;height:42px;border-radius:50%;font-size:20px;box-shadow:var(--shadow);cursor:pointer}

/* ---------- buttons ---------- */
.btn{font-family:inherit;border:none;border-radius:var(--r);padding:14px 22px;
  font-size:17px;font-weight:700;color:var(--ink);background:#fff;cursor:pointer;
  box-shadow:var(--shadow);transition:transform .08s}
.btn:active{transform:translateY(3px);box-shadow:0 3px 0 rgba(0,0,0,.08)}
.btn-big{width:min(320px,80%);padding:18px;font-size:20px}
.btn-primary{background:var(--pink);color:#fff;text-shadow:0 1px 1px rgba(0,0,0,.12)}
.btn-ghost{background:rgba(255,255,255,.7)}
.btn-tiny{border:none;background:#fff;border-radius:12px;width:38px;height:38px;
  font-size:18px;box-shadow:var(--shadow);cursor:pointer}

/* ---------- howto ---------- */
.panel-title{font-size:30px;color:var(--pink);margin-top:6vh}
.howto-body{background:#fff;border-radius:var(--r);padding:18px;font-size:15px;
  line-height:1.7;box-shadow:var(--shadow);max-width:420px}
.howto-body p{margin-bottom:10px}

/* ---------- HUD ---------- */
#hud{width:100%;background:rgba(255,255,255,.65);border-radius:16px;
  padding:8px 12px;box-shadow:var(--shadow);backdrop-filter:blur(4px)}
.hud-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.hud-row+.hud-row{margin-top:6px}
.hud-floor{font-weight:800;font-size:15px}
.hud-hearts{font-size:18px;letter-spacing:1px;flex:1;text-align:center}
.hud-hearts .lost{filter:grayscale(1);opacity:.35}
.hud-mana{font-size:13px;font-weight:700;color:var(--lav);display:flex;align-items:center;gap:4px}
.mana-bar{width:90px;height:10px;background:#eadfff;border-radius:6px;overflow:hidden}
.mana-fill{height:100%;background:linear-gradient(90deg,var(--lav),var(--sky));transition:width .25s}
.hud-combo{font-size:13px;font-weight:800;color:var(--pink);min-width:54px;text-align:center}
.hud-score{font-weight:800;font-size:15px}

/* ---------- monster panel ---------- */
#monster-panel{width:100%;display:flex;align-items:center;gap:12px;
  background:linear-gradient(135deg,rgba(58,42,63,.92),rgba(43,32,48,.92));
  border-radius:18px;padding:8px 14px 8px 8px;box-shadow:var(--shadow);
  border:2px solid rgba(255,126,179,.35);position:relative;overflow:hidden}
#monster-panel::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120px 60px at 18% 40%,rgba(255,126,179,.18),transparent 70%)}
#monster-art{width:64px;height:64px;flex:none;filter:drop-shadow(0 3px 4px rgba(0,0,0,.35));
  animation:bob 2.6s ease-in-out infinite;z-index:1}
#monster-art svg{width:100%;height:100%;display:block}
#monster-art.hit{animation:mhit .3s}
@keyframes mhit{0%{transform:scale(1)}30%{transform:scale(.82) rotate(-6deg);filter:brightness(2) saturate(.3)}100%{transform:scale(1)}}
#monster-art.attack{animation:mattack .4s}
@keyframes mattack{0%,100%{transform:translateX(0)}30%{transform:translateX(14px) scale(1.12)}60%{transform:translateX(-4px)}}
#monster-art.dead{animation:mdead .6s forwards}
@keyframes mdead{to{transform:scale(.3) rotate(40deg) translateY(30px);opacity:0}}
#monster-info{flex:1;z-index:1;min-width:0}
#monster-name{color:#fff;font-weight:800;font-size:15px;text-shadow:0 1px 2px rgba(0,0,0,.4);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#monster-name .mtitle{display:block;font-size:11px;font-weight:600;color:#ffd6e7;opacity:.85}
.hp-bar{position:relative;height:16px;background:rgba(0,0,0,.35);border-radius:9px;
  margin-top:5px;overflow:hidden;border:1px solid rgba(255,255,255,.15)}
#monster-hp{height:100%;width:100%;border-radius:9px;
  background:linear-gradient(90deg,#ff4d6d,#ff7eb3);transition:width .35s cubic-bezier(.2,.8,.2,1)}
#monster-hp-txt{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:10px;font-weight:800;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.5)}
.boss #monster-panel{border-color:#ff4d6d;
  box-shadow:0 0 0 2px rgba(255,77,109,.3),0 6px 0 rgba(58,42,63,.3),0 0 22px rgba(255,77,109,.45)}
.boss #monster-art{width:78px;height:78px}
.boss #monster-hp{background:linear-gradient(90deg,#b8002e,#ff4d6d,#ffb347)}

/* ---------- board ---------- */
#board-wrap{position:relative;width:100%;display:flex;justify-content:center}
#board{
  display:grid;gap:2px;background:var(--ink-soft);
  padding:4px;border-radius:14px;box-shadow:var(--shadow);
  width:min(94vw,440px);aspect-ratio:1/1;touch-action:manipulation;
}
.cell{
  background:var(--cell);display:flex;align-items:center;justify-content:center;
  font-size:clamp(18px,6vw,30px);font-weight:800;color:var(--pink);
  position:relative;border-radius:5px;cursor:pointer;overflow:hidden;
}
.cell.given{background:var(--given);color:var(--ink)}
.cell.sel{outline:3px solid var(--sel);outline-offset:-3px;z-index:3}
.cell.peer{background:#fff6fb}
.cell.given.peer{background:#ffe2ef}
.cell.same{background:#fff0a8}
.cell.pop{animation:pop .28s ease}
@keyframes pop{0%{transform:scale(.2)}60%{transform:scale(1.18)}100%{transform:scale(1)}}
.cell.bad{animation:shake .35s}
@keyframes shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-5px)}40%{transform:translateX(5px)}60%{transform:translateX(-4px)}80%{transform:translateX(4px)}}
/* thick box borders drawn via data attrs */
.cell.br{box-shadow:inset -2px 0 0 var(--ink-soft)}
.cell.bb{box-shadow:inset 0 -2px 0 var(--ink-soft)}
.cell.br.bb{box-shadow:inset -2px 0 0 var(--ink-soft),inset 0 -2px 0 var(--ink-soft)}
/* notes */
.notes{position:absolute;inset:0;display:grid;font-size:9px;color:var(--ink-soft);
  font-weight:700;padding:2px;pointer-events:none}
.notes span{display:flex;align-items:center;justify-content:center}
/* cage */
.cage-sum{position:absolute;top:1px;left:3px;font-size:9px;font-weight:800;color:var(--ink);opacity:.8}
.cell.cage{box-shadow:inset 0 0 0 2px rgba(255,255,255,.0)}

/* ---------- relic bar ---------- */
#relic-bar{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;width:100%;min-height:8px}
.relic{position:relative;width:52px;height:52px;border-radius:14px;border:none;
  background:#fff;font-size:24px;box-shadow:var(--shadow);cursor:pointer;
  display:flex;align-items:center;justify-content:center}
.relic:active{transform:translateY(3px)}
.relic.passive{opacity:.9}
.relic.disabled{opacity:.4}
.relic .cost{position:absolute;bottom:-4px;right:-4px;background:var(--lav);color:#fff;
  font-size:10px;font-weight:800;border-radius:9px;padding:1px 5px;box-shadow:0 2px 0 rgba(0,0,0,.12)}
.relic .uses{position:absolute;top:-4px;left:-4px;background:var(--pink);color:#fff;
  font-size:10px;font-weight:800;border-radius:9px;padding:1px 5px}

/* ---------- numpad ---------- */
#numpad{display:grid;gap:8px;width:100%;padding:10px 0 14px;
  position:sticky;bottom:0}
.np-btn{font-family:inherit;border:none;border-radius:14px;background:#fff;
  font-size:24px;font-weight:800;color:var(--ink);padding:14px 0;box-shadow:var(--shadow);cursor:pointer;position:relative}
.np-btn:active{transform:translateY(3px)}
.np-btn .left{position:absolute;bottom:3px;right:6px;font-size:10px;color:var(--ink-soft);font-weight:700}
.np-btn.done{opacity:.3}
.np-btn.tool{background:var(--pink-soft);font-size:20px}
.np-btn.tool.on{background:var(--pink);color:#fff}

/* ---------- overlay/modal ---------- */
.overlay{position:fixed;inset:0;background:rgba(91,74,85,.45);backdrop-filter:blur(3px);
  display:none;align-items:center;justify-content:center;padding:20px;z-index:50}
.overlay.show{display:flex}
.modal{background:var(--pink-bg);border-radius:24px;padding:22px;width:100%;max-width:440px;
  box-shadow:0 14px 0 rgba(0,0,0,.12);text-align:center;max-height:88vh;overflow:auto}
.modal h2{color:var(--pink);font-size:28px;margin-bottom:6px}
.modal p{color:var(--ink-soft);margin-bottom:14px;font-size:15px;line-height:1.5}
.reward-grid{display:grid;grid-template-columns:1fr;gap:10px;margin:8px 0 14px}
.reward-card{background:#fff;border-radius:16px;padding:14px;display:flex;gap:12px;align-items:center;
  text-align:left;cursor:pointer;box-shadow:var(--shadow);border:3px solid transparent;transition:transform .08s}
.reward-card:active{transform:scale(.97)}
.reward-card .ico{font-size:32px;flex:none;width:44px;text-align:center}
.reward-card .rt{font-weight:800;font-size:16px}
.reward-card .rd{font-size:13px;color:var(--ink-soft)}
.modal .row{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.coin-line{font-weight:800;color:#d4a017;margin-bottom:10px}

/* ---------- confetti ---------- */
#confetti{position:fixed;inset:0;pointer-events:none;z-index:60;overflow:hidden}
.confetti-bit{position:absolute;width:10px;height:14px;border-radius:3px;top:-20px;animation:fall linear forwards}
@keyframes fall{to{transform:translateY(110vh) rotate(720deg)}}

.float-txt{position:absolute;font-weight:800;font-size:20px;pointer-events:none;
  animation:floatUp 1s ease-out forwards;z-index:5;text-shadow:0 1px 2px rgba(0,0,0,.15)}
@keyframes floatUp{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-40px)}}
