/* Ongoing blue has no alias token (state-business-primary is the 500 step, * not this 450) — component-level var pinned to the static scale instead. */ .dot, .matrix { --dsh-state-ongoing: var(--dsw-static-deepseek-450); } /* Solid states: same-color halo via a 0.10-opacity outer layer (::before) * with a 6/10-scale solid core. Layer color rides currentColor set per state. */ .dot { position: relative; display: inline-block; flex: none; } .dot::before { content: ''; position: absolute; inset: 0; border-radius: 50%; background: currentColor; opacity: 0.1; } .dot::after { content: ''; position: absolute; inset: 20%; border-radius: 50%; background: currentColor; } .dot[data-state='done'] { color: var(--dsw-alias-state-success-primary); } .dot[data-state='warning'] { color: var(--dsw-alias-state-warn-primary); } .dot[data-state='error'] { color: var(--dsw-alias-state-error-primary); } /* Pixel chase: each outer cell holds a discrete brightness step (flat keyframe * holds, no tweening — the retro feel), peaking when the chase hits it and * decaying over the next three cells. Phase offsets come from per-rect * animation-delay (index * -125ms) set inline by the component. */ .matrix { flex: none; color: var(--dsh-state-ongoing); } .cell { fill: currentColor; opacity: 0.15; animation: dsh-state-dot-chase 1s infinite; } @keyframes dsh-state-dot-chase { 0%, 12.4% { opacity: 1; } 12.5%, 24.9% { opacity: 0.6; } 25%, 37.4% { opacity: 0.35; } 37.5%, 100% { opacity: 0.15; } }