:root{
  --bg:#0b0f2a;
  --bg2:#161a44;
  --purple:#7b61ff;
  --purple-d:#5a3fe0;
  --pink:#ff5ea3;
  --green:#3ddc84;
  --green-d:#22b567;
  --gold:#ffcf3f;
  --gold-d:#f5a623;
  --ink:#12163a;
  --white:#ffffff;
  --soft:rgba(255,255,255,.72);
  --shadow:0 10px 0 rgba(0,0,0,.22), 0 16px 30px rgba(0,0,0,.35);
  --safe-top: env(safe-area-inset-top, 0px);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
}

*{box-sizing:border-box; -webkit-tap-highlight-color:transparent; margin:0; padding:0}
html,body{height:100%; overflow:hidden; overscroll-behavior:none; touch-action:none}
body{
  font-family:'Fredoka', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  background:radial-gradient(120% 100% at 50% 0%, #1c2054 0%, var(--bg) 55%, #06081c 100%);
  color:var(--white);
  user-select:none; -webkit-user-select:none;
}
#app{position:fixed; inset:0; overflow:hidden}
#scene{position:absolute; inset:0; z-index:0}
#scene canvas{display:block; width:100%!important; height:100%!important}

.hidden{display:none !important}

/* ---------------- TOP BAR ---------------- */
#topbar{
  position:absolute; top:0; left:0; right:0; z-index:20;
  display:flex; align-items:center; gap:10px;
  padding:calc(10px + var(--safe-top)) 14px 10px;
}
.top-stats{margin-left:auto; display:flex; gap:8px}
.chip{
  display:flex; align-items:center; gap:5px;
  background:rgba(9,12,35,.55); backdrop-filter:blur(6px);
  border:1.5px solid rgba(255,255,255,.14);
  padding:6px 11px; border-radius:999px; font-weight:700; font-size:14px;
}
.chip .ico{font-size:14px}
.chip-gem{color:#ff8bd0}
.chip-heart{color:#ff8b8b}

.icon-btn{
  width:42px; height:42px; border-radius:14px; border:none;
  background:rgba(9,12,35,.55); backdrop-filter:blur(6px);
  border:1.5px solid rgba(255,255,255,.14);
  color:#fff; font-size:18px; font-weight:700; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
}
.icon-btn:active{transform:scale(.92)}

/* ---------------- HUD ---------------- */
#hud{position:absolute; inset:0; z-index:15; pointer-events:none}
#progress-wrap{
  position:absolute; top:calc(64px + var(--safe-top)); left:14px; right:14px; height:12px;
  background:rgba(9,12,35,.5); border:1.5px solid rgba(255,255,255,.16);
  border-radius:999px; overflow:visible;
}
#progress-fill{
  height:100%; width:0%; border-radius:999px;
  background:linear-gradient(90deg, var(--green), #9cff6e);
  transition:width .12s linear;
}
#progress-flag{position:absolute; right:-4px; top:-9px; font-size:18px}
#power-readout{
  position:absolute; left:50%; transform:translateX(-50%);
  top:calc(84px + var(--safe-top));
  display:flex; flex-direction:column; align-items:center; line-height:1;
  text-shadow:0 3px 0 rgba(0,0,0,.35);
}
.power-label{font-size:11px; letter-spacing:2px; color:var(--soft)}
#power-value{font-size:30px; font-weight:700}

/* ---------------- SCREENS ---------------- */
.screen{position:absolute; inset:0; z-index:30; display:flex; flex-direction:column;
  padding:calc(20px + var(--safe-top)) 22px calc(24px + var(--safe-bottom));}
.overlay{background:rgba(6,8,24,.62); backdrop-filter:blur(4px);
  align-items:center; justify-content:center}

/* ---- Menu ---- */
#menu, #levels{background:linear-gradient(180deg, rgba(6,8,24,.18) 0%, rgba(6,8,24,.5) 55%, rgba(6,8,24,.78) 100%)}
#menu{align-items:center; justify-content:space-between}
.brand{margin-top:14vh; text-align:center}
.brand-badge{
  display:inline-block; background:linear-gradient(180deg,var(--gold),var(--gold-d));
  color:#5a3d00; font-weight:700; font-size:22px; letter-spacing:1px;
  padding:6px 16px; border-radius:16px; box-shadow:var(--shadow);
  transform:rotate(-4deg); margin-bottom:14px;
}
.brand h1{font-size:clamp(38px,12vw,58px); font-weight:700; letter-spacing:1px;
  line-height:.95; text-shadow:0 5px 0 rgba(0,0,0,.3), 0 0 40px rgba(123,97,255,.5);}
.brand .tag{margin-top:10px; color:var(--soft); font-weight:500; font-size:15px}
.menu-buttons{width:100%; max-width:360px; display:flex; flex-direction:column; gap:14px}
.menu-footer{width:100%; max-width:360px; display:flex; align-items:center; gap:10px}
.stat-pill{
  display:flex; align-items:center; gap:7px; font-weight:700; font-size:16px;
  background:rgba(9,12,35,.55); border:1.5px solid rgba(255,255,255,.14);
  padding:9px 15px; border-radius:14px;
}
.stat-pill.small{font-size:14px; padding:7px 12px}
.stat-pill .ico{font-size:16px}
.menu-footer .icon-btn{margin-left:auto}

