/* HyperForge · Weby, el motor (weby-motor.js) como archivo. La CSP de la app (style-src 'self') no deja que el motor inyecte su <style>:
   este <link> lleva id="weby-css" y así el motor ya no lo intenta. Las reglas son las del motor del handoff v11 (§19), tal cual; solo
   los colores salen de los tokens de la app. Con prefers-reduced-motion no hay movimiento. */
.weby { --ok: var(--hf-verdin); --on-ok: var(--hf-sobre-verdin); --wow: var(--hf-brasa); --bad: var(--hf-alerta); --fg: var(--hf-texto); --mut: var(--hf-tenue); }
.hf-mascota { width: 120px; height: 120px; overflow: visible; }
.weby .mbody{fill:var(--ok,#4FD1B5);transition:fill .45s}
.weby[data-sh="cross"] .mbody{fill:var(--bad,#E63946)}
.weby[data-sh="arrow"] .mbody,.weby[data-sh="star"] .mbody,.weby[data-sh="bang"] .mbody,.weby[data-sh="celebrate"] .mbody{fill:var(--wow,#FF7A2F)}
.weby[data-sh="sleep"] .mbody{opacity:.85}
.weby .ac{fill:var(--wow,#FF7A2F);transition:fill .4s}.weby[data-sh="arrow"] .ac,.weby[data-sh="star"] .ac,.weby[data-sh="celebrate"] .ac{fill:#F3EBDD}
.weby .ah{fill:#F3EBDD;opacity:.85}.weby[data-sh="arrow"] .ah,.weby[data-sh="star"] .ah,.weby[data-sh="celebrate"] .ah{fill:var(--wow,#FF7A2F)}
.weby .mhalo{fill:none;stroke:var(--ok,#4FD1B5);stroke-width:2;opacity:0;transform-box:fill-box;transform-origin:center}
.weby[data-sh="blob"] .mhalo{animation:wbhl 3.4s ease-out infinite}.weby[data-sh="listen"] .mhalo{animation:wbhl 1s ease-out infinite}   /* v11: al escuchar, el halo late más rápido */@keyframes wbhl{from{transform:scale(.85);opacity:.45}to{transform:scale(1.4);opacity:0}}
.weby .ringd{fill:none;stroke:var(--wow,#FF7A2F);stroke-width:3;stroke-dasharray:6 9;opacity:0;transition:opacity .4s;transform-origin:100px 104px}
.weby[data-sh="think"] .ringd{opacity:.9;animation:wbrs 3.2s linear infinite}
.weby[data-sh="config"] .ringd{opacity:.9;stroke-dasharray:22 10;animation:wbrs 4.8s steps(6,end) infinite}@keyframes wbrs{to{transform:rotate(360deg)}}
.weby .rbg{fill:none;stroke:var(--wow,#FF7A2F);stroke-width:4;opacity:0;transform-box:fill-box;transform-origin:center}
.weby[data-sh="bang"] .rbg{animation:wbrb 1.1s ease-out infinite}@keyframes wbrb{from{transform:scale(.7);opacity:.8}to{transform:scale(1.7);opacity:0}}
.weby .fct{fill:none;stroke:var(--on-ok,#06140F);stroke-width:3;stroke-linejoin:round;stroke-linecap:round;opacity:0;transition:opacity .3s}
.weby[data-sh="gem"] .fct{opacity:.55}.weby .cub{fill:none;stroke:var(--on-ok,#06140F);stroke-width:3;stroke-linejoin:round;opacity:0;transition:opacity .3s}.weby[data-sh="config"] .cub{opacity:.5}
.weby .zz{font:700 20px sans-serif;fill:var(--mut,#A89F92);opacity:0}.weby[data-sh="sleep"] .zz{animation:wbzz 3s ease-in-out infinite}
.weby[data-sh="sleep"] .zz:nth-of-type(2){animation-delay:1s}.weby[data-sh="sleep"] .zz:nth-of-type(3){animation-delay:2s}
@keyframes wbzz{0%{transform:translate(0,12px);opacity:0}30%{opacity:1}100%{transform:translate(10px,-18px);opacity:0}}
.weby .wave{fill:none;stroke:var(--ok,#4FD1B5);stroke-width:2.5}
@media (prefers-reduced-motion:reduce){.weby *{animation:none!important;transition:none!important}}
