@codecademy/gamut 68.7.1-alpha.89ca82.0 β†’ 68.7.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.
@@ -180,6 +180,8 @@ This file defines the visual design tokens for codecademy.com, implemented using
180
180
  **Figma file**: https://www.figma.com/design/ReGfRNillGABAj5SlITalN/πŸ“-Gamut
181
181
  **Storybook**: https://gamut.codecademy.com
182
182
 
183
+ > **Other Gamut themes:** This document covers **Codecademy** (Core, Admin, Platform) only. For Percipio or LX Studio, install that product's `DESIGN.md` instead: `gamut plugin install cursor --theme percipio` or `--theme lxstudio` (see `DESIGN.Percipio.md` / `DESIGN.LXStudio.md` in agent-tools).
184
+
183
185
  ---
184
186
 
185
187
  ## Visual Theme & Atmosphere
@@ -191,7 +193,7 @@ Codecademy communicates **logic with personality** β€” structured and trustworth
191
193
  **Design philosophy**:
192
194
 
193
195
  - Components are color mode–aware by default β€” never hardcode hex values for adaptive UI
194
- - Every component works across all themes without modification
196
+ - Every component works across Core, Admin, and Platform without modification
195
197
  - Mobile-first responsive design built on a 12-column grid
196
198
  - Accessibility is guaranteed by design: semantic color tokens meet contrast requirements per mode automatically
197
199
 
@@ -199,46 +201,17 @@ Codecademy communicates **logic with personality** β€” structured and trustworth
199
201
 
200
202
  ## Themes
201
203
 
202
- Codecademy products use one of four Gamut themes, all sharing the same core visual identity. Token aliases resolve to the right values per theme automatically β€” components require no modification.
203
-
204
- | Theme | Use case | Base font | Dark mode |
205
- | ------------- | ------------------------------- | --------------------- | -------------- |
206
- | **Core** | Codecademy (default) | Apercu | βœ“ light + dark |
207
- | **Admin** | Codecademy admin tools | Apercu | βœ“ light + dark |
208
- | **Platform** | Codecademy learning environment | Apercu | βœ“ light + dark |
209
- | **LX Studio** | LX Studio application | Skillsoft Text / Sans | light only |
210
-
211
- The active theme is set at the app root via `<GamutProvider>`. When designing, know which theme your screen targets β€” it affects primary colors, font families, and available color weights.
212
-
213
- **Font licensing**: Apercu is licensed for codecademy.com only. LX Studio and Percipio use Skillsoft Text and Skillsoft Sans.
214
-
215
- For Percipio projects, use `DESIGN.Percipio.md` from the same package instead. For LX Studio, use `DESIGN.LXStudio.md`.
216
-
217
- ### LX Studio theme overrides
218
-
219
- LX Studio extends Core with these differences:
204
+ Codecademy products use **Core**, **Admin**, or **Platform** β€” the same visual identity with theme-specific palette additions on Platform. Token aliases resolve per theme automatically; components require no modification.
220
205
 
221
- **Font**: `base` β†’ Skillsoft Text; `accent` β†’ Skillsoft Sans (no Apercu, no Suisse). Title weight is **500**, not Core's 700.
206
+ | Theme | Use case | Base font | Dark mode |
207
+ | ------------ | ------------------------------- | --------- | -------------- |
208
+ | **Core** | Codecademy (default) | Apercu | βœ“ light + dark |
209
+ | **Admin** | Codecademy admin tools | Apercu | βœ“ light + dark |
210
+ | **Platform** | Codecademy learning environment | Apercu | βœ“ light + dark |
222
211
 
223
- **Border radii** (all values shift up one step):
212
+ Set the active theme at the app root via `<GamutProvider theme={coreTheme | adminTheme | platformTheme}>`.
224
213
 
225
- | Token | Core | LX Studio |
226
- | ----- | ---- | --------- |
227
- | `sm` | 2px | 4px |
228
- | `md` | 4px | 8px |
229
- | `lg` | 8px | 12px |
230
-
231
- **Semantic color overrides (light mode)**:
232
-
233
- | Token | Core value | LX Studio value |
234
- | -------------------- | ----------- | ------------------- |
235
- | `primary` | `hyper-500` | `sapphire` |
236
- | `primary-hover` | `hyper-400` | `navy-800` |
237
- | `feedback-success` | `green-700` | `lxStudioSuccess` |
238
- | `background-primary` | `beige` | `lxStudioBgPrimary` |
239
- | `shadow-primary` | navy-800 | navy-200 |
240
- | `border-primary` | navy-800 | navy-400 |
241
- | `border-disabled` | navy-500 | navy-300 |
214
+ **Font licensing:** Apercu is licensed for codecademy.com only.
242
215
 
