/* Original cartoon UI remains the static fallback. Decorations never take transaction input. */
.festive-atmosphere{display:none!important}
.festival-effects{position:fixed;inset:0;z-index:8;pointer-events:none;overflow:hidden;contain:strict}
.festival-effects *{pointer-events:none!important}
.festival-sky,.festival-floats{position:absolute;inset:0;width:100%;height:100%}
.festival-float{position:absolute;top:-100px;left:var(--float-left);display:block;animation:festival-fall var(--float-duration) linear var(--float-delay) infinite;will-change:transform;opacity:.78}
.festival-envelope{display:block;position:relative;width:31px;height:43px;border:2px solid #2a211c;border-radius:5px;background:#ed4327;box-shadow:2px 2px 0 #2a211c35;transform:rotate(-9deg)}
.festival-envelope:before{content:'';position:absolute;inset:0 0 auto;height:13px;border-bottom:2px solid #ffc934;border-radius:0 0 50% 50%}
.festival-fu{position:absolute;left:50%;top:52%;transform:translate(-50%,-50%) rotate(0);font-family:"Microsoft YaHei",sans-serif;font-size:15px;line-height:1;font-weight:900;color:#ffd234}
.festival-lantern{display:block;position:relative;width:34px;height:38px;border:2px solid #2a211c;border-radius:42%;background:repeating-linear-gradient(90deg,#ee4327 0 8px,#9e2e20 9px 10px,#ee4327 11px 17px);transform:rotate(8deg)}
.festival-lantern:before{content:'';position:absolute;left:7px;right:7px;top:-5px;height:5px;border:2px solid #2a211c;border-radius:2px;background:#ffd234;box-shadow:0 36px 0 -1px #ffd234}
.festival-lantern:after{content:'';position:absolute;top:36px;left:13px;width:3px;height:20px;background:#e8a520;box-shadow:-4px 6px 0 #e8a520,4px 6px 0 #e8a520}
@keyframes festival-fall{0%{transform:translate3d(0,-60px,0) rotate(-10deg)}35%{transform:translate3d(var(--float-sway),40vh,0) rotate(10deg)}70%{transform:translate3d(0,80vh,0) rotate(-7deg)}100%{transform:translate3d(var(--float-sway),calc(100vh + 160px),0) rotate(14deg)}}
.festival-toggle{position:fixed;right:18px;bottom:18px;z-index:40;display:flex;align-items:center;gap:7px;min-height:34px;padding:7px 11px;border:2px solid #2a211c;border-radius:8px;background:#fff8df;color:#2a211c;box-shadow:3px 3px 0 #2a211c;font-family:inherit;font-size:11px;line-height:1.25;font-weight:900;cursor:pointer;transition:transform .15s}
.festival-toggle:hover{background:#ffd234;transform:translateY(-1px)}
.festival-toggle-icon{color:#df3e27;font-size:16px;line-height:1}
.festival-toggle:focus-visible{outline:3px solid #ed4327;outline-offset:5px}
.festival-toggle:disabled{opacity:.8;cursor:default}
.festival-scene{position:absolute;inset:0;pointer-events:none;visibility:hidden}
.festival-stage,.festival-ram{position:absolute;inset:0;width:100%;height:100%;max-width:none;max-height:none;object-fit:cover;object-position:50% 50%;display:block}
.festival-puppet{position:absolute;inset:0;transform-origin:75% 98%;animation:festival-ram-sway 5.8s ease-in-out infinite;will-change:transform}
.hero-art[data-festival-ram=ready]>.festival-scene{visibility:visible}
.hero-art[data-festival-ram=ready]>img{opacity:0}
.hero-art[data-festival-ram=ready] .art-label{z-index:5;pointer-events:none}
.festival-greet{all:unset;position:absolute;z-index:3;box-sizing:border-box;cursor:pointer;border-radius:24px;visibility:hidden;-webkit-tap-highlight-color:transparent}
.hero-art[data-festival-ram=ready]>.festival-greet{visibility:visible}
.festival-greet:disabled{cursor:default}
.festival-greet:focus-visible{outline:3px dashed #2a211c;outline-offset:-8px;background:#ffd2340a}
.festival-greet-cue{position:absolute;bottom:16px;left:35%;display:block;width:max-content;max-width:65%;padding:7px 10px;border:2px solid #2a211c;border-radius:7px;box-shadow:2px 2px 0 #2a211c;background:#fff8df;color:#2a211c;font-family:inherit;font-size:11px;font-weight:900;line-height:1.4;transform:rotate(2deg);opacity:0;transition:opacity .2s}
.festival-greet:hover .festival-greet-cue,.festival-greet:focus-visible .festival-greet-cue{opacity:1}
.festival-greeting{position:absolute;top:25%;right:12%;z-index:7;max-width:70%;padding:12px 18px;border:2px solid #2a211c;border-radius:12px;box-shadow:4px 4px 0 #2a211c;background:#ffd234;color:#2a211c;font-weight:950;font-size:18px;pointer-events:none;opacity:0;transform:translateY(10px) rotate(-5deg);transition:opacity .15s,transform .2s}
.festival-greeting.visible{opacity:1;transform:translateY(0) rotate(-5deg)}
.festival-arrive{animation:festival-ram-arrive 1.05s cubic-bezier(.2,.8,.3,1) both!important}
.festival-wave{animation:festival-ram-bow .95s ease-in-out!important}
@keyframes festival-ram-arrive{0%{opacity:0;transform:translate3d(20px,36px,0) rotate(5deg)}55%{opacity:1;transform:translate3d(-4px,-11px,0) rotate(-1.5deg)}78%{transform:translate3d(2px,4px,0) rotate(.7deg)}100%{opacity:1;transform:translate3d(0,0,0) rotate(0)}}
@keyframes festival-ram-sway{0%,100%{transform:translate3d(0,0,0) rotate(-.65deg)}23%{transform:translate3d(0,-7px,0) rotate(.7deg)}48%{transform:translate3d(0,0,0) rotate(-.5deg)}60%{transform:translate3d(0,-3px,0) rotate(.4deg)}75%{transform:translate3d(0,0,0) rotate(.65deg)}}
@keyframes festival-ram-bow{0%,100%{transform:translate3d(0,0,0) rotate(0)}18%{transform:translate3d(0,-14px,0) rotate(-3deg)}42%{transform:translate3d(0,7px,0) rotate(3deg)}62%{transform:translate3d(0,-9px,0) rotate(-2deg)}80%{transform:translate3d(0,3px,0) rotate(1.5deg)}}
.festival-intro{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;overflow:hidden;background:radial-gradient(#ffd23433 1.5px,transparent 1.5px) 0 0/12px 12px,#ed4327;color:#fff8df;animation:festival-intro-failsafe 2.65s linear forwards}
.festival-intro:before,.festival-intro:after{content:'';position:absolute;width:min(72vw,650px);height:min(72vw,650px);border:2px solid #2a211c;background:#ffd234;border-radius:50%;top:50%;left:50%;transform:translate(-50%,-50%);animation:festival-intro-ring 1.8s ease-out both}
.festival-intro:after{width:min(66vw,590px);height:min(66vw,590px);background:#fff1c8;border-style:dashed}
.festival-intro-center{position:relative;z-index:1;text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px;width:calc(100% - 32px);color:#2a211c;animation:festival-intro-pop .65s cubic-bezier(.2,1.5,.5,1) both}
.festival-intro-ram{width:170px;height:170px;max-width:35vw;max-height:35vw;border:4px solid #2a211c;border-radius:50%;box-shadow:7px 7px 0 #2a211c;transform:rotate(-7deg);animation:festival-intro-nod 1.8s ease-in-out both}
.festival-intro-brand{font-size:clamp(38px,6vw,72px);font-weight:1000;line-height:1.3;letter-spacing:-.04em;color:#ed4327;text-shadow:2px 2px 0 #2a211c;-webkit-text-stroke:.6px #2a211c;margin-top:13px}
.festival-intro-welcome{font-size:clamp(15px,2.5vw,24px);font-weight:950;margin:0;line-height:1.5;color:#2a211c}
.festival-intro-sub{font-size:12px;font-weight:800;margin:0;line-height:1.5;color:#704329}
.festival-intro-star{position:absolute;font-size:56px;color:#ed4327;-webkit-text-stroke:2px #2a211c;animation:festival-intro-pop .8s .12s both}
.festival-intro-star.star-a{top:12%;left:calc(50% - 180px);transform:rotate(-12deg)}
.festival-intro-star.star-b{top:36%;right:calc(50% - 180px);font-size:65px;transform:rotate(15deg)}
.festival-intro-skip{position:absolute;z-index:2;right:max(22px,env(safe-area-inset-right));top:max(22px,env(safe-area-inset-top));background:#fff8df;color:#2a211c;border:2px solid #2a211c;border-radius:8px;padding:11px 15px;box-shadow:3px 3px 0 #2a211c;font:850 13px/1.4 "Microsoft YaHei",system-ui,sans-serif;cursor:pointer}
.festival-intro-skip:focus-visible{outline:3px solid #ffd234;outline-offset:5px}
@keyframes festival-intro-pop{from{opacity:0;transform:translateY(25px) scale(.82)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes festival-intro-nod{0%{transform:rotate(-9deg) translateY(10px)}35%{transform:rotate(6deg) translateY(-6px)}65%{transform:rotate(-4deg) translateY(0)}100%{transform:rotate(0) translateY(0)}}
@keyframes festival-intro-ring{from{opacity:0;transform:translate(-50%,-50%) scale(.55)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
@keyframes festival-intro-failsafe{0%,78%{opacity:1;visibility:visible;pointer-events:auto}100%{opacity:0;visibility:hidden;pointer-events:none}}
html[data-festival-active=false] .festival-float,html[data-festival-active=false] .festival-puppet,.hero[data-festival-in-view=false] .festival-puppet{animation-play-state:paused!important}
html[data-festival-active=false] .festival-effects{visibility:hidden}
html[data-festival-motion=off] .festival-effects,html[data-festival-motion=off] .festival-intro{display:none!important}
html[data-festival-motion=off] .festival-puppet,html[data-festival-motion=off] .ticker>div{animation:none!important;transform:none}
html[data-festival-modal=true] .festival-toggle{visibility:hidden}
@media(max-width:1360px){.festival-float:nth-child(odd){left:-18px;--float-sway:4px!important}.festival-float:nth-child(even){left:calc(100% - 13px);--float-sway:-4px!important}}
@media(max-width:960px){.festival-stage,.festival-ram{object-position:58% center}}
@media(max-width:900px){.festival-stage,.festival-ram{object-position:right center}.festival-greeting{font-size:15px;right:9%;top:19%}}
@media(max-width:640px){.festival-float-extra{display:none}.festival-envelope{width:23px;height:33px}.festival-fu{font-size:12px}.festival-lantern{transform:scale(.8)}.festival-toggle{right:12px;bottom:max(12px,env(safe-area-inset-bottom));font-size:10px;padding:6px 9px;gap:5px;min-height:31px;box-shadow:2px 2px 0 #2a211c}.festival-greet-cue{font-size:9px;bottom:10px;padding:5px 7px;left:20%}.festival-greeting{font-size:14px;padding:9px 12px;right:8%;top:21%}.festival-intro:before{width:370px;height:370px}.festival-intro:after{width:335px;height:335px}.festival-intro-ram{width:125px;height:125px;max-width:none;max-height:none;border-width:3px;box-shadow:4px 4px 0 #2a211c}.festival-intro-brand{font-size:44px;margin-top:11px}.festival-intro-sub{font-size:10px}.festival-intro-star.star-a{font-size:39px;left:calc(50% - 135px)}.festival-intro-star.star-b{font-size:43px;right:calc(50% - 135px)}.festival-intro-skip{top:18px;right:18px;font-size:11px;padding:9px 12px}}
@media(prefers-reduced-motion:reduce){.festival-effects,.festival-intro{display:none!important}.festival-puppet,.festival-wave{animation:none!important;transform:none!important}.festival-greeting,.festival-greet-cue,.festival-toggle{transition:none!important}}
