| 1 | /* Ported from DeepSeek Harness c291e7961a (MIT). */ |
| 2 | /* Ongoing blue has no alias token (state-business-primary is the 500 step, |
| 3 | * not this 450) — component-level var pinned to the static scale instead. */ |
| 4 | .dsh-StateDot-dot, |
| 5 | .dsh-StateDot-matrix { |
| 6 | --dsh-state-ongoing: var(--dsw-static-deepseek-450); |
| 7 | } |
| 8 | |
| 9 | /* Solid states: same-color halo via a 0.10-opacity outer layer (::before) |
| 10 | * with a 6/10-scale solid core. Layer color rides currentColor set per state. */ |
| 11 | .dsh-StateDot-dot { |
| 12 | position: relative; |
| 13 | display: inline-block; |
| 14 | flex: none; |
| 15 | } |
| 16 | |
| 17 | .dsh-StateDot-dot::before { |
| 18 | content: ''; |
| 19 | position: absolute; |
| 20 | inset: 0; |
| 21 | border-radius: 50%; |
| 22 | corner-shape: round; |
| 23 | background: currentColor; |
| 24 | opacity: 0.1; |
| 25 | } |
| 26 | |
| 27 | .dsh-StateDot-dot::after { |
| 28 | content: ''; |
| 29 | position: absolute; |
| 30 | inset: 20%; |
| 31 | border-radius: 50%; |
| 32 | corner-shape: round; |
| 33 | background: currentColor; |
| 34 | } |
| 35 | |
| 36 | .dsh-StateDot-dot[data-state='done'] { |
| 37 | color: var(--dsw-alias-state-success-primary); |
| 38 | } |
| 39 | |
| 40 | .dsh-StateDot-dot[data-state='warning'] { |
| 41 | color: var(--dsw-alias-state-warn-primary); |
| 42 | } |
| 43 | |
| 44 | .dsh-StateDot-dot[data-state='error'] { |
| 45 | color: var(--dsw-alias-state-error-primary); |
| 46 | } |
| 47 | |
| 48 | /* Idle is the absence of activity, not a fourth outcome: it stays on the |
| 49 | * tertiary label color so it recedes beside the three outcome colors. */ |
| 50 | .dsh-StateDot-dot[data-state='idle'] { |
| 51 | color: var(--dsw-alias-label-tertiary); |
| 52 | } |
| 53 | |
| 54 | /* Pixel chase: each outer cell holds a discrete brightness step (flat keyframe |
| 55 | * holds, no tweening — the retro feel), peaking when the chase hits it and |
| 56 | * decaying over the next three cells. Phase offsets come from per-rect |
| 57 | * animation-delay (index * -125ms) set inline by the component. */ |
| 58 | .dsh-StateDot-matrix { |
| 59 | flex: none; |
| 60 | color: var(--dsh-state-ongoing); |
| 61 | } |
| 62 | |
| 63 | .dsh-StateDot-cell { |
| 64 | fill: currentColor; |
| 65 | opacity: 0.15; |
| 66 | animation: dsh-state-dot-chase 1s infinite; |
| 67 | } |
| 68 | |
| 69 | @keyframes dsh-state-dot-chase { |
| 70 | 0%, 12.4% { opacity: 1; } |
| 71 | 12.5%, 24.9% { opacity: 0.6; } |
| 72 | 25%, 37.4% { opacity: 0.35; } |
| 73 | 37.5%, 100% { opacity: 0.15; } |
| 74 | } |
| 75 |