243
216
  ---
244
217
 
@@ -336,24 +309,20 @@ All colors available as static tokens regardless of color mode. Use these only w
336
309
 
337
310
  `lightBeige`, `gold`, `teal`, `purple` (Platform theme palette)
338
311
 
339
- ### LX Studio additions
340
-
341
- `sapphire`, `lxStudioSuccess`, `lxStudioBgPrimary` (LX Studio theme palette)
342
-
343
312
  ---
344
313
 
345
314
  ## Typography
346
315
 
347
316
  ### Typefaces
348
317
 
349
- | Token | Core / Admin / Platform | LX Studio | Use for |
350
- | ----------- | -------------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------ |
351
- | `base` | Apercu Pro (CSS: `Apercu`) | Skillsoft Text | All default UI text, headlines, body copy |
352
- | `accent` | Suisse Intl Mono (CSS: `Suisse`); falls back to `Apercu` | Skillsoft Sans | Code, captions, labels, lists, technical context |
353
- | `monospace` | Monaco, Menlo, Ubuntu Mono, Droid Sans Mono, Consolas | Monaco, Menlo, Ubuntu Mono, Droid Sans Mono, Consolas | Code editor contexts |
354
- | `system` | System UI fonts | System UI fonts | Performance-critical surfaces |
318
+ | Token | Font stack | Use for |
319
+ | ----------- | -------------------------------------------------------- | ------------------------------------------------ |
320
+ | `base` | Apercu Pro (CSS: `Apercu`) | All default UI text, headlines, body copy |
321
+ | `accent` | Suisse Intl Mono (CSS: `Suisse`); falls back to `Apercu` | Code, captions, labels, lists, technical context |
322
+ | `monospace` | Monaco, Menlo, Ubuntu Mono, Droid Sans Mono, Consolas | Code editor contexts |
323
+ | `system` | System UI fonts | Performance-critical surfaces |
355
324
 
356
- **Apercu is licensed for codecademy.com only.** LX Studio uses Skillsoft Text (`base`) and Skillsoft Sans (`accent`) with title weight 500.
325
+ **Apercu is licensed for codecademy.com only.**
357
326
 
358
327
  ### Rules
359
328
 
