@utopia-studio-design/design-system-cli 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,121 @@
1
+ {
2
+ "$schema": "https://utopia-studio.co/design-system/motion-profiles.schema.json",
3
+ "version": 1,
4
+ "contract": {
5
+ "themeChooses": "motion personality and semantic recipes",
6
+ "applicationChooses": "runtime adapter",
7
+ "componentRequests": "feedback, page, surface, or layout",
8
+ "escapeHatch": "motion={false}",
9
+ "reducedMotion": "apply the semantic final state immediately without transform, filter, or temporal animation"
10
+ },
11
+ "adapters": [
12
+ { "id": "waapi", "package": "built-in", "entry": "Motion" },
13
+ { "id": "framer-motion", "package": "framer-motion", "entry": "MotionFramer" },
14
+ { "id": "animejs", "package": "animejs", "entry": "MotionAnime" },
15
+ { "id": "gsap", "package": "gsap", "entry": "MotionGsap" }
16
+ ],
17
+ "profiles": [
18
+ {
19
+ "id": "ceremonial",
20
+ "label": "Ceremonial reveal",
21
+ "themes": ["utopia-default"],
22
+ "personality": "ceremonial",
23
+ "description": "A composed, high-fidelity reveal with restrained blur and long deceleration.",
24
+ "rules": ["Keep direct feedback fast", "Use blur only for page and large-surface reveals", "Make exits shorter than entrances"],
25
+ "timings": {
26
+ "press": { "duration": 0.16, "ease": [0.2, 0, 0, 1] },
27
+ "page": { "duration": 0.42, "ease": [0.16, 1, 0.3, 1] },
28
+ "expand": { "duration": 0.36, "ease": [0.16, 1, 0.3, 1] },
29
+ "reveal": { "duration": 0.44, "ease": [0.16, 1, 0.3, 1] },
30
+ "icon": { "duration": 0.64, "ease": [0.16, 1, 0.3, 1] }
31
+ },
32
+ "recipes": {
33
+ "feedback": {
34
+ "enter": { "from": { "scale": 1 }, "to": { "scale": 0.98 }, "timing": { "duration": 0.14, "ease": [0.2, 0, 0, 1] } },
35
+ "exit": { "from": { "scale": 0.98 }, "to": { "scale": 1 }, "timing": { "duration": 0.12, "ease": [0.2, 0, 0, 1] } }
36
+ },
37
+ "page": {
38
+ "enter": { "from": { "opacity": 0, "y": 6, "blur": 8 }, "to": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "timing": { "duration": 0.42, "ease": [0.16, 1, 0.3, 1] } },
39
+ "exit": { "from": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "to": { "opacity": 0, "y": -2, "blur": 4 }, "timing": { "duration": 0.24, "ease": [0.7, 0, 0.84, 0] } }
40
+ },
41
+ "surface": {
42
+ "enter": { "from": { "opacity": 0, "y": 8, "scale": 0.995, "blur": 8 }, "to": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "timing": { "duration": 0.44, "ease": [0.16, 1, 0.3, 1] } },
43
+ "exit": { "from": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "to": { "opacity": 0, "y": 2, "scale": 0.995, "blur": 4 }, "timing": { "duration": 0.26, "ease": [0.7, 0, 0.84, 0] } }
44
+ },
45
+ "layout": {
46
+ "enter": { "from": { "opacity": 0.88, "x": 8 }, "to": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "timing": { "duration": 0.36, "ease": [0.16, 1, 0.3, 1] } },
47
+ "exit": { "from": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "to": { "opacity": 0.88, "x": 4 }, "timing": { "duration": 0.22, "ease": [0.7, 0, 0.84, 0] } }
48
+ }
49
+ },
50
+ "orchestration": { "delayChildren": 0.04, "stagger": 0.035 }
51
+ },
52
+ {
53
+ "id": "swift",
54
+ "label": "Swift response",
55
+ "themes": ["dextrum"],
56
+ "personality": "swift",
57
+ "description": "Fast, compact movement for dense technical workflows.",
58
+ "rules": ["No reveal blur", "No orchestration delay", "Prefer short directional shifts"],
59
+ "timings": {
60
+ "press": { "duration": 0.08, "ease": [0.2, 0, 0, 1] },
61
+ "page": { "duration": 0.14, "ease": [0.2, 0, 0, 1] },
62
+ "expand": { "duration": 0.16, "ease": [0.2, 0, 0, 1] },
63
+ "reveal": { "duration": 0.14, "ease": [0.2, 0, 0, 1] },
64
+ "icon": { "duration": 0.24, "ease": [0.2, 0, 0, 1] }
65
+ },
66
+ "recipes": {
67
+ "feedback": {
68
+ "enter": { "from": { "scale": 1 }, "to": { "scale": 0.97 }, "timing": { "duration": 0.08, "ease": [0.2, 0, 0, 1] } },
69
+ "exit": { "from": { "scale": 0.97 }, "to": { "scale": 1 }, "timing": { "duration": 0.07, "ease": [0.2, 0, 0, 1] } }
70
+ },
71
+ "page": {
72
+ "enter": { "from": { "opacity": 0, "x": 3 }, "to": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "timing": { "duration": 0.14, "ease": [0.2, 0, 0, 1] } },
73
+ "exit": { "from": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "to": { "opacity": 0, "x": -2 }, "timing": { "duration": 0.09, "ease": [0.7, 0, 0.84, 0] } }
74
+ },
75
+ "surface": {
76
+ "enter": { "from": { "opacity": 0, "y": 2 }, "to": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "timing": { "duration": 0.14, "ease": [0.2, 0, 0, 1] } },
77
+ "exit": { "from": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "to": { "opacity": 0 }, "timing": { "duration": 0.09, "ease": [0.7, 0, 0.84, 0] } }
78
+ },
79
+ "layout": {
80
+ "enter": { "from": { "opacity": 0.94, "x": 4 }, "to": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "timing": { "duration": 0.16, "ease": [0.2, 0, 0, 1] } },
81
+ "exit": { "from": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "to": { "opacity": 0.94, "x": 2 }, "timing": { "duration": 0.1, "ease": [0.7, 0, 0.84, 0] } }
82
+ }
83
+ },
84
+ "orchestration": { "delayChildren": 0, "stagger": 0 }
85
+ },
86
+ {
87
+ "id": "precise",
88
+ "label": "Precise dissolve",
89
+ "themes": ["barrier-intelligence"],
90
+ "personality": "precise",
91
+ "description": "Controlled dissolves and small scale changes for analytical surfaces.",
92
+ "rules": ["Prefer opacity over travel", "Keep scale changes below two percent", "Preserve analytical continuity"],
93
+ "timings": {
94
+ "press": { "duration": 0.1, "ease": [0.2, 0, 0, 1] },
95
+ "page": { "duration": 0.2, "ease": [0.16, 1, 0.3, 1] },
96
+ "expand": { "duration": 0.22, "ease": [0.16, 1, 0.3, 1] },
97
+ "reveal": { "duration": 0.24, "ease": [0.16, 1, 0.3, 1] },
98
+ "icon": { "duration": 0.32, "ease": [0.16, 1, 0.3, 1] }
99
+ },
100
+ "recipes": {
101
+ "feedback": {
102
+ "enter": { "from": { "scale": 1 }, "to": { "scale": 0.985 }, "timing": { "duration": 0.1, "ease": [0.2, 0, 0, 1] } },
103
+ "exit": { "from": { "scale": 0.985 }, "to": { "scale": 1 }, "timing": { "duration": 0.08, "ease": [0.2, 0, 0, 1] } }
104
+ },
105
+ "page": {
106
+ "enter": { "from": { "opacity": 0 }, "to": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "timing": { "duration": 0.2, "ease": [0.16, 1, 0.3, 1] } },
107
+ "exit": { "from": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "to": { "opacity": 0 }, "timing": { "duration": 0.14, "ease": [0.7, 0, 0.84, 0] } }
108
+ },
109
+ "surface": {
110
+ "enter": { "from": { "opacity": 0, "scale": 0.99 }, "to": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "timing": { "duration": 0.24, "ease": [0.16, 1, 0.3, 1] } },
111
+ "exit": { "from": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "to": { "opacity": 0, "scale": 0.995 }, "timing": { "duration": 0.16, "ease": [0.7, 0, 0.84, 0] } }
112
+ },
113
+ "layout": {
114
+ "enter": { "from": { "opacity": 0.92, "x": 5 }, "to": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "timing": { "duration": 0.22, "ease": [0.16, 1, 0.3, 1] } },
115
+ "exit": { "from": { "opacity": 1, "x": 0, "y": 0, "scale": 1, "rotate": 0, "blur": 0 }, "to": { "opacity": 0.92, "x": 3 }, "timing": { "duration": 0.14, "ease": [0.7, 0, 0.84, 0] } }
116
+ }
117
+ },
118
+ "orchestration": { "delayChildren": 0.02, "stagger": 0.02 }
119
+ }
120
+ ]
121
+ }
@@ -9,6 +9,7 @@
9
9
  "packages/design-system/src/themes/barrier-intelligence.css",
