/* CRAB-THEATRE-STYLE-START */
.ct-world {
  --ct-time-scale:.5;--ct-text:#514b47;--ct-dim:#a09388;--ct-bg:#f5f0e7;--ct-glow:rgba(237,191,139,.16);
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:0;overflow:hidden;isolation:isolate;background:var(--ct-bg);color:var(--ct-text);
  padding:12px 4px 38px;box-sizing:border-box;transition:opacity .18s;-webkit-tap-highlight-color:transparent;
}
.ct-world[data-theme="dark"] { --ct-text:#e9e1d5;--ct-dim:#a19bab;--ct-bg:#151b2a;--ct-glow:rgba(148,154,205,.16); }
.ct-world::before {content:'';position:absolute;z-index:-1;left:50%;top:47%;width:min(114vw,470px);height:440px;transform:translate(-50%,-50%);background:radial-gradient(ellipse,var(--ct-glow),transparent 69%);pointer-events:none;}
.ct-world.ct-out {opacity:0;pointer-events:none;}
.ct-world .ct-art {display:block;flex:none;width:min(480px,100%);height:auto;aspect-ratio:192/124;overflow:hidden;}
.ct-art g {transform-box:view-box;}
.ct-world:not([data-event="none"]) .ct-badge {font-size:13px;color:var(--ct-text);letter-spacing:2px;}
.ct-anniversary-heart {transform-origin:100px 42px;animation:ct-celebration-heart calc(2.7s * var(--ct-time-scale,.5)) ease-in-out infinite alternate;}
.ct-candle-flames {animation:ct-candle-glow calc(1.2s * var(--ct-time-scale,.5)) ease-in-out infinite alternate;}
.ct-pinwheel {transform-origin:0 0;animation:ct-pinwheel calc(8s * var(--ct-time-scale,.5)) linear infinite;}
.ct-dragon-boat {animation:ct-boat-drift calc(3s * var(--ct-time-scale,.5)) ease-in-out infinite alternate;}
.ct-ghost {animation:ct-ghost-float calc(3s * var(--ct-time-scale,.5)) ease-in-out infinite alternate;}
.ct-present-opening .ct-gift-lid {transform-origin:0 7px;animation:ct-open-gift calc(1.05s * var(--ct-time-scale,.5)) calc(var(--gift-delay,1.65s) * var(--ct-time-scale,.5)) cubic-bezier(.4,0,.2,1) both;}
.ct-gift-surprise {opacity:0;animation:ct-reveal-gift calc(.8s * var(--ct-time-scale,.5)) calc(calc(var(--gift-delay,1.65s) + .42s) * var(--ct-time-scale,.5)) cubic-bezier(.22,.61,.36,1) both;}
.ct-rabbit {animation:ct-rabbit-nod calc(1.7s * var(--ct-time-scale,.5)) calc(2.2s * var(--ct-time-scale,.5)) ease-in-out 2 alternate;}
.ct-world .ct-brand {font:400 29px/1.2 ui-serif,Georgia,serif;letter-spacing:3px;margin:15px 0 12px;}
.ct-world .ct-greeting {max-width:100%;padding:0 8px;text-align:center;font:400 15px/1.6 -apple-system,BlinkMacSystemFont,sans-serif;animation:ct-caption calc(.55s * var(--ct-time-scale,.5)) calc(.65s * var(--ct-time-scale,.5)) both;}
.ct-world .ct-sub {margin-top:8px;font:11px/1.6 -apple-system,BlinkMacSystemFont,sans-serif;letter-spacing:.7px;color:var(--ct-dim);animation:ct-caption calc(.55s * var(--ct-time-scale,.5)) calc(.85s * var(--ct-time-scale,.5)) both;}
.ct-world .ct-badge {position:absolute;top:22px;left:0;right:0;text-align:center;color:var(--ct-dim);font:10px/1.5 -apple-system,BlinkMacSystemFont,sans-serif;letter-spacing:2px;}
.ct-world .ct-hint {position:absolute;bottom:18px;left:10px;right:10px;text-align:center;color:var(--ct-dim);font:10px/1.6 -apple-system,BlinkMacSystemFont,sans-serif;letter-spacing:1px;animation:ct-caption calc(.5s * var(--ct-time-scale,.5)) calc(1.2s * var(--ct-time-scale,.5)) both;}
.ct-cloud {animation:none;}
.ct-cloud.second {animation-delay:-3s;}
.ct-spark {animation:ct-spark calc(3.6s * var(--ct-time-scale,.5)) calc(var(--delay,0s) * var(--ct-time-scale,.5)) ease-in-out infinite alternate;}
.ct-water {animation:ct-water calc(4s * var(--ct-time-scale,.5)) ease-in-out infinite alternate;}
.ct-bird {animation:none;}
.ct-leaf {animation:ct-leaf calc(5s * var(--ct-time-scale,.5)) calc(var(--delay,0s) * var(--ct-time-scale,.5)) linear infinite;}
.ct-route {animation:ct-enter calc(1.35s * var(--ct-time-scale,.5)) calc(.15s * var(--ct-time-scale,.5)) cubic-bezier(.22,.61,.36,1) both;}
.ct-bob,.ct-leg-a {animation:ct-bob calc(.22s * var(--ct-time-scale,.5)) calc(.15s * var(--ct-time-scale,.5)) ease-in-out 6;}
.ct-leg-b {animation:ct-bob calc(.22s * var(--ct-time-scale,.5)) calc(.26s * var(--ct-time-scale,.5)) ease-in-out 6;}
.ct-wave {animation:ct-wave calc(.38s * var(--ct-time-scale,.5)) calc(2.5s * var(--ct-time-scale,.5)) ease-in-out 4 alternate;}
.ct-open {opacity:0;animation:ct-open calc(1.9s * var(--ct-time-scale,.5)) steps(1) both;}
.ct-happy {opacity:1;animation:ct-happy calc(1.9s * var(--ct-time-scale,.5)) steps(1) both;}
.ct-sleep-eyes {opacity:0;}
.ct-footprint {animation:ct-footprint calc(1.6s * var(--ct-time-scale,.5)) calc(var(--delay,0s) * var(--ct-time-scale,.5)) both;}
.ct-letter {opacity:0;transform:translate(29px,-8px);animation:ct-letter calc(2.8s * var(--ct-time-scale,.5)) calc(.15s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-mail-flag {transform-origin:157px 84px;animation:ct-flag calc(.4s * var(--ct-time-scale,.5)) calc(2.8s * var(--ct-time-scale,.5)) ease-out both;}
.ct-float-heart {transform-origin:3px 3px;opacity:0;animation:ct-heart calc(1.9s * var(--ct-time-scale,.5)) calc(var(--delay,2.8s) * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-pick-flower {animation:ct-pick-flower calc(.8s * var(--ct-time-scale,.5)) calc(2s * var(--ct-time-scale,.5)) cubic-bezier(.4,0,.2,1) both;}
.ct-world[data-action="flower"] .ct-route {animation:ct-flower-route calc(2.8s * var(--ct-time-scale,.5)) cubic-bezier(.4,0,.2,1) both;}
.ct-world[data-action="flower"] .ct-right-claw {animation:ct-pick-claw calc(2.8s * var(--ct-time-scale,.5)) cubic-bezier(.4,0,.2,1) both;}
.ct-world[data-action="flower"] .ct-wave,.ct-world[data-action="water"] .ct-wave {animation:none;}
.ct-watering-can {transform-origin:111px 94px;animation:ct-watering-can calc(3.3s * var(--ct-time-scale,.5)) calc(1.2s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-pour-drop {opacity:0;animation:ct-pour-drop calc(.6s * var(--ct-time-scale,.5)) calc(var(--delay,1.9s) * var(--ct-time-scale,.5)) ease-in 3;}
.ct-new-leaf {transform-origin:134px 93px;animation:ct-new-leaf calc(.8s * var(--ct-time-scale,.5)) calc(3.5s * var(--ct-time-scale,.5)) ease-out both;}
.ct-petal {opacity:0;animation:ct-petal calc(2.5s * var(--ct-time-scale,.5)) calc(var(--delay,2.1s) * var(--ct-time-scale,.5)) ease-out both;}
.ct-falling-star {opacity:0;animation:ct-falling calc(2.3s * var(--ct-time-scale,.5)) calc(.2s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-held-star {opacity:1;animation:ct-held calc(2.5s * var(--ct-time-scale,.5)) steps(1) both;}
.ct-jump {animation:none;}
.ct-world[data-action="star"] .ct-jump {animation:ct-jump calc(1.15s * var(--ct-time-scale,.5)) calc(1.65s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-hug-heart {transform-origin:99px 103px;animation:ct-hug-heart calc(.55s * var(--ct-time-scale,.5)) calc(1.35s * var(--ct-time-scale,.5)) ease-out both;}
.ct-world[data-action="heart"] .ct-left-claw {animation:ct-claw-left calc(.55s * var(--ct-time-scale,.5)) calc(1.35s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-world[data-action="heart"] .ct-right-claw {animation:ct-claw-right calc(.55s * var(--ct-time-scale,.5)) calc(1.35s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-world[data-action="heart"] .ct-jump {animation:ct-soft-hop calc(1.25s * var(--ct-time-scale,.5)) calc(2s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-world[data-action="heart"] .ct-wave {animation:none;}
.ct-bubble {transform-origin:0 0;shape-rendering:geometricPrecision;opacity:0;animation:ct-bubble-flight calc(2.35s * var(--ct-time-scale,.5)) calc(var(--delay,2.02s) * var(--ct-time-scale,.5)) linear both,ct-bubble-fade calc(2.35s * var(--ct-time-scale,.5)) calc(var(--delay,2.02s) * var(--ct-time-scale,.5)) linear both;}
.ct-wand {animation:none;}
.ct-world[data-action="bubbles"] .ct-wave {animation:none;}
.ct-world[data-action="nap"] .ct-route {animation:none;}
.ct-world[data-action="nap"] .ct-bob {animation:ct-breathe calc(2.2s * var(--ct-time-scale,.5)) calc(1.2s * var(--ct-time-scale,.5)) ease-in-out infinite alternate;}
.ct-world[data-action="nap"] .ct-leg-a,.ct-world[data-action="nap"] .ct-leg-b {animation:none;}
.ct-world[data-action="nap"] .ct-wave {animation:none;}
.ct-world[data-action="nap"] .ct-open {animation:ct-open calc(1.1s * var(--ct-time-scale,.5)) steps(1) both;}
.ct-world[data-action="nap"] .ct-happy {opacity:0;animation:none;}
.ct-world[data-action="nap"] .ct-sleep-eyes {opacity:1;animation:ct-happy calc(1.1s * var(--ct-time-scale,.5)) steps(1) both;}
.ct-z {opacity:0;animation:ct-z calc(2.5s * var(--ct-time-scale,.5)) calc(var(--delay,1.3s) * var(--ct-time-scale,.5)) ease-out infinite;}
.ct-lantern {transform-origin:0 0;}
.ct-hang-lantern {animation:ct-hang-lantern calc(2.9s * var(--ct-time-scale,.5)) calc(.15s * var(--ct-time-scale,.5)) ease-in-out both;transform:translate(17px,-23px);}
.ct-kite {animation:ct-kite calc(4.4s * var(--ct-time-scale,.5)) calc(1.1s * var(--ct-time-scale,.5)) ease-in-out both;transform-origin:114px 94px;}
.ct-world[data-action="moon"] .ct-open,.ct-world[data-action="moon"] .ct-happy {animation:ct-gaze calc(1.1s * var(--ct-time-scale,.5)) calc(1.25s * var(--ct-time-scale,.5)) ease-in-out both;opacity:1;}
.ct-world[data-action="moon"] .ct-happy {display:none;}
.ct-world[data-action="moon"] .ct-wave {animation:ct-point calc(.8s * var(--ct-time-scale,.5)) calc(1.7s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-snow {animation:ct-snow calc(5.3s * var(--ct-time-scale,.5)) calc(var(--delay,0s) * var(--ct-time-scale,.5)) linear infinite;}
.ct-firework {transform-origin:0 0;opacity:0;animation:ct-firework calc(1.6s * var(--ct-time-scale,.5)) calc(var(--delay,.6s) * var(--ct-time-scale,.5)) ease-out both;}
.ct-confetti {opacity:0;animation:ct-confetti calc(3.8s * var(--ct-time-scale,.5)) calc(var(--delay,.5s) * var(--ct-time-scale,.5)) ease-out both;}
.ct-world.is-finished * {animation-play-state:paused!important;}
@keyframes ct-caption {from{opacity:0;transform:translateY(5px);}to{opacity:1;transform:none;}}
@keyframes ct-celebration-heart {to{transform:scale(1.035);}}
@keyframes ct-candle-glow {to{opacity:.62;}}
@keyframes ct-pinwheel {to{transform:rotate(360deg);}}
@keyframes ct-boat-drift {to{transform:translateX(2px);}}
@keyframes ct-ghost-float {to{transform:translateY(-3px);}}
@keyframes ct-open-gift {0%,16%{transform:none;}32%{transform:rotate(-7deg);}78%{transform:rotate(-108deg);}100%{transform:rotate(-102deg);}}
@keyframes ct-reveal-gift {0%{opacity:0;transform:translateY(20px);}16%{opacity:1;}82%{opacity:1;transform:translateY(-.7px);}100%{opacity:1;transform:none;}}
@keyframes ct-rabbit-nod {to{transform:translateY(1px);}}
@keyframes ct-cloud {to{transform:translateX(5px);}}
@keyframes ct-spark {from{opacity:.3;}to{opacity:1;}}
@keyframes ct-water {to{transform:translateX(3px);opacity:.5;}}
@keyframes ct-bird {from{transform:translateX(-8px);}to{transform:translateX(24px);}}
@keyframes ct-leaf {from{transform:translate(0,-5px);opacity:0;}20%{opacity:.7;}to{transform:translate(15px,45px);opacity:0;}}
@keyframes ct-enter {from{transform:translateX(-62px);}to{transform:none;}}
@keyframes ct-bob {50%{transform:translateY(-1px);}}
@keyframes ct-wave {to{transform:translateY(-2px);}}
@keyframes ct-open {0%,99%{opacity:1;}100%{opacity:0;}}
@keyframes ct-happy {0%,99%{opacity:0;}100%{opacity:1;}}
@keyframes ct-footprint {0%,100%{opacity:0;}25%,65%{opacity:.45;}}
@keyframes ct-letter {0%{transform:translate(-62px,0);opacity:1;}46%,65%{transform:none;opacity:1;}90%{transform:translate(29px,-8px);opacity:1;}100%{transform:translate(29px,-8px);opacity:0;}}
@keyframes ct-flag {from{transform:scaleY(.3);}to{transform:none;}}
@keyframes ct-heart {0%{opacity:0;transform:translateY(8px) scale(.4);}25%,65%{opacity:1;}100%{opacity:0;transform:translateY(-16px) scale(1.1);}}
@keyframes ct-pick-flower {from{transform:none;}to{transform:translate(-20px,-7px);}}
@keyframes ct-flower-route {0%{transform:translateX(-62px);}57.1429%,71.4286%{transform:translateX(15px);}100%{transform:none;}}
@keyframes ct-pick-claw {0%,46.4286%{transform:none;}57.1429%,71.4286%{transform:translate(2px,3px);}100%{transform:none;}}
@keyframes ct-watering-can {0%,100%{transform:none;}20%,75%{transform:rotate(12deg);}}
@keyframes ct-pour-drop {0%{opacity:0;transform:none;}18%,65%{opacity:.85;}100%{opacity:0;transform:translate(3px,6px);}}
@keyframes ct-new-leaf {from{opacity:0;transform:scale(.3);}to{opacity:1;transform:none;}}
@keyframes ct-petal {from{transform:translate(0,0);opacity:0;}15%{opacity:.9;}to{transform:translate(-12px,-25px);opacity:0;}}
@keyframes ct-falling {0%,25%{opacity:0;transform:translate(43px,-62px);}35%,90%{opacity:1;}100%{transform:none;opacity:0;}}
@keyframes ct-held {0%,99%{opacity:0;}100%{opacity:1;}}
@keyframes ct-jump {0%,100%{transform:translateY(0);}40%{transform:translateY(-9px);}80%{transform:translateY(1px);}}
@keyframes ct-soft-hop {0%,100%{transform:translateY(0);}18%{transform:translateY(1px);}48%{transform:translateY(-5px);}80%{transform:translateY(.7px);}}
@keyframes ct-hug-heart {from{opacity:0;transform:translateY(3px) scale(.94);}to{opacity:1;transform:none;}}
@keyframes ct-hang-lantern {0%{transform:translate(-62px,0);}46%,62%{transform:none;}100%{transform:translate(17px,-23px);}}
@keyframes ct-kite {0%,100%{transform:rotate(0deg);}33%{transform:rotate(-2deg);}66%{transform:rotate(1.5deg);}}
@keyframes ct-gaze {to{transform:translate(.5px,-.65px);}}
@keyframes ct-point {to{transform:translateY(-3px);}}
@keyframes ct-claw-left {to{transform:translate(2px,1px);}}
@keyframes ct-claw-right {to{transform:translate(-2px,1px);}}
@keyframes ct-bubble-flight {from{transform:translate(0,0);}to{transform:translate(var(--drift,-12px),var(--rise,-42px));}}
@keyframes ct-bubble-fade {0%,100%{opacity:0;}12%,78%{opacity:.9;}92%{opacity:.55;}}
@keyframes ct-breathe {to{transform:translateY(1px);}}
@keyframes ct-z {0%{opacity:0;transform:translateY(2px);}35%{opacity:.85;}100%{opacity:0;transform:translate(3px,-12px);}}
@keyframes ct-lantern {to{transform:translate(2px,-3px);}}
@keyframes ct-snow {from{transform:translate(0,-15px);}to{transform:translate(10px,120px);}}
@keyframes ct-firework {0%{opacity:0;transform:scale(.1);}20%,60%{opacity:1;}100%{opacity:0;transform:scale(1.2);}}
@keyframes ct-confetti {0%{opacity:0;transform:translateY(-10px);}15%,70%{opacity:.8;}100%{opacity:0;transform:translate(7px,90px);}}
@media(max-height:450px){.ct-world{padding-bottom:15px;}.ct-world .ct-art{width:min(320px,72vh);}.ct-world .ct-brand{font-size:22px;margin:2px 0 6px;}.ct-world .ct-greeting{font-size:13px;}.ct-world .ct-sub{margin-top:3px;}.ct-world .ct-badge{top:10px;}.ct-world .ct-hint{bottom:8px;font-size:9px;}}
@media(prefers-reduced-motion:reduce){.ct-world,.ct-world *{animation:none!important;transition:none!important;}.ct-world .ct-open,.ct-world .ct-footprint,.ct-world .ct-letter,.ct-world .ct-float-heart,.ct-world .ct-petal,.ct-world .ct-falling-star,.ct-world .ct-bubble,.ct-world .ct-z,.ct-world .ct-firework,.ct-world .ct-confetti,.ct-world .ct-pour-drop{opacity:0;}.ct-world .ct-greeting,.ct-world .ct-sub,.ct-world .ct-hint{opacity:1;}.ct-world .ct-pick-flower,.ct-world .ct-hug-heart,.ct-world .ct-held-star{opacity:1;transform:none;}.ct-world .ct-pick-flower{transform:translate(-20px,-7px);}}
@media(prefers-reduced-motion:reduce){.ct-world .ct-present-opening .ct-gift-lid{transform:rotate(-102deg);}.ct-world .ct-gift-surprise{opacity:1;transform:none;}}
/* CRAB-THEATRE-STYLE-END */

/* Fullscreen safe-area placement; the illustration and animation are V9. */
#vael-opening:not(.ct-full){padding-top:calc(12px + env(safe-area-inset-top,0px));padding-bottom:calc(38px + env(safe-area-inset-bottom,0px));}
#vael-opening:not(.ct-full) .ct-badge{top:calc(16px + env(safe-area-inset-top,0px));}
#vael-opening:not(.ct-full) .ct-hint{bottom:calc(18px + env(safe-area-inset-bottom,0px));}

/* v10 全屏（小克）：竖屏时画面铺满，字压在天上和草地上 */
.ct-world.ct-full{padding:0 0 calc(var(--sab, env(safe-area-inset-bottom)) + 58px);justify-content:flex-end;}
.ct-world.ct-full .ct-art{position:absolute;inset:0;z-index:-1;width:100%;height:100%;max-width:none;aspect-ratio:auto;}
.ct-world.ct-full .ct-brand{position:absolute;left:0;right:0;top:calc(var(--sat, env(safe-area-inset-top)) + 11%);margin:0;text-align:center;}
.ct-world.ct-full .ct-badge{top:calc(var(--sat, env(safe-area-inset-top)) + 14px);}
.ct-world.ct-full .ct-hint{bottom:calc(var(--sab, env(safe-area-inset-bottom)) + 16px);}
.ct-world.ct-full .ct-brand,.ct-world.ct-full .ct-greeting,.ct-world.ct-full .ct-sub,.ct-world.ct-full .ct-badge,.ct-world.ct-full .ct-hint{text-shadow:0 1px 0 rgba(255,255,255,.4);}
.ct-world.ct-full[data-theme="dark"] .ct-brand,.ct-world.ct-full[data-theme="dark"] .ct-greeting,.ct-world.ct-full[data-theme="dark"] .ct-sub,.ct-world.ct-full[data-theme="dark"] .ct-badge,.ct-world.ct-full[data-theme="dark"] .ct-hint{text-shadow:0 1px 3px rgba(0,0,0,.5);}

/* V11 opening preference panel; inherits the existing chat/sidebar palette. */
#opening-preferences{padding:18px 20px;}
#opening-preferences h3{margin:0 0 14px;font-size:15px;font-weight:500;}
#opening-preferences p{margin:12px 0;color:var(--dim);font-size:12px;line-height:1.6;}
#opening-preferences .opening-preview-button{display:block;width:100%;margin-top:22px;padding:12px;border:0;border-radius:11px;background:color-mix(in srgb,var(--text) 7%,var(--sheet));color:var(--text);font:inherit;cursor:pointer;}
#opening-preferences .opening-duration-note{text-align:center;font-size:11px;}

/* V13 painted pixel backgrounds; scene-specific ground anchors retain the native crab animation. */
.ct-world.ct-paint{--ct-text:#344a62;--ct-dim:#4b6277;--ct-bg:#adc0d2;}
.ct-world.ct-paint[data-theme="dark"]{--ct-text:#f2e7d3;--ct-dim:#dbd5df;--ct-bg:#46577e;}
.ct-world.ct-paint::before{display:none;}
.ct-world.ct-paint::after{content:'';position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(180deg,transparent 64%,rgba(26,39,56,.12) 78%,rgba(26,39,56,.42) 100%);}
.ct-world.ct-paint .ct-pixel-bg{position:absolute;inset:0;z-index:0;width:100%;height:100%;object-fit:cover;object-position:50% var(--ct-scene-y,68%);image-rendering:pixelated;pointer-events:none;}
.ct-world.ct-paint .ct-art{z-index:2;pointer-events:none;}
.ct-world.ct-paint-wait *{animation-play-state:paused!important;}
.ct-world.ct-paint-wait .ct-art{visibility:hidden;}
.ct-world.ct-paint-ready .ct-legacy-scene{display:none;}
.ct-world.ct-paint .ct-brand,.ct-world.ct-paint .ct-badge,.ct-world.ct-paint .ct-greeting,.ct-world.ct-paint .ct-sub,.ct-world.ct-paint .ct-hint{z-index:3;}
.ct-world.ct-paint .ct-brand{font-size:30px;letter-spacing:4px;}
.ct-world.ct-paint .ct-badge{font-size:11px;}
.ct-world.ct-paint .ct-greeting,.ct-world.ct-paint .ct-sub,.ct-world.ct-paint .ct-hint{color:#fff4df;text-shadow:0 1px 3px rgba(24,34,48,.75);}
.ct-world.ct-paint .ct-greeting{font-size:14px;padding:0 16px;}
.ct-world.ct-paint .ct-sub{font-size:11px;}
.ct-world.ct-paint[data-action="fishing"] :is(.ct-route,.ct-bob,.ct-leg-a,.ct-leg-b,.ct-wave),
.ct-world.ct-paint[data-action="stargaze"] :is(.ct-route,.ct-bob,.ct-leg-a,.ct-leg-b,.ct-wave){animation:none;}
.ct-world.ct-paint[data-action="stargaze"] .ct-open{animation:none;opacity:1;}
.ct-world.ct-paint[data-action="stargaze"] .ct-happy{display:none;}
.ct-fishing-rig{transform-origin:113px 94px;animation:ct-fish-tip calc(5.6s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-fishing-ripple{animation:ct-ripple-soft calc(1.8s * var(--ct-time-scale,.5)) ease-in-out infinite alternate;}
.ct-painted-twinkle{animation:ct-spark 2s var(--delay,0s) ease-in-out infinite alternate;}
.ct-space-explorer{animation:ct-space-hop calc(5.6s * var(--ct-time-scale,.5)) ease-in-out both;}
.ct-space-flag{transform-origin:123px 94px;animation:ct-flag-soft 1.8s ease-in-out infinite alternate;}
@keyframes ct-fish-tip{0%,22%{transform:rotate(-4deg);}42%,65%{transform:rotate(0);}78%{transform:rotate(1.3deg);}91%,100%{transform:rotate(-.8deg);}}
@keyframes ct-ripple-soft{from{opacity:.45;}to{opacity:.9;transform:translateY(.5px);}}
@keyframes ct-space-hop{0%,16%{transform:translate(-5px,0);}42%{transform:translate(-1px,-5px);}68%{transform:translate(3px,-1px);}83%{transform:translate(5px,-3px);}100%{transform:translate(6px,0);}}
@keyframes ct-flag-soft{to{transform:scaleX(.9);}}
@media(prefers-reduced-motion:reduce){.ct-fishing-rig,.ct-fishing-ripple,.ct-painted-twinkle,.ct-space-explorer,.ct-space-flag{animation:none!important;}}

/* V14 现画的像素场景（小克）：底图一张 canvas（沿用 .ct-pixel-bg 的铺满规则），会动的一张透明 canvas 叠在上面 */
.ct-world.ct-paint .ct-pixel-fx{position:absolute;inset:0;z-index:0;width:100%;height:100%;object-fit:cover;object-position:50% var(--ct-scene-y,68%);image-rendering:pixelated;pointer-events:none;}