@@ -453,14 +422,16 @@ Interactive cards (`isInteractive` prop) gain a shadow on hover and `borderRadiu
453
422
 
454
423
  ## Border Radius Scale
455
424
 
456
- | Token | Value | Use |
457
- | ------ | ----- | ------------------------------------------ |
458
- | `none` | 0px | Square / non-interactive elements |
459
- | `sm` | 2px | Subtle rounding, tags |
460
- | `md` | 4px | Default buttons, inputs, interactive cards |
461
- | `lg` | 8px | Cards, panels |
462
- | `xl` | 16px | Large cards, modals |
463
- | `full` | 999px | Pills, avatars, circular elements |
425
+ | Token | Value | Use |
426
+ | ------ | ----- | ------------------------ |
427
+ | `none` | 0px | Non-interactive elements |
428
+ | `sm` | 2px | Overlays |
429
+ | `md` | 4px | Interactive elements |
430
+ | `lg` | 8px | Non-interactive elements |
431
+ | `xl` | 16px | Non-interactive elements |
432
+ | `full` | 999px | Toggles, badges |
433
+
434
+ ---
464
435
 
465
436
  ---
466
437
 
@@ -124,10 +124,12 @@ components:
124
124
 
125
125
  # LX Studio
126
126
 
127
- This file defines the visual design tokens for the Skillsoft LX Studio authoring platform, implemented using the Gamut design system (`@codecademy/gamut`, `@codecademy/gamut-styles`). LX Studio uses a dedicated Gamut theme that extends Core with its own brand colors, typography, and border radii β€” all Gamut components work without modification.
127
+ This file defines the visual design tokens for the Skillsoft LX Studio authoring platform, implemented using the Gamut design system (`@codecademy/gamut`, `@codecademy/gamut-styles`). LX Studio uses a dedicated Gamut theme with its own brand colors, typography, and border radii β€” all Gamut components work without modification.
128
128
 
129
129
  **Storybook**: https://gamut.codecademy.com
130
130
 
131
+ > **Other Gamut themes:** This document covers **LX Studio** only. For Codecademy (Core/Admin/Platform) or Percipio, install that product's `DESIGN.md` instead: `gamut plugin install cursor --theme core` or `--theme percipio`.
132
+
131
133
  ---
132
134
 
133
135
  ## Visual Theme & Atmosphere
@@ -138,11 +140,10 @@ LX Studio communicates **modern professional craft** β€” clean, precise, and too
138
140
 
139
141
  **Design philosophy**:
140
142
 
141
- - Light mode only β€” no dark mode support
142
- - Larger border radii than Core give the UI a softer, more modern feel
143
+ - Larger border radii (`sm`–`lg`) for a softer, more modern feel
143
144
  - Brand blue (`sapphire` / `primary`) drives CTAs, buttons, and links
144
- - Shadows are soft (navy-200) rather than hard (navy-800 in Core light mode)
145
- - Skillsoft Text and Skillsoft Sans replace Apercu and Suisse across all font roles
145
+ - Soft shadows (`shadow-primary` β†’ `navy-200`)
146
+ - Skillsoft Text (`base`) and Skillsoft Sans (`accent`) for all UI typography
146
147
 
147
148
  ---
148
149
 
@@ -206,7 +207,7 @@ Use these token names when specifying colors. LX Studio is light mode only β€” t
206
207
  | `border-tertiary` | `navy-800` | Strong structural borders |
207
208
  | `border-disabled` | `navy-300` | Disabled input borders |
208
209
 
209
- LX Studio's `border-primary` is mid-gray (navy-400) rather than Core's near-black navy-800 β€” borders are softer and less prominent.
210
+ `border-primary` resolves to `navy-400` β€” mid-weight borders for inputs and cards.
210
211
 
211
212
  ### Feedback
212
213
 
@@ -223,7 +224,7 @@ LX Studio's `border-primary` is mid-gray (navy-400) rather than Core's near-blac
223
224
  | `shadow-primary` | `navy-200` |
224
225
  | `shadow-secondary` | `navy-600` |
225
226
 
226
- LX Studio shadows are soft β€” use `shadow-primary` for standard elevated surfaces. This matches Percipio's shadow weight, not Core's hard navy-800 shadow.
227
+ Use `shadow-primary` for standard elevated surfaces.
227
228
 
228
229
  ---
229
230
 
@@ -245,7 +246,7 @@ The full core swatch palette (navy, hyper, blue, green, yellow, red, etc.) is al
245
246
 
246
247
  ### Typefaces
247
248
 
248
- LX Studio uses **Skillsoft Text** for body and headlines and **Skillsoft Sans** for accent UI. There is no Apercu and no Suisse.
249
+ LX Studio uses **Skillsoft Text** for body and headlines and **Skillsoft Sans** for accent UI.
249
250
 
250
251
  | Token | Font | Use for |
251
252
  | ----------- | ----------------------------------------------------- | ----------------------------------------- |
@@ -254,7 +255,7 @@ LX Studio uses **Skillsoft Text** for body and headlines and **Skillsoft Sans**
254
255
  | `monospace` | Monaco, Menlo, Ubuntu Mono, Droid Sans Mono, Consolas | Code editor contexts |
255
256
  | `system` | System UI fonts | Performance-critical surfaces |
256
257
 
257
- Skillsoft fonts are loaded via Gamut's asset provider (same stack as Percipio).
258
+ Skillsoft fonts are loaded via Gamut's asset provider.
258
259
 
259
260
  ### Rules
260
261
 
@@ -266,14 +267,14 @@ Skillsoft fonts are loaded via Gamut's asset provider (same stack as Percipio).
266
267
 
267
268
  ### Font weight scale
268
269
 
269
- | Token | Value | Use |
270
- | ------- | ------- | ---------------------------------------------------- |
271
- | `base` | 400 | Body text, UI labels |
272
- | `title` | **500** | Headlines, CTAs, buttons _(differs from Core's 700)_ |
270
+ | Token | Value | Use |
271
+ | ------- | ------- | ------------------------ |
272
+ | `base` | 400 | Body text, UI labels |
273
+ | `title` | **500** | Headlines, CTAs, buttons |
273
274
 
274
275
  ### Font size scale
275
276
 
276
- Shared with Core β€” all sizes are identical.
277
+ Standard Gamut font size scale:
277
278
 
278
279
  | Token key | Size | Common use |
279
280
  | --------- | ---- | ---------------------------- |
@@ -289,7 +290,7 @@ Shared with Core β€” all sizes are identical.
289
290
 
290
291
  ### Line height scale
291
292
 
292
- Shared with Core.
293
+ Standard Gamut line height scale:
293
294
 
294
295
  | Token | Value | Use |
295
296
  | ------------- | ----- | ------------------------------- |
@@ -305,7 +306,7 @@ Target 45–85 characters per line; 66 characters is ideal. Max 50 for multi-col
305
306
 
306
307
  ## Spacing Scale
307
308
 
308
- Identical to Core. All spacing is multiples of 4px on an 8px grid.
309
+ All spacing is multiples of 4px on an 8px grid.
309
310
 
310
311
  | Token | Value |
311
312
  | ----- | ----- |
@@ -325,22 +326,20 @@ Identical to Core. All spacing is multiples of 4px on an 8px grid.
325
326
 
326
327
  ## Border Radius Scale
327
328
 
328
- LX Studio uses larger border radii than Core β€” everything is one step softer.
329
-
330
- | Token | LX Studio | Core | Use |
331
- | ------ | --------- | ----- | ------------------------------------------ |
332
- | `none` | 0px | 0px | Square / non-interactive elements |
333
- | `sm` | **4px** | 2px | Subtle rounding, tags, checkboxes |
334
- | `md` | **8px** | 4px | Default buttons, inputs, interactive cards |
335
- | `lg` | **12px** | 8px | Cards, panels |
336
- | `xl` | 16px | 16px | Large cards, modals |
337
- | `full` | 999px | 999px | Pills, avatars, circular elements |
329
+ | Token | Value | Use |
330
+ | ------ | ----- | ------------------------ |
331
+ | `none` | 0px | Non-interactive elements |
332
+ | `sm` | 4px | Overlays |
333
+ | `md` | 8px | Interactive elements |
334
+ | `lg` | 12px | Non-interactive elements |
335
+ | `xl` | 16px | Non-interactive elements |
336
+ | `full` | 999px | Toggles, badges |
338
337
 
339
338
  ---
340
339
 
341
340
  ## Responsive Behavior
342
341
 
343
- Identical to Core. Mobile-first, apply styles from the named breakpoint up.
342
+ Mobile-first; apply styles from the named breakpoint up.
344
343
 
345
344
  | Token | Min-width | Max content |
346
345
  | -------- | --------- | ----------- |
@@ -365,16 +364,14 @@ Minimum interactive touch target: **44Γ—44px** on mobile breakpoints.
365
364
 
366
365
  ## Component Library
367
366
 
368
- Same component library as Codecademy β€” all atoms, molecules, and organisms apply. Token values resolve differently per theme automatically.
367
+ Gamut atoms, molecules, and organisms all apply. Use semantic tokens below for LX Studio styling.
369
368
 
370
- Key LX Studio-specific visual differences:
369
+ Key patterns:
371
370
 
372
- - `FillButton` uses `primary` (`sapphire`) instead of Core `hyper-500`
373
- - `FillButton` hover uses `primary-hover` (`navy-800`) β€” darker on hover
374
- - `Checkbox` / `Toggle` use palette `hyper-500` (not `primary`)
375
- - All interactive elements have `borderRadius: md` (8px) instead of Core's 4px
376
- - `Card` shadows use navy-200 (soft) rather than navy-800 (hard)
377
- - No `Card-beige` variant β€” LX Studio `background-primary` is off-white, not beige
371
+ - `FillButton` β€” `bg: primary` (`sapphire`), `hover: primary-hover` (`navy-800`)
372
+ - `Checkbox` / `Toggle` β€” `primary`, `hover: primary-hover` (same as `FillButton`)
373
+ - Buttons and inputs β€” `borderRadius: md` (8px)
374
+ - `Card` β€” `shadow-primary` (`navy-200`); elevated surfaces use `background-primary` (`lxStudioBgPrimary`), not beige
378
375
 
379
376
  ---
380
377
 
@@ -385,13 +382,13 @@ Key LX Studio-specific visual differences:
385
382
  - **Do** use semantic color aliases (`primary`, `text`, `background`, etc.) β€” never hardcode hex values.
386
383
  - **Do** use `primary` (resolves to palette `sapphire`) for buttons and links.
387
384
  - **Don't** attempt dark mode β€” LX Studio is light only.
388
- - **Don't** use the Percipio or Codecademy primary blue/hyper colors directly; go through semantic aliases.
385
+ - **Don't** use raw palette swatches for adaptive UI β€” use semantic aliases.
389
386
 
390
387
  ### Typography
391
388
 
392
389
  - **Do** use `fontWeight="title"` (500) for headlines, CTAs, and buttons.
393
390
  - **Do** keep body text at 150–175% line height for readability.
394
- - **Don't** use Apercu, Suisse, or Hanken Grotesk β€” LX Studio uses Skillsoft Text and Skillsoft Sans.
391
+ - **Don't** use fonts outside the LX Studio theme stack (Skillsoft Text, Skillsoft Sans).
395
392
  - **Don't** right-align or center-align body paragraphs.
396
393
  - **Don't** adjust letter-spacing.
397
394
 
@@ -427,7 +424,7 @@ Quick color/token reference for generating or specifying LX Studio UI:
427
424
  ```
