@codecademy/gamut 68.7.0 β 68.7.1-alpha.1ea5a8.0
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.
- package/agent-tools/DESIGN.Codecademy.md +90 -120
- package/agent-tools/DESIGN.LXStudio.md +127 -132
- package/agent-tools/DESIGN.Percipio.md +129 -134
- package/agent-tools/DESIGN.md +12 -1
- package/package.json +6 -6
|
@@ -8,12 +8,13 @@ colors:
|
|
|
8
8
|
hyper-400: '#5533FF'
|
|
9
9
|
navy-900: '#0A0D1C'
|
|
10
10
|
navy-800: '#10162F'
|
|
11
|
-
navy-700: '
|
|
12
|
-
navy-600: '
|
|
13
|
-
navy-500: '
|
|
14
|
-
navy-
|
|
15
|
-
navy-
|
|
16
|
-
navy-
|
|
11
|
+
navy-700: 'rgba(16, 22, 47, 0.86)'
|
|
12
|
+
navy-600: 'rgba(16, 22, 47, 0.75)'
|
|
13
|
+
navy-500: 'rgba(16, 22, 47, 0.63)'
|
|
14
|
+
navy-400: 'rgba(16, 22, 47, 0.47)'
|
|
15
|
+
navy-300: 'rgba(16, 22, 47, 0.28)'
|
|
16
|
+
navy-200: 'rgba(16, 22, 47, 0.12)'
|
|
17
|
+
navy-100: 'rgba(16, 22, 47, 0.04)'
|
|
17
18
|
yellow-500: '#FFD300'
|
|
18
19
|
yellow-400: '#CCA900'
|
|
19
20
|
yellow-0: '#FFFAE5'
|
|
@@ -77,8 +78,6 @@ typography:
|
|
|
77
78
|
fontSize: '2.125rem'
|
|
78
79
|
fontWeight: '700'
|
|
79
80
|
lineHeight: '1.2'
|
|
80
|
-
hankenGrotesk:
|
|
81
|
-
fontFamily: '"Hanken Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif'
|
|
82
81
|
monospace:
|
|
83
82
|
fontFamily: 'Monaco, Menlo, "Ubuntu Mono", "Droid Sans Mono", Consolas, monospace'
|
|
84
83
|
rounded:
|
|
@@ -181,6 +180,8 @@ This file defines the visual design tokens for codecademy.com, implemented using
|
|
|
181
180
|
**Figma file**: https://www.figma.com/design/ReGfRNillGABAj5SlITalN/π-Gamut
|
|
182
181
|
**Storybook**: https://gamut.codecademy.com
|
|
183
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
|
+
|
|
184
185
|
---
|
|
185
186
|
|
|
186
187
|
## Visual Theme & Atmosphere
|
|
@@ -192,7 +193,7 @@ Codecademy communicates **logic with personality** β structured and trustworth
|
|
|
192
193
|
**Design philosophy**:
|
|
193
194
|
|
|
194
195
|
- Components are color modeβaware by default β never hardcode hex values for adaptive UI
|
|
195
|
-
- Every component works across
|
|
196
|
+
- Every component works across Core, Admin, and Platform without modification
|
|
196
197
|
- Mobile-first responsive design built on a 12-column grid
|
|
197
198
|
- Accessibility is guaranteed by design: semantic color tokens meet contrast requirements per mode automatically
|
|
198
199
|
|
|
@@ -200,46 +201,17 @@ Codecademy communicates **logic with personality** β structured and trustworth
|
|
|
200
201
|
|
|
201
202
|
## Themes
|
|
202
203
|
|
|
203
|
-
Codecademy products use
|
|
204
|
-
|
|
205
|
-
| Theme | Use case | Base font | Dark mode |
|
|
206
|
-
| ------------- | ------------------------------- | -------------- | -------------- |
|
|
207
|
-
| **Core** | Codecademy (default) | Apercu | β light + dark |
|
|
208
|
-
| **Admin** | Codecademy admin tools | Apercu | β light + dark |
|
|
209
|
-
| **Platform** | Codecademy learning environment | Apercu | β light + dark |
|
|
210
|
-
| **LX Studio** | LX Studio application | Hanken Grotesk | light only |
|
|
211
|
-
|
|
212
|
-
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.
|
|
213
|
-
|
|
214
|
-
**Font licensing**: Apercu is licensed for codecademy.com only. LX Studio uses Hanken Grotesk.
|
|
215
|
-
|
|
216
|
-
For Percipio projects, use `DESIGN.Percipio.md` from the same package instead.
|
|
217
|
-
|
|
218
|
-
### LX Studio theme overrides
|
|
219
|
-
|
|
220
|
-
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.
|
|
221
205
|
|
|
222
|
-
|
|
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 |
|
|
223
211
|
|
|
224
|
-
|
|
212
|
+
Set the active theme at the app root via `<GamutProvider theme={coreTheme | adminTheme | platformTheme}>`.
|
|
225
213
|
|
|
226
|
-
|
|
227
|
-
| ----- | ---- | --------- |
|
|
228
|
-
| `sm` | 2px | 4px |
|
|
229
|
-
| `md` | 4px | 8px |
|
|
230
|
-
| `lg` | 8px | 12px |
|
|
231
|
-
|
|
232
|
-
**Semantic color overrides (light mode)**:
|
|
233
|
-
|
|
234
|
-
| Token | Core value | LX Studio value |
|
|
235
|
-
| -------------------- | ------------------- | ------------------------------- |
|
|
236
|
-
| `primary` | hyper-500 `#3A10E5` | `#5628FE` (lxStudioPurple) |
|
|
237
|
-
| `primary-hover` | hyper-400 `#5533FF` | `#7955FC` (lxStudioPurpleHover) |
|
|
238
|
-
| `feedback-success` | green-700 `#008A27` | `#06844F` (lxStudioSuccess) |
|
|
239
|
-
| `background-primary` | beige `#FFF0E5` | `#FAFBFC` (lxStudioBgPrimary) |
|
|
240
|
-
| `shadow-primary` | navy-800 | navy-200 |
|
|
241
|
-
| `border-primary` | navy-800 | navy-400 |
|
|
242
|
-
| `border-disabled` | navy-500 | navy-300 |
|
|
214
|
+
**Font licensing:** Apercu is licensed for codecademy.com only.
|
|
243
215
|
|
|
244
216
|
---
|
|
245
217
|
|
|
@@ -249,55 +221,55 @@ Use these token names when specifying colors in designs. They resolve to the cor
|
|
|
249
221
|
|
|
250
222
|
### Text
|
|
251
223
|
|
|
252
|
-
| Token | Light
|
|
253
|
-
| ---------------- |
|
|
254
|
-
| `text` | navy-800
|
|
255
|
-
| `text-accent` | navy-900
|
|
256
|
-
| `text-secondary` | navy-800 at 75%
|
|
257
|
-
| `text-disabled` | navy-800 at 63%
|
|
224
|
+
| Token | Light | Dark | Use for |
|
|
225
|
+
| ---------------- | --------------- | ------------ | --------------------------- |
|
|
226
|
+
| `text` | `navy-800` | `white` | Default body and UI text |
|
|
227
|
+
| `text-accent` | `navy-900` | `beige` | Stronger emphasis text |
|
|
228
|
+
| `text-secondary` | navy-800 at 75% | white at 65% | Supporting / secondary copy |
|
|
229
|
+
| `text-disabled` | navy-800 at 63% | white at 50% | Disabled state labels |
|
|
258
230
|
|
|
259
231
|
### Background
|
|
260
232
|
|
|
261
|
-
| Token | Light
|
|
262
|
-
| --------------------- |
|
|
263
|
-
| `background` | white
|
|
264
|
-
| `background-primary` | beige
|
|
265
|
-
| `background-contrast` | white
|
|
266
|
-
| `background-selected` | navy-800 at 4%
|
|
267
|
-
| `background-hover` | navy-800 at 12%
|
|
268
|
-
| `background-disabled` | navy-800 at 12%
|
|
269
|
-
| `background-success` | green-0
|
|
270
|
-
| `background-warning` | yellow-0
|
|
271
|
-
| `background-error` | red-0
|
|
233
|
+
| Token | Light | Dark | Use for |
|
|
234
|
+
| --------------------- | --------------- | ------------ | --------------------------------- |
|
|
235
|
+
| `background` | `white` | `navy-800` | Default page/component background |
|
|
236
|
+
| `background-primary` | `beige` | `navy-900` | Slightly elevated surfaces |
|
|
237
|
+
| `background-contrast` | `white` | `black` | Maximum contrast surface |
|
|
238
|
+
| `background-selected` | navy-800 at 4% | white at 4% | Selected row / item |
|
|
239
|
+
| `background-hover` | navy-800 at 12% | white at 9% | Hover state overlay |
|
|
240
|
+
| `background-disabled` | navy-800 at 12% | white at 9% | Disabled surface |
|
|
241
|
+
| `background-success` | `green-0` | `green-900` | Success state container |
|
|
242
|
+
| `background-warning` | `yellow-0` | `yellow-900` | Warning state container |
|
|
243
|
+
| `background-error` | `red-0` | `red-900` | Error state container |
|
|
272
244
|
|
|
273
245
|
### Interactive
|
|
274
246
|
|
|
275
|
-
| Token | Light
|
|
276
|
-
| ----------------- |
|
|
277
|
-
| `primary` | hyper-500
|
|
278
|
-
| `primary-hover` | hyper-400
|
|
279
|
-
| `primary-inverse` | yellow-500
|
|
280
|
-
| `secondary` | navy-800
|
|
281
|
-
| `secondary-hover` | navy-800 at 86%
|
|
282
|
-
| `danger` | red-500
|
|
283
|
-
| `danger-hover` | red-600
|
|
247
|
+
| Token | Light | Dark | Use for |
|
|
248
|
+
| ----------------- | --------------- | ------------ | ------------------------------------ |
|
|
249
|
+
| `primary` | `hyper-500` | `yellow-500` | Primary CTA, links, focus rings |
|
|
250
|
+
| `primary-hover` | `hyper-400` | `yellow-400` | Hover state of primary interactive |
|
|
251
|
+
| `primary-inverse` | `yellow-500` | `hyper-500` | Primary on a colored background |
|
|
252
|
+
| `secondary` | `navy-800` | `white` | Secondary CTA, ghost buttons |
|
|
253
|
+
| `secondary-hover` | navy-800 at 86% | white at 80% | Hover state of secondary interactive |
|
|
254
|
+
| `danger` | `red-500` | `red-300` | Destructive actions, error states |
|
|
255
|
+
| `danger-hover` | `red-600` | `red-400` | Hover on danger interactive |
|
|
284
256
|
|
|
285
257
|
### Border
|
|
286
258
|
|
|
287
|
-
| Token | Light
|
|
288
|
-
| ------------------ |
|
|
289
|
-
| `border-primary` | navy-800
|
|
290
|
-
| `border-secondary` | navy-800 at 75%
|
|
291
|
-
| `border-tertiary` | navy-800 at 28%
|
|
292
|
-
| `border-disabled` | navy-800 at 63%
|
|
259
|
+
| Token | Light | Dark | Use for |
|
|
260
|
+
| ------------------ | --------------- | ------------ | -------------------------- |
|
|
261
|
+
| `border-primary` | `navy-800` | `white` | Strong borders, dividers |
|
|
262
|
+
| `border-secondary` | navy-800 at 75% | white at 65% | Medium-weight borders |
|
|
263
|
+
| `border-tertiary` | navy-800 at 28% | white at 20% | Subtle borders, separators |
|
|
264
|
+
| `border-disabled` | navy-800 at 63% | white at 50% | Disabled input borders |
|
|
293
265
|
|
|
294
266
|
### Feedback
|
|
295
267
|
|
|
296
|
-
| Token | Light
|
|
297
|
-
| ------------------ |
|
|
298
|
-
| `feedback-error` | red-600
|
|
299
|
-
| `feedback-success` | green-700
|
|
300
|
-
| `feedback-warning` | yellow
|
|
268
|
+
| Token | Light | Dark | Use for |
|
|
269
|
+
| ------------------ | ----------- | ----------- | -------------------------------- |
|
|
270
|
+
| `feedback-error` | `red-600` | `red-300` | Error messages, validation |
|
|
271
|
+
| `feedback-success` | `green-700` | `green-400` | Success messages, confirmations |
|
|
272
|
+
| `feedback-warning` | `yellow` | `yellow-0` | Warning messages, caution states |
|
|
301
273
|
|
|
302
274
|
### Shadow
|
|
303
275
|
|
|
@@ -314,32 +286,28 @@ All colors available as static tokens regardless of color mode. Use these only w
|
|
|
314
286
|
|
|
315
287
|
### Core Palette
|
|
316
288
|
|
|
317
|
-
| Name | Weights available | Notes
|
|
318
|
-
| --------------- | ---------------------------- |
|
|
319
|
-
| `navy` | 100β900 | 100β700 are rgba transparencies of
|
|
320
|
-
| `white` | 100β700 | rgba transparencies of
|
|
321
|
-
| `blue` | 0, 100, 300, 400, 500, 800 |
|
|
322
|
-
| `hyper` | 400, 500 |
|
|
323
|
-
| `green` | 0, 100, 400, 700, 900 |
|
|
324
|
-
| `yellow` | 0, 400, 500, 900 |
|
|
325
|
-
| `red` | 0, 300, 400, 500, 600, 900 |
|
|
326
|
-
| `gray` | 100, 200, 300, 600, 800, 900 |
|
|
327
|
-
| `pink` | 0, 400 |
|
|
328
|
-
| `orange` | 100, 500 |
|
|
329
|
-
| `beige` | 100 (alias: `beige`) |
|
|
330
|
-
| `black` | β |
|
|
331
|
-
| `white` (solid) | β |
|
|
289
|
+
| Name | Weights available | Notes |
|
|
290
|
+
| --------------- | ---------------------------- | -------------------------------------------------------------------------- |
|
|
291
|
+
| `navy` | 100β900 | 100β700 are rgba transparencies of `navy-800`; 800 and 900 are solid |
|
|
292
|
+
| `white` | 100β700 | rgba transparencies of `white` (no solid white weight β use `white` token) |
|
|
293
|
+
| `blue` | 0, 100, 300, 400, 500, 800 | named alias `blue` maps to `blue-500` |
|
|
294
|
+
| `hyper` | 400, 500 | named alias `hyper` maps to `hyper-500` |
|
|
295
|
+
| `green` | 0, 100, 400, 700, 900 | named alias `green` maps to `green-700` |
|
|
296
|
+
| `yellow` | 0, 400, 500, 900 | named alias `yellow` maps to `yellow-500` |
|
|
297
|
+
| `red` | 0, 300, 400, 500, 600, 900 | named alias `red` maps to `red-500` |
|
|
298
|
+
| `gray` | 100, 200, 300, 600, 800, 900 | |
|
|
299
|
+
| `pink` | 0, 400 | named alias `pink` maps to `pink-400` |
|
|
300
|
+
| `orange` | 100, 500 | named alias `orange` maps to `orange-500` |
|
|
301
|
+
| `beige` | 100 (alias: `beige`) | solid `beige` token |
|
|
302
|
+
| `black` | β | `black` token |
|
|
303
|
+
| `white` (solid) | β | `white` token |
|
|
332
304
|
|
|
333
305
|
**Named aliases** (shorthand for common weights):
|
|
334
306
|
`beige`, `blue`, `green`, `hyper`, `lightBlue`, `lightGreen`, `navy`, `orange`, `paleBlue`, `paleGreen`, `palePink`, `paleRed`, `paleYellow`, `pink`, `red`, `yellow`, `black`, `white`
|
|
335
307
|
|
|
336
308
|
### Platform-only additions
|
|
337
309
|
|
|
338
|
-
`lightBeige
|
|
339
|
-
|
|
340
|
-
### LX Studio additions
|
|
341
|
-
|
|
342
|
-
`lxStudioPurple` (`#5628FE`), `lxStudioPurpleHover` (`#7955FC`), `lxStudioSuccess` (`#06844F`)
|
|
310
|
+
`lightBeige`, `gold`, `teal`, `purple` (Platform theme palette)
|
|
343
311
|
|
|
344
312
|
---
|
|
345
313
|
|
|
@@ -347,14 +315,14 @@ All colors available as static tokens regardless of color mode. Use these only w
|
|
|
347
315
|
|
|
348
316
|
### Typefaces
|
|
349
317
|
|
|
350
|
-
| Token |
|
|
351
|
-
| ----------- | -------------------------------------------------------- |
|
|
352
|
-
| `base` | Apercu Pro (CSS: `Apercu`) |
|
|
353
|
-
| `accent` | Suisse Intl Mono (CSS: `Suisse`); falls back to `Apercu` |
|
|
354
|
-
| `monospace` | Monaco, Menlo, Ubuntu Mono, Droid Sans Mono, Consolas |
|
|
355
|
-
| `system` | System UI fonts |
|
|
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 |
|
|
356
324
|
|
|
357
|
-
**Apercu is licensed for codecademy.com only.**
|
|
325
|
+
**Apercu is licensed for codecademy.com only.**
|
|
358
326
|
|
|
359
327
|
### Rules
|
|
360
328
|
|
|
@@ -454,14 +422,16 @@ Interactive cards (`isInteractive` prop) gain a shadow on hover and `borderRadiu
|
|
|
454
422
|
|
|
455
423
|
## Border Radius Scale
|
|
456
424
|
|
|
457
|
-
| Token | Value | Use
|
|
458
|
-
| ------ | ----- |
|
|
459
|
-
| `none` | 0px |
|
|
460
|
-
| `sm` | 2px |
|
|
461
|
-
| `md` | 4px |
|
|
462
|
-
| `lg` | 8px |
|
|
463
|
-
| `xl` | 16px |
|
|
464
|
-
| `full` | 999px |
|
|
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
|
+
---
|
|
465
435
|
|
|
466
436
|
---
|
|
467
437
|
|
|
@@ -603,8 +573,8 @@ Quick color/token reference for generating or specifying UI:
|
|
|
603
573
|
|
|
604
574
|
| Scenario | Tokens |
|
|
605
575
|
| ---------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
606
|
-
| Primary button (light) | `bg: primary
|
|
607
|
-
| Primary button (dark) | `bg: primary
|
|
576
|
+
| Primary button (light) | `bg: primary`, `color: white`, `hover: primary-hover` |
|
|
577
|
+
| Primary button (dark) | `bg: primary`, `color: text`, `hover: primary-hover` |
|
|
608
578
|
| Body text | `color: text`, `font: base (Apercu Pro)`, `size: 16px`, `weight: 400`, `lineHeight: base (1.5)` |
|
|
609
579
|
| Headline | `color: text-accent`, `font: base`, `size: 34β64px`, `weight: title (700)`, `lineHeight: title (1.2)` |
|
|
610
580
|
| Caption / label | `color: text-secondary`, `font: accent (Suisse Int'l Mono)`, `size: 14px` |
|
|
@@ -4,8 +4,7 @@ name: LX Studio Design System
|
|
|
4
4
|
description: Design tokens for the Skillsoft LX Studio authoring platform.
|
|
5
5
|
colors:
|
|
6
6
|
# LX Studio additions β custom brand tokens
|
|
7
|
-
|
|
8
|
-
lxStudioPurpleHover: '#7955FC'
|
|
7
|
+
sapphire: '#1C50BB'
|
|
9
8
|
lxStudioSuccess: '#06844F'
|
|
10
9
|
lxStudioBgPrimary: '#FAFBFC'
|
|
11
10
|
# core palette β referenced by semantic aliases below
|
|
@@ -13,13 +12,13 @@ colors:
|
|
|
13
12
|
hyper-400: '#5533FF'
|
|
14
13
|
navy-900: '#0A0D1C'
|
|
15
14
|
navy-800: '#10162F'
|
|
16
|
-
navy-700: '
|
|
17
|
-
navy-600: '
|
|
18
|
-
navy-500: '
|
|
19
|
-
navy-400: '
|
|
20
|
-
navy-300: '
|
|
21
|
-
navy-200: '
|
|
22
|
-
navy-100: '
|
|
15
|
+
navy-700: 'rgba(16, 22, 47, 0.86)'
|
|
16
|
+
navy-600: 'rgba(16, 22, 47, 0.75)'
|
|
17
|
+
navy-500: 'rgba(16, 22, 47, 0.63)'
|
|
18
|
+
navy-400: 'rgba(16, 22, 47, 0.47)'
|
|
19
|
+
navy-300: 'rgba(16, 22, 47, 0.28)'
|
|
20
|
+
navy-200: 'rgba(16, 22, 47, 0.12)'
|
|
21
|
+
navy-100: 'rgba(16, 22, 47, 0.04)'
|
|
23
22
|
yellow-500: '#FFD300'
|
|
24
23
|
yellow-0: '#FFFAE5'
|
|
25
24
|
green-700: '#008A27'
|
|
@@ -42,8 +41,8 @@ colors:
|
|
|
42
41
|
background-success: '{colors.green-0}'
|
|
43
42
|
background-warning: '{colors.yellow-0}'
|
|
44
43
|
background-error: '{colors.red-0}'
|
|
45
|
-
primary: '{colors.
|
|
46
|
-
primary-hover: '{colors.
|
|
44
|
+
primary: '{colors.sapphire}'
|
|
45
|
+
primary-hover: '{colors.navy-800}'
|
|
47
46
|
primary-inverse: '{colors.yellow-500}'
|
|
48
47
|
secondary: '{colors.navy-800}'
|
|
49
48
|
secondary-hover: '{colors.navy-700}'
|
|
@@ -60,19 +59,19 @@ colors:
|
|
|
60
59
|
shadow-secondary: '{colors.navy-600}'
|
|
61
60
|
typography:
|
|
62
61
|
base:
|
|
63
|
-
fontFamily: '"
|
|
62
|
+
fontFamily: '"Skillsoft Text", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif'
|
|
64
63
|
fontSize: '1rem'
|
|
65
64
|
fontWeight: '400'
|
|
66
65
|
lineHeight: '1.5'
|
|
67
66
|
accent:
|
|
68
|
-
fontFamily: '"
|
|
67
|
+
fontFamily: '"Skillsoft Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif'
|
|
69
68
|
fontSize: '0.875rem'
|
|
70
69
|
fontWeight: '400'
|
|
71
70
|
lineHeight: '1.5'
|
|
72
71
|
title:
|
|
73
|
-
fontFamily: '"
|
|
72
|
+
fontFamily: '"Skillsoft Text", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif'
|
|
74
73
|
fontSize: '2.125rem'
|
|
75
|
-
fontWeight: '
|
|
74
|
+
fontWeight: '500'
|
|
76
75
|
lineHeight: '1.2'
|
|
77
76
|
monospace:
|
|
78
77
|
fontFamily: 'Monaco, Menlo, "Ubuntu Mono", "Droid Sans Mono", Consolas, monospace'
|
|
@@ -125,10 +124,12 @@ components:
|
|
|
125
124
|
|
|
126
125
|
# LX Studio
|
|
127
126
|
|
|
128
|
-
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
|
|
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.
|
|
129
128
|
|
|
130
129
|
**Storybook**: https://gamut.codecademy.com
|
|
131
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
|
+
|
|
132
133
|
---
|
|
133
134
|
|
|
134
135
|
## Visual Theme & Atmosphere
|
|
@@ -139,11 +140,10 @@ LX Studio communicates **modern professional craft** β clean, precise, and too
|
|
|
139
140
|
|
|
140
141
|
**Design philosophy**:
|
|
141
142
|
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
- Hanken Grotesk replaces Apercu and Suisse across all font roles
|
|
143
|
+
- Larger border radii (`sm`β`lg`) for a softer, more modern feel
|
|
144
|
+
- Brand blue (`sapphire` / `primary`) drives CTAs, buttons, and links
|
|
145
|
+
- Soft shadows (`shadow-primary` β `navy-200`)
|
|
146
|
+
- Skillsoft Text (`base`) and Skillsoft Sans (`accent`) for all UI typography
|
|
147
147
|
|
|
148
148
|
---
|
|
149
149
|
|
|
@@ -151,9 +151,9 @@ LX Studio communicates **modern professional craft** β clean, precise, and too
|
|
|
151
151
|
|
|
152
152
|
LX Studio uses a single Gamut theme β light mode only.
|
|
153
153
|
|
|
154
|
-
| Theme | Use case | Base font
|
|
155
|
-
| ------------- | -------------------------------------- |
|
|
156
|
-
| **LX Studio** | Skillsoft LX Studio authoring platform |
|
|
154
|
+
| Theme | Use case | Base font | Dark mode |
|
|
155
|
+
| ------------- | -------------------------------------- | --------------------- | ---------- |
|
|
156
|
+
| **LX Studio** | Skillsoft LX Studio authoring platform | Skillsoft Text / Sans | light only |
|
|
157
157
|
|
|
158
158
|
The active theme is set at the app root via `<GamutProvider theme={lxStudioTheme}>`.
|
|
159
159
|
|
|
@@ -165,79 +165,78 @@ Use these token names when specifying colors. LX Studio is light mode only β t
|
|
|
165
165
|
|
|
166
166
|
### Text
|
|
167
167
|
|
|
168
|
-
| Token |
|
|
169
|
-
| ---------------- |
|
|
170
|
-
| `text` |
|
|
171
|
-
| `text-accent` |
|
|
172
|
-
| `text-secondary` |
|
|
173
|
-
| `text-disabled` |
|
|
168
|
+
| Token | Resolves to | Use for |
|
|
169
|
+
| ---------------- | ----------- | --------------------------- |
|
|
170
|
+
| `text` | `navy-800` | Default body and UI text |
|
|
171
|
+
| `text-accent` | `navy-900` | Stronger emphasis text |
|
|
172
|
+
| `text-secondary` | `navy-600` | Supporting / secondary copy |
|
|
173
|
+
| `text-disabled` | `navy-500` | Disabled state labels |
|
|
174
174
|
|
|
175
175
|
### Background
|
|
176
176
|
|
|
177
|
-
| Token |
|
|
178
|
-
| --------------------- |
|
|
179
|
-
| `background` |
|
|
180
|
-
| `background-primary` |
|
|
181
|
-
| `background-contrast` |
|
|
182
|
-
| `background-selected` |
|
|
183
|
-
| `background-hover` |
|
|
184
|
-
| `background-disabled` |
|
|
185
|
-
| `background-success` |
|
|
186
|
-
| `background-warning` |
|
|
187
|
-
| `background-error` |
|
|
177
|
+
| Token | Resolves to | Use for |
|
|
178
|
+
| --------------------- | ------------------- | --------------------------------- |
|
|
179
|
+
| `background` | `white` | Default page/component background |
|
|
180
|
+
| `background-primary` | `lxStudioBgPrimary` | Slightly elevated surfaces |
|
|
181
|
+
| `background-contrast` | `white` | Maximum contrast surface |
|
|
182
|
+
| `background-selected` | `navy-100` | Selected row / item |
|
|
183
|
+
| `background-hover` | `navy-200` | Hover state overlay |
|
|
184
|
+
| `background-disabled` | `navy-200` | Disabled surface |
|
|
185
|
+
| `background-success` | `green-0` | Success state container |
|
|
186
|
+
| `background-warning` | `yellow-0` | Warning state container |
|
|
187
|
+
| `background-error` | `red-0` | Error state container |
|
|
188
188
|
|
|
189
189
|
### Interactive
|
|
190
190
|
|
|
191
|
-
| Token |
|
|
192
|
-
| ----------------- |
|
|
193
|
-
| `primary` |
|
|
194
|
-
| `primary-hover` |
|
|
195
|
-
| `primary-inverse` |
|
|
196
|
-
| `secondary` |
|
|
197
|
-
| `secondary-hover` |
|
|
198
|
-
| `danger` |
|
|
199
|
-
| `danger-hover` |
|
|
191
|
+
| Token | Resolves to | Use for |
|
|
192
|
+
| ----------------- | ------------ | ------------------------------------ |
|
|
193
|
+
| `primary` | `sapphire` | Primary CTA, links, focus rings |
|
|
194
|
+
| `primary-hover` | `navy-800` | Hover state of primary interactive |
|
|
195
|
+
| `primary-inverse` | `yellow-500` | Primary on a colored background |
|
|
196
|
+
| `secondary` | `navy-800` | Secondary CTA, ghost buttons |
|
|
197
|
+
| `secondary-hover` | `navy-700` | Hover state of secondary interactive |
|
|
198
|
+
| `danger` | `red-500` | Destructive actions, error states |
|
|
199
|
+
| `danger-hover` | `red-600` | Hover on danger interactive |
|
|
200
200
|
|
|
201
201
|
### Border
|
|
202
202
|
|
|
203
|
-
| Token |
|
|
204
|
-
| ------------------ |
|
|
205
|
-
| `border-primary` |
|
|
206
|
-
| `border-secondary` |
|
|
207
|
-
| `border-tertiary` |
|
|
208
|
-
| `border-disabled` |
|
|
203
|
+
| Token | Resolves to | Use for |
|
|
204
|
+
| ------------------ | ----------- | ------------------------------- |
|
|
205
|
+
| `border-primary` | `navy-400` | Standard input and card borders |
|
|
206
|
+
| `border-secondary` | `navy-600` | Medium-weight borders |
|
|
207
|
+
| `border-tertiary` | `navy-800` | Strong structural borders |
|
|
208
|
+
| `border-disabled` | `navy-300` | Disabled input borders |
|
|
209
209
|
|
|
210
|
-
|
|
210
|
+
`border-primary` resolves to `navy-400` β mid-weight borders for inputs and cards.
|
|
211
211
|
|
|
212
212
|
### Feedback
|
|
213
213
|
|
|
214
|
-
| Token |
|
|
215
|
-
| ------------------ |
|
|
216
|
-
| `feedback-error` |
|
|
217
|
-
| `feedback-success` |
|
|
218
|
-
| `feedback-warning` |
|
|
214
|
+
| Token | Resolves to | Use for |
|
|
215
|
+
| ------------------ | ----------------- | -------------------------------- |
|
|
216
|
+
| `feedback-error` | `red-600` | Error messages, validation |
|
|
217
|
+
| `feedback-success` | `lxStudioSuccess` | Success messages, confirmations |
|
|
218
|
+
| `feedback-warning` | `yellow-500` | Warning messages, caution states |
|
|
219
219
|
|
|
220
220
|
### Shadow
|
|
221
221
|
|
|
222
|
-
| Token |
|
|
223
|
-
| ------------------ |
|
|
224
|
-
| `shadow-primary` |
|
|
225
|
-
| `shadow-secondary` |
|
|
222
|
+
| Token | Resolves to |
|
|
223
|
+
| ------------------ | ----------- |
|
|
224
|
+
| `shadow-primary` | `navy-200` |
|
|
225
|
+
| `shadow-secondary` | `navy-600` |
|
|
226
226
|
|
|
227
|
-
|
|
227
|
+
Use `shadow-primary` for standard elevated surfaces.
|
|
228
228
|
|
|
229
229
|
---
|
|
230
230
|
|
|
231
231
|
## LX Studio Color Palette
|
|
232
232
|
|
|
233
|
-
LX Studio adds
|
|
233
|
+
LX Studio adds named colors to the core palette. Use semantic aliases in code, not these raw names.
|
|
234
234
|
|
|
235
|
-
|
|
|
236
|
-
|
|
|
237
|
-
| `
|
|
238
|
-
| `
|
|
239
|
-
| `
|
|
240
|
-
| `lxStudioBgPrimary` | `#FAFBFC` | `background-primary` |
|
|
235
|
+
| Palette token | Semantic alias(es) |
|
|
236
|
+
| ------------------- | -------------------- |
|
|
237
|
+
| `sapphire` | `primary` |
|
|
238
|
+
| `lxStudioSuccess` | `feedback-success` |
|
|
239
|
+
| `lxStudioBgPrimary` | `background-primary` |
|
|
241
240
|
|
|
242
241
|
The full core swatch palette (navy, hyper, blue, green, yellow, red, etc.) is also available. Raw swatches should only be used for fixed colors that must not adapt (illustrations, data viz, etc.).
|
|
243
242
|
|
|
@@ -247,35 +246,35 @@ The full core swatch palette (navy, hyper, blue, green, yellow, red, etc.) is al
|
|
|
247
246
|
|
|
248
247
|
### Typefaces
|
|
249
248
|
|
|
250
|
-
LX Studio uses **
|
|
249
|
+
LX Studio uses **Skillsoft Text** for body and headlines and **Skillsoft Sans** for accent UI.
|
|
251
250
|
|
|
252
|
-
| Token | Font | Use for
|
|
253
|
-
| ----------- | ----------------------------------------------------- |
|
|
254
|
-
| `base` | `"
|
|
255
|
-
| `accent` | `"
|
|
256
|
-
| `monospace` | Monaco, Menlo, Ubuntu Mono, Droid Sans Mono, Consolas | Code editor contexts
|
|
257
|
-
| `system` | System UI fonts | Performance-critical surfaces
|
|
251
|
+
| Token | Font | Use for |
|
|
252
|
+
| ----------- | ----------------------------------------------------- | ----------------------------------------- |
|
|
253
|
+
| `base` | `"Skillsoft Text"`, sans-serif fallback | All default UI text, headlines, body copy |
|
|
254
|
+
| `accent` | `"Skillsoft Sans"`, sans-serif fallback | Labels, captions, accent UI |
|
|
255
|
+
| `monospace` | Monaco, Menlo, Ubuntu Mono, Droid Sans Mono, Consolas | Code editor contexts |
|
|
256
|
+
| `system` | System UI fonts | Performance-critical surfaces |
|
|
258
257
|
|
|
259
|
-
|
|
258
|
+
Skillsoft fonts are loaded via Gamut's asset provider.
|
|
260
259
|
|
|
261
260
|
### Rules
|
|
262
261
|
|
|
263
|
-
- **
|
|
264
|
-
- **
|
|
262
|
+
- **Skillsoft Text Medium (500)** for headlines, sub-headlines, CTAs, and buttons β use `fontWeight="title"`, not literal `700`.
|
|
263
|
+
- **Skillsoft Text Regular (400)** for body text, UI labels, and menu items.
|
|
265
264
|
- Text is **left-aligned** by default. Center-align only for short marketing headlines. Never right-align.
|
|
266
265
|
- Do not adjust letter-spacing.
|
|
267
|
-
-
|
|
266
|
+
- Skillsoft Sans is the accent face; Skillsoft Text is used for `base` and title styles.
|
|
268
267
|
|
|
269
268
|
### Font weight scale
|
|
270
269
|
|
|
271
|
-
| Token | Value
|
|
272
|
-
| ------- |
|
|
273
|
-
| `base` | 400
|
|
274
|
-
| `title` |
|
|
270
|
+
| Token | Value | Use |
|
|
271
|
+
| ------- | ------- | ------------------------ |
|
|
272
|
+
| `base` | 400 | Body text, UI labels |
|
|
273
|
+
| `title` | **500** | Headlines, CTAs, buttons |
|
|
275
274
|
|
|
276
275
|
### Font size scale
|
|
277
276
|
|
|
278
|
-
|
|
277
|
+
Standard Gamut font size scale:
|
|
279
278
|
|
|
280
279
|
| Token key | Size | Common use |
|
|
281
280
|
| --------- | ---- | ---------------------------- |
|
|
@@ -291,7 +290,7 @@ Shared with Core β all sizes are identical.
|
|
|
291
290
|
|
|
292
291
|
### Line height scale
|
|
293
292
|
|
|
294
|
-
|
|
293
|
+
Standard Gamut line height scale:
|
|
295
294
|
|
|
296
295
|
| Token | Value | Use |
|
|
297
296
|
| ------------- | ----- | ------------------------------- |
|
|
@@ -307,7 +306,7 @@ Target 45β85 characters per line; 66 characters is ideal. Max 50 for multi-col
|
|
|
307
306
|
|
|
308
307
|
## Spacing Scale
|
|
309
308
|
|
|
310
|
-
|
|
309
|
+
All spacing is multiples of 4px on an 8px grid.
|
|
311
310
|
|
|
312
311
|
| Token | Value |
|
|
313
312
|
| ----- | ----- |
|
|
@@ -327,22 +326,20 @@ Identical to Core. All spacing is multiples of 4px on an 8px grid.
|
|
|
327
326
|
|
|
328
327
|
## Border Radius Scale
|
|
329
328
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
|
333
|
-
|
|
|
334
|
-
| `
|
|
335
|
-
| `
|
|
336
|
-
| `
|
|
337
|
-
| `
|
|
338
|
-
| `xl` | 16px | 16px | Large cards, modals |
|
|
339
|
-
| `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 |
|
|
340
337
|
|
|
341
338
|
---
|
|
342
339
|
|
|
343
340
|
## Responsive Behavior
|
|
344
341
|
|
|
345
|
-
|
|
342
|
+
Mobile-first; apply styles from the named breakpoint up.
|
|
346
343
|
|
|
347
344
|
| Token | Min-width | Max content |
|
|
348
345
|
| -------- | --------- | ----------- |
|
|
@@ -367,16 +364,14 @@ Minimum interactive touch target: **44Γ44px** on mobile breakpoints.
|
|
|
367
364
|
|
|
368
365
|
## Component Library
|
|
369
366
|
|
|
370
|
-
|
|
367
|
+
Gamut atoms, molecules, and organisms all apply. Use semantic tokens below for LX Studio styling.
|
|
371
368
|
|
|
372
|
-
Key
|
|
369
|
+
Key patterns:
|
|
373
370
|
|
|
374
|
-
- `FillButton`
|
|
375
|
-
- `
|
|
376
|
-
-
|
|
377
|
-
-
|
|
378
|
-
- `Card` shadows use navy-200 (soft) rather than navy-800 (hard)
|
|
379
|
-
- 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
|
|
380
375
|
|
|
381
376
|
---
|
|
382
377
|
|
|
@@ -385,15 +380,15 @@ Key LX Studio-specific visual differences:
|
|
|
385
380
|
### Colors
|
|
386
381
|
|
|
387
382
|
- **Do** use semantic color aliases (`primary`, `text`, `background`, etc.) β never hardcode hex values.
|
|
388
|
-
- **Do** use `
|
|
383
|
+
- **Do** use `primary` (resolves to palette `sapphire`) for buttons and links.
|
|
389
384
|
- **Don't** attempt dark mode β LX Studio is light only.
|
|
390
|
-
- **Don't** use
|
|
385
|
+
- **Don't** use raw palette swatches for adaptive UI β use semantic aliases.
|
|
391
386
|
|
|
392
387
|
### Typography
|
|
393
388
|
|
|
394
|
-
- **Do** use
|
|
389
|
+
- **Do** use `fontWeight="title"` (500) for headlines, CTAs, and buttons.
|
|
395
390
|
- **Do** keep body text at 150β175% line height for readability.
|
|
396
|
-
- **Don't** use
|
|
391
|
+
- **Don't** use fonts outside the LX Studio theme stack (Skillsoft Text, Skillsoft Sans).
|
|
397
392
|
- **Don't** right-align or center-align body paragraphs.
|
|
398
393
|
- **Don't** adjust letter-spacing.
|
|
399
394
|
|
|
@@ -410,27 +405,27 @@ Key LX Studio-specific visual differences:
|
|
|
410
405
|
|
|
411
406
|
Quick color/token reference for generating or specifying LX Studio UI:
|
|
412
407
|
|
|
413
|
-
| Scenario | Tokens
|
|
414
|
-
| ---------------- |
|
|
415
|
-
| Primary button | `bg: primary
|
|
416
|
-
| Body text | `color: text
|
|
417
|
-
| Headline | `color: text-accent
|
|
418
|
-
| Secondary text | `color: text-secondary
|
|
419
|
-
| Disabled text | `color: text-disabled
|
|
420
|
-
| Elevated surface | `bg: background-primary
|
|
421
|
-
| Card default | `bg: background
|
|
422
|
-
| Error state | `color: feedback-error
|
|
423
|
-
| Success state | `color: feedback-success
|
|
424
|
-
| Warning state | `color: feedback-warning
|
|
425
|
-
| Disabled state | `color: text-disabled
|
|
408
|
+
| Scenario | Tokens |
|
|
409
|
+
| ---------------- | -------------------------------------------------------------------------------------------------- |
|
|
410
|
+
| Primary button | `bg: primary`, `color: white`, `hover: primary-hover`, `borderRadius: md` |
|
|
411
|
+
| Body text | `color: text`, `font: base`, `size: 16`, `weight: 400`, `lineHeight: base` |
|
|
412
|
+
| Headline | `color: text-accent`, `font: base`, `size: 34β64`, `weight: title`, `lineHeight: title` |
|
|
413
|
+
| Secondary text | `color: text-secondary` |
|
|
414
|
+
| Disabled text | `color: text-disabled` |
|
|
415
|
+
| Elevated surface | `bg: background-primary` |
|
|
416
|
+
| Card default | `bg: background`, `borderRadius: none` β add `isInteractive` for hover shadow + `borderRadius: md` |
|
|
417
|
+
| Error state | `color: feedback-error`, `bg: background-error`, `borderColor: danger` |
|
|
418
|
+
| Success state | `color: feedback-success`, `bg: background-success` |
|
|
419
|
+
| Warning state | `color: feedback-warning`, `bg: background-warning` |
|
|
420
|
+
| Disabled state | `color: text-disabled`, `bg: background-disabled`, `borderColor: border-disabled` |
|
|
426
421
|
|
|
427
422
|
### Component token cheatsheet
|
|
428
423
|
|
|
429
424
|
```
|
|
430
|
-
FillButton β bg: primary
|
|
431
|
-
StrokeButton β bg: transparent,
|
|
432
|
-
Checkbox/Toggle β primary
|
|
433
|
-
Card β bg: background, shadow: shadow-primary (
|
|
425
|
+
FillButton β bg: primary, color: white, hover: primary-hover, borderRadius: md
|
|
426
|
+
StrokeButton β bg: transparent, borderColor: secondary
|
|
427
|
+
Checkbox/Toggle β bg: primary, hover: primary-hover, borderRadius: sm
|
|
428
|
+
Card β bg: background, shadow: shadow-primary (navy-200, soft), radius: none
|
|
434
429
|
Alert (error) β uses feedback-error + background-error
|
|
435
430
|
Alert (success) β uses feedback-success + background-success
|
|
436
431
|
Alert (warning) β uses feedback-warning + background-warning
|
|
@@ -5,12 +5,12 @@ description: Design tokens for the Skillsoft Percipio platform.
|
|
|
5
5
|
colors:
|
|
6
6
|
# palette β raw swatches; set once on :root and then always reference by token name, never use hex values directly in code
|
|
7
7
|
percipioTextPrimary: '#222325'
|
|
8
|
-
percipioTextSecondary: '
|
|
8
|
+
percipioTextSecondary: 'rgba(34, 35, 37, 0.75)'
|
|
9
9
|
percipioTextDisabled: '#AFB6C2'
|
|
10
|
-
|
|
10
|
+
sapphire: '#1C50BB'
|
|
11
11
|
percipioActionPrimaryHover: '#141C36'
|
|
12
12
|
percipioActionSecondary: '#6A6E75'
|
|
13
|
-
percipioActionSecondaryHover: '
|
|
13
|
+
percipioActionSecondaryHover: 'rgba(106, 110, 117, 0.86)'
|
|
14
14
|
percipioActionDangerHover: '#A52020'
|
|
15
15
|
percipioDanger: '#B83C3C'
|
|
16
16
|
percipioFeedbackSuccess: '#1B8057'
|
|
@@ -20,10 +20,10 @@ colors:
|
|
|
20
20
|
percipioBgWarning: '#FFF7E0'
|
|
21
21
|
percipioBgError: '#FFF1F5'
|
|
22
22
|
navy-800: '#10162F'
|
|
23
|
-
navy-400: '
|
|
24
|
-
navy-300: '
|
|
25
|
-
navy-200: '
|
|
26
|
-
navy-100: '
|
|
23
|
+
navy-400: 'rgba(16, 22, 47, 0.47)'
|
|
24
|
+
navy-300: 'rgba(16, 22, 47, 0.28)'
|
|
25
|
+
navy-200: 'rgba(16, 22, 47, 0.12)'
|
|
26
|
+
navy-100: 'rgba(16, 22, 47, 0.04)'
|
|
27
27
|
white: '#ffffff'
|
|
28
28
|
# semantic aliases β use these in code, not palette swatches or hex values
|
|
29
29
|
text: '{colors.percipioTextPrimary}'
|
|
@@ -38,7 +38,7 @@ colors:
|
|
|
38
38
|
background-success: '{colors.percipioBgSuccess}'
|
|
39
39
|
background-warning: '{colors.percipioBgWarning}'
|
|
40
40
|
background-error: '{colors.percipioBgError}'
|
|
41
|
-
primary: '{colors.
|
|
41
|
+
primary: '{colors.sapphire}'
|
|
42
42
|
primary-hover: '{colors.percipioActionPrimaryHover}'
|
|
43
43
|
primary-inverse: '{colors.white}'
|
|
44
44
|
secondary: '{colors.percipioActionSecondary}'
|
|
@@ -56,17 +56,17 @@ colors:
|
|
|
56
56
|
shadow-secondary: '{colors.navy-400}'
|
|
57
57
|
typography:
|
|
58
58
|
base:
|
|
59
|
-
fontFamily: '"Roboto", sans-serif'
|
|
59
|
+
fontFamily: '"Skillsoft Text", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif'
|
|
60
60
|
fontSize: '1rem'
|
|
61
61
|
fontWeight: '400'
|
|
62
62
|
lineHeight: '1.5'
|
|
63
63
|
accent:
|
|
64
|
-
fontFamily: '"Roboto", sans-serif'
|
|
64
|
+
fontFamily: '"Skillsoft Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif'
|
|
65
65
|
fontSize: '0.875rem'
|
|
66
66
|
fontWeight: '400'
|
|
67
67
|
lineHeight: '1.5'
|
|
68
68
|
title:
|
|
69
|
-
fontFamily: '"Roboto", sans-serif'
|
|
69
|
+
fontFamily: '"Skillsoft Text", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif'
|
|
70
70
|
fontSize: '2.125rem'
|
|
71
71
|
fontWeight: '500'
|
|
72
72
|
lineHeight: '1.2'
|
|
@@ -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
|
|
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.
|
|
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
|
-
-
|
|
133
|
-
- Text
|
|
134
|
-
- Shadows are soft and minimal (
|
|
135
|
-
- Title font weight is 500
|
|
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
|
|
|
@@ -140,9 +142,9 @@ Percipio communicates **professional clarity** β clean, trustworthy, and enter
|
|
|
140
142
|
|
|
141
143
|
Percipio uses a single Gamut theme β light mode only.
|
|
142
144
|
|
|
143
|
-
| Theme | Use case | Base font
|
|
144
|
-
| ------------ | --------------------------- |
|
|
145
|
-
| **Percipio** | Skillsoft Percipio platform |
|
|
145
|
+
| Theme | Use case | Base font | Dark mode |
|
|
146
|
+
| ------------ | --------------------------- | --------------------- | ---------- |
|
|
147
|
+
| **Percipio** | Skillsoft Percipio platform | Skillsoft Text / Sans | light only |
|
|
146
148
|
|
|
147
149
|
The active theme is set at the app root via `<GamutProvider theme={percipioTheme}>`.
|
|
148
150
|
|
|
@@ -154,65 +156,65 @@ Use these token names when specifying colors. Percipio is light mode only β th
|
|
|
154
156
|
|
|
155
157
|
### Text
|
|
156
158
|
|
|
157
|
-
| Token |
|
|
158
|
-
| ---------------- |
|
|
159
|
-
| `text` |
|
|
160
|
-
| `text-accent` |
|
|
161
|
-
| `text-secondary` |
|
|
162
|
-
| `text-disabled` |
|
|
159
|
+
| Token | Resolves to | Use for |
|
|
160
|
+
| ---------------- | ----------------------- | ------------------------------------------------ |
|
|
161
|
+
| `text` | `percipioTextPrimary` | Default body and UI text |
|
|
162
|
+
| `text-accent` | `percipioTextPrimary` | Emphasis text (same value as `text` in Percipio) |
|
|
163
|
+
| `text-secondary` | `percipioTextSecondary` | Supporting / secondary copy |
|
|
164
|
+
| `text-disabled` | `percipioTextDisabled` | Disabled state labels |
|
|
163
165
|
|
|
164
166
|
### Background
|
|
165
167
|
|
|
166
|
-
| Token |
|
|
167
|
-
| --------------------- |
|
|
168
|
-
| `background` |
|
|
169
|
-
| `background-primary` |
|
|
170
|
-
| `background-selected` |
|
|
171
|
-
| `background-hover` |
|
|
172
|
-
| `background-disabled` |
|
|
173
|
-
| `background-success` |
|
|
174
|
-
| `background-warning` |
|
|
175
|
-
| `background-error` |
|
|
168
|
+
| Token | Resolves to | Use for |
|
|
169
|
+
| --------------------- | ------------------- | --------------------------------- |
|
|
170
|
+
| `background` | `white` | Default page/component background |
|
|
171
|
+
| `background-primary` | `percipioBgPrimary` | Slightly elevated surfaces |
|
|
172
|
+
| `background-selected` | `navy-100` | Selected row / item |
|
|
173
|
+
| `background-hover` | `navy-200` | Hover state overlay |
|
|
174
|
+
| `background-disabled` | `navy-200` | Disabled surface |
|
|
175
|
+
| `background-success` | `percipioBgSuccess` | Success state container |
|
|
176
|
+
| `background-warning` | `percipioBgWarning` | Warning state container |
|
|
177
|
+
| `background-error` | `percipioBgError` | Error state container |
|
|
176
178
|
|
|
177
179
|
### Interactive
|
|
178
180
|
|
|
179
|
-
| Token |
|
|
180
|
-
| ----------------- |
|
|
181
|
-
| `primary` |
|
|
182
|
-
| `primary-hover` |
|
|
183
|
-
| `primary-inverse` |
|
|
184
|
-
| `secondary` |
|
|
185
|
-
| `secondary-hover` |
|
|
186
|
-
| `danger` |
|
|
187
|
-
| `danger-hover` |
|
|
181
|
+
| Token | Resolves to | Use for |
|
|
182
|
+
| ----------------- | ------------------------------ | ------------------------------------ |
|
|
183
|
+
| `primary` | `sapphire` | Primary CTA, links, focus rings |
|
|
184
|
+
| `primary-hover` | `percipioActionPrimaryHover` | Hover state of primary interactive |
|
|
185
|
+
| `primary-inverse` | `white` | Primary on a colored background |
|
|
186
|
+
| `secondary` | `percipioActionSecondary` | Secondary CTA, ghost buttons |
|
|
187
|
+
| `secondary-hover` | `percipioActionSecondaryHover` | Hover state of secondary interactive |
|
|
188
|
+
| `danger` | `percipioDanger` | Destructive actions, error states |
|
|
189
|
+
| `danger-hover` | `percipioActionDangerHover` | Hover on danger interactive |
|
|
188
190
|
|
|
189
191
|
### Border
|
|
190
192
|
|
|
191
193
|
Percipio's border weights use a non-standard order: `primary` is mid-weight, `secondary` is very light, `tertiary` is the strongest (solid navy). Use them for their semantic intent, not their numeric rank.
|
|
192
194
|
|
|
193
|
-
| Token |
|
|
194
|
-
| ------------------ |
|
|
195
|
-
| `border-primary` |
|
|
196
|
-
| `border-secondary` |
|
|
197
|
-
| `border-tertiary` |
|
|
198
|
-
| `border-disabled` |
|
|
195
|
+
| Token | Resolves to | Use for |
|
|
196
|
+
| ------------------ | ----------- | ----------------------------------- |
|
|
197
|
+
| `border-primary` | `navy-400` | Standard input and card borders |
|
|
198
|
+
| `border-secondary` | `navy-200` | Subtle dividers, section separators |
|
|
199
|
+
| `border-tertiary` | `navy-800` | Strong structural borders |
|
|
200
|
+
| `border-disabled` | `navy-300` | Disabled input borders |
|
|
199
201
|
|
|
200
202
|
### Feedback
|
|
201
203
|
|
|
202
|
-
| Token |
|
|
203
|
-
| ------------------ |
|
|
204
|
-
| `feedback-error` |
|
|
205
|
-
| `feedback-success` |
|
|
206
|
-
| `feedback-warning` |
|
|
204
|
+
| Token | Resolves to | Use for |
|
|
205
|
+
| ------------------ | ------------------------- | -------------------------------- |
|
|
206
|
+
| `feedback-error` | `percipioDanger` | Error messages, validation |
|
|
207
|
+
| `feedback-success` | `percipioFeedbackSuccess` | Success messages, confirmations |
|
|
208
|
+
| `feedback-warning` | `percipioFeedbackWarning` | Warning messages, caution states |
|
|
207
209
|
|
|
208
210
|
### Shadow
|
|
209
211
|
|
|
210
|
-
| Token |
|
|
211
|
-
| ------------------ |
|
|
212
|
-
| `shadow-primary` |
|
|
213
|
-
| `shadow-secondary` |
|
|
212
|
+
| Token | Resolves to |
|
|
213
|
+
| ------------------ | ----------- |
|
|
214
|
+
| `shadow-primary` | `navy-200` |
|
|
215
|
+
| `shadow-secondary` | `navy-400` |
|
|
214
216
|
|
|
215
|
-
|
|
217
|
+
Use `shadow-primary` for standard elevated surfaces.
|
|
216
218
|
|
|
217
219
|
---
|
|
218
220
|
|
|
@@ -220,23 +222,23 @@ Percipio shadows are softer than Codecademy's β use `shadow-primary` for stand
|
|
|
220
222
|
|
|
221
223
|
Percipio introduces its own named semantic colors. These are the source values behind the aliases above. Use the semantic aliases in designs, not the raw named colors.
|
|
222
224
|
|
|
223
|
-
|
|
|
224
|
-
| ------------------------------ |
|
|
225
|
-
| `percipioTextPrimary` |
|
|
226
|
-
| `percipioTextSecondary` |
|
|
227
|
-
| `percipioTextDisabled` |
|
|
228
|
-
| `
|
|
229
|
-
| `percipioActionPrimaryHover` |
|
|
230
|
-
| `percipioActionSecondary` |
|
|
231
|
-
| `percipioActionSecondaryHover` |
|
|
232
|
-
| `percipioActionDangerHover` |
|
|
233
|
-
| `percipioDanger` |
|
|
234
|
-
| `percipioFeedbackSuccess` |
|
|
235
|
-
| `percipioFeedbackWarning` |
|
|
236
|
-
| `percipioBgPrimary` |
|
|
237
|
-
| `percipioBgSuccess` |
|
|
238
|
-
| `percipioBgWarning` |
|
|
239
|
-
| `percipioBgError` |
|
|
225
|
+
| Palette token | Semantic alias(es) |
|
|
226
|
+
| ------------------------------ | -------------------------- |
|
|
227
|
+
| `percipioTextPrimary` | `text`, `text-accent` |
|
|
228
|
+
| `percipioTextSecondary` | `text-secondary` |
|
|
229
|
+
| `percipioTextDisabled` | `text-disabled` |
|
|
230
|
+
| `sapphire` | `primary` |
|
|
231
|
+
| `percipioActionPrimaryHover` | `primary-hover` |
|
|
232
|
+
| `percipioActionSecondary` | `secondary` |
|
|
233
|
+
| `percipioActionSecondaryHover` | `secondary-hover` |
|
|
234
|
+
| `percipioActionDangerHover` | `danger-hover` |
|
|
235
|
+
| `percipioDanger` | `danger`, `feedback-error` |
|
|
236
|
+
| `percipioFeedbackSuccess` | `feedback-success` |
|
|
237
|
+
| `percipioFeedbackWarning` | `feedback-warning` |
|
|
238
|
+
| `percipioBgPrimary` | `background-primary` |
|
|
239
|
+
| `percipioBgSuccess` | `background-success` |
|
|
240
|
+
| `percipioBgWarning` | `background-warning` |
|
|
241
|
+
| `percipioBgError` | `background-error` |
|
|
240
242
|
|
|
241
243
|
The full core swatch palette (navy, blue, green, yellow, red, etc.) is also available, but the semantic aliases above are how Percipio maps them. Raw swatches should only be used for fixed colors that must not adapt (illustrations, data viz, etc.).
|
|
242
244
|
|
|
@@ -246,34 +248,32 @@ The full core swatch palette (navy, blue, green, yellow, red, etc.) is also avai
|
|
|
246
248
|
|
|
247
249
|
### Typefaces
|
|
248
250
|
|
|
249
|
-
|
|
251
|
+
Percipio uses **Skillsoft Text** for body and headlines and **Skillsoft Sans** for accent UI. Roboto Mono is used for code; the `system` slot still uses Roboto.
|
|
250
252
|
|
|
251
|
-
| Token | Font
|
|
252
|
-
| ----------- |
|
|
253
|
-
| `base` | `"
|
|
254
|
-
| `accent` | `"
|
|
255
|
-
| `monospace` | `"Roboto Mono", monospace`
|
|
256
|
-
| `system` | `"Roboto", sans-serif`
|
|
253
|
+
| Token | Font | Use for |
|
|
254
|
+
| ----------- | ------------------------------ | ----------------------------------------- |
|
|
255
|
+
| `base` | `"Skillsoft Text", sans-serif` | All default UI text, headlines, body copy |
|
|
256
|
+
| `accent` | `"Skillsoft Sans", sans-serif` | Labels, captions, accent UI |
|
|
257
|
+
| `monospace` | `"Roboto Mono", monospace` | Code editor contexts |
|
|
258
|
+
| `system` | `"Roboto", sans-serif` | Performance-critical surfaces |
|
|
257
259
|
|
|
258
260
|
### Rules
|
|
259
261
|
|
|
260
|
-
- **
|
|
261
|
-
- **
|
|
262
|
+
- **Skillsoft Text Medium (500)** for headlines, sub-headlines, CTAs, and buttons β use `fontWeight="title"`, not literal `700`.
|
|
263
|
+
- **Skillsoft Text Regular (400)** for body text, UI labels, and menu items.
|
|
262
264
|
- Text is **left-aligned** by default. Center-align only for short marketing headlines. Never right-align.
|
|
263
265
|
- Do not adjust letter-spacing.
|
|
264
266
|
|
|
265
267
|
### Font weight scale
|
|
266
268
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
329
|
-
|
|
330
|
-
|
|
|
331
|
-
|
|
|
332
|
-
| `
|
|
333
|
-
| `
|
|
334
|
-
| `
|
|
335
|
-
| `
|
|
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
|
-
|
|
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
|
-
|
|
366
|
+
Gamut atoms, molecules, and organisms all apply. Use semantic tokens below for Percipio-specific styling.
|
|
369
367
|
|
|
370
|
-
Key
|
|
368
|
+
Key patterns:
|
|
371
369
|
|
|
372
|
-
- `FillButton`
|
|
373
|
-
- `
|
|
374
|
-
- `
|
|
375
|
-
- `Card` has softer shadows (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
|
|
|
@@ -382,15 +378,14 @@ Key Percipio-specific visual differences:
|
|
|
382
378
|
### Colors
|
|
383
379
|
|
|
384
380
|
- **Do** use semantic color aliases (`primary`, `text`, `background`, etc.) β never hardcode hex values.
|
|
385
|
-
- **Do** use
|
|
386
|
-
- **Don't** use Codecademy's hyper-purple or yellow in Percipio contexts.
|
|
381
|
+
- **Do** use `primary` (resolves to palette `sapphire`) as the brand interactive color.
|
|
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
|
|
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
|
|
|
@@ -406,27 +401,27 @@ Key Percipio-specific visual differences:
|
|
|
406
401
|
|
|
407
402
|
Quick color/token reference for generating or specifying Percipio UI:
|
|
408
403
|
|
|
409
|
-
| Scenario | Tokens
|
|
410
|
-
| ---------------- |
|
|
411
|
-
| Primary button | `bg: primary
|
|
412
|
-
| Body text | `color: text
|
|
413
|
-
| Headline | `color: text
|
|
414
|
-
| Secondary text | `color: text-secondary
|
|
415
|
-
| Disabled text | `color: text-disabled
|
|
416
|
-
| Elevated surface | `bg: background-primary
|
|
417
|
-
| Card default | `bg: background
|
|
418
|
-
| Error state | `color: feedback-error
|
|
419
|
-
| Success state | `color: feedback-success
|
|
420
|
-
| Warning state | `color: feedback-warning
|
|
421
|
-
| Disabled state | `color: text-disabled
|
|
404
|
+
| Scenario | Tokens |
|
|
405
|
+
| ---------------- | -------------------------------------------------------------------------------------------------- |
|
|
406
|
+
| Primary button | `bg: primary`, `color: primary-inverse`, `hover: primary-hover` |
|
|
407
|
+
| Body text | `color: text`, `font: base`, `size: 16`, `weight: 400`, `lineHeight: base` |
|
|
408
|
+
| Headline | `color: text`, `font: base`, `size: 34β64`, `weight: title`, `lineHeight: title` |
|
|
409
|
+
| Secondary text | `color: text-secondary` |
|
|
410
|
+
| Disabled text | `color: text-disabled` |
|
|
411
|
+
| Elevated surface | `bg: background-primary` |
|
|
412
|
+
| Card default | `bg: background`, `borderRadius: none` β add `isInteractive` for hover shadow + `borderRadius: md` |
|
|
413
|
+
| Error state | `color: feedback-error`, `bg: background-error`, `borderColor: danger` |
|
|
414
|
+
| Success state | `color: feedback-success`, `bg: background-success` |
|
|
415
|
+
| Warning state | `color: feedback-warning`, `bg: background-warning` |
|
|
416
|
+
| Disabled state | `color: text-disabled`, `bg: background-disabled`, `borderColor: border-disabled` |
|
|
422
417
|
|
|
423
418
|
### Component token cheatsheet
|
|
424
419
|
|
|
425
420
|
```
|
|
426
|
-
FillButton β bg: primary
|
|
427
|
-
StrokeButton β bg: transparent,
|
|
428
|
-
Checkbox/Toggle β primary
|
|
429
|
-
Card β bg: background, shadow: shadow-primary (
|
|
421
|
+
FillButton β bg: primary, color: primary-inverse, hover: primary-hover
|
|
422
|
+
StrokeButton β bg: transparent, borderColor: secondary, hover: secondary-hover
|
|
423
|
+
Checkbox/Toggle β bg: primary, hover: primary-hover
|
|
424
|
+
Card β bg: background, shadow: shadow-primary (navy-200, soft)
|
|
430
425
|
Alert (error) β uses feedback-error + background-error
|
|
431
426
|
Alert (success) β uses feedback-success + background-success
|
|
432
427
|
Alert (warning) β uses feedback-warning + background-warning
|
package/agent-tools/DESIGN.md
CHANGED
|
@@ -1 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
Product-specific design context lives in this directory. **Use one `DESIGN.md` per app β matched to the Gamut theme that app uses.**
|
|
2
|
+
|
|
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`) |
|
|
8
|
+
|
|
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.0",
|
|
4
|
+
"version": "68.7.1-alpha.1ea5a8.0",
|
|
5
5
|
"author": "Codecademy Engineering <dev@codecademy.com>",
|
|
6
6
|
"bin": "./bin/gamut.mjs",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@codecademy/gamut-icons": "9.57.
|
|
9
|
-
"@codecademy/gamut-illustrations": "0.58.
|
|
10
|
-
"@codecademy/gamut-patterns": "0.10.
|
|
11
|
-
"@codecademy/gamut-styles": "18.0.0",
|
|
12
|
-
"@codecademy/variance": "0.26.
|
|
8
|
+
"@codecademy/gamut-icons": "9.57.6-alpha.1ea5a8.0",
|
|
9
|
+
"@codecademy/gamut-illustrations": "0.58.12-alpha.1ea5a8.0",
|
|
10
|
+
"@codecademy/gamut-patterns": "0.10.31-alpha.1ea5a8.0",
|
|
11
|
+
"@codecademy/gamut-styles": "18.0.1-alpha.1ea5a8.0",
|
|
12
|
+
"@codecademy/variance": "0.26.2-alpha.1ea5a8.0",
|
|
13
13
|
"@formatjs/intl-locale": "5.3.1",
|
|
14
14
|
"@react-aria/interactions": "3.25.0",
|
|
15
15
|
"@types/marked": "^4.0.8",
|