:root{
  color-scheme: light;
  --safe-top: env(safe-area-inset-top, 0px);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  --ink:#10243a;
  --glass:rgba(255,255,255,.78);
  --shadow:0 18px 50px rgba(15,35,55,.20);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body,#app{width:100%;height:100%;margin:0;overflow:hidden;background:#8bd8ff;font-family:ui-rounded,"SF Pro Rounded","Hiragino Sans","Yu Gothic",system-ui,sans-serif;color:var(--ink)}
body{touch-action:none;overscroll-behavior:none;user-select:none;-webkit-user-select:none}
#game{position:fixed;inset:0;z-index:0}
canvas{display:block;width:100%;height:100%;touch-action:none}
.hidden{display:none!important}
#hud{position:fixed;z-index:10;top:calc(12px + var(--safe-top));left:12px;right:12px;display:grid;grid-template-columns:auto auto 1fr;gap:8px;align-items:start;pointer-events:none}
.scoreBox,.bestBox{min-width:76px;padding:8px 11px;border:1px solid rgba(255,255,255,.7);border-radius:18px;background:rgba(255,255,255,.68);backdrop-filter:blur(12px);box-shadow:0 8px 22px rgba(20,50,80,.10)}
.label{display:block;font-size:9px;letter-spacing:.15em;opacity:.55;font-weight:800}.scoreBox strong,.bestBox strong{font-size:24px;line-height:1}
.topButtons{justify-self:end;display:flex;gap:7px;pointer-events:auto}
button{font:inherit;border:0;cursor:pointer}
.iconBtn{width:44px;height:44px;border-radius:15px;background:rgba(255,255,255,.78);backdrop-filter:blur(12px);font-size:12px;font-weight:900;color:#18324d;box-shadow:0 8px 20px rgba(15,45,70,.12)}
.iconBtn:active,.primary:active,.secondary:active,.share:active{transform:translateY(1px) scale(.985)}
#tapHint{position:fixed;z-index:8;left:50%;bottom:calc(30px + var(--safe-bottom));transform:translateX(-50%);font-weight:950;font-size:13px;letter-spacing:.16em;color:#fff;text-shadow:0 2px 10px rgba(0,0,0,.35);animation:pulse 1.2s ease-in-out infinite;pointer-events:none}
@keyframes pulse{50%{opacity:.45;transform:translateX(-50%) scale(.97)}}
.stageLabel{position:fixed;z-index:15;left:50%;top:22%;transform:translate(-50%,-50%);padding:10px 18px;border-radius:999px;background:rgba(11,28,45,.76);color:white;font-weight:900;letter-spacing:.08em;box-shadow:var(--shadow);pointer-events:none;animation:stagePop 1.5s ease both}
@keyframes stagePop{0%{opacity:0;transform:translate(-50%,-50%) scale(.8)}20%,75%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.08)}}
.panelWrap{position:fixed;z-index:30;inset:0;display:grid;place-items:center;padding:calc(20px + var(--safe-top)) 18px calc(20px + var(--safe-bottom));background:linear-gradient(180deg,rgba(120,210,255,.16),rgba(15,40,65,.16));backdrop-filter:blur(3px)}
.panel{width:min(92vw,420px);padding:26px;border-radius:30px;background:var(--glass);border:1px solid rgba(255,255,255,.85);backdrop-filter:blur(20px);box-shadow:var(--shadow);text-align:center}
.heroPanel{padding-top:30px}.eyebrow{font-size:10px;font-weight:950;letter-spacing:.22em;opacity:.55;margin-bottom:8px}
h1,h2,p{margin-top:0}h1{font-size:clamp(38px,12vw,58px);line-height:.95;margin-bottom:14px;letter-spacing:-.06em}h1 span{display:block;font-size:.45em;letter-spacing:.2em;color:#ff5f7a;margin-top:9px}.subtitle{font-size:15px;line-height:1.65;font-weight:750;opacity:.76}.recordStrip{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:22px 0}.recordStrip>div{padding:12px;border-radius:18px;background:rgba(255,255,255,.67)}.recordStrip span{display:block;font-size:10px;font-weight:900;letter-spacing:.12em;opacity:.5}.recordStrip strong{font-size:28px}.primary,.secondary,.share{width:100%;min-height:54px;border-radius:18px;font-weight:950;letter-spacing:.04em;transition:transform .1s ease;margin-top:9px}.primary{background:#122c49;color:#fff;box-shadow:0 12px 24px rgba(15,38,60,.22)}.secondary{background:rgba(255,255,255,.72);color:#1a3550}.share{background:#111;color:#fff}.howto{font-size:11px;margin:15px 0 0;opacity:.54}.compact h2{margin-bottom:18px}.resultPanel h2{margin-bottom:10px}.bigResult{display:flex;justify-content:center;align-items:flex-end;line-height:1;margin:12px 0}.bigResult strong{font-size:74px;letter-spacing:-.06em}.bigResult span{font-size:20px;font-weight:900;padding-bottom:9px}.newBest{display:inline-block;margin:0 0 12px;padding:7px 12px;border-radius:999px;background:#ff5f7a;color:#fff;font-size:12px;font-weight:950;letter-spacing:.12em}.resultStats{display:flex;justify-content:center;gap:20px;font-size:12px;font-weight:800;margin-bottom:10px;opacity:.66}.fakeNotice{position:fixed;z-index:20;left:50%;top:calc(74px + var(--safe-top));transform:translateX(-50%);width:min(88vw,420px);padding:14px 18px;border-radius:18px;background:rgba(255,255,255,.92);box-shadow:0 14px 35px rgba(0,0,0,.2);font-weight:850;font-size:13px;text-align:center;pointer-events:none;animation:noticeIn .25s ease both}@keyframes noticeIn{from{opacity:0;transform:translate(-50%,-18px)}to{opacity:1;transform:translate(-50%,0)}}
#dangerVignette{position:fixed;z-index:5;inset:0;pointer-events:none;opacity:0;background:radial-gradient(circle,transparent 50%,rgba(255,34,68,.42) 100%);transition:opacity .12s ease}.orientationNote{position:fixed;z-index:100;left:50%;bottom:calc(12px + var(--safe-bottom));transform:translateX(-50%);background:rgba(0,0,0,.72);color:#fff;padding:8px 12px;border-radius:12px;font-size:11px}
@media (orientation:landscape) and (max-height:560px){.panel{width:min(78vw,500px);padding:18px}.heroPanel{padding-top:18px}h1{font-size:34px}.subtitle{display:none}.recordStrip{margin:12px 0}.orientationNote{display:block!important}.bigResult strong{font-size:50px}}
@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}}