428
425
  FillButton β†’ bg: primary, color: white, hover: primary-hover, borderRadius: md
429
426
  StrokeButton β†’ bg: transparent, borderColor: secondary
430
- Checkbox/Toggle β†’ palette hyper-500, hover hyper-400, borderRadius: sm
427
+ Checkbox/Toggle β†’ bg: primary, hover: primary-hover, borderRadius: sm
431
428
  Card β†’ bg: background, shadow: shadow-primary (navy-200, soft), radius: none
432
429
  Alert (error) β†’ uses feedback-error + background-error
433
430
  Alert (success) β†’ uses feedback-success + background-success
@@ -118,21 +118,23 @@ This file defines the visual design tokens for the Skillsoft Percipio platform,
118
118
 
119
119
  **Storybook**: https://gamut.codecademy.com
120
120
 
121
+ > **Other Gamut themes:** This document covers **Percipio** only. For Codecademy (Core/Admin/Platform) or LX Studio, install that product's `DESIGN.md` instead: `gamut plugin install cursor --theme core` or `--theme lxstudio`.
122
+
121
123
  ---
122
124
 
123
125
  ## Visual Theme & Atmosphere
124
126
 
125
- Percipio communicates **professional clarity** β€” clean, trustworthy, and enterprise-ready. The design voice is more neutral and corporate than Codecademy: less playful, more functional. Primary blue drives interactive affordances; neutral grays define text and structure.
127
+ Percipio communicates **professional clarity** β€” clean, trustworthy, and enterprise-ready. The design voice is neutral and corporate: functional, with clear hierarchy. Brand blue drives interactive affordances; neutral grays define text and structure.
126
128
 
