/* Small World renderer v2 styles. Generated by build.cjs from src/; do not edit. */
/* One little universe. The physical tile is the shared visual unit. */
.sw-tile-reveal{display:none;opacity:0;visibility:hidden;transition:opacity .55s ease;pointer-events:none}
.sw-svg-egg .sw-tile-reveal{display:inline;opacity:1;visibility:visible}
.sw-egg-hotspot{cursor:pointer;outline:none;pointer-events:bounding-box}
.sw-egg-hotspot:focus-visible{filter:drop-shadow(0 0 5px #e0ba71)}
.sw-tile-scene .sw-tile-blink{animation:sw-tile-blink 8s infinite;transform-box:fill-box;transform-origin:center}
.sw-tile-scene .sw-tile-float{animation:sw-tile-float 7s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
.sw-tile-scene .sw-tile-steam{animation:sw-tile-steam 6s ease-in-out infinite}
.sw-new-world.layout-world-tile{background:var(--tbg);padding:26px 36px;min-height:570px}
.sw-new-world.layout-world-tile.night{background:color-mix(in srgb,var(--tbg) 15%,#202e25)}
.layout-world-tile .sw-new-main{grid-template-columns:minmax(0,.9fr) minmax(0,1.15fr);gap:10px;min-height:415px;padding:28px 0 18px}
.layout-world-tile .sw-new-copy{order:0;transform:none;padding:0;background:none;border:0;box-shadow:none}
.layout-world-tile .sw-new-copy h1{font-family:TinyRound,system-ui,sans-serif!important;font-size:clamp(30px,4.3cqw,53px);font-weight:700;letter-spacing:-1.8px;line-height:1.07}
.layout-world-tile .sw-new-copy>p{color:var(--tmuted);font-family:TinyRound,system-ui,sans-serif;font-size:12px;line-height:1.85}
.layout-world-tile .sw-new-copy .sw-kicker{font-size:8px;letter-spacing:1.8px}
.layout-world-tile .sw-new-art{order:1;align-self:center;width:100%;margin:0;max-width:none;isolation:isolate}
.layout-world-tile .sw-new-art:before{content:'';position:absolute;inset:15% 2% 8%;background:radial-gradient(ellipse,color-mix(in srgb,var(--tbg) 72%,#fffbd8) 0,transparent 67%);z-index:-1}
.layout-world-tile.night .sw-new-art:before{background:radial-gradient(ellipse,#67785733,transparent 68%)}
.layout-world-tile .sw-new-art>svg{width:100%;height:auto;filter:none;max-height:450px}
.layout-world-tile .sw-new-art figcaption{font-size:8px;margin-top:-4px;padding-inline:12px;line-height:1.6;min-height:26px}
.layout-world-tile .sw-new-secret{position:static;display:flex;align-items:center;justify-content:center;gap:6px;margin:10px auto 0;padding:8px 12px;background:color-mix(in srgb,var(--tbg) 70%,#fffdf3);font-size:9px}
.layout-world-tile.night .sw-new-secret{background:#2c3e31;color:#e9e8cc}
.layout-world-tile .sw-new-secret.found{background:var(--taccent);color:white}
.layout-world-tile .sw-new-links{max-width:340px}
.layout-world-tile .sw-new-links a,.layout-world-tile .sw-new-links button{border-radius:8px;background:#ffffff15;font-family:TinyRound,system-ui,sans-serif}
.layout-world-tile .sw-new-copy .sw-btn{border-radius:8px;font-family:TinyRound,system-ui,sans-serif}
.sw-dna-compare-art .sw-tile-scene{max-height:330px;display:block;margin:auto}
.sw-modal-world{max-height:none;overflow:visible}
.sw-modal-world .layout-world-tile{min-height:0;padding:22px 35px}
.sw-modal-world .layout-world-tile .sw-new-main{min-height:360px;padding:18px 0}
.sw-modal-world .layout-world-tile .sw-new-art>svg{max-height:350px}
.sw-tile-legend{display:flex;align-items:center;gap:9px;font-size:10px;color:#899378;line-height:1.6}
.sw-tile-legend svg{width:23px;height:23px;flex-shrink:0}
@keyframes sw-tile-blink{0%,44%,47%,100%{scale:1 1}45%,46%{scale:1 .08}}
@keyframes sw-tile-float{0%,100%{translate:0 0}50%{translate:0 -4px}}
@keyframes sw-tile-steam{0%,100%{translate:0 1px;opacity:.4}50%{translate:1px -4px;opacity:.7}}
@container (max-width:620px){.layout-world-tile .sw-new-main{grid-template-columns:1fr!important;gap:8px}.layout-world-tile .sw-new-art{order:-1!important;max-width:420px;margin:0 auto}.layout-world-tile .sw-new-copy h1{font-size:36px}.layout-world-tile .sw-new-copy{max-width:450px;margin:auto;width:100%}.layout-world-tile .sw-new-art>svg{max-height:330px}.layout-world-tile .sw-new-art figcaption{display:none}.layout-world-tile .sw-new-secret{margin-top:-5px;margin-bottom:15px}}
@media(max-width:650px){.sw-new-world.layout-world-tile{padding:22px 20px}.layout-world-tile .sw-new-main{grid-template-columns:1fr!important;padding:10px 0 20px}.layout-world-tile .sw-new-art{order:-1!important;max-width:380px;margin:auto}.layout-world-tile .sw-new-art>svg{max-height:315px}.layout-world-tile .sw-new-copy h1{font-size:35px}.layout-world-tile .sw-new-copy .sw-kicker{font-size:8px}.layout-world-tile .sw-new-art figcaption{display:none}.layout-world-tile .sw-new-links{max-width:none}.layout-world-tile .sw-new-secret{margin-top:0;margin-bottom:13px}}
/* Ambient worlds intentionally remain alive under the OS reduced-motion setting. */
.sw-no-motion .sw-tile-scene *{animation-play-state:paused!important}

/* Every world is alive. These rules are intentionally independent of OS motion preferences
   (product decision, see docs/renderer-v2.md): with reduced motion ON the same motions keep
   playing with a gentler amplitude and tempo. Only transform and opacity are animated. */

/* --- Legacy v1 classes. Kept so scenes not yet moved to the motion kit stay alive. --------- */
.scene-art[data-world-motion="alive"] :is(.float-slow,.float-slower,.tile-float,.sw-tile-float,.sw-tile-bob){animation:sw-alive-float 5.4s ease-in-out var(--sw-motion-delay,-1.2s) infinite!important;transform-box:fill-box;transform-origin:center}
.scene-art[data-world-motion="alive"] .float-slower{animation-duration:7.6s!important}
.scene-art[data-world-motion="alive"] :is(.twinkle,.tile-glimmer,.sw-live-sparkle){animation:sw-alive-sparkle 3.7s ease-in-out var(--sw-motion-delay,-1.3s) infinite!important;transform-box:fill-box;transform-origin:center}
.scene-art[data-world-motion="alive"] :is(.smoke,.tile-steam,.sw-tile-steam,.sw-live-steam){animation:sw-alive-steam 4.1s ease-out var(--sw-motion-delay,-1.6s) infinite!important;transform-box:fill-box;transform-origin:center bottom}
.scene-art[data-world-motion="alive"] :is(.sway,.sw-live-plant,.sw-live-tree){animation:sw-alive-sway 4.9s ease-in-out var(--sw-motion-delay,-1.1s) infinite!important;transform-box:fill-box;transform-origin:center bottom}
.scene-art[data-world-motion="alive"] :is(.resident,[data-part="resident"],.tile-resident){animation:sw-alive-resident 3.8s ease-in-out var(--sw-motion-delay,-.7s) infinite!important;transform-box:fill-box;transform-origin:center bottom}
.scene-art[data-world-motion="alive"] :is(.blink,.sw-tile-blink){animation:sw-alive-blink 4.6s ease-in-out var(--sw-motion-delay,-1.7s) infinite!important;transform-box:fill-box;transform-origin:center}
.scene-art[data-world-motion="alive"] :is(.sw-live-window,.sw-tile-glow){animation:sw-alive-glow 3.2s ease-in-out var(--sw-motion-delay,-1.3s) infinite!important}
.scene-art[data-world-motion="alive"] .sw-live-flame{animation:sw-alive-flame 1.45s ease-in-out var(--sw-motion-delay,-.4s) infinite!important;transform-box:fill-box;transform-origin:center bottom}
.scene-art[data-world-motion="alive"] .sw-tile-airship{animation:sw-alive-airship 6.8s ease-in-out var(--sw-motion-delay,-2s) infinite!important;transform-box:fill-box;transform-origin:center}
.scene-art[data-world-motion="alive"] .sw-live-turn{animation:sw-alive-turn 7s ease-in-out var(--sw-motion-delay,-1.9s) infinite!important;transform-box:fill-box;transform-origin:center}
.scene-art[data-world-motion="alive"] .sw-live-reel{animation:sw-alive-reel 22s linear var(--sw-motion-delay,-4s) infinite!important;transform-box:fill-box;transform-origin:center}
.scene-art[data-world-motion="alive"] .sw-live-telescope{animation:sw-alive-telescope 8s ease-in-out var(--sw-motion-delay,-2.2s) infinite!important;transform-box:fill-box;transform-origin:28% 95%}
.scene-art[data-world-motion="alive"] .sw-live-water{animation:sw-alive-water 3.9s ease-in-out var(--sw-motion-delay,-1.4s) infinite!important;transform-box:fill-box;transform-origin:center}

@keyframes sw-alive-float{0%,100%{translate:0 1px}50%{translate:0 -8px}}
@keyframes sw-alive-sparkle{0%,100%{opacity:.25}50%{opacity:1}}
@keyframes sw-alive-steam{0%{translate:0 5px;opacity:.12}25%{opacity:.65}80%{opacity:.28}100%{translate:4px -17px;opacity:0}}
@keyframes sw-alive-sway{0%,100%{rotate:-1.8deg}50%{rotate:2.2deg}}
@keyframes sw-alive-resident{0%,100%{translate:0 1px;rotate:-1.2deg}50%{translate:0 -3.5px;rotate:1.2deg}}
@keyframes sw-alive-blink{0%,42%,47%,100%{scale:1 1}44%,45%{scale:1 .12}}
@keyframes sw-alive-glow{0%,100%{opacity:.62}50%{opacity:1}}
@keyframes sw-alive-flame{0%,100%{scale:1 .91;rotate:-2deg;opacity:.8}50%{scale:.94 1.05;rotate:2deg;opacity:1}}
@keyframes sw-alive-airship{0%,100%{translate:-3px 1px;rotate:-.6deg}50%{translate:3px -11px;rotate:.6deg}}
@keyframes sw-alive-turn{0%,100%{rotate:-4deg}50%{rotate:5deg}}
@keyframes sw-alive-reel{to{rotate:360deg}}
@keyframes sw-alive-telescope{0%,100%{rotate:-3deg}50%{rotate:3.5deg}}
@keyframes sw-alive-water{0%,100%{translate:-4px 0;scale:.94 1;opacity:.4}50%{translate:5px 1px;scale:1.06 1;opacity:.95}}

/* --- Motion kit (renderer v2) ------------------------------------------------------------
   Markup comes from SW_TILE_KIT.motion (world-tile-kit.js). Tunables per element:
     --sw-m-dur    cycle length          --sw-m-amp    amplitude (deg or px, unitless)
     --sw-m-delay  phase offset          --sw-m-origin pivot for fill-box motions
   --sw-m-k scales every amplitude (1 normally, gentler under reduced motion).
   Pivoted kinds rotate about the local origin, which the helpers place on the real pivot. */
.scene-art{--sw-m-k:1;--sw-m-tempo:1}
.scene-art[data-world-motion="alive"] .sw-m{animation-duration:calc(var(--sw-m-dur,4s) * var(--sw-m-tempo))!important;animation-delay:var(--sw-m-delay,var(--sw-motion-delay,0s))!important;animation-iteration-count:infinite!important;animation-timing-function:ease-in-out;transform-box:fill-box;transform-origin:var(--sw-m-origin,50% 50%)}
.scene-art[data-world-motion="alive"] :is(.sw-m-rotate,.sw-m-spin,.sw-m-tick,.sw-m-orbit,.sw-m-sway,.sw-m-pendulum,.sw-m-wag,.sw-m-sweep){transform-box:view-box;transform-origin:0 0}
.scene-art[data-world-motion="alive"] .sw-m-rotate{--sw-m-dur:9s;animation-name:sw-m-rotate!important;animation-timing-function:linear}
.scene-art[data-world-motion="alive"] .sw-m-spin{--sw-m-dur:1.6s;animation-name:sw-m-rotate!important;animation-timing-function:linear}
.scene-art[data-world-motion="alive"] .sw-m-orbit{--sw-m-dur:24s;animation-name:sw-m-rotate!important;animation-timing-function:linear}
.scene-art[data-world-motion="alive"] .sw-m-tick{--sw-m-dur:60s;animation-name:sw-m-rotate!important;animation-timing-function:steps(60,end)}
.scene-art[data-world-motion="alive"] .sw-m-ccw{animation-direction:reverse!important}
.scene-art[data-world-motion="alive"] .sw-m-sway{--sw-m-dur:4.8s;animation-name:sw-m-sway!important}
.scene-art[data-world-motion="alive"] .sw-m-pendulum{--sw-m-dur:3.2s;animation-name:sw-m-pendulum!important}
.scene-art[data-world-motion="alive"] .sw-m-wag{--sw-m-dur:1.8s;animation-name:sw-m-wag!important}
.scene-art[data-world-motion="alive"] .sw-m-sweep{--sw-m-dur:6s;animation-name:sw-m-sweep!important;animation-timing-function:linear}
.scene-art[data-world-motion="alive"] .sw-m-steam{--sw-m-dur:3.2s;--sw-m-origin:50% 100%;animation-name:sw-m-steam!important;animation-timing-function:ease-out}
.scene-art[data-world-motion="alive"] .sw-m-smoke{--sw-m-dur:5.5s;animation-name:sw-m-smoke!important;animation-timing-function:ease-out}
.scene-art[data-world-motion="alive"] .sw-m-flicker{--sw-m-dur:1.3s;--sw-m-origin:50% 100%;animation-name:sw-m-flicker!important}
.scene-art[data-world-motion="alive"] .sw-m-glow{--sw-m-dur:3.4s;animation-name:sw-m-glow!important}
.scene-art[data-world-motion="alive"] .sw-m-neon{--sw-m-dur:5s;animation-name:sw-m-neon!important;animation-timing-function:linear}
.scene-art[data-world-motion="alive"] .sw-m-twinkle{--sw-m-dur:2.8s;animation-name:sw-m-twinkle!important}
.scene-art[data-world-motion="alive"] .sw-m-blink{--sw-m-dur:4.6s;animation-name:sw-alive-blink!important}
.scene-art[data-world-motion="alive"] .sw-m-flutter{--sw-m-dur:.42s;animation-name:sw-m-flutter!important}
.scene-art[data-world-motion="alive"] .sw-m-wander{--sw-m-dur:7s;animation-name:sw-m-wander!important}
.scene-art[data-world-motion="alive"] .sw-m-drift{--sw-m-dur:14s;animation-name:sw-m-drift!important}
.scene-art[data-world-motion="alive"] .sw-m-float{--sw-m-dur:4.4s;--sw-m-origin:50% 100%;animation-name:sw-m-float!important}
.scene-art[data-world-motion="alive"] .sw-m-ripple{--sw-m-dur:3.6s;animation-name:sw-m-ripple!important;animation-timing-function:ease-out}
.scene-art[data-world-motion="alive"] .sw-m-shimmer{--sw-m-dur:3s;animation-name:sw-m-shimmer!important}
.scene-art[data-world-motion="alive"] .sw-m-jet{--sw-m-dur:1.6s;animation-name:sw-m-jet!important}
.scene-art[data-world-motion="alive"] .sw-m-drip{--sw-m-dur:2.4s;animation-name:sw-m-drip!important;animation-timing-function:ease-in}
.scene-art[data-world-motion="alive"] .sw-m-pour{--sw-m-dur:1.2s;animation-name:sw-m-pour!important}
.scene-art[data-world-motion="alive"] .sw-m-bounce{--sw-m-dur:1.4s;animation-name:sw-m-bounce!important}
.scene-art[data-world-motion="alive"] .sw-m-breathe{--sw-m-dur:3.6s;animation-name:sw-m-breathe!important}

@keyframes sw-m-rotate{to{rotate:360deg}}
@keyframes sw-m-sway{0%,100%{rotate:calc(var(--sw-m-amp,2.5) * var(--sw-m-k) * -1deg)}50%{rotate:calc(var(--sw-m-amp,2.5) * var(--sw-m-k) * 1deg)}}
@keyframes sw-m-pendulum{0%,100%{rotate:calc(var(--sw-m-amp,7) * var(--sw-m-k) * -1deg)}50%{rotate:calc(var(--sw-m-amp,7) * var(--sw-m-k) * 1deg)}}
@keyframes sw-m-wag{0%,100%{rotate:calc(var(--sw-m-amp,10) * var(--sw-m-k) * -1deg)}50%{rotate:calc(var(--sw-m-amp,10) * var(--sw-m-k) * 1deg)}}
@keyframes sw-m-sweep{0%{scale:1 1;opacity:.85}25%{scale:.08 1;opacity:.25}50%{scale:-1 1;opacity:.12}75%{scale:-.08 1;opacity:.25}100%{scale:1 1;opacity:.85}}
@keyframes sw-m-steam{0%{translate:0 4px;scale:.8;opacity:0}20%{opacity:.75}70%{opacity:.35}100%{translate:calc(var(--sw-m-amp,4) * var(--sw-m-k) * 1px) calc(var(--sw-m-amp,4) * var(--sw-m-k) * -5px);scale:1.25;opacity:0}}
@keyframes sw-m-smoke{0%{translate:0 0;scale:.6;opacity:0}15%{opacity:.8}100%{translate:calc(var(--sw-m-amp,10) * var(--sw-m-k) * 1px) calc(var(--sw-m-amp,10) * var(--sw-m-k) * -4.5px);scale:1.7;opacity:0}}
@keyframes sw-m-flicker{0%,100%{scale:1 1;rotate:0deg;opacity:.9}18%{scale:.94 1.07;rotate:calc(var(--sw-m-k) * 2.5deg);opacity:1}37%{scale:1.04 .93;rotate:calc(var(--sw-m-k) * -2deg);opacity:.82}58%{scale:.97 1.04;rotate:calc(var(--sw-m-k) * 1.5deg);opacity:1}79%{scale:1.03 .95;rotate:calc(var(--sw-m-k) * -1.5deg);opacity:.88}}
@keyframes sw-m-glow{0%,100%{opacity:.6}50%{opacity:1}}
@keyframes sw-m-neon{0%,62%,66%,70%,100%{opacity:1}64%,68%{opacity:.35}}
@keyframes sw-m-twinkle{0%,100%{opacity:.25;scale:.8}50%{opacity:1;scale:1.12}}
@keyframes sw-m-flutter{0%,100%{scale:1 1}50%{scale:1 .3}}
@keyframes sw-m-wander{0%,100%{translate:0 0}25%{translate:calc(var(--sw-m-amp,10) * var(--sw-m-k) * 1px) calc(var(--sw-m-amp,10) * var(--sw-m-k) * -.6px)}50%{translate:calc(var(--sw-m-amp,10) * var(--sw-m-k) * .2px) calc(var(--sw-m-amp,10) * var(--sw-m-k) * -1.1px)}75%{translate:calc(var(--sw-m-amp,10) * var(--sw-m-k) * -.9px) calc(var(--sw-m-amp,10) * var(--sw-m-k) * -.4px)}}
@keyframes sw-m-drift{0%,100%{translate:calc(var(--sw-m-amp,14) * var(--sw-m-k) * -1px) 0}50%{translate:calc(var(--sw-m-amp,14) * var(--sw-m-k) * 1px) 0}}
@keyframes sw-m-float{0%,100%{rotate:calc(var(--sw-m-amp,2.5) * var(--sw-m-k) * -1deg);translate:0 0}50%{rotate:calc(var(--sw-m-amp,2.5) * var(--sw-m-k) * 1deg);translate:0 calc(var(--sw-m-k) * 1.5px)}}
@keyframes sw-m-ripple{0%{scale:.35;opacity:0}15%{opacity:.9}100%{scale:calc(1 + .3 * var(--sw-m-k));opacity:0}}
@keyframes sw-m-shimmer{0%,100%{translate:calc(var(--sw-m-amp,4) * var(--sw-m-k) * -1px) 0;opacity:.45}50%{translate:calc(var(--sw-m-amp,4) * var(--sw-m-k) * 1px) 0;opacity:.95}}
@keyframes sw-m-jet{0%,100%{scale:1 calc(1 - .14 * var(--sw-m-k))}50%{scale:1 calc(1 + .08 * var(--sw-m-k))}}
@keyframes sw-m-drip{0%{translate:0 0;opacity:0}10%{opacity:1}85%{opacity:1}100%{translate:0 calc(var(--sw-m-amp,22) * 1px);opacity:0}}
@keyframes sw-m-pour{0%,100%{scale:1 1;opacity:.9}50%{scale:.8 1.06;opacity:1}}
@keyframes sw-m-bounce{0%,100%{translate:0 0;scale:1.06 .92}30%{scale:.96 1.05}50%{translate:0 calc(var(--sw-m-amp,10) * var(--sw-m-k) * -1px);scale:1 1}70%{scale:.98 1.03}}
@keyframes sw-m-breathe{0%,100%{scale:1 1}50%{scale:calc(1 + .015 * var(--sw-m-k)) calc(1 + .035 * var(--sw-m-k))}}

/* Residents (legacy markup) breathe in place in v2 instead of bobbing. */
.scene-art[data-world-motion="alive"] :is(.resident,[data-part="resident"],.tile-resident){animation-name:sw-m-breathe!important}

/* Reduced motion ON: same motions, gentler and slower. Never switched off (user rule). */
@media (prefers-reduced-motion: reduce){
  .scene-art.scene-art{--sw-m-k:.55;--sw-m-tempo:1.35}
}

/* A user's explicit pause remains authoritative; offscreen scenes save paint work.
   The doubled class keeps these above every motion rule (equal !important, higher specificity). */
.scene-art.scene-art[data-world-motion="alive"][data-motion-visible="false"] *{animation-play-state:paused!important}
.sw-no-motion .scene-art.scene-art[data-world-motion="alive"] *,
.tw-public.pub-still .scene-art.scene-art[data-world-motion="alive"] *,
.scene-art.scene-art[data-world-motion="paused"] *{animation-play-state:paused!important}
