:root{--page:#edf3ef;--paper:#fffaf5;--surface:#ffffff;--ink:#3d291f;--muted:#766c66;--line:#dfd8d0;--line-strong:#9a8d82;--accent:#f06459;--accent-dark:#b9413d;--teal:#238f82;--teal-dark:#17675f;--gold:#f3b83f;--blue:#4d7ed8;--shadow:0 10px 26px rgba(71,48,37,0.11);--guide-highlight-cycle:2.1s;--board-edge:min(calc(100vw - 28px),560px,calc(100dvh - 326px));--sprite-url:url("../assets/mascot/cat-puzzle-game-sprites.png");font-family:"Avenir Next","PingFang SC","Microsoft YaHei UI",sans-serif}body{background:var(--page)}.cat-puzzle-game-app{width:min(100%,680px);height:100dvh;min-height:100dvh;justify-content:flex-start;overflow:hidden;background:var(--paper);box-shadow:0 0 0 1px rgba(61,41,31,0.05),0 18px 60px rgba(61,41,31,0.11)}.game-topbar{position:relative;grid-template-columns:48px minmax(0,1fr) 48px;min-height:calc(68px + env(safe-area-inset-top,0px));padding:calc(env(safe-area-inset-top,0px) + 10px) 16px 7px}.round-icon-btn{width:44px;height:44px;color:var(--ink);border-color:rgba(111,94,83,0.2);box-shadow:0 4px 0 rgba(61,41,31,0.08),0 8px 18px rgba(61,41,31,0.06)}.level-heading{flex-direction:row;justify-content:center;gap:0}.level-title-line{flex-wrap:nowrap;gap:6px}.level-title-line>strong{font-size:clamp(24px,6vw,30px);font-weight:950}.hard-badge{background:var(--accent)}.score-readout{display:inline-flex;align-items:center;flex:0 0 auto;min-height:22px;gap:4px;color:#d17b28;font-size:13px;font-weight:900;font-variant-numeric:tabular-nums}.score-readout svg{width:14px;height:14px;fill:rgba(243,184,63,0.2)}.score-readout.score-pop{animation:scorePop 260ms ease-out}.lives{min-height:18px;margin:0 2px 0 auto;gap:3px}.life-heart{width:18px;height:18px}.rule-strip{width:min(calc(100% - 24px),620px);min-height:54px;margin:2px auto 8px;border:1px solid rgba(111,94,83,0.35);border-radius:999px;box-shadow:0 5px 0 rgba(61,41,31,0.07),0 10px 22px rgba(61,41,31,0.06)}.rule-item{flex-direction:column;min-height:52px;padding:8px 10px;gap:3px;color:#51433b;font-size:clamp(11px,2.8vw,14px);font-weight:900;line-height:1.25;text-align:center}.rule-meme,.settings-meme{position:relative;flex:0 0 auto;display:block;width:29px;height:29px;overflow:hidden}.rule-meme>img,.settings-meme>img{position:absolute;inset:0;display:none;width:100%;height:100%;object-fit:contain}body.custom-meme .rule-meme .meme-sprite,body.custom-meme .settings-meme .meme-sprite{display:none}body.custom-meme .rule-meme>img,body.custom-meme .settings-meme>img{display:block}.rule-item + .rule-item{border-left-color:#d9d0c8}.rule-glyph{display:none !important}body.rules-hidden{--board-edge:min(calc(100vw - 28px),585px,calc(100dvh - 274px))}.challenge-toast{position:fixed;z-index:76;top:50%;bottom:auto;left:50%;width:min(calc(100% - 34px),520px);min-height:88px;padding:16px 18px;gap:13px;color:#fff;background:#493a34;border-radius:8px;transform:translate(-50%,-50%)}.challenge-toast.show{animation:centeredChallengeInOut 4.4s ease both}.challenge-toast.quick-mode.show{animation-duration:3.4s}.challenge-toast strong{font-size:clamp(17px,4.5vw,21px);line-height:1.42}.challenge-toast small{margin-bottom:3px;font-size:12px}.play-zone{display:grid;grid-template-rows:auto minmax(0,1fr);flex:1 1 auto;justify-content:center;min-height:0;padding:2px 12px 4px}.play-zone .board-stage{align-self:center}.meme-progress{display:flex;justify-content:space-between;width:min(100%,620px);min-height:36px;margin:0 0 8px;padding:3px 13px 3px 5px;border-color:rgba(111,94,83,0.22);box-shadow:0 3px 0 rgba(61,41,31,0.07)}.progress-count{display:inline-flex;align-items:center;min-width:0;gap:7px}.mini-meme{width:30px;height:30px;background:#ffe4c0}.board-stage{--board-gap:clamp(2px,calc(22px / var(--n)),5px)}.board{overflow:visible;padding:clamp(5px,1vw,8px);border:1px solid rgba(111,94,83,0.44);box-shadow:0 7px 0 rgba(61,41,31,0.09),0 18px 34px rgba(61,41,31,0.1)}.cell{transform:none;transition:filter 100ms ease,box-shadow 100ms ease}.cell-meme{display:block;inset:0;visibility:hidden;opacity:0;transform-origin:center}.cell.has-cat .cell-meme,.cell.preview-cat .cell-meme{visibility:visible}.cell.has-cat .cell-meme{opacity:1}.cell.has-cat:not(.placing):not(.celebrating) .cell-meme{animation:none !important;transform:none !important}.meme-sprite::after{display:none !important}body.builtin-cat .meme-sprite{background-position:0 0 !important;animation:none !important}body.custom-meme .meme-sprite::after,body.builtin-cat .meme-sprite::after{display:none}body.builtin-cat{--sprite-url:url("../assets/mascot/cat-puzzle-game-sprites.png")}.cell.has-cat.placing .cell-meme,.cell.has-cat.celebrating .cell-meme{transform-origin:center;overflow:visible}.cell.has-cat.placing .cell-meme{animation:memePlaceOverflow 560ms cubic-bezier(.2,.88,.3,1.18) both !important}.cell.has-cat.celebrating .cell-meme{animation:memeCelebrateOverflow 820ms cubic-bezier(.2,.88,.3,1.18) both !important}.cell.has-cat.placing,.cell.has-cat.celebrating{overflow:visible;animation:none !important}.mark-symbol{width:58%}.mark-symbol::before,.mark-symbol::after{box-shadow:0 1px 2px rgba(36,28,24,0.62)}body.colorblind .cell::before{opacity:0.46}body.colorblind .cell[data-pattern="0"]::before{background-image:repeating-linear-gradient(45deg,transparent 0 6px,rgba(25,25,35,0.55) 6px 9px)}body.colorblind .cell[data-pattern="1"]::before{background-image:radial-gradient(circle,rgba(24,27,35,0.72) 0 2px,transparent 2.5px);background-size:11px 11px}body.colorblind .cell[data-pattern="2"]::before{background-image:repeating-linear-gradient(90deg,transparent 0 7px,rgba(255,255,255,0.76) 7px 10px)}body.colorblind .cell[data-pattern="3"]::before{background-image:repeating-linear-gradient(-45deg,transparent 0 5px,rgba(25,25,35,0.52) 5px 8px)}body.colorblind .cell[data-pattern="4"]::before{background-image:linear-gradient(45deg,rgba(255,255,255,0.72) 25%,transparent 25%,transparent 75%,rgba(255,255,255,0.72) 75%);background-size:12px 12px}body.colorblind .cell[data-pattern="5"]::before{background-image:repeating-linear-gradient(0deg,transparent 0 6px,rgba(26,28,35,0.62) 6px 9px)}body.colorblind .cell[data-pattern="6"]::before{background-image:linear-gradient(45deg,transparent 42%,rgba(255,255,255,0.78) 42% 58%,transparent 58%),linear-gradient(-45deg,transparent 42%,rgba(255,255,255,0.78) 42% 58%,transparent 58%);background-size:15px 15px}body.colorblind .cell[data-pattern="7"]::before{background-image:linear-gradient(rgba(28,30,38,0.62) 2px,transparent 2px),linear-gradient(90deg,rgba(28,30,38,0.62) 2px,transparent 2px);background-size:12px 12px}body.colorblind .cell[data-pattern="8"]::before{background-image:repeating-linear-gradient(25deg,rgba(255,255,255,0.7) 0 3px,transparent 3px 10px)}body.colorblind .cell[data-pattern="9"]::before{background-image:radial-gradient(circle at 25% 25%,rgba(25,27,35,0.72) 0 2.5px,transparent 3px),radial-gradient(circle at 75% 75%,rgba(25,27,35,0.72) 0 2.5px,transparent 3px);background-size:15px 15px}.mode-selector{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:100%;min-height:38px;margin:8px 0 0;padding:3px;background:#f1ece6;border:1px solid #ddd3ca;border-radius:999px;box-shadow:inset 0 1px 2px rgba(61,41,31,0.05)}.mode-selector button{display:inline-flex;align-items:center;justify-content:center;min-width:0;padding:6px 7px;gap:5px;color:#82756c;background:transparent;border-radius:999px;font-size:12px;font-weight:900;transition:color 140ms ease,background 140ms ease,box-shadow 140ms ease,transform 140ms ease}.mode-selector button svg{width:14px;height:14px}.mode-selector button.active{color:#fff;background:var(--teal);box-shadow:0 3px 8px rgba(35,143,130,0.25)}.mode-selector button:active{transform:scale(0.96)}.action-dock{position:relative;z-index:12;bottom:auto;display:flex;align-items:center;justify-content:center;width:min(calc(100% - 24px),500px);min-height:88px;margin:6px auto max(16px,env(safe-area-inset-bottom));padding:4px 0 8px;gap:clamp(12px,4.5vw,28px);background:transparent;border:0;backdrop-filter:none}.dock-tool.utility-tool.active{color:var(--teal-dark);background:#e3f3ef;border-color:#b8dcd5;opacity:1}.dock-tool,.dock-tool.utility-tool,.dock-tool.power-tool{flex:0 0 auto;display:flex;flex-direction:column;width:68px;height:68px;min-height:0;padding:6px;gap:1px;color:#62564f;background:#fff;border:1px solid #d8cdc4;border-radius:50%;box-shadow:0 5px 0 rgba(61,41,31,0.1),0 10px 18px rgba(61,41,31,0.07)}.dock-tool.utility-tool{width:52px;height:52px;color:#978b83;background:#fbf8f4;box-shadow:0 3px 0 rgba(61,41,31,0.07)}.dock-tool.power-tool{width:76px;height:76px;color:#4c3a31;border-color:#d5c6ba}.dock-tool:hover,.dock-tool.active{color:var(--teal-dark);background:#fff}.dock-tool:active,.dock-tool.power-tool:active{transform:translateY(3px) scale(0.97);box-shadow:0 2px 0 rgba(61,41,31,0.1)}.dock-tool>svg,.dock-tool.power-tool>svg{width:27px;height:27px}.dock-tool.utility-tool>svg{width:21px;height:21px}.dock-tool>span:not(.dock-meme){font-size:11px;line-height:1}.dock-tool.utility-tool>span:not(.dock-meme){font-size:9px}.dock-meme,.dock-tool.power-tool .dock-meme{width:39px;height:39px}.tool-count{right:-2px;top:-4px;min-width:23px;height:23px;border:2px solid var(--paper)}.settings-meme{position:relative;display:block;width:48px;height:48px;overflow:hidden}.settings-meme .meme-sprite::after{background-position:100% 0}.completion-dialog{width:min(100%,680px)}.completion-panel{padding:max(28px,env(safe-area-inset-top)) 24px max(24px,env(safe-area-inset-bottom))}.completion-panel h2{margin-top:6px;font-size:clamp(28px,8vw,42px)}.completion-visual{width:min(58vw,230px);height:min(58vw,230px);margin:10px auto 0}.celebration-halo{width:112%;height:112%;background:repeating-conic-gradient(from 0deg,rgba(243,184,63,0.86) 0 8deg,transparent 8deg 21deg);opacity:0.72;filter:blur(0.4px);mask-image:radial-gradient(circle,#000 0 36%,rgba(0,0,0,0.92) 45%,rgba(0,0,0,0.42) 66%,transparent 84%);animation-duration:18s}.completion-meme{width:78%;height:78%}.completion-meme .meme-sprite,.completion-meme .meme-sprite::after{background-position:100% 0}.completion-meme .meme-sprite::after{display:none}.guide-boundary-svg{position:fixed;z-index:82;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}.guide-boundary{--boundary-glow:rgba(243,184,63,0.78);fill:none;stroke:var(--gold);stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;filter:drop-shadow(0 0 7px var(--boundary-glow));animation:boundaryPulse var(--guide-highlight-cycle) cubic-bezier(0.45,0,0.55,1) infinite}.guide-boundary.candidate-boundary{--boundary-glow:rgba(43,177,156,0.62);stroke:#58d3c1;stroke-width:2;stroke-dasharray:10 7}.guide-boundary.anchor-meme-boundary{--boundary-glow:rgba(255,246,206,0.88);stroke:#fff6ce;stroke-width:3;stroke-dasharray:8 6}.cell.guide-anchor-meme .cell-meme{opacity:1;filter:brightness(1.1) saturate(1.06) drop-shadow(0 0 7px rgba(255,246,206,0.96))}.cell.guide-anchor-meme.preview-cat .cell-meme{opacity:0.72}.guide-cell-ring.rule-ring{border:2px solid #fff;animation:calmGuideRing var(--guide-highlight-cycle) cubic-bezier(0.45,0,0.55,1) infinite}.cell.preview-cat .cell-meme{opacity:0.34}.cell.preview-mark .mark-symbol{opacity:0.46}.cell.preview-cat::after,.cell.preview-mark::after,.cell.guide-target::after,.cell.hint-target::after{display:none !important;content:none !important;border:0 !important;box-shadow:none !important}.setting-mode-row{width:100%;padding:12px 2px 14px;border-bottom:1px solid var(--line)}.setting-mode-label{display:flex;align-items:center;gap:10px;color:var(--ink);font-size:14px;font-weight:900}.setting-mode-label svg{width:21px;height:21px;color:var(--teal-dark)}.restart-level-btn{display:inline-flex;align-items:center;justify-content:center;width:100%;min-height:48px;margin:18px 0 8px;gap:8px;color:#a9443f;background:#fff2ef;border:1px solid #e8b9b2;border-radius:8px;font-size:14px;font-weight:900}.restart-level-btn svg{width:19px;height:19px}.built-in-meme-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:min(100%,360px);margin:10px auto 0;gap:10px}.meme-choice{display:flex;align-items:center;justify-content:center;gap:9px}.meme-choice.active{color:var(--teal-dark);border-color:var(--teal);box-shadow:inset 0 0 0 1px var(--teal)}.choice-preview{position:relative;display:block;width:38px;height:38px;overflow:hidden;border-radius:50%;background-color:#fff3e4}.cat-preview{background-image:url("../assets/mascot/cat-puzzle-game-sprites.png");background-repeat:no-repeat;background-position:0 0;background-size:200% 200%}.completion-stats{margin-bottom:10px}.completion-scores{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:min(100%,430px);margin:0 auto 18px;overflow:hidden;background:#fff;border:1px solid #e0d7cf;border-radius:8px}.completion-scores span{display:flex;flex-direction:column;align-items:center;padding:10px 12px;gap:2px}.completion-scores span + span{border-left:1px solid #e0d7cf}.completion-scores small{color:var(--muted);font-size:11px;font-weight:800}.completion-scores strong{color:#d17b28;font-size:22px;font-variant-numeric:tabular-nums}body.night-mode .mode-selector{background:#2b3034;border-color:#4b5055}body.night-mode .dock-tool,body.night-mode .dock-tool:hover,body.night-mode .dock-tool.active,body.night-mode .completion-scores{background:#30343b;border-color:#50545b}body.night-mode .completion-scores span + span{border-left-color:#50545b}@keyframes scorePop{0%{transform:scale(0.88);opacity:0.55}62%{transform:scale(1.12);opacity:1}100%{transform:scale(1)}}@keyframes memePlaceOverflow{0%{inset:0;opacity:1;transform:none}42%{inset:-25%;opacity:1;transform:none}74%{inset:-4%;transform:none}100%{inset:0;opacity:1;transform:none}}@keyframes memeCelebrateOverflow{0%{inset:0;transform:none}44%{inset:-25%;transform:none}72%{inset:-7%;transform:none}100%{inset:0;transform:none}}@keyframes centeredChallengeInOut{0%{opacity:0;transform:translate(-50%,-50%) scale(.92)}9%,84%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-50%) scale(.96)}}@keyframes boundaryPulse{0%,100%{opacity:0;filter:drop-shadow(0 0 0 transparent)}38%,58%{opacity:1;filter:drop-shadow(0 0 9px var(--boundary-glow))}}@keyframes calmGuideRing{0%,100%{opacity:0.72;box-shadow:0 0 0 2px var(--teal),0 0 12px rgba(29,141,132,0.42)}38%,58%{opacity:1;box-shadow:0 0 0 4px var(--teal),0 0 20px rgba(29,141,132,0.64)}}@media (max-height:760px){:root{--board-edge:min(calc(100vw - 28px),520px,calc(100dvh - 302px))}.game-topbar{min-height:68px}.rule-strip{min-height:47px;margin-bottom:6px}.rule-item{min-height:45px;padding-block:5px}.meme-progress{min-height:32px;margin-bottom:6px}.mode-selector{margin-top:9px}.action-dock{min-height:78px;margin-top:3px}.dock-tool.power-tool{width:68px;height:68px}.dock-tool.utility-tool{width:48px;height:48px}}@media (max-height:620px){:root{--board-edge:min(calc(100vw - 62px),440px,calc(100dvh - 350px))}.game-topbar{min-height:60px;padding-top:max(6px,env(safe-area-inset-top))}.level-title-line>strong{font-size:23px}.round-icon-btn{width:39px;height:39px}.rule-strip{min-height:42px;margin-bottom:4px}.rule-item{min-height:40px;font-size:9px}.meme-progress{min-height:28px;margin-bottom:4px}.mini-meme{width:25px;height:25px}.mode-selector{min-height:34px;margin-top:7px}.action-dock{min-height:67px;margin-bottom:max(5px,env(safe-area-inset-bottom))}.dock-tool.power-tool{width:58px;height:58px}.dock-tool.utility-tool{width:43px;height:43px}.dock-meme,.dock-tool.power-tool .dock-meme{width:31px;height:31px}}@media (min-width:700px) and (max-height:950px){:root{--board-edge:min(530px,calc(100dvh - 350px))}}@media (min-width:1280px){.challenge-toast{left:50%;top:50%;bottom:auto;width:min(calc(100% - 34px),520px)}}@media (max-width:380px){.game-topbar{grid-template-columns:42px minmax(0,1fr) 42px;padding-right:10px;padding-left:10px}.level-heading{padding-inline:2px}.level-title-line{gap:4px}.level-title-line>strong{font-size:20px}.hard-badge{min-height:21px;padding:3px 5px;font-size:10px}.hard-badge span{display:none}.score-readout{gap:2px;font-size:11px}.score-readout svg{width:12px;height:12px}.rule-item{padding-inline:6px;font-size:10px}.mode-selector{width:100%}.action-dock{gap:10px}.dock-tool.power-tool{width:68px;height:68px}.dock-tool.utility-tool{width:47px;height:47px}}@media (prefers-reduced-motion:reduce){.guide-boundary{animation:none !important}}
