:root{font-family:ui-rounded,"Arial Rounded MT Bold","PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:#173f64;background:#233c37;font-synthesis:none;font-weight:700}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;overscroll-behavior:none}button,input{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer;touch-action:manipulation;transition:transform .15s,filter .15s}button:active{transform:translateY(3px) scale(.97)}button:focus-visible,input:focus-visible{outline:3px solid #fff;outline-offset:3px}button:hover{filter:brightness(1.06)}button[hidden]{display:none!important}.brand-bubble{font-size:40px;width:48px;filter:drop-shadow(0 3px 0 #31779255)}
.game-shell{position:relative;width:100%;max-width:560px;height:100%;height:100dvh;margin:auto;isolation:isolate;overflow:clip;background:#a0d866;box-shadow:0 0 90px #0a231c88}#viewport{position:absolute;inset:0;touch-action:none;user-select:none;cursor:crosshair;outline:none}#viewport canvas{display:block;width:100%;height:100%}#viewport.orbit{cursor:grab}#viewport.orbit:active{cursor:grabbing}
.hud{position:absolute;top:max(18px,env(safe-area-inset-top));left:18px;right:18px;display:flex;align-items:flex-start;justify-content:space-between;pointer-events:none}.hud>*{pointer-events:auto}.coin-counter{position:relative;width:106px;height:35px;border-radius:24px;background:#23422ccc;color:#fff;display:flex;align-items:center;padding-left:55px;margin-top:10px;font-size:24px}.coin{position:absolute;left:-4px;top:-11px;display:grid;place-items:center;width:54px;height:54px;border-radius:50%;font-size:35px;color:#ec9826;background:linear-gradient(145deg,#fff084,#ffc740 55%,#f7a537);border:2px solid #b7781e;box-shadow:inset 0 0 0 4px #ffdd6c,inset 0 -5px 0 #eda230,0 3px 0 #96582055;text-shadow:0 2px #fff1a0}.coin-plus{position:absolute;left:31px;top:25px;border:2px solid #3d9650;background:linear-gradient(#83ea8d,#2cb767);border-radius:50%;width:25px;height:25px;display:grid;place-items:center;color:white;font-size:25px;line-height:20px;text-shadow:0 2px #258c4c}.level{text-align:center;color:#fff;font-weight:1000;font-size:26px;letter-spacing:.4px;text-shadow:0 3px #274338,2px 0 #274338,-2px 0 #274338,0 -2px #274338;white-space:nowrap;margin:9px 0 0}.level small{display:block;font-size:10px;letter-spacing:3px;text-shadow:0 1px 3px #31573d;margin-top:6px}.round-button{display:grid;place-items:center;width:48px;height:48px;border:2px solid #2768bc;border-radius:50%;background:linear-gradient(145deg,#71bfff,#448ff4 55%,#3773de);box-shadow:inset 1px 3px 0 #b0deff9c,inset 0 -4px 0 #3067c1,0 3px 2px #214e7844;color:#fff;font-size:32px;text-shadow:0 2px #2a5fa5;line-height:1}.help{position:absolute;top:calc(max(18px,env(safe-area-inset-top)) + 59px);right:18px;font-weight:1000;font-size:34px}
.stage-badge{position:absolute;top:calc(max(18px,env(safe-area-inset-top)) + 68px);left:20px;width:164px;display:flex;gap:8px;align-items:center;padding:8px 10px 13px;border:2px solid #ffffffd9;border-radius:18px;background:#fffaf0ed;box-shadow:0 4px 0 #596d6240;pointer-events:none}.stage-badge>span{font-size:25px;color:#3c94ce}.stage-badge small{font-size:8px;color:#739299}.stage-badge h1{font-size:13px;margin:1px 0 0}.stage-badge>strong{font-size:18px;margin-left:auto}.progress-bar{position:absolute;bottom:5px;left:12px;right:12px;height:4px;background:#dbe5da;border-radius:9px;overflow:hidden}#progress-fill{width:0;height:100%;background:#61c366;border-radius:9px;transition:width .15s}
.game-bottom{position:absolute;left:18px;right:18px;bottom:max(10px,env(safe-area-inset-bottom));display:flex;align-items:stretch;flex-direction:column;gap:10px;pointer-events:none}.game-bottom button,.game-bottom nav{pointer-events:auto}.wash-hint{align-self:center;display:flex;align-items:center;justify-content:center;gap:9px;min-height:44px;padding:7px 22px 7px 12px;background:#fffdf2ed;border:2px solid #fff;border-radius:28px;box-shadow:0 3px 0 #6c824c44;color:#153f66;font-size:17px;text-shadow:0 1px white}.wash-hint>span:first-child{font-size:25px;margin-top:-12px}.hint-spark{color:#ffcc4a}.angle-controls{display:flex;justify-content:center;gap:8px;margin:0 0 1px}.angle-controls button{border:1px solid #ffffffaa;background:#fffdf1e8;border-radius:18px;color:#356584;padding:8px 12px;font-size:16px;min-height:36px;box-shadow:0 3px 0 #52786644}.angle-controls button span{font-size:10px;vertical-align:middle}.steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.step{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;height:72px;border:2px solid #bcd8e6;border-radius:17px;background:linear-gradient(145deg,#94b4c6,#7692a8);box-shadow:inset 0 2px #d5e6ea99,inset 0 -4px #58788e,0 4px 0 #34567155;color:#edf4f4;text-shadow:0 2px #59778d;font-size:10px;min-width:0;padding:5px 0 8px}.step .tool-glyph{font-size:25px;line-height:29px;filter:grayscale(1);opacity:.55}.step .step-index{position:absolute;right:5px;top:4px;font-size:8px;opacity:.85}.step.active{background:linear-gradient(145deg,#ffe873,#ffce55 55%,#f8ad54);border:3px solid #fffdf1;box-shadow:inset 0 2px #fff1a6,inset 0 -4px #e79b49,0 4px 0 #cf8748,0 0 0 2px #fbd363;color:#194b6e;text-shadow:0 1px #ffe8a7}.step.active .tool-glyph,.step.done .tool-glyph{filter:none;opacity:1}.step.done{background:linear-gradient(#9bdda2,#57b985);border-color:#d8ffe0;color:#205d46;text-shadow:none}#advance,#restart-finished,.primary{border:2px solid #fff3ba;background:linear-gradient(#ffe075,#ffc14f);box-shadow:inset 0 -4px #eda03e,0 4px 0 #a8753655;border-radius:17px;padding:12px;color:#204d62;font-size:14px;font-weight:900;text-align:center;min-height:46px}#advance:disabled{display:none}#advance span{margin-left:12px}#gate-hint{margin:0;text-align:center;color:#fff;font-size:10px;text-shadow:0 1px 3px #284936,0 1px 2px #284936;min-height:14px}
#cursor{position:absolute;display:none;border:2px solid #fff8;border-radius:50%;box-shadow:0 0 0 5px #ffffff1c,inset 0 0 15px #d8ffe523;pointer-events:none;transform:translate(-50%,-50%);z-index:2}#cursor:after{content:var(--tool-emoji,'🧽');position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(-18deg);font-size:38px;filter:drop-shadow(0 4px 2px #285b6266)}#hit-label{position:absolute;pointer-events:none;color:white;background:#285775d9;border-radius:15px;padding:5px 8px;font-size:10px;white-space:nowrap}#hit-label:empty{display:none}#toast{position:absolute;top:26%;left:50%;transform:translate(-50%,-8px);width:max-content;max-width:86%;background:#fffdf4f5;border:2px solid #fff;color:#245678;padding:12px 20px;border-radius:22px;font-size:12px;opacity:0;pointer-events:none;transition:.25s;text-align:center;z-index:8;box-shadow:0 4px 0 #385e5333}#toast.show{opacity:1;transform:translate(-50%,0)}#loading{position:absolute;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:16px;background:#a8d979;color:#2b634b;font-size:14px;padding:35px;text-align:center}#loading span{font-size:55px}
dialog{border:4px solid #fff;border-radius:28px;background:#fffaf0;color:#224f6d;width:calc(100% - 40px);max-width:370px;max-height:85dvh;overflow:auto;padding:26px;text-align:center;box-shadow:0 9px 0 #3c617f66}dialog::backdrop{background:#163c4b88;backdrop-filter:blur(5px)}dialog h2{font-size:23px;margin:8px 0 14px}dialog p{font-size:12px;line-height:1.9;color:#6d8791;font-weight:500}.dialog-icon{display:block;font-size:36px}.close-dialog{position:absolute;right:10px;top:8px;border:0;background:transparent;color:#6a99b4;font-size:30px;width:36px;height:36px}.dialog-action,.view-presets button,.mode-switch button{border:2px solid #d5e6e8;border-radius:13px;background:#eaf5f5;color:#3c7087;min-height:42px;padding:9px;font-size:12px}.dialog-action{width:100%;margin:8px 0}.primary{display:block;width:100%;margin-top:18px}.range-title{display:flex;justify-content:space-between;font-size:12px;margin:16px 0 10px}input[type=range]{width:100%;accent-color:#4aa4d9}.areas{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:20px 0}.area{display:grid;grid-template-columns:1fr auto;gap:6px;font-size:11px;text-align:left;color:#6c8b9a}.area>div{grid-column:1/3;height:6px;border-radius:5px;overflow:hidden;background:#e3eae0}.area i{display:block;background:#67c794;height:100%}.area.done{color:#41a372}.view-presets,.mode-switch{display:flex;gap:5px;margin:10px 0}.view-presets button,.mode-switch button{flex:1;padding:5px;font-size:10px}.mode-switch .selected{background:#5da9e6;color:#fff;border-color:#4592d5}#orientation{color:#91a5ac;font-size:9px}.help-process{border-radius:18px;background:#e9f4ec;padding:14px;font-size:13px;line-height:2;color:#4b8875}
@media(min-width:600px){.game-shell{max-width:min(560px,60dvh);border-left:1px solid #ffffff33;border-right:1px solid #ffffff33}}@media(max-height:690px){.hud{top:12px}.help{top:69px}.stage-badge{top:80px}.game-bottom{gap:7px;bottom:8px}.step{height:61px;border-radius:14px}.wash-hint{font-size:14px;min-height:36px}.angle-controls button{padding:5px 10px;min-height:32px}.level{font-size:23px}#gate-hint{font-size:9px}}@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

.fp-reticle,.fp-label{display:none;position:absolute;pointer-events:none}.first-person .fp-reticle{display:block;left:50%;top:50%;transform:translate(-50%,-50%);color:#ffffffd0;font-size:24px;font-weight:400;text-shadow:0 1px 3px #16475f}.first-person .fp-label{display:block;left:50%;top:20%;transform:translateX(-50%);border:1px solid #ffffff60;border-radius:20px;padding:7px 12px;background:#163d55a0;color:#fff;font-size:10px;white-space:nowrap}

#interaction-mode{align-self:center;min-height:42px;padding:9px 22px;border:2px solid #fff;border-radius:22px;background:#3a91d9;color:#fff;box-shadow:0 3px #245b86;font-size:12px}#interaction-mode[aria-pressed=true]{background:#ffd065;color:#194b6e;box-shadow:0 3px #b48836}.game-bottom{gap:7px}.fp-label{z-index:2}

#joystick{position:absolute;right:18px;bottom:calc(max(10px,env(safe-area-inset-bottom)) + var(--controls-height,140px) + 18px);width:148px;height:148px;border-radius:50%;border:3px solid #ffffffab;background:radial-gradient(circle,#285c8377,#396e96a6);box-shadow:inset 0 4px 10px #173d5666,0 4px 0 #224e6c55;touch-action:none;user-select:none;z-index:5;outline-offset:4px}
#joystick-knob{position:absolute;left:50%;top:50%;width:62px;height:62px;border:2px solid #fff;border-radius:50%;background:linear-gradient(145deg,#c9edff,#78b6e8);box-shadow:inset 0 -4px #5386af,0 3px 6px #183d6577;transform:translate(-50%,-50%);pointer-events:none}
.stick-arrows{position:absolute;inset:3px;line-height:44px;text-align:center;color:#e9f8ffc9;font-size:17px;pointer-events:none}
#joystick small{position:absolute;top:100%;left:0;right:0;text-align:center;color:white;text-shadow:0 1px 3px #234357;font-size:10px;padding-top:6px}
#joystick.held{border-color:white;background:#3277a2aa}
@media(max-height:690px){#joystick{width:136px;height:136px;right:14px}.stick-arrows{line-height:40px}}

/* Four explicit tools share the same workflow on all screen sizes. */
#steps{display:grid}.stage-count{display:block}
.game-bottom{width:min(420px,calc(100vw - 36px))!important;max-width:calc(100vw - 36px)}

.enter-game{position:fixed;inset:0;z-index:1000;border:0;border-radius:0;background:linear-gradient(145deg,rgba(18,77,128,.72),rgba(43,152,207,.46));color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;cursor:pointer;backdrop-filter:blur(5px);transition:opacity .32s ease,visibility .32s ease}
.enter-game span{font-size:54px;filter:drop-shadow(0 7px 12px #12476e88)}
.enter-game strong{font-size:clamp(28px,4vw,48px);letter-spacing:.08em;text-shadow:0 3px 12px #123c67}
.enter-game small{font-size:clamp(14px,1.5vw,19px);padding:9px 18px;border-radius:999px;background:#ffffff2b;border:1px solid #ffffff66}
.enter-game.entered{opacity:0;visibility:hidden;pointer-events:none}

/* Garage lobby: the reference contributes the chunky toy-like hierarchy, but
   this game keeps only profile, coins, wash tickets, level and shop. */
.garage-menu{position:absolute;inset:0;z-index:9;pointer-events:none;transition:opacity .28s ease,visibility .28s ease}.garage-menu.entered{opacity:0;visibility:hidden}.lobby-topbar{position:absolute;top:max(18px,env(safe-area-inset-top));left:max(22px,env(safe-area-inset-left));display:flex;align-items:center;gap:14px;pointer-events:auto;filter:drop-shadow(0 5px 5px #172d4655)}

/* A clean, deterministic render surface for store art and review screenshots. */
body.capture-mode .garage-menu,
body.capture-mode .hud,
body.capture-mode .help,
body.capture-mode .stage-badge,
body.capture-mode .game-bottom,
body.capture-mode #joystick,
body.capture-mode .fp-reticle,
body.capture-mode .fp-label,
body.capture-mode #cursor,
body.capture-mode #hit-label,
body.capture-mode #toast,
body.capture-mode .landscape-notice{display:none!important}
body.capture-mode #viewport{cursor:none!important}
.player-avatar{width:78px;height:86px;padding:8px;border:4px solid #eff5ff;border-radius:14px;background:linear-gradient(145deg,#bbc8db,#70849f);box-shadow:inset 0 0 0 3px #53677f,inset 0 -7px 0 #5a6d87,0 5px 0 #273d5980}.player-avatar svg{width:100%;height:100%;fill:#e1e8f4;filter:drop-shadow(0 2px 0 #61738d)}
.lobby-counter{position:relative;min-width:152px;height:52px;padding:0 22px 0 64px;border:3px solid #f5f7ff;border-radius:13px;background:linear-gradient(#f8f8f6,#c9d0d9);box-shadow:inset 0 -6px 0 #aab3c0,0 5px 0 #263b5870;color:#31363e;display:flex;align-items:center;justify-content:center;font-size:27px;text-shadow:0 2px #fff}.counter-medal{position:absolute;left:-12px;top:-10px;width:67px;height:67px;display:grid;place-items:center;border-radius:50%;border:4px solid #fff3ac;box-shadow:inset 0 -7px 0 #dc901b,0 4px 0 #4a352555}.coin-medal{background:linear-gradient(145deg,#ffe96c,#ffb41f);color:#fff6a5;font-size:37px;text-shadow:0 3px #bd7913}.wash-medal{background:linear-gradient(145deg,#62c7ff,#238be1);border-color:#bcecff;border-radius:18px;transform:rotate(-6deg)}.wash-medal svg{width:48px;height:48px;fill:none;stroke:#fff8cb;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 2px 0 #236dae)}
.lobby-actions{position:absolute;left:50%;bottom:max(26px,env(safe-area-inset-bottom));transform:translateX(-50%);display:grid;grid-template-columns:minmax(260px,1fr) minmax(260px,1fr);gap:28px;width:min(700px,78vw);pointer-events:auto}.lobby-card{position:relative;min-height:112px;border:5px solid #e9eef6;border-radius:22px;color:#fff7d1;box-shadow:inset 0 -10px 0 #00000024,inset 0 5px 0 #ffffff66,0 7px 0 #26344caa;padding:15px 24px;text-shadow:0 3px #45612b;overflow:hidden}.lobby-card:before{content:"";position:absolute;inset:7px;border:2px solid #ffffff55;border-radius:13px;pointer-events:none}.lobby-card strong{position:relative;display:block;font-size:34px;line-height:1.05}.lobby-card small,.lobby-card span{position:relative;display:block}.level-entry{background:linear-gradient(#9cf243,#45bd20 58%,#299913);border-color:#e8edf4}.level-entry small{font-size:13px;letter-spacing:.12em}.level-entry span{margin-top:8px;font-size:15px}.shop-entry{padding-left:116px;text-align:left;background:linear-gradient(#ffd945,#f49c17 62%,#d66d12);text-shadow:0 3px #95520d}.shop-entry .shop-bucket{position:absolute;left:22px;top:18px;font-size:64px;filter:drop-shadow(0 4px 0 #9a591c)}.shop-entry strong{font-size:29px;margin-top:10px}.shop-entry small{font-size:12px;margin-top:8px}
.game-shell:not(.playing)>.hud,.game-shell:not(.playing)>.help,.game-shell:not(.playing)>.stage-badge,.game-shell:not(.playing)>.game-bottom,.game-shell:not(.playing)>#joystick,.game-shell:not(.playing)>#toast,.game-shell:not(.playing) #viewport .fp-reticle,.game-shell:not(.playing) #viewport .fp-label{opacity:0;visibility:hidden;pointer-events:none}.game-shell.playing>.hud,.game-shell.playing>.help,.game-shell.playing>.stage-badge,.game-shell.playing>.game-bottom,.game-shell.playing>#joystick{transition:opacity .25s ease .12s}
.shop-preview-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}.shop-preview-grid div{display:flex;flex-direction:column;gap:5px;align-items:center;padding:13px 6px;border:2px solid #d5e6e8;border-radius:15px;background:#eaf5f5}.shop-preview-grid span{font-size:31px}.shop-preview-grid strong{font-size:11px}.shop-preview-grid small{font-size:8px;color:#8aa1ab}
@media(max-width:900px),(max-height:590px){.lobby-topbar{top:10px;left:14px;gap:8px}.player-avatar{width:57px;height:62px;border-width:3px}.lobby-counter{min-width:112px;height:39px;padding-left:45px;font-size:20px;border-width:2px}.counter-medal{width:49px;height:49px;left:-8px;top:-7px;border-width:3px}.coin-medal{font-size:28px}.wash-medal svg{width:35px;height:35px}.lobby-actions{bottom:12px;width:min(590px,72vw);grid-template-columns:1fr 1fr;gap:14px}.lobby-card{min-height:82px;border-width:4px;padding:10px 18px}.lobby-card strong{font-size:25px}.level-entry span{margin-top:4px;font-size:11px}.level-entry small{font-size:10px}.shop-entry{padding-left:84px}.shop-entry .shop-bucket{font-size:46px;left:18px;top:13px}.shop-entry strong{font-size:22px;margin-top:5px}.shop-entry small{margin-top:4px}}


/* Hide and disable washing controls until the entry camera has handed over. */
body.entrance-playing>button,body.entrance-playing .game-shell>.hud,body.entrance-playing .game-shell>.help,body.entrance-playing .game-shell>.stage-badge,body.entrance-playing .game-shell>.game-bottom,body.entrance-playing #joystick,body.entrance-playing .fp-reticle,body.entrance-playing .fp-label,body.entrance-playing #toast{visibility:hidden!important;opacity:0!important;pointer-events:none!important}
.entrance-caption{position:absolute;left:50%;bottom:max(22px,env(safe-area-inset-bottom));transform:translateX(-50%);color:#fff;background:#21425ac9;border:1px solid #ffffff70;border-radius:20px;padding:8px 20px;font-size:12px;pointer-events:none;z-index:5}