/* ---- Buttons ---- */
.btn{
  border:none; border-radius:18px; font-family:inherit; font-weight:700;
  font-size:18px; padding:15px 18px; color:#fff; cursor:pointer;
  box-shadow:var(--shadow); transition:transform .06s ease, filter .12s;
  display:flex; align-items:center; justify-content:center; gap:8px;
}
.btn:active{transform:translateY(3px); box-shadow:0 6px 0 rgba(0,0,0,.22), 0 10px 20px rgba(0,0,0,.3)}
.btn-xl{font-size:22px; padding:18px}
.btn-primary{background:linear-gradient(180deg,var(--green),var(--green-d))}
.btn-secondary{background:linear-gradient(180deg,#5b6bd8,#3f4bb0)}
.btn-ad{background:linear-gradient(180deg,var(--gold),var(--gold-d)); color:#5a3d00}
.ad-tag{font-size:11px; background:rgba(0,0,0,.22); color:#fff; padding:2px 7px;
  border-radius:8px; margin-left:4px}
.btn.full{width:100%}
.row-2{display:flex; gap:12px; width:100%}
.row-2 .btn{flex:1}

/* ---- Screen head ---- */
.screen-head{display:flex; align-items:center; gap:12px; margin-bottom:18px}
.screen-head h2{font-size:22px; letter-spacing:1px}
.screen-head .stat-pill{margin-left:auto}
.back{font-size:26px; line-height:1}

/* ---- Level grid ---- */
#levels{padding-top:calc(18px + var(--safe-top))}
#level-grid{
  display:grid; grid-template-columns:repeat(4,1fr); gap:12px;
  overflow-y:auto; padding:4px 2px 30px; align-content:start;
}
.lvl{
  position:relative; aspect-ratio:1; border-radius:18px; border:none; cursor:pointer;
  font-family:inherit; font-weight:700; font-size:22px; color:#fff;
  background:linear-gradient(180deg,#5b6bd8,#3f4bb0); box-shadow:var(--shadow);
  display:flex; align-items:center; justify-content:center;
}
.lvl:active{transform:translateY(2px)}
.lvl.locked{background:linear-gradient(180deg,#2a2f5a,#20244a); color:rgba(255,255,255,.35)}
.lvl.cleared{background:linear-gradient(180deg,var(--green),var(--green-d))}
.lvl .mini-stars{position:absolute; bottom:6px; left:0; right:0; text-align:center;
  font-size:9px; color:var(--gold); letter-spacing:1px}
.lvl .lock{font-size:20px}

/* ---- Cards (win/lose/pause) ---- */
.card{
  width:100%; max-width:340px; background:linear-gradient(180deg,#232a5e,#171c46);
  border:1.5px solid rgba(255,255,255,.12); border-radius:26px;
  padding:26px 22px; text-align:center; box-shadow:var(--shadow);
}
.card h2{font-size:26px; letter-spacing:1px; margin-bottom:6px}
.card p{color:var(--soft); font-size:14px; margin-bottom:16px; font-weight:500}
.win-title{color:var(--gold); text-shadow:0 3px 0 rgba(0,0,0,.3)}
.lose-title{color:#ff7a7a}
.lose-emoji{font-size:52px; margin-bottom:6px}
.stars{font-size:34px; color:#3a3f70; margin-bottom:6px; letter-spacing:6px}
.stars span.on{color:var(--gold); text-shadow:0 0 14px rgba(255,207,63,.7)}
.result-rows{margin:14px 0 18px}
.result-row{display:flex; justify-content:space-between; align-items:center;
  padding:11px 14px; background:rgba(0,0,0,.2); border-radius:14px; margin-bottom:8px;
  font-size:16px}
.result-row b{font-size:18px}
.result-row .ico{font-size:14px}

.pop{animation:pop .32s cubic-bezier(.2,1.3,.5,1) both}
@keyframes pop{from{transform:scale(.7); opacity:0} to{transform:scale(1); opacity:1}}

/* ---- Ad overlay ---- */
.ad-box{width:100%; max-width:320px; background:#0f1236; border:1.5px solid rgba(255,255,255,.12);
  border-radius:24px; padding:30px 24px; text-align:center; position:relative}
.ad-badge{position:absolute; top:14px; right:14px; background:rgba(255,255,255,.1);
  padding:3px 10px; border-radius:8px; font-size:11px; letter-spacing:1px}
.ad-box h3{font-size:18px; margin:16px 0 14px}
.ad-spinner{width:48px; height:48px; margin:6px auto 0; border-radius:50%;
  border:5px solid rgba(255,255,255,.15); border-top-color:var(--purple);
  animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.ad-progress{height:8px; background:rgba(255,255,255,.12); border-radius:999px; overflow:hidden}
#ad-progress-fill{height:100%; width:0%; background:linear-gradient(90deg,var(--purple),var(--pink));
  transition:width .1s linear}
.ad-note{margin-top:12px; font-size:12px; color:var(--soft)}

/* ---- Toast ---- */
#toast{position:absolute; left:50%; bottom:14%; transform:translateX(-50%);
  z-index:60; background:rgba(9,12,35,.92); border:1.5px solid rgba(255,255,255,.16);
  padding:12px 20px; border-radius:14px; font-weight:600; font-size:15px;
  box-shadow:var(--shadow); animation:pop .25s ease both; max-width:80%; text-align:center}

#swipe-hint{position:absolute; left:50%; bottom:24%; transform:translateX(-50%); z-index:16;
  color:#fff; font-weight:600; font-size:16px; text-shadow:0 2px 6px rgba(0,0,0,.6);
  animation:floaty 1.4s ease-in-out infinite; pointer-events:none}
@keyframes floaty{0%,100%{transform:translate(-50%,0)} 50%{transform:translate(-50%,-8px)}}

/* floating damage/merge text injected by game */
.floaty-num{position:absolute; z-index:14; font-weight:700; font-size:22px;
  text-shadow:0 2px 0 rgba(0,0,0,.4); pointer-events:none;
  animation:floatUp .8s ease-out forwards}
@keyframes floatUp{from{opacity:1; transform:translateY(0) scale(1)}
  to{opacity:0; transform:translateY(-46px) scale(1.2)}}
