.porter-icon{transition:left .5s ease-out,top .5s ease-out,transform .3s ease-out;will-change:left,top,transform}.porter-hand.porter-moving{animation:walkBounce .5s ease-in-out infinite}.porter-cart.porter-moving{animation:pushSway .6s ease-in-out infinite}.porter-wagon.porter-moving{animation:trotBounce .4s ease-in-out infinite}@keyframes walkBounce{0%,to{transform:translate(-50%,-50%) rotate(var(--angle)) translateY(0)}50%{transform:translate(-50%,-50%) rotate(var(--angle)) translateY(-2px)}}@keyframes pushSway{0%,to{transform:translate(-50%,-50%) rotate(var(--angle)) translate(0)}50%{transform:translate(-50%,-50%) rotate(var(--angle)) translate(2px)}}@keyframes trotBounce{0%,to{transform:translate(-50%,-50%) rotate(var(--angle)) translateY(0)}25%{transform:translate(-50%,-50%) rotate(var(--angle)) translateY(-3px)}75%{transform:translate(-50%,-50%) rotate(var(--angle)) translateY(-1px)}}@keyframes wheelSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.wheel-spinning{animation:wheelSpin .3s linear infinite;transform-origin:center}@keyframes cargoBounce{0%,to{transform:scale(1)}50%{transform:scale(1.2)}}.cargo-indicator{animation:cargoBounce .8s ease-in-out infinite}@keyframes roadPulse{0%,to{opacity:.6}50%{opacity:1}}.road-segment.active{animation:roadPulse 1.5s ease-in-out infinite}.porter-selected{box-shadow:0 0 0 4px #3b82f680!important}@media(prefers-reduced-motion:reduce){.porter-icon,.porter-moving,.wheel-spinning,.cargo-indicator{animation:none!important;transition:none!important}}.stick-figure-svg{transition:all .8s ease-in-out;filter:drop-shadow(0 2px 2px rgba(0,0,0,.1))}.stick-figure{position:relative;width:30px;height:60px}.stick-figure .head{position:absolute;top:0;left:50%;transform:translate(-50%);width:14px;height:14px;border-radius:50%}.stick-figure .body{position:absolute;top:14px;left:50%;transform:translate(-50%);width:4px;height:20px;border-radius:2px}.stick-figure .arm,.stick-figure .leg{position:absolute;width:3px;height:18px;border-radius:2px;transform-origin:top center}.stick-figure .arm-left{top:16px;left:2px;transform:rotate(-30deg)}.stick-figure .arm-right{top:16px;right:2px;transform:rotate(30deg)}.stick-figure .leg-left{top:32px;left:6px;transform:rotate(-15deg)}.stick-figure .leg-right{top:32px;right:6px;transform:rotate(15deg)}.stick-figure-dancing{animation:dance .6s ease-in-out infinite}.stick-figure-dancing .arm-left{animation:armWaveLeft .6s ease-in-out infinite}.stick-figure-dancing .arm-right{animation:armWaveRight .6s ease-in-out infinite}.stick-figure-dancing .leg-left{animation:legStepLeft .6s ease-in-out infinite}.stick-figure-dancing .leg-right{animation:legStepRight .6s ease-in-out infinite}@keyframes dance{0%,to{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-5px) rotate(2deg)}}@keyframes armWaveLeft{0%,to{transform:rotate(-60deg)}50%{transform:rotate(-120deg)}}@keyframes armWaveRight{0%,to{transform:rotate(60deg)}50%{transform:rotate(120deg)}}@keyframes legStepLeft{0%,to{transform:rotate(-20deg)}50%{transform:rotate(20deg)}}@keyframes legStepRight{0%,to{transform:rotate(20deg)}50%{transform:rotate(-20deg)}}.stick-figure-cheering{animation:cheer .4s ease-in-out infinite}.stick-figure-cheering .arm-left,.stick-figure-cheering .arm-right{animation:raiseArms .4s ease-in-out infinite}@keyframes cheer{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes raiseArms{0%,to{transform:rotate(-90deg)}50%{transform:rotate(-110deg)}}.stick-figure-eating .arm-left,.stick-figure-eating .arm-right{animation:bringToMouth .8s ease-in-out infinite;transform:rotate(-70deg)}@keyframes bringToMouth{0%,to{transform:rotate(-70deg)}50%{transform:rotate(-50deg)}}.stick-figure-walking .leg-left{animation:walkLeft .5s ease-in-out infinite}.stick-figure-walking .leg-right{animation:walkRight .5s ease-in-out infinite}@keyframes walkLeft{0%,to{transform:rotate(-25deg)}50%{transform:rotate(25deg)}}@keyframes walkRight{0%,to{transform:rotate(25deg)}50%{transform:rotate(-25deg)}}.cheer-hands{position:absolute;top:8px;left:50%;transform:translate(-50%);font-size:12px;animation:bounce .3s ease-in-out infinite}.food-item{position:absolute;top:12px;left:50%;transform:translate(-50%);font-size:10px;animation:munch .8s ease-in-out infinite}@keyframes bounce{0%,to{transform:translate(-50%) translateY(0)}50%{transform:translate(-50%) translateY(-3px)}}@keyframes munch{0%,to{transform:translate(-50%) scale(1)}50%{transform:translate(-50%) scale(.8)}}.festival-background{position:absolute;top:0;left:0;overflow:hidden;pointer-events:none;z-index:50}.festival-background .bunting{position:absolute;top:0;left:0;right:0;height:30px}.bunting-flag{position:absolute;top:0;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-top:20px solid #FF6B6B;animation:flagWave 2s ease-in-out infinite}.bunting-flag:nth-child(2n){border-top-color:#4ecdc4}.bunting-flag:nth-child(3n){border-top-color:#ffe66d}@keyframes flagWave{0%,to{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}.festival-lights{position:absolute;top:10px;left:0;right:0;height:20px}.light{position:absolute;width:12px;height:12px;border-radius:50%;animation:lightGlow 1.5s ease-in-out infinite}.light:nth-child(4n){background:#ff6b6b}.light:nth-child(4n+1){background:#4ecdc4}.light:nth-child(4n+2){background:#ffe66d}.light:nth-child(4n+3){background:#95e1d3}@keyframes lightGlow{0%,to{opacity:.4;transform:scale(.9)}50%{opacity:1;transform:scale(1.1);box-shadow:0 0 10px currentColor}}.fireworks-container{position:absolute;top:0;left:0;right:0;bottom:0}.firework{position:absolute;width:6px;height:6px;border-radius:50%;animation:fireworkExplode 2s ease-out infinite}.firework-1{top:20%;left:30%;background:#ff6b6b;animation-delay:0s}.firework-2{top:30%;left:70%;background:#4ecdc4;animation-delay:.7s}.firework-3{top:15%;left:50%;background:#ffe66d;animation-delay:1.4s}@keyframes fireworkExplode{0%{transform:scale(1);opacity:1;box-shadow:0 0 0 0 currentColor,0 -20px 0 0 currentColor,20px 0 0 0 currentColor,0 20px 0 0 currentColor,-20px 0 0 0 currentColor}50%{transform:scale(2);opacity:1;box-shadow:0 0 0 0 currentColor,0 -40px 0 0 currentColor,40px 0 0 0 currentColor,0 40px 0 0 currentColor,-40px 0 0 0 currentColor}to{transform:scale(3);opacity:0;box-shadow:0 0 0 0 transparent,0 -60px 0 0 transparent,60px 0 0 0 transparent,0 60px 0 0 transparent,-60px 0 0 0 transparent}}.festival-view{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:300;overflow:hidden}.confetti-container{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:155}.confetti{position:absolute;width:8px;height:8px;top:-10px;opacity:.8;animation:confettiFall 4s linear infinite}@keyframes confettiFall{0%{transform:translateY(0) rotate(0);opacity:1}to{transform:translateY(100vh) rotate(360deg);opacity:0}}.festival-characters{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:152}.festival-info-panel{position:absolute;top:60px;right:20px;width:300px;background:#fffffff2;border-radius:12px;padding:16px;box-shadow:0 8px 24px #00000026;pointer-events:auto;z-index:160;border:2px solid #FF6B6B;animation:slideInRight .5s ease-out}.festival-stats{display:flex;justify-content:space-between;background:#f8f9fa;padding:8px 12px;border-radius:8px;font-size:.85rem;color:#444}@keyframes slideInRight{0%{opacity:0;transform:translate(50px)}to{opacity:1;transform:translate(0)}}
