← Hub Motion
v10.0
Motion & Animation · v10.0 · Live Library

Motion Language

Cobalt presses. Tufts hovers. The spring fires on toggles.

5 duration tokens 3 easing curves 50+ animations 1.4s sonic loop v10.0
Philosophy

Motion should explain, not entertain.

Every animation in the GFS system has a job. A pulse means a sensor is live. A slide means a state changed. A spring means a user just toggled something. If a motion does not answer a question for the operator standing at a dock door or the buyer scrolling a bid sheet, it does not ship. We build for warehouse light, schoolyard noise, and the four-second attention window between two pallets moving past the scanner.

The motion ladder is fixed: 120ms for press, 200ms for toggle, 300ms for toast, 400ms for entry, 600ms for fill. Anything outside that band needs a written exception. Reduced-motion users get the same product with the timing clamped. The sonic mark plays once, never on errors.

01

Duration Tokens

Five values. Every interaction maps to one.
--dur-fast120ms · Button press, focus ring, hover lift
--dur-base200ms · Toggle flip, tab switch, theme transition
--dur-med300ms · Toast slide, fade, back-to-top reveal
--dur-slow400ms · Section background, modal entry
--dur-slower600ms · Progress bar fill, sparkline draw
■ Never hardcode a millisecond value in a component. If a token does not exist for the timing you need, you do not need that timing.
02

Easing Curves

Three curves. Pick by intent.

--ease-out

cubic-bezier(0.16, 1, 0.3, 1)

Exit feel. The default for nearly every transition. Decelerates into rest.

EASE-OUT

--ease-in-out

cubic-bezier(0.65, 0, 0.35, 1)

Symmetric. Reserved for looping or two-way motion where both ends matter.

EASE-IN-OUT

--spring

cubic-bezier(0.34, 1.56, 0.64, 1)

Overshoot then settle. Only on small toggles and checkboxes. Never on large surfaces.

SPRING
■ The spring curve has the highest visual cost. Use it on objects under 48 pixels square. Above that it reads as instability.
03

The Five Motion Verbs

Pulse. Slide. Fade. Scale. Shimmer.
01

PULSE

Signals a live sensor, a heartbeat, a connected device.

02

SLIDE

State changed. A toast arrived. A tab moved. A drawer opened.

03

FADE

Visibility shift. Loading complete. Background swap. Theme toggle.

04

SCALE

Modal entry. Detail view popping out of a card. Confirmation badge.

05

SHIMMER

Loading skeleton. The data is on the wire. The shape is known.

■ If a new animation does not fit one of these five verbs, it is the wrong animation. Rename the intent first, build second.
04

Live Pulses

Four heartbeats. Same algorithm, different signal.
GREEN · LIVE
Topbar live dot. Reads as "data is fresh, system is online."
COBALT · MAP
Facility markers on the map. Heartland, Hermitage, and customer DCs.
TUFTS · HOVER
Interactive surface telling the user "this responds to hover or tap."
AMBER · ALERT
Cold chain warning. Reefer temp drift. Slot late for receiving.
■ Pulse cycle is always 2.2s ease-out. The color is the meaning, not the timing.
05

Sonic Brand · Live

A 1.4 second descending interval. Cobalt to Tufts to Jordy.
AUDIO LOGO · 1.4s loop · cobalt → tufts → jordy

The sonic mark is three descending notes mapped to the three rings of the orbital identity. The cobalt fundamental anchors the chord. The tufts third rises with hue. The jordy fifth resolves the phrase. Total duration is 1.4 seconds.

It fires on app load, on confirmed submissions, and on the daily ops-strip refresh. It never plays on errors. The bars at left are a visual transcription of the same envelope: attack, sustain, decay.

■ The sonic mark is the only animation in the system that lives at the second scale. Everything else is sub-second.
06

Loading States

Shape known. Spinning anywhere. Filling forward.

Skeleton

Shape is known. Data is in flight.

Used when the response is under 800ms expected. The placeholder mirrors the shape of the incoming content so the eye does not jump on arrival.

Spinner

Length unknown. Operation pending.

Used when latency is unbounded: file uploads, NetSuite saved-search runs, external integrations. Tufts ring on silver track.

Progress Bar

Length known. Filling forward.

Cobalt to tufts gradient. Used on bulk imports, exports, deploys, and any multi-step operation with a measurable end.

■ Pick by what is known: shape, length, or neither. The loading state is a contract with the user about the wait.
07

Hover Choreography

Four tile reactions. All at 200ms.
■ Hover is desktop-only. Touch devices skip these states; the tile is reactive on press instead.
08

Button Press Choreography

Press to feel the 120ms.
Default
Ghost
Success
Danger
■ Every button presses inward 3% on active. The eye perceives 120ms as instant; the finger feels the contact.
09

The Globe

Six layered animations. One mark.
CoreThe cobalt brand mark. Static. The anchor of the system.
Ring 120s linear rotation. The inner trade route. Fastest cadence.
Ring 232s linear rotation, reverse. The middle orbit.
Ring 348s linear rotation. The outer ring. Reads almost still.
OrbitDashed path that the rings ride. Pure geometry, no motion.
Pulses2.2s ease-out, three pulses staggered at 0s, 0.7s, 1.4s.
■ The globe is the most-rendered surface in the system. Every layer earns its CPU cost.
10

Page Transitions

