Figma variables hold values but can't express derived relationships¶
Insight: Figma variables can hold values but can't describe how values relate to each other — they can swap values but not derive them. Enterprise design systems define base values and mutate them across states (e.g., one color with opacity adjustments for rest/hover/pressed/disabled, per Material Design's state layers). Figma needs composition primitives: a CMS-like object model, state objects mapped to variables, and functions that resolve derived values.
Detail: Cusick proposes: (1) State objects as shared vocabulary (rest, hover, pressed, disabled) with scale multipliers (1, 2, 0.5, 0); (2) Mapping state to variables generates predictable token sets (primary-rest, primary-hover, etc.); (3) Type-safety-like validation — if a state exists, its opacity must exist, preventing drift; (4) Composite shadow variables as structured objects instead of flat lists; (5) Functions that derive values (y-offset = base_depth × state_scale). From just 3 shadow depths × 4 states = 12 resolved shadows, "no duplication, no hand-authored permutations." The distinction: "managing values" vs "designing systems."
Sources
Related: existing entry "Design tokens architecture and tooling gaps" in external/design-tokens.md — COMPLEMENTS