fjord-uiv0.1.0 / generation 1, "sounding"

Loading

STATE-LOADING, and the system's second sanctioned motion (MOT-5). The entry settle is the first, and the list is closed. The cadence is TYPE-NATIVE (three dot cells on the monospace grid), DISCRETE (the count steps; only the ink cross-fades), TOKEN-TIMED (one beat per --fj-dur-4, six beats to a cycle) and BOUNDED BY THE WORK (it runs only while aria-busy is true). It breathes rather than resets: the dots build 1, 2, 3 and peel back 3, 2, 1, so nothing clears all at once and the cycle joins itself. Still no spinner, no shimmer, no skeleton and no sweep, because a sweep promises progress that an indeterminate wait cannot deliver.

Light

the control

button(loading: true) emits aria-busy, wraps the label in the busy phrase, and makes the control inert, because an in-flight action must not be started twice. The slot is not a prop: a state nobody remembers to design is not a state to make optional. The outline and quiet variants take a --fj-mark boundary while busy; the key variant keeps its --fj-primary one, because that border encodes which action the page expects and that is still true while the action is in flight.

the region

The same phrase, from the same binding, on the surface where a reader spends the long waits. The rail still renders, so the page does not change shape when the rows arrive, and the eyebrow's count slot reads a word.

Commitsloading

  • Loading commits

against rest, and against disabled

The comparison the old treatment failed. Busy holds --fj-ink-2, the resting label colour, and carries a filled slot and a --fj-mark boundary; disabled is --fj-faint on --fj-rule with no slot; rest is neither. Three states, three readings, no pointer required. Stepping the busy label DOWN a rung is what used to make it read as the disabled one, which is why it now steps up.

reduced motion

Forced on with a gallery class, so this is what a reduced-motion reader sees whatever your own OS is set to. It is not a frozen frame: the motion is ADDITIVE, so what remains without it is the designed affordance. aria-busy, the phrase promoted to --fj-ink-2, the slot filled rather than empty, and the --fj-mark boundary. MOT-4 is satisfied twice over, because tokens.css has already zeroed --fj-dur-4 as well.

  • Loading commits

unstyled

The escape hatch, on the state it matters most for: no fj-* classes, and the element tree, the aria wiring and the slot's structure all still there. For the case where the system is wrong about the look and right about the behaviour.

Dark

the control

button(loading: true) emits aria-busy, wraps the label in the busy phrase, and makes the control inert, because an in-flight action must not be started twice. The slot is not a prop: a state nobody remembers to design is not a state to make optional. The outline and quiet variants take a --fj-mark boundary while busy; the key variant keeps its --fj-primary one, because that border encodes which action the page expects and that is still true while the action is in flight.

the region

The same phrase, from the same binding, on the surface where a reader spends the long waits. The rail still renders, so the page does not change shape when the rows arrive, and the eyebrow's count slot reads a word.

Commitsloading

  • Loading commits

against rest, and against disabled

The comparison the old treatment failed. Busy holds --fj-ink-2, the resting label colour, and carries a filled slot and a --fj-mark boundary; disabled is --fj-faint on --fj-rule with no slot; rest is neither. Three states, three readings, no pointer required. Stepping the busy label DOWN a rung is what used to make it read as the disabled one, which is why it now steps up.

reduced motion

Forced on with a gallery class, so this is what a reduced-motion reader sees whatever your own OS is set to. It is not a frozen frame: the motion is ADDITIVE, so what remains without it is the designed affordance. aria-busy, the phrase promoted to --fj-ink-2, the slot filled rather than empty, and the --fj-mark boundary. MOT-4 is satisfied twice over, because tokens.css has already zeroed --fj-dur-4 as well.

  • Loading commits

unstyled

The escape hatch, on the state it matters most for: no fj-* classes, and the element tree, the aria wiring and the slot's structure all still there. For the case where the system is wrong about the look and right about the behaviour.