Electrons - Circuit design system

Motion Design

This guidance defines how motion should be used in our product UX.

Motion should support usability, not decoration. In our products, it is mainly used for transitions, feedback, loading states, and small interactions. It should feel calm, quick, and functional.

This guidance should be maintained as part of the design system. Updates should be reviewed for consistency across UX, design, and implementation.


Scope

This guidance applies to product UI motion and interaction feedback across our web-based experiences. Any deviation from the default approach should be based on usability needs, technical constraints, or platform conventions.

Usage rules

Motion triggered by user input should ideally begin within 0.1 seconds to preserve a clear sense of cause and effect.

The more often an interaction occurs, the more restrained its motion should be. Motion must not block input or delay task completion. Animations should be interruptible. If the user triggers a new action, the UI should respond immediately. Where relevant, motion should also reverse cleanly when state changes quickly.

Microinteraction structure

Small interactions work best when they follow a clear structure.

  1. Trigger The event that starts the interaction, such as click, tap, hover, scroll, drag, or a system condition.

  2. Rule The logic that defines what happens after the trigger.

  3. Feedback The visible response, such as a state change, validation, progress indicator, or confirmation cue.

  4. Loops and modes How the interaction behaves over time or remains active. Repeated or long-running interactions should remain subtle.

Before adding motion, ask:

Use motion when:

Avoid motion when:


Time and easing

Motion should feel quick and responsive. Default delay should be 0 ms. Use delay only when it supports hierarchy or comprehension. Staggering should be subtle, brief, and limited to small groups of related elements. Avoid delay on frequent, critical, or task-focused interactions.

Standard durations

Standard easing

Direct, user-triggered motion can feel slightly sharper. System-triggered motion should usually feel quieter.


Loading states

Loading motion should communicate progress without dominating the screen.


Spatial logic

Motion should reflect where an element comes from and where it belongs.

Examples: Drawers slide in from their attached edge Dropdowns open from the trigger Accordions expand in place


Implementation

Prefer CSS transitions for UI motion where possible. They are sufficient for most UX motion in business applications and support a lightweight, consistent, and maintainable implementation.

This reflects the shared recommendation of the frontend developers in Team Vega and Team Sentinel, who agreed to implement motion with CSS rather than framework-specific solutions, mainly for compatibility reasons.

CSS is best suited to subtle changes in opacity, transform, and colour. Motion that requires complex choreography should usually be simplified.

Motion should feel lightweight and responsive in real use. Prefer animating opacity and transform. Avoid motion that causes layout shifts or slows dense interfaces. If motion reduces perceived performance, simplify or remove it.

Preferred properties:

Avoid where possible:

Design tokens

Shared motion tokens help maintain consistency across products.

Suggested tokens:


Accessibility

Accessibility must always be considered in motion design.


Handoff

Requirements

Motion should be specified clearly for implementation.

Include:

Review checklist

Before implementation, confirm that the motion:


Guidelines for upcoming Elements
Modals

The overlay and modal fade in together (200ms ease-out) with a subtle rise or scale, and fade out slightly faster (160ms ease-in). All instant for prefers-reduced-motion.


Cards

Cards appear immediately in their final grid positions; if loading is noticeable, animated skeleton cards hold the layout and are replaced in place with no stagger or entrance animation. All transitions are instant for prefers-reduced-motion.

On “Load more”, existing cards stay fixed while new cards append at the bottom, skeletons again holding their spots if loading is noticeable, then are replaced in place with a 160ms fade. Existing cards are never re-animated, and all transitions are instant for prefers-reduced-motion.


Accordions

On click, the accordion expands in place (160ms ease-out) with the content fading in and the chevron rotating simultaneously. Closing slightly faster at 120ms ease-in. All transitions are instant for prefers-reduced-motion.


Toaster

The toast appears by fading in over 200ms, then disappears after 5 seconds (or when manually closed) by fading out over 160ms. It slides smoothly from the center of the screen up to 160 pixels from the top. Instant for prefers-reduced-motion.


Tooltips

Tooltips fade in (160ms ease-out) and out (120ms ease-in), instant for prefers-reduced-motion.


Language Select

Chevron rotates between up and down at 80ms; the menu fades in (160ms ease-out) and out (120ms ease-in). No stagger, slide, or scale. Everything is instant for prefers-reduced-motion.


Drawer

Chevron rotates between up and down at 80ms; the menu fades in (160ms ease-out) and out (120ms ease-in). No stagger, slide, or scale. Everything is instant for prefers-reduced-motion.


Tab Menu

Hovering draws an underline from left to right (200ms ease-out). The underline appears disappears with 80ms ease-in. Instantly for users with prefers-reduced-motion enabled.