@@ -45,27 +45,27 @@ const ACTION_BUTTON_STYLES = [
4545] . join ( ' ' )
4646
4747/**
48- * The running hatch: narrow uprights leaning right, painted ONCE across the row .
48+ * The running fill: one solid bar whose leading edge leans right .
4949 *
50- * Per-slot backgrounds cannot do this. Each button starts its own gradient at
51- * its own origin, so the phase resets at every slot — and the end slots are 40px
52- * against the others' 24px, so the resets are not even uniform. The row came out
53- * as bars bunched in some places and spread in others. One element spanning the
54- * row has one gradient, and therefore one phase.
50+ * Painted ONCE across the row, not per slot. Each button would start its own
51+ * gradient at its own origin, so the phase reset at every slot — and the end
52+ * slots are 40px against the others' 24px, so the resets were not even uniform.
53+ * One element spanning the row has one paint and therefore one edge.
5554 *
56- * Stops are measured along the 105° axis, not horizontally, so both carry a
57- * `sin(105°)` factor: an 8px bar on an 11px period reads as roughly 8.3px of
58- * fill to 3.1px of gap. Widen the first stop toward the second to close the
59- * gap further; equal stops would fill solid.
55+ * The slant lives on the growing edge rather than in a repeating hatch: with the
56+ * gaps closed to nothing, a repeat has no edges left to show. 4px of run across
57+ * the 16px height is the same 15° lean the bars carried.
6058 *
6159 * `--surface-2` is the same fill the slots used; only where it is painted moved.
6260 */
63- const RUNNING_HATCH =
64- 'bg-[repeating-linear-gradient(105deg,var(--surface-2)_0_8px,transparent_8px_11px)]'
61+ const RUNNING_FILL = [
62+ 'bg-[var(--surface-2)]' ,
63+ '[clip-path:polygon(0_0,100%_0,calc(100%_-_4px)_100%,0_100%)]' ,
64+ ] . join ( ' ' )
6565
66- /** Left edge of the hatch : clears the run/stop button, which stays live mid-run. */
67- const RUNNING_HATCH_INSET_SWELL = 'left-[42px]'
68- const RUNNING_HATCH_INSET_PLAIN = 'left-[26px]'
66+ /** Left edge of the fill : clears the run/stop button, which stays live mid-run. */
67+ const RUNNING_FILL_INSET_SWELL = 'left-[42px]'
68+ const RUNNING_FILL_INSET_PLAIN = 'left-[26px]'
6969
7070const ICON_SIZE = 'size-[14px]'
7171
@@ -378,23 +378,23 @@ export const ActionBar = memo(
378378 ) }
379379 >
380380 { /*
381- Painted behind the row rather than into each slot, so the hatch has a
382- single gradient and a single phase . The run/stop button keeps an
383- opaque fill while running, which masks the hatch growing underneath
381+ Painted behind the row rather than into each slot, so the fill is one
382+ continuous bar with one leading edge . The run/stop button keeps an
383+ opaque fill while running, which masks the part growing underneath
384384 it; every other slot is transparent mid-sweep, so it shows through.
385385 */ }
386386 { isSweeping && (
387387 < span
388388 aria-hidden = 'true'
389389 className = { cn (
390390 'pointer-events-none absolute inset-y-[4px] right-0 overflow-hidden' ,
391- isSwell ? RUNNING_HATCH_INSET_SWELL : RUNNING_HATCH_INSET_PLAIN
391+ isSwell ? RUNNING_FILL_INSET_SWELL : RUNNING_FILL_INSET_PLAIN
392392 ) }
393393 >
394394 < span
395395 className = { cn (
396396 'block h-full transition-[width] duration-150 ease-linear motion-reduce:transition-none' ,
397- RUNNING_HATCH
397+ RUNNING_FILL
398398 ) }
399399 style = { {
400400 width : `${ ( runningSweepFilledCount / runningSweepActionIds . length ) * 100 } %` ,
0 commit comments