:root{--pink:#FF5E9F;--yellow:#FFD23F;--mint:#4ECDC4;--purple:#7B61FF;--coral:#FF8C61;--dark:#1A1A2E;--cream:#FFF8F0;--muted:#6B6B85;--bouncy:cubic-bezier(0.34,1.56,0.64,1)}.route-wrap{position:relative;min-height:100vh}.route-page{animation:pageEnter .55s var(--bouncy) both;transform-origin:50% 40%}@keyframes pageEnter{0%{opacity:0;transform:translateY(24px) scale(.985);filter:blur(3px)}60%{filter:blur(0)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}.route-page.leaving{animation:pageLeave .4s ease-in both}@keyframes pageLeave{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-24px) scale(.97);filter:blur(4px)}}.route-overlay{position:fixed;inset:0;z-index:9999;pointer-events:none;overflow:hidden}.overlay-half{position:absolute;left:0;right:0;height:52vh;background:linear-gradient(135deg,var(--pink),var(--coral) 55%,var(--yellow) 120%);box-shadow:0 0 60px rgba(0,0,0,.15)}.overlay-half.top{top:0;transform:translateY(-105%);border-radius:0 0 40% 40%/0 0 30% 30%}.overlay-half.bottom{bottom:0;transform:translateY(105%);border-radius:40% 40% 0 0/30% 30% 0 0}.route-overlay.phase-in .overlay-half.top{animation:sweepInTop .55s var(--bouncy) forwards}.route-overlay.phase-in .overlay-half.bottom{animation:sweepInBottom .55s var(--bouncy) forwards}@keyframes sweepInTop{0%{transform:translateY(-105%)}to{transform:translateY(-2%)}}@keyframes sweepInBottom{0%{transform:translateY(105%)}to{transform:translateY(2%)}}.route-overlay.phase-out .overlay-half.top{animation:sweepOutTop .6s var(--bouncy) forwards}.route-overlay.phase-out .overlay-half.bottom{animation:sweepOutBottom .6s var(--bouncy) forwards}@keyframes sweepOutTop{0%{transform:translateY(-2%)}to{transform:translateY(-105%)}}@keyframes sweepOutBottom{0%{transform:translateY(2%)}to{transform:translateY(105%)}}.overlay-mascot{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(0);display:flex;flex-direction:column;align-items:center;gap:14px;opacity:0}.route-overlay.phase-in .overlay-mascot{animation:mascotIn .55s var(--bouncy) forwards}.route-overlay.phase-out .overlay-mascot{animation:mascotOut .5s var(--bouncy) forwards}@keyframes mascotIn{0%{opacity:0;transform:translate(-50%,-50%) scale(0) rotate(-90deg)}60%{opacity:1;transform:translate(-50%,-50%) scale(1.15) rotate(8deg)}to{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(0)}}@keyframes mascotOut{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,-150%) scale(1.2) rotate(20deg)}}.overlay-blob{width:120px;height:120px;animation:overlayBlobJelly .9s var(--bouncy) infinite;transform-origin:center bottom;filter:drop-shadow(0 10px 20px rgba(0,0,0,.2))}@keyframes overlayBlobJelly{0%,to{transform:translateY(0) scaleY(1) scaleX(1)}40%{transform:translateY(-14px) scaleY(1.08) scaleX(.94)}70%{transform:translateY(0) scaleY(.92) scaleX(1.08)}}.overlay-label{font-family:DynaPuff,Itim,sans-serif;font-weight:700;font-size:28px;color:white;letter-spacing:2px;text-shadow:0 4px 12px rgba(0,0,0,.25);display:inline-flex;gap:3px}.overlay-label span{display:inline-block;animation:labelDot 1.1s var(--bouncy) infinite backwards}@keyframes labelDot{0%,60%,to{transform:translateY(0)}30%{transform:translateY(-12px)}}.overlay-spark{position:absolute;font-size:22px;color:white;opacity:0}.overlay-spark,.route-overlay.phase-in .overlay-spark,.route-overlay.phase-out .overlay-spark{animation:overlaySparkle 1.2s ease-out infinite}@keyframes overlaySparkle{0%{opacity:0;transform:scale(.4) rotate(0)}50%{opacity:1;transform:scale(1.3) rotate(120deg)}to{opacity:0;transform:scale(.4) rotate(240deg)}}.overlay-spark.s1{top:22%;left:18%;animation-delay:0s}.overlay-spark.s2{top:28%;right:20%;animation-delay:.2s}.overlay-spark.s3{bottom:24%;left:22%;animation-delay:.4s}.overlay-spark.s4{bottom:30%;right:18%;animation-delay:.6s}.overlay-spark.s5{top:40%;left:10%;animation-delay:.3s}.overlay-spark.s6{top:45%;right:12%;animation-delay:.5s}.overlay-confetti{position:absolute;inset:0;pointer-events:none}.oc-piece{position:absolute;top:45%;width:10px;height:14px;border-radius:3px;opacity:0}.route-overlay.phase-in .oc-piece{animation:ocBurst .9s ease-out forwards}@keyframes ocBurst{0%{opacity:0;transform:translate(0) rotate(0)}10%{opacity:1}to{opacity:0;transform:translate(var(--ox),var(--oy)) rotate(var(--or))}}.route-link-pulse{animation:linkPulse .5s var(--bouncy)}@keyframes linkPulse{0%{transform:scale(1)}50%{transform:scale(.92)}to{transform:scale(1)}}.shared-blob-svg{display:inline-block}body.route-locked{overflow:hidden}.tweaks-hint{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:#1A1A2E;color:#FFF8F0;font-family:DynaPuff,Itim,sans-serif;font-size:13px;font-weight:600;padding:10px 18px;border-radius:999px;display:flex;align-items:center;gap:10px;z-index:9999;box-shadow:0 10px 30px rgba(0,0,0,.25);animation:tweakPulse 2s ease-in-out infinite}.tweaks-hint strong{color:#FFD23F}.tweaks-hint-dot{width:8px;height:8px;border-radius:50%;background:#4ECDC4;box-shadow:0 0 0 0 rgba(78,205,196,.6);animation:tweakDot 1.4s ease-out infinite}@keyframes tweakDot{0%{box-shadow:0 0 0 0 rgba(78,205,196,.6)}to{box-shadow:0 0 0 10px rgba(78,205,196,0)}}@keyframes tweakPulse{0%,to{transform:translateX(-50%) translateY(0)}50%{transform:translateX(-50%) translateY(-3px)}}.blob-crown[style*="cursor: grab"]{animation:none!important;transform:translateX(-50%);outline:2px dashed rgba(255,210,63,.6);outline-offset:4px;border-radius:8px;z-index:100!important}.blob:not(.no-bounce){animation:blobJellyShared 2.4s var(--bouncy) infinite;transform-origin:center bottom}@keyframes blobJellyShared{0%,to{transform:translateY(0) scaleY(1) scaleX(1)}45%{transform:translateY(-6px) scaleY(1.04) scaleX(.97)}60%{transform:translateY(-6px) scaleY(1.04) scaleX(.97)}80%{transform:translateY(0) scaleY(.97) scaleX(1.03)}}.blob-crown{animation:crownFloat 2.4s ease-in-out infinite;filter:drop-shadow(0 6px 8px rgba(0,0,0,.22))}@keyframes crownFloat{0%{transform:translateX(-50%) translateY(0) rotate(-8deg)}25%{transform:translateX(-50%) translateY(-5px) rotate(-3deg)}50%{transform:translateX(-50%) translateY(-9px) rotate(6deg)}75%{transform:translateX(-50%) translateY(-4px) rotate(3deg)}to{transform:translateX(-50%) translateY(0) rotate(-8deg)}}.blob-clickable{user-select:none;-webkit-tap-highlight-color:transparent}.blob-clickable:active{filter:brightness(1.05)}.blob-fx-shake svg{animation:blobShake .5s ease-in-out 1}.blob-fx-jump svg{animation:blobJump .5s cubic-bezier(.34,1.56,.64,1) 1}.blob-fx-spin svg{animation:blobSpin .7s ease-in-out 1}.blob-fx-wobble svg{animation:blobWobble .6s ease-in-out 1}@keyframes blobShake{0%,to{transform:translateX(0) rotate(0)}20%{transform:translateX(-4px) rotate(-3deg)}40%{transform:translateX(4px) rotate(3deg)}60%{transform:translateX(-3px) rotate(-2deg)}80%{transform:translateX(3px) rotate(2deg)}}@keyframes blobJump{0%{transform:translateY(0) scale(1)}30%{transform:translateY(-14px) scale(.95,1.08)}60%{transform:translateY(0) scale(1.08,.92)}to{transform:translateY(0) scale(1)}}@keyframes blobSpin{0%{transform:rotate(0) scale(1)}50%{transform:rotate(180deg) scale(1.1)}to{transform:rotate(1turn) scale(1)}}@keyframes blobWobble{0%,to{transform:rotate(0) scale(1)}25%{transform:rotate(-6deg) scale(1.05,.95)}50%{transform:rotate(0) scale(.96,1.04)}75%{transform:rotate(6deg) scale(1.05,.95)}}.blob-burst{position:absolute;left:50%;top:50%;width:0;height:0;pointer-events:none;z-index:5}.blob-burst-piece{position:absolute;left:0;top:0;transform:translate(-50%,-50%);animation:burstFly .95s cubic-bezier(.18,.9,.34,1) forwards;opacity:0;filter:drop-shadow(0 1px 2px rgba(0,0,0,.12));display:inline-flex;align-items:center;justify-content:center}.blob-burst-piece svg{display:block}@keyframes burstFly{0%{transform:translate(-50%,-50%) scale(.2) rotate(0);opacity:0}15%{transform:translate(calc(-50% + var(--dx) * .35),calc(-50% + var(--dy) * .35)) scale(1.1) rotate(calc(var(--rot) * .3));opacity:1}70%{transform:translate(calc(-50% + var(--dx) * .9),calc(-50% + var(--dy) * .9)) scale(1) rotate(calc(var(--rot) * .85));opacity:1}to{transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) scale(.6) rotate(var(--rot));opacity:0}}.blob-acc-side{transform-origin:50% 100%;animation:accSwayShared 2.4s ease-in-out infinite}@keyframes accSwayShared{0%,to{transform:rotate(-6deg)}50%{transform:rotate(10deg)}}