.fo-visual{--fo-duration:20s;--fo-green:#36b77f}.fo-sequence{background:linear-gradient(var(--card),var(--brand-wash))}.fo-scene{padding:0 12px 24px}.fo-diagram{width:100%;height:auto;display:block;overflow:visible}.fo-cycle-scene{animation:fo-cycle-reset var(--fo-duration)linear infinite}.fo-node-shadow{fill:var(--foreground);opacity:.035}.fo-hardware-failed{animation:fo-node-failure var(--fo-duration)linear infinite}.fo-server-led{--fo-led-colour:var(--infra-accent-light);fill:var(--fo-led-colour)}.fo-server-led-green{--fo-led-colour:var(--fo-green);animation:1.6s ease-in-out infinite fo-led}.fo-hardware-failed .fo-server-led{animation:fo-failed-led var(--fo-duration)steps(1,end)infinite}.fo-server-slot{stroke:var(--infra-edge);stroke-width:2px;stroke-linecap:round}.fo-link-base{fill:none;stroke:var(--infra-edge);stroke-width:1.5px}.fo-heartbeat{fill:none;stroke:var(--infra-accent-light);stroke-width:2px;stroke-linecap:round;stroke-dasharray:16 84;stroke-dashoffset:100px;animation:1.8s linear infinite fo-heartbeat}.fo-heartbeat-back{animation-direction:reverse;animation-delay:-.9s}.fo-heartbeat-normal{animation:fo-normal-heartbeat var(--fo-duration)steps(1,end)infinite}.fo-heartbeat-checking{opacity:0;animation:fo-check-heartbeat var(--fo-duration)steps(1,end)infinite}.fo-heartbeat-checking .fo-heartbeat{stroke:var(--primary)}.fo-failure-marker{opacity:0;animation:fo-confirmed var(--fo-duration)steps(1,end)infinite}.fo-failure-marker circle{fill:var(--brand-blush);stroke:var(--infra-accent-light);stroke-width:1px}.fo-failure-marker path{fill:none;stroke:var(--primary);stroke-width:1.6px;stroke-linecap:round}.fo-vm-source{transform:translate(92px,145px)}.fo-vm-replacement{transform:translate(270px,106px)}.fo-vm-appearance{transform-box:fill-box;transform-origin:bottom}.fo-vm-source .fo-vm-appearance{animation:fo-vm-dispose var(--fo-duration)ease-in-out infinite}.fo-vm-replacement .fo-vm-appearance{opacity:0;animation:fo-vm-spawn var(--fo-duration)ease-out infinite;transform:scale(.7)}.fo-vm-2{transform:translate(270px,145px)}.fo-vm-3{transform:translate(448px,145px)}.fo-vm-object{filter:drop-shadow(0 5px 4px color-mix(in oklch,var(--foreground)5%,transparent))}.fo-vm-label{fill:var(--foreground);font:600 14px var(--font-onidel-body),sans-serif}.fo-vm-1 .fo-vm-label{fill:var(--primary)}.fo-vm-2 .fo-vm-label{animation:fo-label-room var(--fo-duration)ease-in-out infinite}.fo-chip{fill:none;stroke:var(--infra-accent-light);stroke-width:1.5px;stroke-linecap:round}.fo-chip-highlight{stroke:#fff}.fo-vm-slot{fill:none;stroke:var(--infra-edge);stroke-width:1.5px;stroke-linecap:round}.fo-node-labels{text-align:center;grid-template-columns:repeat(3,minmax(0,1fr));margin-block:22px 10px;display:grid}.fo-node-labels strong{font-size:12px;font-weight:600}.fo-node-status{color:var(--muted-foreground);margin-top:7px;font-size:10px;display:grid}.fo-node-status>span{grid-area:1/1;justify-content:center;align-items:center;gap:5px;display:flex}.fo-node-status i{background:var(--fo-green);border-radius:50%;flex-shrink:0;width:4px;height:4px}.fo-node-status .fo-node-missing i,.fo-node-status .fo-node-offline i{background:var(--primary)}.fo-node-online{animation:fo-normal-heartbeat var(--fo-duration)steps(1,end)infinite}.fo-node-missing{opacity:0;animation:fo-check-heartbeat var(--fo-duration)steps(1,end)infinite}.fo-node-offline{opacity:0;animation:fo-confirmed var(--fo-duration)steps(1,end)infinite}.fo-node-single{animation:fo-single-vps var(--fo-duration)steps(1,end)infinite}.fo-node-double{opacity:0;animation:fo-restored var(--fo-duration)steps(1,end)infinite}.fo-storage-link-base{fill:none;stroke:var(--infra-edge);stroke-width:1.4px;stroke-linecap:round}.fo-storage-flow{fill:none;stroke:var(--fo-green);stroke-opacity:.6;stroke-width:1.7px;stroke-linecap:round;stroke-dasharray:12 88;stroke-dashoffset:100px;animation:2.6s linear infinite fo-heartbeat}.fo-storage-source-activity{animation:fo-normal-heartbeat var(--fo-duration)steps(1,end)infinite}.fo-storage-cylinder{fill:var(--infra-side);stroke:var(--infra-edge);stroke-width:1px}.fo-storage-cap{fill:var(--card);stroke:var(--infra-edge);stroke-width:1px}.fo-storage-ring{fill:none;stroke:var(--infra-accent-light);stroke-width:1px}.fo-storage-led{fill:var(--fo-green);animation:1.6s ease-in-out infinite fo-led}.fo-storage-label{flex-direction:column;align-items:center;gap:7px;margin-top:-3px;display:flex}.fo-storage-label strong{align-items:center;gap:7px;font-size:12px;font-weight:600;display:flex}.fo-storage-label i{background:var(--fo-green);border-radius:50%;width:5px;height:5px}.fo-storage-label>span{color:var(--muted-foreground);font-size:10px}.fo-caption{border-top:1px solid var(--brand-soft-line);min-height:90px;margin:0 22px;padding:18px 0;display:grid}.fo-stage{opacity:0;animation:fo-stage var(--fo-duration)steps(1,end)infinite;grid-area:1/1;align-items:flex-start;gap:13px;display:flex}.fo-stage-number{background:var(--brand-blush);width:29px;height:29px;color:var(--primary);border-radius:10px;flex-shrink:0;place-items:center;font-size:10px;font-weight:600;display:grid}.fo-stage strong{font-size:13px;font-weight:600;line-height:1.5;display:block}.fo-stage p{color:var(--muted-foreground);margin-top:4px;font-size:11px;line-height:1.7}.fo-stage-0{animation-name:fo-stage-0}.fo-stage-1{animation-name:fo-stage-1}.fo-stage-2{animation-name:fo-stage-2}.fo-stage-3{animation-name:fo-stage-3}.fo-stage-4{animation-name:fo-stage-4}.fo-footer{background:var(--card);border-top:1px solid var(--brand-soft-line);align-items:center;gap:12px;padding:12px 22px;display:flex}.fo-step-track{gap:4px;display:flex}.fo-step{background:var(--infra-edge);width:15px;height:3px;animation:fo-step var(--fo-duration)steps(1,end)infinite;border-radius:3px}.fo-step-0{animation-name:fo-progress-0}.fo-step-1{animation-name:fo-progress-1}.fo-step-2{animation-name:fo-progress-2}.fo-step-3{animation-name:fo-progress-3}.fo-step-4{animation-name:fo-progress-4}.fo-demo-label{color:var(--muted-foreground);font-size:10px}@keyframes fo-heartbeat{to{stroke-dashoffset:0}}@keyframes fo-failed-led{0%,98%{fill:var(--fo-led-colour)}25%{fill:var(--infra-edge)}}@keyframes fo-led{50%{opacity:.35}}@keyframes fo-cycle-reset{0%,92%,to{opacity:1}96%,98%{opacity:0}}@keyframes fo-node-failure{0%,24%,98%,to{opacity:1}25%,97%{opacity:.35}}@keyframes fo-normal-heartbeat{0%,98%{opacity:1}25%{opacity:0}}@keyframes fo-check-heartbeat{0%,40%{opacity:0}25%{opacity:1}}@keyframes fo-confirmed{0%,98%{opacity:0}40%{opacity:1}}@keyframes fo-single-vps{0%,98%{opacity:1}67%{opacity:0}}@keyframes fo-restored{0%,98%{opacity:0}67%{opacity:1}}@keyframes fo-vm-dispose{0%,50%,98%,to{opacity:1;transform:scale(1)}56%,97.99%{opacity:0;transform:scale(.7)}}@keyframes fo-vm-spawn{0%,59%,98%,to{opacity:0;transform:scale(.7)}67%,97.99%{opacity:1;transform:scale(1)}}@keyframes fo-label-room{0%,50%,98%,to{transform:translate(0)}54%,97.99%{transform:translate(-64px,45px)}}@keyframes fo-stage-0{0%,98%{opacity:1}25%{opacity:0}}@keyframes fo-stage-1{0%,40%{opacity:0}25%{opacity:1}}@keyframes fo-stage-2{0%,50%{opacity:0}40%{opacity:1}}@keyframes fo-stage-3{0%,67%{opacity:0}50%{opacity:1}}@keyframes fo-stage-4{0%,98%{opacity:0}67%{opacity:1}}@keyframes fo-progress-0{0%,98%{background:var(--primary)}25%{background:var(--infra-edge)}}@keyframes fo-progress-1{0%,40%{background:var(--infra-edge)}25%{background:var(--primary)}}@keyframes fo-progress-2{0%,50%{background:var(--infra-edge)}40%{background:var(--primary)}}@keyframes fo-progress-3{0%,67%{background:var(--infra-edge)}50%{background:var(--primary)}}@keyframes fo-progress-4{0%,98%{background:var(--infra-edge)}67%{background:var(--primary)}}@media (max-width:600px){.fo-scene{padding-inline:4px;padding-bottom:19px}.fo-caption{min-height:100px;margin-inline:16px}.fo-node-labels strong{font-size:11px}.fo-node-status{font-size:9px}.fo-storage-label strong{font-size:11px}.fo-storage-label>span{font-size:9px}.fo-footer{gap:9px;padding-inline:16px}.fo-step{width:12px}.fo-demo-label{font-size:9px}}@media (prefers-reduced-motion:reduce){.fo-visual *{transition:none!important;animation:none!important}.fo-hardware-failed{opacity:.35}.fo-hardware-failed .fo-server-led{fill:var(--infra-edge)}.fo-vm-source .fo-vm-appearance{opacity:0}.fo-vm-replacement .fo-vm-appearance{opacity:1;transform:scale(1)}.fo-vm-2 .fo-vm-label{transform:translate(-64px,45px)}.fo-heartbeat,.fo-node-online,.fo-node-single,.fo-stage{opacity:0}.fo-storage-flow{display:none}.fo-failure-marker,.fo-node-offline,.fo-node-double,.fo-stage-4{opacity:1}.fo-step-4{background:var(--primary)}.fo-demo-label{margin-left:auto}}