127
- **Density**: Medium. Consistent with Codecademy layouts but with softer shadows and a lighter overall feel due to the muted neutral palette.
129
+ **Density**: Medium. Information-dense layouts with softer shadows and a muted neutral palette.
128
130
 
129
131
  **Design philosophy**:
130
132
 
131
133
  - Light mode only β€” no dark mode support
132
- - Brand blue (`sapphire` / `primary`) replaces Codecademy's `hyper-500` for buttons, links, and focus rings
133
- - Text is near-black dark gray rather than navy
134
- - Shadows are soft and minimal (navy at low opacity) rather than hard borders
135
- - Title font weight is 500 (medium) rather than 700 (bold) β€” Percipio headlines are less heavy
134
+ - Brand blue (`sapphire` / `primary`) for buttons, links, and focus rings
135
+ - Text uses dedicated Percipio palette tokens (`percipioTextPrimary`, etc.)
136
+ - Shadows are soft and minimal (`shadow-primary` β†’ `navy-200`)
137
+ - Title font weight is **500** via `fontWeight="title"` β€” use semantic weight, not literal `700`
136
138
 
137
139
  ---
138
140
 
@@ -212,7 +214,7 @@ Percipio's border weights use a non-standard order: `primary` is mid-weight, `se
212
214
  | `shadow-primary` | `navy-200` |
