/* Faces and actions come first. */
body{background:#f8f5ef}header{height:78px;padding:0 28px}.brand{font-size:27px}.brand-icon{font-size:36px}.sound{font-size:22px}.sound span{font-size:17px}.screen{max-width:1120px;padding:28px 24px 35px}h1{font-size:52px;margin:5px 0 10px;letter-spacing:-2px}.intro{font-size:25px;color:#394e40;margin:8px 0 24px;font-weight:700}.characters{max-width:1050px;gap:20px}.character,.character.selected{padding:0 0 20px;overflow:hidden;border-radius:20px;background:#e5e9df}.character svg{width:100%;height:auto;aspect-ratio:1/1.1;display:block;margin:0 0 18px;object-fit:cover}.char-name{font-size:30px}.check{width:30px;height:30px;top:13px;right:13px;font-size:19px;background:#fffc}.primary{font-size:26px;width:460px;padding:18px;margin-top:26px}.primary span{font-size:30px}.eyebrow,.select-heading,.how,.stage-preview,.stage-tag,.game-hint,.beat-caption,.hit-label,.score small,.game-heading p,.play-decor,.combo span{display:none!important}#game{max-width:960px;padding-top:12px}.game-top{letter-spacing:0;font-size:20px}.text-button{font-size:20px}.game-heading{margin:10px 0 14px}.game-heading h2{font-size:36px;margin:0}.score strong{font-size:32px}.play-area{height:55vh;min-height:350px;max-height:620px;background:#ddd5c6;border-radius:22px}.play-area svg{width:100%;height:100%;object-fit:cover}.combo{top:14px;right:20px;color:#fff;text-shadow:0 2px 7px #222a}.combo strong{font-size:38px}.combo strong:after{content:' 콤보';font-size:19px}#judgment{font-size:30px;top:18px;text-shadow:0 2px 3px #ffff}.target-ring{stroke:#fff8d5;stroke-width:3}.approach-ring{stroke:#f4d275;stroke-width:3}.progress-row{font-size:19px;gap:15px;margin-top:14px}.progress{height:8px}.beat-track{height:62px;margin:4px 0}.track-line{top:29px}.hit-zone{top:7px;width:44px;height:44px;left:calc(50% - 22px);border-width:3px}.note{top:16px;width:26px;height:26px}.hit-button{margin:0 auto;width:100%;font-size:28px}.hit-button kbd{font-size:16px}.transition h3{font-size:38px}.transition p{font-size:23px}.transition>span{font-size:65px}.result-icon{margin:0;font-size:45px}#result-face svg{height:280px;width:280px;border-radius:25px;margin:18px auto}.result-stats small{font-size:21px}.result-stats strong{font-size:34px}.extracted{animation:extract .8s ease-in forwards;transform-box:fill-box;transform-origin:center}.tweezer{animation:tweeze .8s ease-in forwards;transform-box:fill-box;transform-origin:center}.squeeze-fingers{animation:squeeze .65s ease-out forwards;transform-box:fill-box;transform-origin:center}.success-flash{animation:ripple .55s ease-out forwards;transform-box:fill-box;transform-origin:center}.pop-cream{stroke-dasharray:130;stroke-dashoffset:130;animation:cream .7s ease-out forwards}.sebum{stroke-dasharray:90;stroke-dashoffset:90;animation:sebum .6s ease-out forwards}@keyframes extract{0%,15%{transform:translateY(0);opacity:1}65%{opacity:1}100%{transform:translateY(-125px) rotate(-16deg);opacity:0}}@keyframes tweeze{0%{opacity:0;transform:translateY(-40px) scaleX(1.4)}20%{opacity:1;transform:translateY(0) scaleX(1)}100%{opacity:0;transform:translateY(-125px) scaleX(.8)}}@keyframes squeeze{0%{opacity:0;transform:scaleX(1.6)}30%,55%{opacity:1;transform:scaleX(.72)}100%{opacity:0;transform:scaleX(1.1)}}@keyframes ripple{to{transform:scale(3);opacity:0}}@keyframes cream{20%{stroke-dashoffset:130}60%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:0;opacity:0}}@keyframes sebum{to{stroke-dashoffset:0}}@media(max-width:600px){header{height:66px;padding:0 16px}.brand{font-size:23px}.brand-icon{font-size:30px}.sound{padding:7px 10px}.sound span{font-size:15px}.screen{padding:20px 14px}h1{font-size:39px}.intro{font-size:23px;margin:8px 0 18px}.characters{gap:9px}.character,.character.selected{border-radius:14px;padding:0 0 16px}.character svg{height:auto;aspect-ratio:.63;margin:0 0 15px}.char-name{font-size:25px}.check{width:24px;height:24px;right:6px;top:8px;font-size:15px}.primary{font-size:25px;margin-top:24px}.game-top{font-size:16px}.text-button{font-size:16px;padding:8px 3px}.game-heading h2{font-size:28px}.score strong{font-size:27px}.play-area{height:52vh;min-height:320px;max-height:540px}.game-heading{margin:8px 0 12px}.progress-row{font-size:17px}.combo strong{font-size:28px}.combo strong:after{font-size:16px}.hit-button{font-size:26px;margin-top:0}.hit-button kbd{font-size:12px}#judgment{font-size:25px}.transition h3{font-size:30px}.transition p{font-size:22px}.result-stats{gap:24px}.result-stats small{font-size:18px}#result h1{font-size:35px}}

/* Repeated taps are game input, never a browser double-tap gesture. */
html,body,button,a{touch-action:manipulation}
#play-area,#play-area *,#hit,#hit *{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
#target,#particles{pointer-events:none}
button{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
#audio-error:not([hidden]){position:fixed;z-index:30;bottom:12px;left:12px;right:12px;max-width:650px;margin:auto;padding:18px;background:#fff3df;color:#763e25;border:2px solid #d3a86d;border-radius:12px;font-size:20px;font-weight:700;text-align:center}
@media(max-width:600px){.play-area{min-height:220px;height:clamp(220px,44svh,440px)}.game-top{font-size:15px}.game-heading{margin:6px 0 8px}.game-heading h2{font-size:26px}.beat-track{height:56px}.hit-button{min-height:65px}.screen#game{padding-bottom:max(16px,env(safe-area-inset-bottom))}}
