| 1 |
Hover a row, card, glyph or link |
Background eases to --surface-2 in --dur-hover; a card that opens something also lifts 2 px and gains the next shadow (km-lift); a peek grows from the item in --dur-pop after --peek-rest; moving to the next item slides the peek there |
Background changes at once; no lift; the peek appears at once |
| 2 |
Press a button, chip, card or row |
Buttons, chips and cards scale to --press-scale in --dur-press, back on release; a primary button also darkens; a full-width row darkens instead of scaling |
No scale; darkens at once |
| 3 |
Focus (keyboard) |
Focus ring appears at once, never obscured by a sticky bar |
Same |
| 4 |
Open or close a section, “Show all”, a DetailTab, a <details> |
rsHold: the box keeps its height, then eases to the new height in --dur-morph; new rows enter --stagger apart up to 12; a tab comes from the side you moved towards; a <details> grows from its summary (km-disclose) |
Height and rows change at once |
| 5 |
Card to page |
Transform: the card’s picture tweens to the page’s picture over --dur-page while main leaves upward and the next rises in; the band stays |
Cross-fade of main |
| 6 |
Zoom in one level |
Transform over --dur-zoom on --spring-settle: the clicked shape grows into the destination picture; the parent scales to 1.06 and fades beneath it |
Cross-fade |
| 7 |
Zoom out one level |
The reverse |
Reverse cross-fade |
| 8 |
Change floor on a plan |
The plans cross-fade in --dur-state; the floor marker slides |
Swap at once |
| 9 |
Lens switch |
The strip’s marker slides in --dur-morph; every ring eases to its new state together (--dur-state, the km-ring’s dash transition, not staggered); the spaces’ washes ease; the labels under the rings cross-fade (out on --dur-exit, in on --dur-state); the plan never moves (src/lib/lens-client.mjs) |
Marker, rings and labels change at once |
| 10 |
Select a space on the plan |
A 2 px accent outline eases in over --dur-state; the side panel’s content cross-fades in place (rsPanelSwap), or, when the panel sits below the plan, the box under the plan fills inside a held card (rsHold); the plan never pans. A second press on the chosen space zooms in (row 6); Escape clears, then zooms out (row 7) |
Outline and content at once |
| 11 |
Page to page on the same level |
main leaves upward and the next rises in over --dur-page; frame, band and filter bar stay |
Cross-fade |
| 12 |
Loading |
Slots drawn at final size with a still --surface-2 wash for at most --skeleton-max, then content cross-fades in over --dur-state; skipped when ready within --skeleton-skip; glyphs then come on in turn; the heartbeat last. Never a spinner for the page |
Skeleton to content at once |
| 13 |
The heartbeat ticking |
The words change every 10 s, no motion |
Same |
| 14 |
A feed goes stale |
The heartbeat’s words change to “Not reporting since …” and ease to fault ink; the nearest glyph turns dashed. Once |
At once |
| 15 |
A new signal |
Three things change once, together, in --dur-state: the band’s sentence, the one figure’s tone, the glyph. A needed row enters at its centre |
At once |
| 16 |
A signal clears |
The same three ease back, once; a row no longer needed exits |
At once |
| 17 |
Take, Hand to, Park, Resume (the With chip) |
The chip’s text slides out and the new in, --dur-chip on --spring-settle; a second hand-off retargets |
Text swaps at once |
| 18 |
Priority changed with a reason |
The pill’s colour eases; the reason line enters below |
At once |
| 19 |
Run a standing rule |
The button’s words become the state at once (“Running · read back in 40 s”); the glyph becomes In progress, still, then Fine or Fault once |
Same, without easing |
| 20 |
“How was this done?” opens |
Grows from the words clicked (--dur-pop), shrinks back on close |
At once |
| 21 |
The palette (⌘K) |
Grows from the search button; first results painted before the move; typing re-renders with no motion |
At once |
| 22 |
Filter, Sort, view switch |
As M12 |
Items swap at once |
| 23 |
Toasts |
Rise from the bottom (--dur-enter), stay --toast-stay or until dismissed, exit downward (--dur-exit); one at a time, a second replaces the first in place; never the only place a fact is shown |
At once |
| 24 |
Look, light and dark |
One cross-fade (--dur-theme) |
At once |
| 25 |
Density |
Rows and cards ease to their new size together; the scroll holds on the element under the pointer |
At once |
| 26 |
A module On, Connected or Off; View as |
rsChange |
At once |
| 27 |
“Open pages like this here” |
The line’s words change, then fade back after --dur-linger |
Same |
| 28 |
Replay |
Frames are made when a window is chosen and drawn still. Pressing a frame: the plan’s rings and washes ease to that moment in --dur-state, the band’s sentence changes to the past tense in place, the Then mark and “Replay · 07:52, 28 Sept” appear; Play (only when pressed) steps one frame per --replay-step; Space pauses, arrow keys step; Now eases back to live in --dur-state (src/lib/replay-client.mjs) |
Frames change at once; Play steps without easing |
| 29 |
Blast-radius explorer |
Affected glyphs ease to the projection state together |
At once |
| 30 |
Signal flow on a drawing |
Dashes travel only while “Show signals moving” is on; it turns itself off after 30 s or when the page changes |
The path is lit, still |
| 31 |
Live change by someone else |
As M10 |
Highlight and mark, no slide |
| 32 |
Drag |
Follows the pointer with no lag; on release, --spring-snap to the nearest snap point |
Snaps at once |
| 33 |
Wall mode |
Nothing moves but a new signal and the heartbeat’s words |
Same |
| 34 |
Front door: the strip and the five ideas |
Each tile grows in once as it scrolls into view, --stagger apart |
Present at once |
| 35 |
Front door hero: the live plan |
Glyphs on in turn, one breaks once, then the heartbeat; hover peeks; click zooms into the room |
At once; the zoom is a cross-fade |
| 36 |
The suggestion after your call (P1, P2) |
The folded suggestion opens once the call is saved: its box holds (rsHold) and eases to the new height; the suggestion rises 6 px and fades in over --dur-enter |
Appears at once |
| 37 |
A timeline row arrives (a step of a run, a hand-off, a colleague’s change) |
Enters at its place in time, scaling from .97 over --dur-enter inside a held box; someone else’s carries the M10 mark |
Appears at once; the mark still shows |
| 38 |
A run joins a rule’s strip |
The new square grows from its centre once at the right end (--dur-enter); the words under the strip change in place |
Appears at once |
| 39 |
Front door: a lifecycle stage left alone (Plan, Deliver, Maintain, Fix, Improve, the five proofs) |
The one place on the site that loops (src/lib/front-loop.mjs, Keith’s rule for the landing page, 30 Sept 2026): the stage plays its sequence on the tokens, eases into its final frame, holds it 3 to 4 s, cross-fades back to its first frame (--dur-exit out, --dur-state in; nothing plays backwards) and plays again. It pauses off screen and in a hidden tab, each stage adds its own random beat so no two loop in step, and a click, hover or focus yields to the visitor for 8 s. No “Play again” buttons anywhere; each loop can be paused (row 51) |
The finished frame, still, no loop and no pause button; the hero is the drawn floor with its words |
| 40 |
View as: open, find, choose |
The sheet grows from the control that opened it (rsPopIn); its rows settle in --stagger apart over --dur-enter. Finding hides what does not match at once and slides nothing. Choosing folds the sheet into your name in the sidebar (or the gear on a phone) over --dur-exit, then rsPickWho (row 26) |
Opens, closes and finds at once |
| 41 |
Method pages: a block below the fold comes into view |
It settles in once: opacity and 8 px up over --dur-enter on --ease-settle. Blocks already on screen arrive with the page and do not move again; scrolling back never replays it (MethodPage.astro) |
Present at once |
| 42 |
Method pages: an idea’s picture (IdeaArt) comes into view |
It plays its point once, from the library’s moves: the building’s frame closes on the room (km-zoom’s move) and its ring comes on (km-on); the fields draw in (km-draw), the question last; the answer line, then its figure, then the list; the chip hands over (km-chip’s move); the lines no longer needed fade. Several arriving together play --dur-state apart. The markup is the end frame |
The end frame, never played |
| 43 |
Method, How it fits: point at or focus an idea on a mapping |
The idea’s chip and its row ease to the accent wash and the other rows quieten (--dur-state); nothing moves, and the rows never animate in (M16) |
Changes at once |
| 44 |
Method pages: arriving from another method page |
The navigation’s marker slides from the page you came from to this one once the navigation is in view (rsZoom, the zero-bounce spring) |
The marker is simply at this page |
| 45 |
Method pages: “Try it in the demo” |
The zoom-in page move (row 6), growing from the link: the method page scales to --zoom-scale and fades as the demo arrives |
Cross-fade |
| 46 |
A section scrolls into view for the first time |
It settles in once: rises 12 px into its place while it fades in (km-settle, --dur-enter). What was in view when the page arrived came with the page move and never settles again |
Present at once |
| 47 |
A <details> opens or closes |
Its box grows from the summary’s height to its own (--dur-morph) while its content rises 4 px and fades in (--dur-state); closing fades the content and folds the box back into the summary (--dur-exit); a floating menu grows from its summary instead (--pop-scale, --dur-pop). A second press starts from where the box is (km-disclose) |
Opens and closes at once |
| 48 |
A figure changes (a filter’s count, a band’s number, a Home figure) |
The new value ticks into place: it rises in when it went up and drops in when it went down, once, over --dur-state; it never counts through the values in between (km-tick) |
The new value is there |
| 49 |
A chart is first seen (a sparkline, a bar, a stacked bar, a column chart) |
Lines draw along their length and bars grow from their baseline, a stacked bar’s segments together from its left edge so they stay joined, up to 12 bars --stagger apart, over --dur-morph, once (km-draw-in). Later changes redraw it still |
Drawn at once |
| 50 |
A floor’s thumbnail (FloorMap detail="thumb": Home, region, leadership, vendor, office cards) |
Draws in once when it first shows: the slab’s edge draws on (km-draw, --dur-enter), then the spaces fade up (--dur-state, a --dur-pop beat later); never again on that page. A space’s state change eases its tint and glyph in place (--dur-state, km-ring; a new glyph grows in with km-on). Pressing a space zooms into it (row 6, the space’s box grows into its picture); pressing the floor zooms into the office plan on that floor, the thumbnail growing into the plan (plan-<site>-<floor>, the same picture box) |
Drawn at once; the zoom is a cross-fade |
| 51 |
Pause and play a moving picture (WCAG 2.2.2): the pause button in a loop’s corner, or Pause animations in the front door’s footer |
The loop, its timers and every move inside it (CSS and scripted, and the 3D camera) freeze where they are; play carries on from that point. The button changes from pause to play and back in place. Pause animations pauses every loop and is kept as Keep things still (Settings › Accessibility): the next visit shows each stage’s finished frame, paused, and Play starts it from its first frame (src/lib/front-loop.mjs) |
Nothing plays, so there is no button |
| 52 |
A record block’s figure arrives (warranty, on call, circuits, the comms room’s power and temperature, repeat faults, office hours; .rs-tick: “Warranty ends in 10 months”, “3rd fault this quarter”) |
The first time its block is in view, the figure ticks into place once (km.tick, row 48’s move, rising in), --stagger apart; the block itself settles as row 46 (data-settle) and its trend strip draws in as row 49 (data-chart). It never counts through other values (M9) (src/lib/arrive.mjs) |
The figure is simply there |
| 53 |
Deploy, “Deliver by”: switching the way the work is grouped (device type, room, floor or zone, one at a time, a set), or the order of the groups |
The marker slides to the chosen way; each unit row travels from its old group to its new one (FLIP, --dur-morph on the zero-bounce spring, km.regroup), rows that were not on screen fade in where they land, the new groups’ headings, answers and actions fade in around them, and the box eases to its new height. Live changes afterwards change rows in place and never re-sort (M10) |
The new grouping at once |
| 54 |
Deploy, One at a time: Next, or picking a unit in the queue |
The unit in hand slides out the way you came from and fades while the next slides in from the side you stepped towards, on one line (km.slide, --dur-enter on the spring); the box eases to the new height; the queue’s current row moves its mark |
The next unit at once |
| 55 |
A provider’s operations: Reserve from stock, Send, Receive (/portfolio/ops/) |
Reserve: each unit’s chip travels from Available to reserve into Reserved (FLIP, km.regroup, keyed by serial); Send and Receive: the order’s card travels to On order or Received the same way; every figure that changed ticks (row 48); the band’s answer and figures change in place; one toast says what happened (src/lib/provider-ops-client.mjs) |
Everything lands at once |
| 56 |
A RAMS’s risk matrix comes into view |
The cells that hold hazards fill from their base, up to 12 a --stagger apart, once (km-draw-in, row 49, data-chart-bar); empty cells are drawn at once |
Filled at once |
| 57 |
Sales, a design: the BOM rolls up (the project BOM first seen; a quantity, model or rate changed) |
The BOM’s totals tick into place the first time they are in view (.rs-tick, row 52’s move). A change ticks the room’s figures, the BOM line’s quantity and sell, the source mark counts and the totals, once each (km-tick, row 48); the marks bar eases its segments (--dur-morph); a line that joins or leaves the BOM travels with the rest (km.regroup). Nothing counts through the values in between (src/lib/provider-sales-client.mjs) |
The new figures are there |
| 58 |
Sales, a quote: switching versions |
The version shown fades out on --dur-exit while the other fades in over --dur-state, in the same place, and the box eases to its new height (--dur-morph); the switch’s marker changes in place. A second switch starts from where things are |
The other version at once |
| 59 |
Sales, accept: the quote accepted (simulated), or the handoff played again |
The new state paints first; then the design card flies from the provider’s side to the client’s on the zero-bounce spring (--dur-morph, transform and opacity only), fading as it lands, while the proposed project’s card eases in where it arrives (--dur-state). Undo puts the card back at once |
The proposed project is simply there |
| 60 |
The room drawing changes room: a build-option tab, or another size of the same kind of space (the size picker on a space type) |
The drawing morphs, with no blank frame: the room’s box resizes to the new dimensions (walls, floor, the ruler and the scale bar tween their geometry), furniture, devices and plates slide and resize to their new places (FLIP of their SVG transform, keyed data-mk), markers slide, what only the old room had fades out where it was (--dur-exit) and what only the new one has fades in (--dur-enter), the dimension figures tick (km-tick), all on --dur-morph and --ease-settle. The rest of a tab panel makes the ordinary tab move around the drawing, which stays put; between pages the drawing’s frame is its own view-transition layer (room-scene) sized from the old frame to the new, the picker stays (rt-sizes) and the page cross-fades in place. See behind, Cables and the chosen device carry over; the cables draw in once the room has settled (src/lib/scene-client.mjs) |
The new room at once, layers and choice carried over |
| 61 |
Focus on a device, plate or cable in the room drawing: a click or tap on it, its marker or its Key row; a mouse resting on a marker, a cable or a Key row previews it for as long as it rests (--dur-hover in and out); the page’s highlight (an incident’s device) |
Two states only, full view or focus. Entering: the chosen thing, its plate or ports and its cable route stay at full strength, the chosen thing gains its outline and glow and its marker grows and gains its ring (--dur-state); the room eases to a thin outline and furniture and other kit to a faint grey silhouette (opacity, fill and stroke, --dur-state on --ease-settle); other markers and cables fade on --dur-exit and then hide; the chosen route’s cables draw along their path (stroke-dashoffset, --dur-morph). Choosing another thing moves the focus in one change: the old route quietens while the new one lights. Leaving (Show everything, a click on empty space, Escape): the reverse. A fault (tone bad) uses the fault colour for the outline, glow and marker. Touch never keeps a hover |
Both states at once |
| 62 |
See behind or Cables on or off in the room drawing |
The chip fills with the accent (or clears) in --dur-state; See behind eases what hides things to see-through and outlines the hidden ones; Cables draws every cable along its route (stroke-dashoffset, --dur-morph) and the containment and plates’ letters fade in; off, they fade on --dur-exit. Turning a layer on while something is chosen goes back to the whole room first |
At once |
| 63 |
The room drawing’s markers and plates by default |
Still: devices’ markers only; the plates’ letters and hidden things’ outlines only with See behind or Cables; nothing faded half-way. The room guide’s drawing shows devices only, never cables |
Same |
| 64 |
Events: readiness checks arrive (an event’s page, the Events service, Home’s client briefings) |
The checks’ glyphs come on in turn as they are seen (M8, km-ring); a check done since the last visit eases from To review to Fine in place (--dur-state); the “N of M done” count ticks into place once (row 48) and the readiness bar draws in once (row 49). Nothing else moves |
Every glyph and figure is simply there |
| 65 |
Events: the run of show on the day |
The item running now takes the accent wash in place and the ones before it quieten, over --dur-state, checked once a minute from the office’s clock (or ?at=HH:MM); the list never scrolls or re-orders |
The wash and the quiet rows change at once |