Three entry choreographies for incoming content.
Fade-up
10px lift · 400ms
Default for new sections. opacity 0 to 1, translateY(10px) to 0.
Fade-in
Pure opacity · 300ms
For inline content swaps and theme transitions.
Scale-in
98% to 100% · 200ms
Modal entry and confirmation badges only.
■ Every section on this page uses fade-up on first paint. Reload to see it land.
11

Scroll-Triggered Motion

Two surfaces. One scroll event.
Reading bar · triggerwindow scroll. Position over total scrollable height.
Reading bar · outputtransform scaleX(0) to scaleX(1) on the bar element.
Reading bar · colorLinear gradient, cobalt to tufts, left to right.
Reading bar · height2px. Sits above the topbar. Never flickers.
Back-to-top · appearanceBecomes visible above 400px scroll. Fades in over 200ms.
Back-to-top · pressScrolls window to 0 with smooth behavior. No JS-driven easing override.
■ Scroll handlers run on the native scroll event with no throttling. The handler is one transform write per frame.
12

Reduced Motion

Respect the OS setting. Always.
prefers-reduced-motion: reduce — when the operating system reports the user prefers reduced motion, every animation and transition is clamped to 0.01ms. The product still works. Pulses become static dots. Slides become instant swaps. Spinners freeze on their first frame. The sonic mark does not auto-play.
Clamped--dur-fast, --dur-base, --dur-med, --dur-slow, --dur-slower
DisabledGlobe orbits, sonic waves, pulse rings, shimmer loaders
PreservedFocus rings, content layout, color, contrast, font sizing
TestmacOS: System Settings → Accessibility → Display → Reduce motion
■ Reduced motion is not a degraded experience. It is the same product without the animations.
13

Motion Don’ts

Five rules. Each one a hard line.
Don’t — avoid this
Don’t animate layout.Width, height, top, and left trigger reflow. Animate transform and opacity only.
Don’t loop motion without purpose.Infinite animations cost battery and attention. Loop only on live signals.
Don’t use spring on large surfaces.The overshoot reads as instability above 48px. Stick to ease-out.
Don’t exceed 400ms on common interactions.Past 400ms the user thinks the app is slow. The motion ladder caps there.
Don’t animate text content.Words moving while the user is reading them is hostile. Animate the container, not the type.
Do — instead
Use transform and opacity.Both are GPU-composited. The rest is rendered on the main thread.
Trigger loops on data.If a pulse means "live," it pauses when the connection drops.
Reserve spring for small interactives.Toggle, checkbox, badge confirmation. Nothing else.
Keep the ladder.120, 200, 300, 400, 600. If a timing falls between, round to the nearest token.
Animate the surface.Slide a card, do not slide the words inside it.
■ A motion violation is a design system bug, not a stylistic preference. File it like any other regression.
14

Brand Choreography Timeline

From the first loader to the unified motion language.
2024 · Q1

First skeleton loader

Shimmer pattern shipped on the customer portal. Replaced ad-hoc spinners on every page.

2025 · Q2

Cobalt pulse standard

Live-dot algorithm normalized across topbar, map markers, and ops strips. Same 2.2s ease-out everywhere.

2025 · Q4

Sonic brand recorded

Three-note descending interval scored to the orbital mark. 1.4 second loop. First audio identity at GFS.

2026 · Q1

v10.0 motion language unified

Five duration tokens, three easing curves, five motion verbs. All 178 design system pages aligned.

2026 · Q2

Reduced motion baked in

prefers-reduced-motion query added to the base reset. Every animation clamps automatically.

■ The motion system grew out of one shimmer loader. Every animation since has earned its place by that standard.
15

Motion in the Wild

Six moments. Each from one operator’s evening.
8:14 PM
Ops strip live dot pulses on the Hub. Green ring fires once a second. Reads "data is current within 60s."
8:15 PM
Operator toggles dark mode. Background, type, and borders transition over 200ms ease-out. No flash, no flicker.
8:16 PM
Bid submitted toast slides in. 300ms slide from bottom right. Holds 4 seconds. Slides out on the same curve.
8:18 PM
Reading progress bar paints to 67%. Cobalt-to-tufts gradient fills as the operator scrolls the bid sheet.
8:19 PM
Sparkline draws on the KPI tile. 600ms left-to-right fill. Matches the slower duration token.
8:20 PM
Globe orbits at 20s loop on brand-dna.html. Same mark, same curve, same cadence as the Hub. The system is one system.
■ If you cannot point to a moment when an animation runs, it should not be in the library.
16

Component Motion Map

Six interaction surfaces. One topology.
PRESS
120ms ease-out
HOVER
200ms ease-out
TOGGLE
200ms spring
TOAST
300ms ease-out
MODAL
400ms ease-out
SKELETON
1.4s shimmer loop
■ The map reads top to bottom by user proximity: press is the closest, skeleton is the most remote.
17

Quick Specs

The numbers that matter.
Common interaction
200ms
--dur-base · toggle, tab, theme
Page entry
400ms
--dur-slow · section fade-up
Sonic loop
1.4s
cobalt → tufts → jordy
Pulse cycle
2.4s
live dot · ease-out
■ Four numbers cover ninety percent of the motion in the product. Memorize them.
18

More Brand Surfaces

Where the motion language lives next door.
■ Motion does not live alone. Every brand surface in the hub uses the same five verbs and three curves.
← Back to Hub
40°43′N · 73°25′W · HEARTLAND · MOTION v10.0