/* machine viz animations (from landing-reviews) */
.viz{display:block;width:100%;height:auto;margin:2px 0 14px;border-radius:14px;background:var(--ink)}
.viz *{transform-box:fill-box;transform-origin:center;animation-play-state:paused!important}
.viz.run *{animation-play-state:running!important}
.viz text{font-weight:500;letter-spacing:.02em}
.vizbig{padding:0 clamp(18px,4vw,40px)}
.vizbig .viz{margin:0}
.vizbig figcaption{font-size:13px;margin-top:6px}
@keyframes v-flow{to{stroke-dashoffset:-40}}
.v-flow{stroke-dasharray:10 6;animation:v-flow 1.1s linear infinite}
@keyframes v-pulse{50%{transform:scale(1.7);opacity:.45}}
.v-pulse{animation:v-pulse 1.4s ease-in-out infinite}
@keyframes v-flick{0%,100%{opacity:.15}40%{opacity:1}}
.v-flick{animation:v-flick 1.6s ease-in-out infinite}
@keyframes v-blink{0%,100%{opacity:.1}12%,30%{opacity:1}}
.v-blink{animation:v-blink 1.2s steps(1,end) infinite}
@keyframes v-slide{to{transform:translateX(-26px)}}
.v-slide{animation:v-slide .35s linear infinite;transform-box:view-box}
@keyframes v-cyc{0%,30%{opacity:1}33%,100%{opacity:.25}}
.v-cyc{opacity:.25;animation:v-cyc 3s infinite}
@keyframes v-cyc4{0%,22%{opacity:1}25%,100%{opacity:.25}}
.v-cyc4{opacity:.25;animation:v-cyc4 4s infinite}
@keyframes v-pop{0%,100%{opacity:0;transform:scale(.3)}20%,70%{opacity:1;transform:scale(1)}}
.v-pop{opacity:0;animation:v-pop 2.6s var(--e) infinite}
@keyframes v-tw{0%,100%{opacity:.18;transform:scale(.7)}50%{opacity:1;transform:scale(1.25)}}
.v-tw{animation:v-tw 1.8s ease-in-out infinite}
@keyframes v-ring{0%{transform:scale(.2);opacity:1}100%{transform:scale(2.4);opacity:0}}
.v-ring{animation:v-ring 2.4s ease-out infinite}
@keyframes v-warm{0%,100%{opacity:.05}50%{opacity:.32}}
.v-warm{animation:v-warm 2.6s ease-in-out infinite}
@keyframes v-fill{0%{transform:scaleX(.1)}60%,100%{transform:scaleX(1)}}
.v-fill{transform-origin:left center;animation:v-fill 2.6s var(--e) infinite}
@keyframes v-suck{0%,100%{transform:translateY(6px) scaleY(.4)}50%{transform:none}}
.v-suck{animation:v-suck 1.8s ease-in-out infinite}
@keyframes v-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
.v-shake{animation:v-shake .28s linear infinite}
@keyframes v-led{0%,100%{opacity:.25}35%,60%{opacity:1}}
.v-led{animation:v-led 2s ease-in-out infinite}
@keyframes v-prog{0%{transform:scaleX(0)}85%,100%{transform:scaleX(1)}}
.v-prog{transform-origin:left center;animation:v-prog 3s var(--e) infinite}
@keyframes v-stp{0%,8%{opacity:.25;transform:scale(.7)}14%,100%{opacity:1;transform:none}}
.v-stp{opacity:.25;animation:v-stp 3s infinite}
@keyframes v-maskon{0%,15%{transform:translateY(-110%);opacity:0}45%,85%{transform:none;opacity:.55}100%{opacity:0}}
.v-maskon{animation:v-maskon 4s var(--e) infinite}
@keyframes v-fall{0%{transform:translateY(0);opacity:1}60%{transform:translateY(44px);opacity:1}61%,100%{transform:translateY(44px);opacity:0}}
.v-fall{animation:v-fall 1.6s ease-in infinite}
@keyframes v-ripple{0%,55%{transform:scale(.2);opacity:0}60%{opacity:1}100%{transform:scale(2.4);opacity:0}}
.v-ripple{animation:v-ripple 1.6s ease-out infinite}
@keyframes v-lvl{0%{transform:scaleY(1)}100%{transform:scaleY(.35)}}
.v-lvl{transform-origin:center bottom;animation:v-lvl 6s linear infinite alternate}
@keyframes v-fallline{0%{transform:translateY(0);opacity:0}10%{opacity:1}100%{transform:translateY(60px);opacity:0}}
.v-fallline{animation:v-fallline 1.5s ease-in infinite}
@keyframes v-travel{0%{transform:translateX(0);opacity:1}60%{transform:translateX(160px);opacity:1}75%,100%{transform:translateX(166px);opacity:0}}
.v-travel{animation:v-travel 2.1s ease-in infinite}
@keyframes v-breath{50%{transform:scale(1.5);opacity:.6}}
.v-breath{animation:v-breath 2.4s ease-in-out infinite}
