.seasonal-tile{background:linear-gradient(145deg,#ffcf83,#d4a7e7);color:#593b77}.seasonal-cover{overflow:hidden;border:4px solid #fff;border-radius:24px;background:url('seasonal-art/trick-treat.webp') center/cover;box-shadow:0 5px 0 #76518d77}.seasonal-cover img{position:absolute;z-index:2;width:42%;height:50%;object-fit:contain;filter:drop-shadow(0 4px 5px #30244688)}.seasonal-cover .cover-ghost{left:6%;top:25%;transform:rotate(-8deg)}.seasonal-cover .cover-pumpkin{right:4%;bottom:0;width:48%;height:52%}.seasonal-cover .cover-shadow{position:absolute;left:50%;top:13%;width:34%;height:36%;background:#2a1d42a8;mask:url('seasonal-art/ghost.svg') center/contain no-repeat;filter:drop-shadow(0 0 3px white)}
.seasonal-screen{max-width:1240px;margin:0 auto;padding:8px 14px 25px;color:#47375f}.seasonal-screen[hidden]{display:none}.seasonal-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 2px 7px}.seasonal-heading h1{font-size:clamp(25px,3.1vw,40px);line-height:1.05;color:#704c9c;margin:2px 0;text-shadow:0 2px #fff}.seasonal-heading .home-kicker{font-size:10px;letter-spacing:1.5px}.seasonal-status{display:flex;align-items:center;gap:10px;background:#fff6eb;border:3px solid white;border-radius:20px;padding:7px 11px;box-shadow:0 4px 0 #b8a1c5;font-size:clamp(13px,1.5vw,18px);font-weight:900;white-space:nowrap}.seasonal-status span{background:#ffe2a2;border-radius:12px;padding:4px 8px;color:#7e4d36}.seasonal-levels{display:flex;justify-content:center;gap:8px;margin:4px auto 8px}.seasonal-level{position:relative;width:clamp(54px,8vw,92px);height:clamp(40px,5.5vw,58px);border:3px solid #fff;border-radius:14px;background-size:cover;background-position:center;box-shadow:0 3px 0 #a28ab1;cursor:pointer;overflow:hidden;touch-action:manipulation}.seasonal-level span{display:grid;place-items:center;width:27px;height:27px;border-radius:50%;background:#fff0c9;color:#604283;font-weight:900;box-shadow:0 2px 2px #43306466}.seasonal-level.active{outline:3px solid #ffcc64;transform:translateY(-2px)}.seasonal-level:focus-visible,.seasonal-piece:focus-visible,.seasonal-slot:focus-visible{outline:4px solid #ffda74;outline-offset:2px}.seasonal-progress{height:7px;background:#f7e9d4;border-radius:20px;margin:0 7px 7px;overflow:hidden}.seasonal-progress span{display:block;height:100%;width:0;background:linear-gradient(90deg,#d097e7,#f4b771,#ffe8a2);border-radius:20px;transition:width .25s ease}
.seasonal-table{position:relative;padding:10px 10px 12px;border:4px solid white;border-radius:27px;background:linear-gradient(160deg,#e9d6f4,#ddc3ae 75%,#c08b65);box-shadow:0 7px 0 #987493,0 14px 25px #62497337}.seasonal-board{position:relative;isolation:isolate;height:clamp(265px,47dvh,510px);overflow:hidden;border:5px solid #fff5d6;border-radius:19px;background-position:center;background-size:cover;box-shadow:inset 0 0 0 3px #865b8b91,inset 0 -32px 50px #2d1f3155,0 4px 0 #9d7595;touch-action:none}.seasonal-board:before{content:'';position:absolute;inset:0;background:linear-gradient(180deg,#211a3508,#211a3522);pointer-events:none}.seasonal-slot{position:absolute;z-index:1;left:var(--x);top:var(--y);width:var(--size);height:auto;aspect-ratio:1;display:grid;place-items:center;transform:translate(-50%,-50%);background:none;border:none;padding:0;cursor:pointer;touch-action:none}.seasonal-slot img{width:100%;height:100%;object-fit:contain;pointer-events:none;user-select:none}.seasonal-slot.empty img{filter:brightness(0) drop-shadow(0 0 2px #fffcdd) drop-shadow(0 0 4px #fffcdd);opacity:.56;transition:filter .2s,opacity .2s,transform .2s}.seasonal-slot.empty:before{content:'';position:absolute;inset:1%;border:2px dashed #fff5d6a8;border-radius:35%;background:#20162733}.seasonal-slot.empty.chosen img,.seasonal-slot.empty.near img{filter:brightness(0) drop-shadow(0 0 4px #fff2b5) drop-shadow(0 0 9px #fff2b5);opacity:.85;transform:scale(1.06)}.seasonal-slot.filled img{filter:drop-shadow(0 6px 5px #1a172b8b)}.seasonal-slot.arrived{animation:seasonal-snap .5s cubic-bezier(.15,1.2,.4,1)}.seasonal-slot.nope{animation:seasonal-wiggle .35s ease}.seasonal-board.complete:after{content:'✦  ✧   ✦';position:absolute;inset:15% 0 auto;text-align:center;color:#ffe89b;font-size:58px;text-shadow:0 0 16px #fff;animation:seasonal-sparkle 1s ease both;pointer-events:none}
.seasonal-tray-wrap{margin:10px 1px 0;padding:5px 8px 7px;border-radius:20px;background:#fff8f0e8;box-shadow:inset 0 1px 5px #815e8633}.seasonal-tray-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:1px 6px 5px;color:#60497b;font-size:13px}.seasonal-tray-head strong{font-size:16px}.seasonal-tray-head span{text-align:right;font-weight:700}.seasonal-tray{display:flex;justify-content:center;align-items:stretch;gap:8px;min-height:98px;overflow-x:auto;overscroll-behavior:contain;scrollbar-width:thin;padding:3px 3px 7px}.seasonal-piece{flex:0 0 clamp(90px,13vw,130px);min-height:90px;padding:3px 3px 2px;border:3px solid #fff;border-radius:18px;background:linear-gradient(#fffefa,#f3ddf4);box-shadow:0 4px 0 #b292bf,0 6px 8px #745a7744;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:grab;touch-action:none;user-select:none;transition:transform .16s,box-shadow .16s}.seasonal-piece img{width:66px;height:61px;object-fit:contain;filter:drop-shadow(0 4px 3px #5142645e);pointer-events:none}.seasonal-piece span{font-size:12px;font-weight:900;color:#594873;line-height:1.05}.seasonal-piece.selected{background:linear-gradient(#fff4b8,#fbe1e0);border-color:#f2b95f;transform:translateY(-3px)}.seasonal-piece.lifting{opacity:.4}.seasonal-floating{position:fixed;z-index:10000;width:92px;height:92px;pointer-events:none;filter:drop-shadow(0 12px 10px #1915289a)}.seasonal-floating img{width:100%;height:100%}
@keyframes seasonal-snap{0%{transform:translate(-50%,-50%) scale(1.45) rotate(-12deg);opacity:.4}65%{transform:translate(-50%,-50%) scale(.9) rotate(3deg)}100%{transform:translate(-50%,-50%) scale(1) rotate(0)}}@keyframes seasonal-wiggle{25%{transform:translate(-55%,-50%) rotate(-6deg)}65%{transform:translate(-45%,-50%) rotate(6deg)}}@keyframes seasonal-sparkle{0%{opacity:0;transform:scale(.5)}45%{opacity:1;transform:scale(1.15)}100%{opacity:0;transform:scale(1.5)}}
@media(max-width:650px){.seasonal-screen{padding:4px 6px 17px}.seasonal-heading{align-items:flex-start}.seasonal-heading h1{font-size:23px}.seasonal-status{flex-direction:column;align-items:flex-end;gap:1px;padding:4px 7px;font-size:11px}.seasonal-status span{padding:1px 5px}.seasonal-levels{gap:5px}.seasonal-board{height:clamp(300px,52dvh,510px);background-position:center}.seasonal-tray-head{display:block;text-align:center}.seasonal-tray-head span{display:block;text-align:center;font-size:11px}.seasonal-tray{justify-content:flex-start;min-height:88px}.seasonal-piece{flex-basis:87px;min-height:81px}.seasonal-piece img{width:53px;height:51px}.seasonal-piece span{font-size:10px}}
@media(max-height:720px) and (min-width:700px){.seasonal-board{height:clamp(270px,43dvh,390px)}.seasonal-tray{min-height:83px}.seasonal-piece{min-height:77px}.seasonal-piece img{height:50px}}
@media(prefers-reduced-motion:reduce){.seasonal-slot.arrived,.seasonal-slot.nope,.seasonal-board.complete:after{animation:none}.seasonal-progress span,.seasonal-slot img{transition:none}}
.seasonal-piece[data-kind=web]{background:linear-gradient(#8b74af,#6b598d)}.seasonal-piece[data-kind=web] span{color:#fff}
.seasonal-piece{touch-action:pan-x}
@media(max-height:820px) and (min-width:700px){.seasonal-board{height:clamp(270px,43dvh,390px)}.seasonal-tray{min-height:83px}.seasonal-piece{min-height:77px}.seasonal-piece img{height:50px}}
/* Dimensional sticker workshop. Every assembly uses one shared coordinate space. */
.seasonal-board{container-type:size}
.seasonal-world{position:absolute;left:50%;top:50%;width:min(100cqw,166.6667cqh);aspect-ratio:5/3;transform:translate(-50%,-50%);pointer-events:none}
.seasonal-object{position:absolute;aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;filter:drop-shadow(0 5px 3px #291c3955)}
.seasonal-object .seasonal-slot{transform:none;aspect-ratio:auto;min-width:0;min-height:0;pointer-events:auto;z-index:2}
.seasonal-object .seasonal-slot:disabled{pointer-events:none}
.seasonal-slot img{object-fit:fill}
.seasonal-object .seasonal-slot.empty:before{display:none}
.seasonal-object .seasonal-slot.empty img{opacity:.62;filter:brightness(.12) sepia(.2) drop-shadow(0 0 2px #fff6dd) drop-shadow(0 0 2px #fff6dd)}
.seasonal-object .seasonal-slot.empty.chosen{z-index:5}
.seasonal-object .seasonal-slot.empty.chosen img,.seasonal-object .seasonal-slot.empty.near img{transform:none;opacity:.85;filter:brightness(.55) sepia(.5) drop-shadow(0 0 4px #ffdf74) drop-shadow(0 0 9px #fff5b4);animation:seasonal-target 1.5s ease-in-out infinite}
.seasonal-object .seasonal-slot.filled img{filter:none}
.seasonal-object .seasonal-slot.arrived{animation:seasonal-piece-fit .42s ease-out}
.seasonal-object .seasonal-slot.nope{animation:seasonal-piece-nope .32s ease}
.seasonal-finished-art{width:100%;height:100%;object-fit:contain;pointer-events:none;transform-origin:50% 90%}
.seasonal-object.alive[data-kind=ghost] .seasonal-finished-art{animation:seasonal-ghost 3.2s ease-in-out infinite}
.seasonal-object.alive[data-kind=bat] .seasonal-finished-art{animation:seasonal-bat 2.1s ease-in-out infinite}
.seasonal-object.alive[data-kind=pumpkin] .seasonal-finished-art,.seasonal-object.alive[data-kind=house] .seasonal-finished-art,.seasonal-object.alive[data-kind=lantern] .seasonal-finished-art{animation:seasonal-warm 3s ease-in-out infinite}
.seasonal-object.alive[data-kind=cat] .seasonal-finished-art,.seasonal-object.alive[data-kind=zombie] .seasonal-finished-art,.seasonal-object.alive[data-kind=witch] .seasonal-finished-art,.seasonal-object.alive[data-kind=vampire] .seasonal-finished-art{animation:seasonal-breathe 3.6s ease-in-out infinite}
.seasonal-object.assembled{animation:seasonal-built .75s ease-out}
.assembly-sparkles{position:absolute;left:-15%;right:-15%;top:0;text-align:center;color:#fff1a1;text-shadow:0 1px 4px #af641a;font-size:clamp(20px,4vw,45px);opacity:0;pointer-events:none}
.assembled .assembly-sparkles{animation:seasonal-sparkle 1.5s ease-out}
.seasonal-component{position:absolute;object-fit:fill;pointer-events:none}
.seasonal-object.alive[data-kind=robot] .part-head{animation:seasonal-head 3s ease-in-out infinite;transform-origin:50% 100%}
.seasonal-object.alive[data-kind=spider] .part-left{animation:seasonal-legs 1.8s ease-in-out infinite;transform-origin:100% 50%}
.seasonal-object.alive[data-kind=spider] .part-right{animation:seasonal-legs 1.8s ease-in-out -.9s infinite reverse;transform-origin:0 50%}
.seasonal-floating img{object-fit:contain}
.seasonal-tray{justify-content:flex-start;scroll-padding:8px}
.seasonal-piece{flex-basis:105px;background:linear-gradient(145deg,#fffdf5,#f1d7f4);border-radius:20px}
.seasonal-piece img{width:82px;height:66px;transition:transform .2s}
.seasonal-piece.selected img{transform:translateY(-3px) rotate(-4deg)}
.seasonal-cover .cover-shadow{mask-image:url('seasonal-art/ghost-v2.webp')}
.seasonal-board.paused *{animation-play-state:paused!important}
@keyframes seasonal-piece-fit{0%{transform:scale(1.15);opacity:.4}65%{transform:scale(.98)}100%{transform:scale(1);opacity:1}}
@keyframes seasonal-piece-nope{30%{transform:translateX(-4px)}70%{transform:translateX(4px)}}
@keyframes seasonal-target{50%{opacity:.55}}
@keyframes seasonal-ghost{50%{transform:translateY(-9px) rotate(3deg)}}
@keyframes seasonal-bat{50%{transform:translateY(-5px) rotate(-5deg) scaleX(.94)}}
@keyframes seasonal-warm{50%{filter:brightness(1.15) drop-shadow(0 0 7px #ffc06388)}}
@keyframes seasonal-breathe{50%{transform:scaleY(1.025) rotate(1deg)}}
@keyframes seasonal-head{25%{transform:rotate(-4deg)}70%{transform:rotate(4deg)}}
@keyframes seasonal-legs{50%{transform:rotate(5deg) translateY(-2px)}}
@keyframes seasonal-built{0%,100%{transform:translate(-50%,-50%) scale(1)}40%{transform:translate(-50%,-54%) scale(1.08)}70%{transform:translate(-50%,-50%) scale(.98)}}
@media(max-width:650px){.seasonal-board{height:clamp(240px,40dvh,360px)}.seasonal-piece{flex-basis:90px}.seasonal-piece img{width:70px;height:60px}}
@media(prefers-reduced-motion:reduce){.seasonal-screen *, .seasonal-screen *:before,.seasonal-screen *:after{animation:none!important;transition:none!important}}
.seasonal-world{inset:0;width:100%;height:100%;aspect-ratio:auto;transform:none}
.seasonal-status{max-width:38%}.seasonal-status strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.seasonal-piece{touch-action:none;-webkit-user-drag:none;-webkit-touch-callout:none}
.seasonal-floating{left:0;top:0;margin:0;will-change:transform;filter:drop-shadow(0 12px 8px #251b4777) drop-shadow(0 0 2px #fff);contain:layout style;}
.seasonal-piece.lifting{opacity:.22;transform:scale(.96)}

/* More pictures and pieces remain reachable on small screens. */
.seasonal-levels{flex-wrap:wrap}
.seasonal-tray{justify-content:flex-start}
.seasonal-object.alive[data-kind=carriage] .seasonal-finished-art,.seasonal-object.alive[data-kind=train] .seasonal-finished-art{animation:seasonal-ride 3s ease-in-out infinite}
.seasonal-object.alive[data-kind=cauldron] .seasonal-finished-art{animation:seasonal-warm 2.8s ease-in-out infinite}
.seasonal-object.alive[data-kind=scarecrow] .seasonal-finished-art,.seasonal-object.alive[data-kind=candycart] .seasonal-finished-art{animation:seasonal-breathe 3.8s ease-in-out infinite}
@keyframes seasonal-ride{25%{transform:translate(3px,-2px) rotate(1deg)}75%{transform:translate(-3px,-1px) rotate(-1deg)}}
@media(prefers-reduced-motion:reduce){.seasonal-object.alive .seasonal-finished-art{animation:none!important}}
