*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;user-select:none}
html,body{width:100%;height:100%;overflow:hidden;font-family:'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;background:#1a1a2e}
#app{width:100%;height:100%;position:relative;overflow:hidden}

.page{position:absolute;top:0;left:0;width:100%;height:100%;display:none;flex-direction:column;align-items:center;justify-content:center}
.page.active{display:flex}

/* ===== START PAGE ===== */
#page-start{background:linear-gradient(180deg,#667eea 0%,#764ba2 50%,#f093fb 100%);overflow:hidden}
#page-start::before{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background:radial-gradient(circle at 30% 20%,rgba(255,255,255,0.15),transparent 50%),radial-gradient(circle at 70% 80%,rgba(255,255,255,0.1),transparent 40%);z-index:0}
.start-content{position:relative;z-index:1;text-align:center;padding:20px;max-width:400px;width:90%}
.start-icon{font-size:72px;animation:iconFloat 3s ease-in-out infinite;filter:drop-shadow(0 8px 30px rgba(0,0,0,0.3))}
@keyframes iconFloat{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-10px) scale(1.05)}}
.start-title{font-size:36px;background:linear-gradient(135deg,#fff,#ffeaa7);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;margin:10px 0 4px;letter-spacing:4px;text-shadow:none}
.start-sub{font-size:14px;color:rgba(255,255,255,0.7);letter-spacing:8px;margin-bottom:24px}
.start-rules{background:rgba(255,255,255,0.15);border:1px solid rgba(255,255,255,0.25);border-radius:16px;padding:16px;margin-bottom:24px;text-align:left;backdrop-filter:blur(10px)}
.rule-item{display:flex;align-items:center;gap:10px;padding:6px 0;color:rgba(255,255,255,0.9);font-size:14px}
.rule-emoji{font-size:20px;flex-shrink:0;width:28px;text-align:center}
.btn-start{display:block;width:100%;padding:16px;border:none;border-radius:25px;font-size:20px;font-weight:bold;cursor:pointer;background:linear-gradient(135deg,#ffeaa7,#fd79a8);color:#2d3436;letter-spacing:4px;box-shadow:0 4px 20px rgba(253,121,168,0.4);transition:transform .15s;margin-bottom:12px}
.btn-start:active{transform:scale(0.95)}
.btn-back{display:block;width:100%;padding:12px;border:1px solid rgba(255,255,255,0.3);border-radius:25px;font-size:14px;cursor:pointer;background:rgba(255,255,255,0.1);color:rgba(255,255,255,0.85);letter-spacing:2px;transition:transform .15s;backdrop-filter:blur(10px)}
.btn-back:active{transform:scale(0.95)}

/* ===== GAME PAGE ===== */
#page-game{background:#fafafa}
.game-top{width:100%;padding:8px 12px;flex-shrink:0;background:linear-gradient(180deg,#fff,#f0f0f5);border-bottom:1px solid rgba(0,0,0,0.08)}
.game-info{display:flex;justify-content:space-between;align-items:center;color:#2d3436;font-size:14px;font-weight:500}
.game-info .level-name{font-size:16px;letter-spacing:1px;color:#6c5ce7;font-weight:bold}
.game-info .score{color:#fdcb6e;font-weight:bold;text-shadow:0 1px 2px rgba(0,0,0,0.1)}
.error-bar{display:flex;align-items:center;gap:6px;margin-top:4px}
.error-label{font-size:12px;color:rgba(0,0,0,0.5)}
.error-hearts{font-size:14px;letter-spacing:2px}

.target-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;align-items:center}
.target-label{font-size:12px;color:rgba(0,0,0,0.6);font-weight:bold}
.target-item{display:inline-flex;align-items:center;gap:2px;padding:3px 8px;border-radius:10px;background:rgba(108,92,231,0.1);border:1px solid rgba(108,92,231,0.3);font-size:13px;color:rgba(0,0,0,0.85);transition:all .3s}
.target-item.found{background:rgba(46,213,115,0.2);border-color:rgba(46,213,115,0.6);text-decoration:line-through;opacity:0.6}

.game-canvas-wrap{flex:1;display:flex;align-items:center;justify-content:center;padding:4px;position:relative;min-height:0;overflow:hidden;background:#fff}
#gameCanvas{border-radius:12px;touch-action:none;box-shadow:0 4px 20px rgba(0,0,0,0.1),0 0 0 1px rgba(0,0,0,0.05)}

.game-bottom{width:100%;padding:8px 12px;display:flex;justify-content:center;gap:8px;flex-shrink:0;background:linear-gradient(0deg,#fff,#f0f0f5);border-top:1px solid rgba(0,0,0,0.08)}
.tool-btn{width:52px;height:52px;border-radius:14px;border:2px solid rgba(108,92,231,0.3);background:linear-gradient(135deg,rgba(108,92,231,0.1),rgba(255,255,255,0.9));color:#6c5ce7;font-size:20px;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;transition:transform .15s;box-shadow:0 2px 8px rgba(108,92,231,0.15)}
.tool-btn:active{transform:scale(0.9)}
.tool-btn .tool-label{font-size:8px;margin-top:1px;color:rgba(0,0,0,0.5)}
.tool-btn .tool-count{position:absolute;top:-4px;right:-4px;background:linear-gradient(135deg,#6c5ce7,#a29bfe);color:#fff;font-size:10px;width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:bold}
.tool-btn .ad-badge{position:absolute;bottom:1px;right:1px;background:#fd79a8;color:#fff;font-size:7px;padding:0 3px;border-radius:3px}
.tool-btn:disabled{opacity:0.4;cursor:default}
.pause-btn{width:52px;height:52px;border-radius:14px;border:2px solid rgba(0,0,0,0.1);background:rgba(255,255,255,0.9);color:#636e72;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center}

/* ===== OVERLAYS ===== */
#page-clear,#page-fail{background:rgba(255,255,255,0.95);backdrop-filter:blur(10px)}
.over-content{text-align:center;padding:20px;max-width:360px;width:90%}
.over-icon{font-size:64px}
.over-title{font-size:32px;margin:8px 0 4px;letter-spacing:4px}
.clear-title{color:#6c5ce7;text-shadow:0 0 20px rgba(108,92,231,0.3)}
.fail-title{color:#d63031;text-shadow:0 0 20px rgba(214,48,49,0.3)}
.over-sub{font-size:12px;color:rgba(0,0,0,0.3);letter-spacing:6px;margin-bottom:20px}
.result-row{display:flex;gap:12px;margin-bottom:20px}
.result-item{flex:1;background:rgba(108,92,231,0.08);border:1px solid rgba(108,92,231,0.15);border-radius:12px;padding:10px}
.result-label{font-size:11px;color:rgba(0,0,0,0.5);margin-bottom:4px}
.result-value{font-size:24px;font-weight:bold;color:#6c5ce7}
.coin-val{color:#fdcb6e;text-shadow:0 0 10px rgba(253,203,110,0.5)}
.btn-restart{display:block;width:100%;padding:14px;border:none;border-radius:25px;font-size:18px;font-weight:bold;cursor:pointer;background:linear-gradient(135deg,#6c5ce7,#a29bfe);color:#fff;letter-spacing:3px;box-shadow:0 4px 20px rgba(108,92,231,0.4);margin-bottom:12px;transition:transform .15s}
.btn-restart:active{transform:scale(0.95)}

/* ===== PAUSE OVERLAY ===== */
.pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(255,255,255,0.9);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:50;flex-direction:column;gap:16px}
.pause-overlay.active{display:flex}
.pause-title{font-size:32px;color:#6c5ce7;text-shadow:0 0 20px rgba(108,92,231,0.3);letter-spacing:6px;margin-bottom:10px}
.pause-btn{padding:14px 40px;border:2px solid rgba(108,92,231,0.4);border-radius:25px;font-size:16px;cursor:pointer;background:rgba(255,255,255,0.9);color:#6c5ce7;letter-spacing:3px;transition:transform .15s;min-width:200px}
.pause-btn:active{transform:scale(0.95)}
.pause-btn.primary{background:linear-gradient(135deg,#6c5ce7,#a29bfe);color:#fff;border:none;box-shadow:0 4px 20px rgba(108,92,231,0.4)}

/* ===== FOUND MARK ===== */
.found-mark{position:absolute;pointer-events:none;z-index:20;animation:foundPop 0.8s ease-out forwards}
.found-mark .mark-circle{width:56px;height:56px;border:3px solid #2ed573;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;box-shadow:0 0 18px rgba(46,213,115,0.6),0 0 40px rgba(46,213,115,0.25);background:rgba(46,213,115,0.2)}
@keyframes foundPop{0%{opacity:0;transform:scale(0.3)}30%{opacity:1;transform:scale(1.25)}55%{transform:scale(0.95)}100%{opacity:0;transform:scale(1.05) translateY(-15px)}}

/* ★ 分数飘字 */
.found-score-float{position:absolute;pointer-events:none;z-index:22;font-family:'Segoe UI','PingFang SC',sans-serif;font-weight:bold;text-shadow:0 0 8px rgba(0,0,0,0.5),0 2px 4px rgba(0,0,0,0.4);animation:scoreFloatUp 1s ease-out forwards}
@keyframes scoreFloatUp{0%{opacity:0;transform:translateY(0) scale(0.5)}15%{opacity:1;transform:translateY(-8px) scale(1.15)}100%{opacity:0;transform:translateY(-60px) scale(0.9)}}

/* ★ Combo 提示 */
.combo-burst{position:absolute;pointer-events:none;z-index:21;font-family:'Segoe UI','PingFang SC',sans-serif;font-weight:bold;color:#FFD700;text-shadow:0 0 12px rgba(255,215,0,0.9),0 0 24px rgba(255,140,0,0.5);animation:comboBurst 0.9s ease-out forwards}
@keyframes comboBurst{0%{opacity:0;transform:scale(0.2) rotate(-10deg)}30%{opacity:1;transform:scale(1.35) rotate(3deg)}60%{transform:scale(1) rotate(-2deg)}100%{opacity:0;transform:scale(0.7) translateY(-30px) rotate(5deg)}}

/* ===== WRONG MARK ===== */
.wrong-mark{position:absolute;pointer-events:none;z-index:20;animation:wrongPop 0.8s ease-out forwards}
.wrong-mark .mark-x{font-size:32px;color:#ff4757;text-shadow:0 0 10px rgba(255,71,87,0.5)}
@keyframes wrongPop{0%{opacity:0;transform:scale(0.5)}20%{opacity:1;transform:scale(1.3)}40%{transform:scale(1)}80%{opacity:1}100%{opacity:0}}

/* ===== HINT GLOW ===== */
.hint-glow{position:absolute;pointer-events:none;z-index:15;width:60px;height:60px;border-radius:50%;border:3px solid rgba(253,203,110,0.9);box-shadow:0 0 20px rgba(253,203,110,0.5),0 0 40px rgba(253,203,110,0.3);animation:hintPulse 0.8s ease-in-out infinite}
@keyframes hintPulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.15);opacity:0.7}}

/* ===== MAGNIFIER EFFECT ===== */
.magnifier-effect{position:absolute;pointer-events:none;z-index:15;border-radius:50%;border:3px solid rgba(108,92,231,0.7);box-shadow:0 0 30px rgba(108,92,231,0.4),inset 0 0 30px rgba(108,92,231,0.15);animation:magnifierFade 3s ease-out forwards}
@keyframes magnifierFade{0%{opacity:1;transform:scale(0.8)}20%{transform:scale(1)}80%{opacity:0.8}100%{opacity:0;transform:scale(1.1)}}

/* ===== FREEZE OVERLAY ===== */
.freeze-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(116,185,255,0.08);border:3px solid rgba(116,185,255,0.4);pointer-events:none;z-index:5;animation:freezePulse 1s ease-in-out infinite}
@keyframes freezePulse{0%,100%{border-color:rgba(116,185,255,0.3);background:rgba(116,185,255,0.05)}50%{border-color:rgba(116,185,255,0.6);background:rgba(116,185,255,0.1)}}

/* ★ Combo 金光遮罩 */
.combo-glow-overlay{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:8;border-radius:12px;box-shadow:inset 0 0 60px rgba(255,215,0,0.35),inset 0 0 120px rgba(255,140,0,0.15);animation:comboGlowFlash 0.6s ease-out forwards}
@keyframes comboGlowFlash{0%{opacity:1}50%{opacity:0.7}100%{opacity:0}}

/* ★ CLEAN 撒花 */
.confetti-piece{position:absolute;pointer-events:none;z-index:30;width:8px;height:8px;border-radius:2px;animation:confettiFall linear forwards}
@keyframes confettiFall{
  0%{opacity:1;transform:translateY(0) rotate(0deg)}
  80%{opacity:1}100%{opacity:0;transform:translateY(var(--fall-y)) translateX(var(--drift-x)) rotate(var(--rot))}
}

/* ★ 结算弹入动画 */
.over-content.pop-in{animation:clearPopIn 0.5s cubic-bezier(0.175,0.885,0.32,1.275) both}
@keyframes clearPopIn{0%{opacity:0;transform:scale(0.4) translateY(40px)}100%{opacity:1;transform:scale(1) translateY(0)}}

@media(max-height:600px){
  .tool-btn{width:46px;height:46px;font-size:18px}
  .game-info{font-size:12px}
}