213
215
  | `shadow-secondary` | `navy-400` |
214
216
 
215
- Percipio shadows are softer than Codecademy's β€” use `shadow-primary` for standard elevated surfaces.
217
+ Use `shadow-primary` for standard elevated surfaces.
216
218
 
217
219
  ---
218
220
 
@@ -264,16 +266,14 @@ Percipio uses **Skillsoft Text** for body and headlines and **Skillsoft Sans** f
264
266
 
265
267
  ### Font weight scale
266
268
 
267
- Percipio overrides the title weight from Core's 700 to 500 (medium). This gives Percipio a lighter, less heavy headline style.
268
-
269
- | Token | Value | Use |
270
- | ------- | ------- | ---------------------------------------------------------- |
271
- | `base` | 400 | Body text, UI labels |
272
- | `title` | **500** | Headlines, CTAs, buttons _(differs from Codecademy's 700)_ |
269
+ | Token | Value | Use |
270
+ | ------- | ------- | ------------------------ |
271
+ | `base` | 400 | Body text, UI labels |
272
+ | `title` | **500** | Headlines, CTAs, buttons |
273
273
 
274
274
  ### Font size scale
275
275
 
276
- Shared with Core β€” all sizes are identical.
276
+ Standard Gamut font size scale:
277
277
 
278
278
  | Token key | Size | Common use |
279
279
  | --------- | ---- | ---------------------------- |
@@ -289,7 +289,7 @@ Shared with Core β€” all sizes are identical.
289
289
 
290
290
  ### Line height scale
291
291
 
292
- Shared with Core.
292
+ Standard Gamut line height scale:
293
293
 
294
294
  | Token | Value | Use |
295
295
  | ------------- | ----- | ------------------------------- |
@@ -305,7 +305,7 @@ Target 45–85 characters per line; 66 characters is ideal. Max 50 for multi-col
305
305
 
306
306
  ## Spacing Scale
307
307
 
308
- Identical to Core. All spacing is multiples of 4px on an 8px grid.
308
+ All spacing is multiples of 4px on an 8px grid.
309
309
 
310
310
  | Token | Value |
311
311
  | ----- | ----- |
@@ -325,22 +325,20 @@ Identical to Core. All spacing is multiples of 4px on an 8px grid.
325
325
 
326
326
  ## Border Radius Scale
327
327
 
328
- Identical to Core.
329
-
330
- | Token | Value | Use |
331
- | ------ | ----- | ------------------------------------------ |
332
- | `none` | 0px | Square / non-interactive elements |
333
- | `sm` | 2px | Subtle rounding, tags |
334
- | `md` | 4px | Default buttons, inputs, interactive cards |
335
- | `lg` | 8px | Cards, panels |
336
- | `xl` | 16px | Large cards, modals |
337
- | `full` | 999px | Pills, avatars, circular elements |
328
+ | Token | Value | Use |
329
+ | ------ | ----- | ------------------------ |
330
+ | `none` | 0px | Non-interactive elements |
331
+ | `sm` | 2px | Overlays |
332
+ | `md` | 4px | Interactive elements |
333
+ | `lg` | 8px | Non-interactive elements |
334
+ | `xl` | 16px | Non-interactive elements |
335
+ | `full` | 999px | Toggles, badges |
338
336
 
339
337
  ---
340
338
 
341
339
  ## Responsive Behavior
342
340
 
343
- Identical to Core. Mobile-first, apply styles from the named breakpoint up.
341
+ Mobile-first; apply styles from the named breakpoint up.
344
342
 
345
343
  | Token | Min-width | Max content |
346
344
  | -------- | --------- | ----------- |
@@ -365,15 +363,13 @@ Minimum interactive touch target: **44Γ—44px** on mobile breakpoints.
365
363
 
366
364
  ## Component Library
367
365
 
368
- Same component library as Codecademy β€” all atoms, molecules, and organisms apply. Token values resolve differently per theme automatically.
366
+ Gamut atoms, molecules, and organisms all apply. Use semantic tokens below for Percipio-specific styling.
369
367
 
370
- Key Percipio-specific visual differences:
368
+ Key patterns:
371
369
 
372
- - `FillButton` uses `primary` (`sapphire`) instead of Core `hyper-500`
373
- - `FillButton` hover uses `primary-hover` (`percipioActionPrimaryHover`) rather than a lighter blue
374
- - `Checkbox` / `Toggle` use `primary` (`sapphire`)
375
- - `Card` has softer `shadow-primary` (`navy-200` vs `navy-800` in Codecademy light mode)
376
- - Card shadow patterns (`patternLeft`, `patternRight`) are available but rarely used in Percipio UIs
370
+ - `FillButton` β€” `bg: primary`, `hover: primary-hover`
371
+ - `Checkbox` / `Toggle` β€” `primary`, `hover: primary-hover`
372
+ - `Card` β€” `shadow-primary` (`navy-200`); `patternLeft` / `patternRight` are available but rarely used
377
373
 
378
374
  ---
379
375
 
@@ -383,14 +379,13 @@ Key Percipio-specific visual differences:
383
379
 
384
380
  - **Do** use semantic color aliases (`primary`, `text`, `background`, etc.) β€” never hardcode hex values.
385
381
  - **Do** use `primary` (resolves to palette `sapphire`) as the brand interactive color.
386
- - **Don't** use Codecademy's hyper-purple or yellow in Percipio contexts.
387
382
  - **Don't** attempt dark mode β€” Percipio is light only.
388
383
 
389
384
  ### Typography
390
385
 
391
386
  - **Do** use title weight (500) for headlines, CTAs, and buttons β€” not 700.
392
387
  - **Do** keep body text at 150–175% line height for readability.
393
- - **Don't** use Apercu or Suisse β€” Percipio uses Skillsoft Text and Skillsoft Sans.
388
+ - **Don't** use fonts outside the Percipio theme stack (Skillsoft Text, Skillsoft Sans, Roboto Mono for code).
394
389
  - **Don't** right-align or center-align body paragraphs.
395
390
  - **Don't** adjust letter-spacing.
396
391
 
@@ -1,7 +1,12 @@
1
- Product-specific design context lives in this directory:
1
+ Product-specific design context lives in this directory. **Use one `DESIGN.md` per app β€” matched to the Gamut theme that app uses.**
2
2
 
3
- - `DESIGN.Codecademy.md` β€” Core, Admin, and Platform themes
4
- - `DESIGN.Percipio.md` β€” Percipio theme
5
- - `DESIGN.LXStudio.md` β€” LX Studio theme
3
+ | Source file | Install with `--theme` |
4
+ | ---------------------- | --------------------------------------------------------- |
5
+ | `DESIGN.Codecademy.md` | `core`, `admin`, `platform` (aliases: `codecademy`, `cc`) |
6
+ | `DESIGN.Percipio.md` | `percipio` |
7
+ | `DESIGN.LXStudio.md` | `lxstudio` (alias: `lx-studio`) |
6
8
 
7
- Install into your app repo with `gamut plugin install cursor --theme <core|percipio|lxstudio|admin|platform>` (or `claude`) to copy the matching file to the repo root as `DESIGN.md`.
9
+ ```sh
10
+ gamut plugin install cursor --theme <name>
11
+ # refresh: gamut plugin update cursor --theme <name> --force
12
+ ```
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@codecademy/gamut",
3
3
  "description": "Styleguide & Component library for Codecademy",
4
- "version": "68.7.1-alpha.89ca82.0",
4
+ "version": "68.7.1",
5
5
  "author": "Codecademy Engineering <dev@codecademy.com>",
6
6
  "bin": "./bin/gamut.mjs",
7
7
  "dependencies": {
8
- "@codecademy/gamut-icons": "9.57.6-alpha.89ca82.0",
9
- "@codecademy/gamut-illustrations": "0.58.12-alpha.89ca82.0",
10
- "@codecademy/gamut-patterns": "0.10.31-alpha.89ca82.0",
11
- "@codecademy/gamut-styles": "18.0.1-alpha.89ca82.0",
12
- "@codecademy/variance": "0.26.2-alpha.89ca82.0",
8
+ "@codecademy/gamut-icons": "9.57.5",
9
+ "@codecademy/gamut-illustrations": "0.58.11",
10
+ "@codecademy/gamut-patterns": "0.10.30",
11
+ "@codecademy/gamut-styles": "18.0.0",
12
+ "@codecademy/variance": "0.26.1",
13
13
  "@formatjs/intl-locale": "5.3.1",
14
14
  "@react-aria/interactions": "3.25.0",
15
15
  "@types/marked": "^4.0.8",