10
10
  "packages/design-system/src/manifests/theme-barrier-intelligence.json"
11
11
  ],
12
+ "motionProfile": "precise",
12
13
  "brandPrimitives": {
13
14
  "colors": {
14
15
  "black": "#000000",
@@ -23,16 +24,22 @@
23
24
  "goldDark": "#8A6637",
24
25
  "gold": "#A6824C",
25
26
  "goldLight": "#D2AC6C",
26
- "goldForeground": "#1A1208"
27
+ "goldForeground": "#1A1208",
28
+ "detectorLime": "#A6B86A",
29
+ "assuranceAtRisk": "#C47C48",
30
+ "assuranceLost": "#C76B62",
31
+ "assuranceWarning": "#D2A65A"
27
32
  },
28
33
  "typography": {
29
34
  "appWebsite": {
30
35
  "ui": "Hanken Grotesk",
36
+ "mono": "JetBrains Mono",
31
37
  "use": "Product UI, dashboards, documentation, and long-form reading"
32
38
  },
33
39
  "arabicFamily": "IBM Plex Sans Arabic",
34
40
  "weights": {
35
- "hankenGrotesk": [400, 500, 600, 700]
41
+ "hankenGrotesk": [400, 500, 600, 700],
42
+ "jetBrainsMono": [400, 500, 600]
36
43
  },
37
44
  "arabicWeights": [400, 500, 700],
38
45
  "headlineCasing": "sentence",
@@ -66,7 +73,21 @@
66
73
  "--font-sans": "Hanken Grotesk",
67
74
  "--font-ui-support": "Hanken Grotesk",
68
75
  "--font-marketing-display": "Hanken Grotesk scoped through theme selectors",
76
+ "--font-mono": "JetBrains Mono",
69
77
  "--font-arabic": "IBM Plex Sans Arabic",
78
+ "--font-size-marketing-h1": "clamp(3rem, 6vw, 5.75rem)",
79
+ "--font-size-marketing-h2": "clamp(2.25rem, 4vw, 3.75rem)",
80
+ "--font-size-marketing-h3": "clamp(1.5rem, 2.5vw, 2.25rem)",
81
+ "--line-height-marketing-h1": "1",
82
+ "--line-height-marketing-h2": "1.06",
83
+ "--line-height-marketing-h3": "1.14",
84
+ "--measure-marketing-h1": "12ch",
85
+ "--measure-marketing-h2": "18ch",
86
+ "--measure-marketing-h3": "28ch",
87
+ "--container-standard": "72rem",
88
+ "--container-wide": "90rem",
89
+ "--page-gutter": "clamp(1rem, 3vw, 2.5rem)",
90
+ "--content-measure": "72ch",
70
91
  "--sidebar-width": "17rem",
71
92
  "--shadow-control": "none",
72
93
  "--control-height-sm": "2rem",
@@ -77,6 +98,48 @@
77
98
  "--modal-surface": "Card High",
78
99
  "--popover-surface": "Card High"
79
100
  },
101
+ "activationContract": {
102
+ "brandAttribute": "data-brand=\"barrier-intelligence\"",
103
+ "modeAttribute": "data-color-mode=\"dark|light|system\"",
104
+ "defaultMode": "dark",
105
+ "legacyAlias": "data-theme=\"barrier-intelligence\" remains supported during migration",
106
+ "rule": "Changing brand must not overwrite the persisted color mode. System follows prefers-color-scheme."
107
+ },
108
+ "layoutContract": {
109
+ "standard": "--container-standard",
110
+ "wide": "--container-wide",
111
+ "gutter": "--page-gutter",
112
+ "readingMeasure": "--content-measure",
113
+ "formula": "inline-size: min(calc(100% - 2 * var(--page-gutter)), var(--container-standard)); margin-inline: auto",
114
+ "rule": "Navigation, hero, and body content share the same responsive gutter. Products do not invent --page or --hero-page aliases."
115
+ },
116
+ "detectorStatus": {
117
+ "primitive": { "token": "--bi-detector-lime", "value": "#A6B86A" },
118
+ "semanticTokens": ["--detector-active", "--detector-active-foreground", "--detector-active-surface", "--detector-active-border"],
119
+ "use": ["active detectors", "verified detector output"],
120
+ "avoid": ["general calls to action", "decorative glow", "neon page accents"],
121
+ "accessibility": "Pair color with an icon and localized status label; verify text and control contrast in Dark and Light."
122
+ },
123
+ "assuranceStates": {
124
+ "credited": ["--assurance-credited", "--assurance-credited-foreground", "--assurance-credited-surface", "--assurance-credited-border"],
125
+ "atRisk": ["--assurance-at-risk", "--assurance-at-risk-foreground", "--assurance-at-risk-surface", "--assurance-at-risk-border"],
126
+ "lost": ["--assurance-lost", "--assurance-lost-foreground", "--assurance-lost-surface", "--assurance-lost-border"],
127
+ "warning": ["--assurance-warning", "--assurance-warning-foreground", "--assurance-warning-surface", "--assurance-warning-border"],
128
+ "verified": ["--assurance-verified", "--assurance-verified-foreground", "--assurance-verified-surface", "--assurance-verified-border"],
129
+ "rule": "Assurance states are domain semantics, not aliases for generic success/warning/destructive. Never communicate state by color alone."
130
+ },
131
+ "motionContract": {
132
+ "durations": ["--motion-duration-press", "--motion-duration-page", "--motion-duration-expand", "--motion-duration-reveal", "--motion-duration-icon"],
133
+ "easing": ["--motion-ease-standard", "--motion-ease-emphasized", "--motion-ease-icon"],
134
+ "distance": { "page": "6px", "reveal": "10px" },
135
+ "reducedMotion": "Core sets durations and distances to zero, disables icon animation, and restores press scale to 1 under prefers-reduced-motion."
136
+ },
137
+ "fontSupply": {
138
+ "hankenGrotesk": "Loaded by the theme stylesheet from Google Fonts",
139
+ "jetBrainsMono": "Loaded by the theme stylesheet from Google Fonts",
140
+ "ibmPlexSansArabic": "Self-hosted in the package with 400, 500, and 700 weights",
141
+ "display": "swap"
142
+ },
80
143
  "visualPolicy": {
81
144
  "tone": ["rigorous", "quiet", "technical", "premium"],
82
145
  "allow": [
@@ -84,14 +147,16 @@
84
147
  "warm gold accents for primary action and signal",
85
148
  "neutral ink hierarchy for reading",
86
149
  "rounded cards with hairline borders",
87
- "minimal shadow; depth via border and surface steps"
150
+ "minimal shadow; depth via border and surface steps",
151
+ "restrained detector lime for active and verified engineering states"
88
152
  ],
89
153
  "avoid": [
90
154
  "bright neon accents",
91
155
  "colorful gradients as a default surface treatment",
92
156
  "overly rounded, playful geometry",
93
157
  "Utopia brick red palette",
94
- "marketing display fonts in dense app UI"
158
+ "marketing display fonts in dense app UI",
159
+ "detector lime used as a decorative or glowing accent"
95
160
  ]
96
161
  },
97
162
  "iconPolicy": {
@@ -101,6 +166,15 @@
101
166
  "avoid": ["emoji", "mixed icon families in one surface"],
102
167
  "coreNote": "Icon policy is theme-owned. Core components remain icon-system neutral."
103
168
  },
169
+ "marketingAssetPolicy": {
170
+ "relationshipToIcons": "Lucide remains the UI icon system. Three-dimensional engineering assets are marketing media, not component icons.",
171
+ "palette": ["warm gold", "controlled grayscale", "restrained detector lime"],
172
+ "material": "Machined, technical, and restrained rather than glossy or toy-like.",
173
+ "lighting": "Directional studio lighting with clear form and no decorative neon glow.",
174
+ "background": "Near-black or controlled neutral fields with sufficient object separation.",
175
+ "use": ["engineering concepts", "detector visualization", "assurance evidence", "product capability storytelling"],
176
+ "avoid": ["generic abstract blobs", "glassmorphism", "cyberpunk glow", "decorative lime accents", "Lucide icons rendered as 3D objects"]
177
+ },
104
178
  "translations": {
105
179
  "ar": {
106
180
  "summary": "ثيم Barrier Intelligence مربوط بعقد Ceramic الدلالي. يستخدم أسطح منتجات شبه سوداء ولمسات ذهبية دافئة وتسلسلا محايدا محسوبا. يقود Hanken Grotesk واجهة المنتج والتوثيق، وتبقى أي طباعة تسويقية محصورة في محددات يملكها الثيم.",
@@ -114,9 +188,14 @@
114
188
  "aiRules": [
115
189
  "Read this theme policy after the core semantic contract.",
116
190
  "Map Barrier Intelligence palette through semantic tokens only.",
191
+ "Select the Barrier Intelligence brand with data-brand and select Dark, Light, or System independently with data-color-mode.",
192
+ "Use core container and gutter tokens instead of product-local --page or --hero-page aliases.",
117
193
  "Use gold for primary actions and high-signal emphasis, not as a full-page wash.",
194
+ "Use detector lime only for active detectors and verified states, always with a non-color status cue.",
195
+ "Use assurance semantic token families for credited, at risk, lost, warning, and verified states.",
118
196
  "Prefer near-black and stepped card surfaces with ink hierarchy.",
119
197
  "Use Hanken Grotesk for Latin app UI and body copy in this theme.",
198
+ "Use the dedicated marketing H1, H2, and H3 size, line-height, and measure tokens instead of scaling --font-size-display ad hoc.",
120
199
  "Keep Arabic on IBM Plex Sans Arabic tokens.",
121
200
  "Do not swap Ceramic shell navigation branding when this theme is active."
122
201
  ]