/* v3: deliberate visual-interference layer. It never owns pointer events. */
.chaosOverlay{position:fixed;z-index:18;inset:0;overflow:hidden;pointer-events:none;opacity:0;transition:opacity .18s ease;mix-blend-mode:normal}
.chaosOverlay.active{opacity:1}
.glitchSweep{position:absolute;left:-20%;top:12%;width:140%;height:16%;opacity:0;background:repeating-linear-gradient(180deg,rgba(255,255,255,.28) 0 3px,rgba(30,255,230,.20) 3px 6px,rgba(255,40,120,.18) 6px 9px);filter:blur(.4px);transform:skewY(-4deg)}
.chaosOverlay.glitch .glitchSweep{animation:glitchSweep .7s steps(5,end) 2}
@keyframes glitchSweep{0%{opacity:0;transform:translateY(-40vh) skewY(-4deg)}15%{opacity:.8}60%{opacity:.55}100%{opacity:0;transform:translateY(105vh) skewY(-4deg)}}
.visualBlocker{position:absolute;border-radius:36px;opacity:0;box-shadow:0 20px 60px rgba(0,0,0,.22);backdrop-filter:blur(4px);transform:scale(.7) rotate(-8deg)}
.blockerA{width:min(42vw,190px);height:min(34vw,160px);left:-5vw;top:27%;background:linear-gradient(145deg,rgba(18,34,68,.80),rgba(255,75,140,.68))}
.blockerB{width:min(38vw,170px);height:min(30vw,140px);right:-4vw;bottom:22%;background:linear-gradient(145deg,rgba(255,220,60,.78),rgba(62,220,255,.66));transform:scale(.7) rotate(11deg)}
.chaosOverlay.blockers .visualBlocker{animation:blockerIn 1.35s cubic-bezier(.2,.8,.2,1) both}
.chaosOverlay.blockers .blockerB{animation-delay:.10s}
@keyframes blockerIn{0%{opacity:0;transform:scale(.6) rotate(-16deg)}22%,72%{opacity:.72;transform:scale(1) rotate(-7deg)}100%{opacity:0;transform:scale(1.08) rotate(4deg)}}
.fakeHud{position:absolute;left:50%;top:43%;transform:translate(-50%,-50%) rotate(-3deg);padding:18px 28px;border:4px solid #fff;border-radius:18px;background:rgba(255,34,85,.88);color:#fff;font-size:clamp(28px,9vw,54px);font-weight:1000;letter-spacing:.02em;text-shadow:0 3px 0 rgba(0,0,0,.18);box-shadow:0 18px 55px rgba(0,0,0,.28)}
.chaosOverlay.dim{background:radial-gradient(circle at 50% 50%,transparent 0 22%,rgba(5,9,20,.18) 46%,rgba(5,9,20,.73) 100%)}
.chaosOverlay.invert{backdrop-filter:contrast(1.45) saturate(1.8) hue-rotate(28deg)}
body.chaos-jolt #game{animation:worldJolt .42s steps(4,end)}
@keyframes worldJolt{0%{transform:translate(0,0)}20%{transform:translate(8px,-5px)}40%{transform:translate(-7px,4px)}60%{transform:translate(5px,7px)}80%{transform:translate(-4px,-5px)}100%{transform:translate(0,0)}}
@media (prefers-reduced-motion:reduce){.chaosOverlay.glitch .glitchSweep,.chaosOverlay.blockers .visualBlocker,body.chaos-jolt #game{animation:none!important}.chaosOverlay.glitch .glitchSweep{opacity:.5}.chaosOverlay.blockers .visualBlocker{opacity:.68;transform:scale(1)}}

/* v4 variable jump: short tap = small jump, hold = big jump */
.jumpMeter{position:fixed;z-index:9;left:50%;bottom:calc(58px + var(--safe-bottom));transform:translateX(-50%);width:min(44vw,180px);height:7px;border-radius:999px;background:rgba(255,255,255,.34);box-shadow:0 2px 12px rgba(0,0,0,.16);overflow:hidden;pointer-events:none;opacity:.76}
.jumpMeterFill{width:100%;height:100%;border-radius:inherit;background:rgba(255,255,255,.95);transform:scaleX(0);transform-origin:left center;transition:transform .035s linear}
.jumpMeter.charging{opacity:1;transform:translateX(-50%) scaleY(1.16)}
#tapHint{white-space:nowrap;font-size:clamp(9px,2.8vw,13px)}


/* v5 — 50+ additional visual disturbances */
.dynamicChaos{position:fixed;z-index:19;inset:0;overflow:hidden;pointer-events:none;perspective:800px}
.chaosFx{position:absolute;pointer-events:none;box-sizing:border-box}
.fakePhoneBar{left:8%;right:8%;top:calc(7px + var(--safe-top));height:36px;border-radius:18px;padding:8px 14px;background:rgba(18,18,24,.9);color:#fff;display:flex;align-items:center;justify-content:space-between;font:800 12px/1 system-ui;box-shadow:0 6px 24px #0005;animation:dropTop .25s ease both}
.fakeSlider{width:110px;height:7px;border-radius:8px;background:#ffffff35;overflow:hidden}.fakeSlider i{display:block;height:100%;background:#fff;border-radius:inherit}
@keyframes dropTop{from{transform:translateY(-70px);opacity:0}to{transform:none;opacity:1}}
.floatWord{font-weight:1000;color:#fff;text-shadow:0 3px 10px #0009;font-size:clamp(20px,7vw,42px);animation:floatWord 1.5s ease-in-out both}@keyframes floatWord{0%{opacity:0;translate:0 25px}25%,75%{opacity:.92}100%{opacity:0;translate:0 -35px}}
.miniViewport{right:6%;bottom:16%;width:120px;height:180px;border:5px solid #fff;border-radius:18px;background:linear-gradient(135deg,#74d7ffbb,#ff6d9cbb);box-shadow:0 12px 35px #0007;animation:miniBob .9s ease-in-out infinite alternate}.miniFrame{display:grid;place-items:center;height:100%;color:#fff;font-weight:900;text-align:center}.miniFrame b{font-size:28px}@keyframes miniBob{to{transform:translateY(-10px) rotate(4deg)}}
.splitGhost{inset:0;display:grid;grid-template-columns:1fr 1fr;opacity:.25}.ghostHalf{backdrop-filter:hue-rotate(80deg) contrast(1.5)}.ghostHalf.b{backdrop-filter:hue-rotate(-80deg) invert(.12)}
.countdownFx{inset:25% 0 auto;text-align:center;font-size:clamp(90px,30vw,180px);font-weight:1000;color:#fff;text-shadow:0 10px 30px #0008;animation:countPulse .4s ease-in-out infinite alternate}@keyframes countPulse{to{transform:scale(1.08)}}
.fakeProgress{left:10%;right:10%;top:46%;padding:18px;border-radius:18px;background:#10151fe8;color:#fff;font-weight:850;box-shadow:0 14px 40px #0008}.fakeProgress div{height:9px;margin-top:10px;border-radius:10px;background:#ffffff25;overflow:hidden}.fakeProgress i{display:block;width:88%;height:100%;background:#6fffb2;animation:progressLie 1.8s ease both}@keyframes progressLie{from{width:4%}70%{width:93%}to{width:37%}}
.fakeCall{left:8%;right:8%;top:22%;padding:22px;border-radius:28px;background:#eef7f5f2;color:#10243a;text-align:center;box-shadow:0 18px 55px #0006;animation:callIn .3s ease both}.fakeCall small{display:block;opacity:.55}.fakeCall b{display:block;font-size:22px;margin:5px}.fakeCall div{font-size:27px;margin-top:12px}@keyframes callIn{from{opacity:0;transform:scale(.82)}to{opacity:1;transform:scale(1)}}
.achievementFx{right:5%;top:18%;max-width:250px;padding:14px 18px;border-radius:16px;background:#251d15e8;color:#ffd86a;border:1px solid #ffe69b99;box-shadow:0 14px 40px #0007;animation:slideRight .3s ease both}@keyframes slideRight{from{transform:translateX(120%)}to{transform:none}}
.giantTextFx{left:50%;top:42%;transform:translate(-50%,-50%) rotate(-8deg);font-size:clamp(64px,24vw,160px);font-weight:1000;color:#fff;-webkit-text-stroke:5px #ff3569;text-shadow:8px 9px 0 #18cde8,0 15px 40px #0007;animation:giantPop 1.1s ease both}@keyframes giantPop{0%{scale:.25;opacity:0}25%,70%{scale:1;opacity:1}100%{scale:1.8;opacity:0}}
.emojiDrop{top:-12%;animation:emojiFall 1.7s linear both}@keyframes emojiFall{to{transform:translateY(120vh) rotate(480deg)}}
.tapCircle{width:54px;height:54px;border:4px solid #fff;border-radius:50%;box-shadow:0 0 0 4px #ff3b79aa;animation:tapPulse .75s ease-in-out infinite alternate}@keyframes tapPulse{to{transform:scale(.45);opacity:.2}}
.cursorGhost{font-size:32px;color:#fff;text-shadow:2px 3px 7px #000;animation:cursorBlink .22s steps(2) infinite}@keyframes cursorBlink{50%{opacity:.1}}
.floatingCard{min-width:85px;padding:11px 14px;border-radius:12px;background:#fff;color:#162b42;font-weight:1000;box-shadow:0 10px 30px #0005;animation:cardFloat 1.5s ease-in-out both}@keyframes cardFloat{0%{opacity:0;translate:0 30px}30%,80%{opacity:.95}100%{opacity:0;translate:0 -55px}}
.arrow2d{font-size:44px;color:#ffe64c;text-shadow:0 4px 12px #0009;animation:arrowBlink .28s steps(2) infinite}@keyframes arrowBlink{50%{opacity:.2}}
.notificationCard{width:min(68vw,280px);padding:10px 14px;border-radius:14px;background:#ffffffed;color:#14243a;box-shadow:0 10px 30px #0004;font-size:12px;animation:slideRight .25s ease both}.notificationCard b{font-size:15px}
.scanlineFx,.checkerFx,.staticFx,.warningStripeFx{inset:0}.scanlineFx{background:repeating-linear-gradient(0deg,transparent 0 5px,#0004 6px 7px);animation:scanMove .18s linear infinite}@keyframes scanMove{to{background-position:0 14px}}
.warningStripeFx{opacity:.45;background:repeating-linear-gradient(135deg,#ffd91a 0 18px,#111 18px 36px);clip-path:polygon(0 0,100% 0,100% 13%,0 22%,0 78%,100% 87%,100% 100%,0 100%)}
.staticFx{opacity:.24;background-image:radial-gradient(#fff 0 1px,transparent 1px),radial-gradient(#000 0 1px,transparent 1px);background-size:5px 5px,7px 7px;animation:noiseMove .08s steps(2) infinite}@keyframes noiseMove{50%{transform:translate(4px,-3px)}}
.checkerFx{opacity:.3;background:conic-gradient(#000 25%,transparent 0 50%,#fff 0 75%,transparent 0) 0/42px 42px;animation:checkerSlide .9s linear infinite}@keyframes checkerSlide{to{background-position:42px 42px}}
.shutterH{left:0;right:0;height:17%;background:#0b1020df;transform-origin:left;animation:shutH 1.3s ease both}@keyframes shutH{0%,100%{transform:scaleX(0)}30%,68%{transform:scaleX(1)}}
.shutterV{top:0;bottom:0;width:17%;background:#f8f8ffe0;transform-origin:top;animation:shutV 1.3s ease both}@keyframes shutV{0%,100%{transform:scaleY(0)}30%,68%{transform:scaleY(1)}}
.spotlightFx{inset:0;background:radial-gradient(circle 70px at 50% 55%,transparent 0 65px,#000d 95px);animation:spotMove 1.6s ease-in-out infinite alternate}@keyframes spotMove{to{background-position:40px -30px}}
.crackFx{inset:0;opacity:.65;background:linear-gradient(74deg,transparent 48.8%,#fff 49%,#fff 49.3%,transparent 49.5%) 52% 20%/45% 70% no-repeat,linear-gradient(112deg,transparent 48.8%,#fff 49%,#fff 49.3%,transparent 49.5%) 55% 34%/55% 55% no-repeat,linear-gradient(25deg,transparent 49%,#fff 49.2%,transparent 49.6%) 35% 53%/52% 46% no-repeat;filter:drop-shadow(0 1px 1px #0008)}
.letterboxFx{inset:0}.letterboxFx i,.letterboxFx b{position:absolute;left:0;right:0;height:18%;background:#000;animation:letterClose 1.5s ease both}.letterboxFx i{top:0}.letterboxFx b{bottom:0}@keyframes letterClose{0%,100%{height:0}35%,70%{height:18%}}
.rainbowBorder,.sirenBorder{inset:0;border:12px solid transparent}.rainbowBorder{border-image:linear-gradient(90deg,#f34,#fc3,#4e8,#5cf,#a6f,#f5a) 1;animation:hueBorder .35s linear infinite}@keyframes hueBorder{to{filter:hue-rotate(360deg)}}.sirenBorder{border-color:#ff243f;box-shadow:inset 0 0 50px #ff123c88;animation:siren .22s steps(2) infinite}@keyframes siren{50%{border-color:#2ea7ff;box-shadow:inset 0 0 50px #178cff88}}
.pauseFake{left:50%;top:42%;transform:translate(-50%,-50%);font-size:100px;line-height:.7;color:#fff;text-align:center;text-shadow:0 8px 30px #000}.pauseFake small{font-size:18px;letter-spacing:.25em}
.spinnerFx{left:50%;top:44%;transform:translate(-50%,-50%);display:grid;place-items:center;gap:12px;color:#fff;font-weight:900}.spinnerFx i{width:70px;height:70px;border:9px solid #ffffff44;border-top-color:#fff;border-radius:50%;animation:spinFx .5s linear infinite}@keyframes spinFx{to{rotate:360deg}}
.systemAlertFx,.storageWarn{left:50%;top:40%;transform:translate(-50%,-50%);width:min(84vw,330px);padding:20px;border-radius:16px;background:#f4f4f6f5;color:#111;text-align:center;box-shadow:0 20px 60px #0008}.systemAlertFx span{display:block;margin-top:13px;padding-top:10px;border-top:1px solid #bbb;color:#1671ff;font-weight:800}.storageWarn b{display:block;margin-top:8px}
.fakeFps{left:12px;bottom:calc(18px + var(--safe-bottom));padding:8px 10px;background:#001b;color:#57ff74;font:700 12px/1.45 monospace;border:1px solid #57ff74}
.snowFog{inset:0;background:radial-gradient(circle at 30% 40%,#fff8 0 2px,transparent 3px) 0 0/27px 30px,linear-gradient(#ffffff55,#cceaff44);backdrop-filter:blur(2px);animation:snowDrift .8s linear infinite}@keyframes snowDrift{to{background-position:18px 35px,0 0}}
.tinyScreenFx{inset:0;background:#000b;clip-path:polygon(0 0,100% 0,100% 100%,0 100%,0 0,20% 20%,20% 80%,80% 80%,80% 20%,20% 20%);animation:tinyPulse .6s ease-in-out infinite alternate}@keyframes tinyPulse{to{opacity:.72}}
.magnifierFx{width:180px;height:180px;border:8px solid #fff;border-radius:50%;left:50%;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 9999px #0008,inset 0 0 0 3px #0004;animation:magnifyMove 1.5s ease-in-out infinite alternate}@keyframes magnifyMove{to{left:62%;top:42%}}
body.fx-gray #game{filter:grayscale(1)}body.fx-sepia #game{filter:sepia(1) saturate(1.4)}body.fx-hue #game{filter:hue-rotate(160deg)}body.fx-saturate #game{filter:saturate(4)}body.fx-bright #game{filter:brightness(2.1)}body.fx-dark #game{filter:brightness(.3)}body.fx-contrast #game{filter:contrast(2.6)}body.fx-blur #game{filter:blur(5px)}body.fx-mirror #game{transform:scaleX(-1)}body.fx-rgb #game{filter:drop-shadow(7px 0 #f04) drop-shadow(-7px 0 #0ef)}
body.fx-zoom #game{animation:fxZoom .85s ease-in-out infinite alternate}body.fx-squash #game{animation:fxSquash .7s ease-in-out infinite alternate}body.fx-stretch #game{animation:fxStretch .7s ease-in-out infinite alternate}body.fx-skew #game{animation:fxSkew .55s ease-in-out infinite alternate}body.fx-wobble #game{animation:fxWobble .3s ease-in-out infinite alternate}
@keyframes fxZoom{to{transform:scale(1.14)}}@keyframes fxSquash{to{transform:scaleX(.74) scaleY(1.08)}}@keyframes fxStretch{to{transform:scaleX(1.1) scaleY(.78)}}@keyframes fxSkew{to{transform:perspective(600px) rotateY(12deg) rotateX(-4deg)}}@keyframes fxWobble{to{transform:translate(10px,-5px) rotate(.8deg)}}
body.hud-bounce #hud{animation:hudBounce .32s ease-in-out infinite alternate}@keyframes hudBounce{to{transform:translateY(22px)}}body.hud-flip #hud{transform:rotate(180deg)}body.hud-double #hud::after{content:'JUMPS      BEST';position:absolute;inset:55px 15% auto;padding:10px;border-radius:14px;background:#fff9;color:#17314c;font-weight:1000;letter-spacing:.2em;text-align:center;opacity:.75}body.score-scramble #score{color:#ff285c;text-shadow:3px 2px #38e5ff}
@media (prefers-reduced-motion:reduce){.dynamicChaos *{animation-duration:.01ms!important;animation-iteration-count:1!important}body.fx-zoom #game,body.fx-squash #game,body.fx-stretch #game,body.fx-skew #game,body.fx-wobble #game{animation:none!important}}
