@growth-labs/cms 0.5.26 → 0.5.29

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.
Files changed (89) hide show
  1. package/README.md +20 -0
  2. package/dist/engine/slug.d.ts.map +1 -1
  3. package/dist/engine/slug.js +11 -1
  4. package/dist/engine/slug.js.map +1 -1
  5. package/dist/integration/options.d.ts +196 -0
  6. package/dist/integration/options.d.ts.map +1 -1
  7. package/dist/integration/options.js +62 -0
  8. package/dist/integration/options.js.map +1 -1
  9. package/dist/routes/content.d.ts.map +1 -1
  10. package/dist/routes/content.js +30 -0
  11. package/dist/routes/content.js.map +1 -1
  12. package/dist/ui/client/mount.d.ts +1 -0
  13. package/dist/ui/client/mount.d.ts.map +1 -1
  14. package/dist/ui/client/mount.js +2 -0
  15. package/dist/ui/client/mount.js.map +1 -1
  16. package/dist/ui/components/CmsApp.js +2 -11
  17. package/dist/ui/components/CmsApp.js.map +1 -1
  18. package/dist/ui/components/Sidebar.d.ts.map +1 -1
  19. package/dist/ui/components/Sidebar.js +2 -2
  20. package/dist/ui/components/Sidebar.js.map +1 -1
  21. package/dist/ui/components/Topbar.d.ts.map +1 -1
  22. package/dist/ui/components/Topbar.js +1 -10
  23. package/dist/ui/components/Topbar.js.map +1 -1
  24. package/dist/ui/editor/ContentForm.d.ts +3 -1
  25. package/dist/ui/editor/ContentForm.d.ts.map +1 -1
  26. package/dist/ui/editor/ContentForm.js +42 -16
  27. package/dist/ui/editor/ContentForm.js.map +1 -1
  28. package/dist/ui/editor/Rte.js +3 -3
  29. package/dist/ui/editor/Rte.js.map +1 -1
  30. package/dist/ui/editor/content-payload.d.ts +12 -0
  31. package/dist/ui/editor/content-payload.d.ts.map +1 -1
  32. package/dist/ui/editor/content-payload.js +24 -0
  33. package/dist/ui/editor/content-payload.js.map +1 -1
  34. package/dist/ui/inspector/FoundryTab.js +1 -1
  35. package/dist/ui/inspector/FoundryTab.js.map +1 -1
  36. package/dist/ui/pages/admin.astro +1 -1
  37. package/dist/ui/screens/AuthorsScreen.js +1 -1
  38. package/dist/ui/screens/ContentInsightsScreen.js +1 -1
  39. package/dist/ui/screens/ContentInsightsScreen.js.map +1 -1
  40. package/dist/ui/screens/ContentRoute.d.ts +3 -1
  41. package/dist/ui/screens/ContentRoute.d.ts.map +1 -1
  42. package/dist/ui/screens/ContentRoute.js +2 -2
  43. package/dist/ui/screens/ContentRoute.js.map +1 -1
  44. package/dist/ui/screens/EditorScreen.d.ts +6 -1
  45. package/dist/ui/screens/EditorScreen.d.ts.map +1 -1
  46. package/dist/ui/screens/EditorScreen.js +17 -11
  47. package/dist/ui/screens/EditorScreen.js.map +1 -1
  48. package/dist/ui/screens/LibraryScreen.js +2 -2
  49. package/dist/ui/screens/LibraryScreen.js.map +1 -1
  50. package/dist/ui/screens/SettingsScreen.js +1 -1
  51. package/dist/ui/screens/SubscriptionsScreen.js +2 -2
  52. package/dist/ui/screens/registry.d.ts +3 -1
  53. package/dist/ui/screens/registry.d.ts.map +1 -1
  54. package/dist/ui/screens/registry.js +2 -2
  55. package/dist/ui/screens/registry.js.map +1 -1
  56. package/dist/ui/styles/broadsheet.css +131 -156
  57. package/dist/ui/styles/growth-labs-tokens.css +149 -0
  58. package/dist/ui/theme.d.ts +7 -4
  59. package/dist/ui/theme.d.ts.map +1 -1
  60. package/dist/ui/theme.js +24 -65
  61. package/dist/ui/theme.js.map +1 -1
  62. package/dist/ui/use-tweaks.d.ts.map +1 -1
  63. package/dist/ui/use-tweaks.js +2 -1
  64. package/dist/ui/use-tweaks.js.map +1 -1
  65. package/package.json +1 -1
  66. package/src/engine/slug.ts +12 -1
  67. package/src/integration/options.ts +69 -0
  68. package/src/routes/content.ts +37 -0
  69. package/src/ui/client/mount.tsx +2 -0
  70. package/src/ui/components/CmsApp.tsx +3 -20
  71. package/src/ui/components/Sidebar.tsx +5 -11
  72. package/src/ui/components/Topbar.tsx +2 -13
  73. package/src/ui/editor/ContentForm.tsx +81 -13
  74. package/src/ui/editor/Rte.tsx +3 -3
  75. package/src/ui/editor/content-payload.ts +39 -0
  76. package/src/ui/inspector/FoundryTab.tsx +1 -1
  77. package/src/ui/pages/admin.astro +1 -1
  78. package/src/ui/screens/AuthorsScreen.tsx +1 -1
  79. package/src/ui/screens/ContentInsightsScreen.tsx +1 -1
  80. package/src/ui/screens/ContentRoute.tsx +4 -0
  81. package/src/ui/screens/EditorScreen.tsx +21 -9
  82. package/src/ui/screens/LibraryScreen.tsx +5 -2
  83. package/src/ui/screens/SettingsScreen.tsx +1 -1
  84. package/src/ui/screens/SubscriptionsScreen.tsx +2 -2
  85. package/src/ui/screens/registry.tsx +4 -0
  86. package/src/ui/styles/broadsheet.css +131 -156
  87. package/src/ui/styles/growth-labs-tokens.css +149 -0
  88. package/src/ui/theme.ts +29 -68
  89. package/src/ui/use-tweaks.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/ui/screens/registry.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,uEAAuE;AACvE,2EAA2E;AAC3E,+EAA+E;AAC/E,SAAS,cAAc;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,eAAe,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC/D,CAAC;AAED,SAAS,aAAa;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,cAAc,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAChC,yBAAyB,GAAG,IAAI,EAChC,iBAAiB,GAAG,EAAE,EACtB,QAAQ,MAKL,EAAE;IACL,OAAO;QACN,OAAO,EAAE,GAAG,EAAE,CAAC,CACd,KAAC,YAAY,IACZ,yBAAyB,EAAE,yBAAyB,EACpD,iBAAiB,EAAE,iBAAiB,GACnC,CACF;QACD,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAC,qBAAqB,KAAG;QACnD,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;QACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;QACjC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAC,WAAW,KAAG;QAC5B,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,eAAe,KAAG;QACpC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;QAChC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,KAAG;QAC9B,aAAa,EAAE,GAAG,EAAE,CAAC,KAAC,mBAAmB,KAAG;QAC5C,GAAG,CAAC,QAAQ;YACX,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAC,qBAAqB,IAAC,QAAQ,EAAE,QAAQ,GAAI,EAAE;YAC7E,CAAC,CAAC,EAAE,CAAC;QACN,cAAc,EAAE,GAAG,EAAE,CAAC,CACrB,KAAC,iBAAiB,IAAC,yBAAyB,EAAE,yBAAyB,GAAI,CAC3E;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;KAClC,CAAA;AACF,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAmB,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/ui/screens/registry.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,uEAAuE;AACvE,2EAA2E;AAC3E,+EAA+E;AAC/E,SAAS,cAAc;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,eAAe,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC/D,CAAC;AAED,SAAS,aAAa;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,cAAc,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAChC,yBAAyB,GAAG,IAAI,EAChC,iBAAiB,GAAG,EAAE,EACtB,sBAAsB,GAAG,EAAE,EAC3B,QAAQ,MAML,EAAE;IACL,OAAO;QACN,OAAO,EAAE,GAAG,EAAE,CAAC,CACd,KAAC,YAAY,IACZ,yBAAyB,EAAE,yBAAyB,EACpD,iBAAiB,EAAE,iBAAiB,EACpC,sBAAsB,EAAE,sBAAsB,GAC7C,CACF;QACD,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAC,qBAAqB,KAAG;QACnD,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;QACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;QACjC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAC,WAAW,KAAG;QAC5B,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,eAAe,KAAG;QACpC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;QAChC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,KAAG;QAC9B,aAAa,EAAE,GAAG,EAAE,CAAC,KAAC,mBAAmB,KAAG;QAC5C,GAAG,CAAC,QAAQ;YACX,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAC,qBAAqB,IAAC,QAAQ,EAAE,QAAQ,GAAI,EAAE;YAC7E,CAAC,CAAC,EAAE,CAAC;QACN,cAAc,EAAE,GAAG,EAAE,CAAC,CACrB,KAAC,iBAAiB,IAAC,yBAAyB,EAAE,yBAAyB,GAAI,CAC3E;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;KAClC,CAAA;AACF,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAmB,gBAAgB,EAAE,CAAA"}
@@ -1,99 +1,54 @@
1
- /* ============================================================
2
- BROADSHEET publishing platform UI
3
- Rooted in Fronts DNA: Source Serif 4 display, DM Sans UI,
4
- DM Mono micro-labels, navy + gold. Its own product identity.
5
- ============================================================ */
1
+ /* Masthead CMS compatibility layer — Growth Labs visual contract.
2
+ * Keep the established class vocabulary; all visual decisions resolve through
3
+ * growth-labs-tokens.css, imported first by ui/client/mount.tsx. */
6
4
 
7
5
  :root {
8
- /* Brand constants (shared across themes) */
9
- --gold: #b8941b;
10
- --gold-soft: #d4b88a;
11
- --premium: #8c6d14;
12
-
13
- /* Accent — overridden live by Tweaks (JS sets these). Default ink-blue. */
14
- --accent: #0c4a6e;
15
- --accent-strong: #075985;
16
- --accent-fg: #ffffff;
17
- --accent-tint: rgba(12, 74, 110, 0.08);
18
- --accent-ring: rgba(12, 74, 110, 0.35);
19
-
20
- /* Type */
21
- --serif: "Source Serif 4", Georgia, serif;
22
- --ui: "DM Sans", system-ui, sans-serif;
23
- --mono: "DM Mono", ui-monospace, monospace;
24
-
25
- /* Density scale (overridden by [data-density]) */
6
+ --accent: var(--accent-cta);
7
+ --accent-strong: var(--accent-cta-active);
8
+ --accent-fg: var(--gl-white);
9
+ --accent-tint: color-mix(in srgb, var(--accent-primary) 14%, transparent);
10
+ --accent-ring: var(--focus-ring);
11
+ --serif: var(--font-display);
12
+ --ui: var(--font-body);
13
+ --mono: var(--font-mono);
14
+
26
15
  --row-h: 44px;
27
16
  --pad: 16px;
28
17
  --gap: 16px;
29
- --radius: 10px;
30
- --radius-sm: 7px;
18
+ --radius: var(--radius-none);
19
+ --legacy-radius-sm: var(--radius-control);
20
+ --bg: var(--surface-page);
21
+ --panel: var(--surface-card);
22
+ --panel-2: var(--surface-muted);
23
+ --sidebar: var(--surface-nav);
24
+ --sidebar-deep: var(--surface-inverse);
25
+ --ink: var(--text-strong);
26
+ --ink-soft: var(--text-primary);
27
+ --ink-muted: var(--text-secondary);
28
+ --ink-faint: var(--text-muted);
29
+ --border: var(--border-default);
30
+ --border-soft: color-mix(in srgb, var(--border-default) 42%, transparent);
31
+ --hairline: var(--border-default);
32
+ --hover: var(--surface-muted);
33
+ --field: var(--surface-card);
34
+ --field-border: var(--border-default);
35
+ --shadow-sm: var(--shadow-faint);
36
+ --shadow-md: var(--shadow-card);
37
+ --shadow-lg: var(--shadow-raised);
38
+ --green: var(--accent-primary-strong);
39
+ --green-tint: color-mix(in srgb, var(--accent-primary) 16%, transparent);
40
+ --amber: color-mix(in srgb, var(--gl-orange) 72%, var(--text-strong));
41
+ --amber-tint: color-mix(in srgb, var(--gl-orange) 18%, transparent);
42
+ --red: var(--gl-coral);
43
+ --red-tint: color-mix(in srgb, var(--gl-coral) 14%, transparent);
44
+ --blue-tint: color-mix(in srgb, var(--accent-secondary) 16%, transparent);
45
+ --violet: var(--gl-violet);
46
+ --violet-tint: color-mix(in srgb, var(--gl-violet) 16%, transparent);
31
47
  }
32
48
 
33
49
  [data-density="compact"] { --row-h: 38px; --pad: 12px; --gap: 12px; }
34
50
  [data-density="comfy"] { --row-h: 52px; --pad: 22px; --gap: 22px; }
35
51
 
36
- /* ---------- LIGHT (default) ---------- */
37
- :root,
38
- [data-theme="light"] {
39
- --bg: #f7f5f1;
40
- --panel: #ffffff;
41
- --panel-2: #fbfaf7;
42
- --sidebar: #ffffff;
43
- --sidebar-deep: #11151b;
44
- --ink: #1a2332;
45
- --ink-soft: #4a5562;
46
- --ink-muted: #79828f;
47
- --ink-faint: #a7adb6;
48
- --border: #e7e2d9;
49
- --border-soft: #efebe3;
50
- --hairline: #ddd7cc;
51
- --hover: #f3f0ea;
52
- --field: #ffffff;
53
- --field-border: #d9d3c8;
54
- --shadow-sm: 0 1px 2px rgba(26, 35, 50, 0.06);
55
- --shadow-md: 0 8px 24px rgba(26, 35, 50, 0.10);
56
- --shadow-lg: 0 20px 60px rgba(26, 35, 50, 0.18);
57
- --green: #1d7a4d;
58
- --green-tint: #e4f3ea;
59
- --amber: #9a6a00;
60
- --amber-tint: #f8eed5;
61
- --red: #c0392b;
62
- --red-tint: #f8e4e1;
63
- --blue-tint: #e6eef5;
64
- color-scheme: light;
65
- }
66
-
67
- /* ---------- DARK ---------- */
68
- [data-theme="dark"] {
69
- --bg: #0c0f14;
70
- --panel: #14181f;
71
- --panel-2: #11151b;
72
- --sidebar: #0b0e12;
73
- --sidebar-deep: #07090c;
74
- --ink: #e9ecf1;
75
- --ink-soft: #aeb6c2;
76
- --ink-muted: #79828f;
77
- --ink-faint: #565f6c;
78
- --border: #232a34;
79
- --border-soft: #1b212a;
80
- --hairline: #2a323d;
81
- --hover: #1a202a;
82
- --field: #11151b;
83
- --field-border: #2c343f;
84
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
85
- --shadow-md: 0 10px 30px rgba(0, 0, 0, 0.5);
86
- --shadow-lg: 0 24px 70px rgba(0, 0, 0, 0.6);
87
- --green: #4ec98a;
88
- --green-tint: rgba(78, 201, 138, 0.14);
89
- --amber: #e0b65a;
90
- --amber-tint: rgba(224, 182, 90, 0.14);
91
- --red: #ef6e62;
92
- --red-tint: rgba(239, 110, 98, 0.14);
93
- --blue-tint: rgba(76, 154, 232, 0.14);
94
- color-scheme: dark;
95
- }
96
-
97
52
  * { box-sizing: border-box; }
98
53
 
99
54
  html, body {
@@ -111,12 +66,22 @@ html, body {
111
66
  button { font-family: inherit; cursor: pointer; appearance: none; -webkit-appearance: none; background: none; border: 0; color: inherit; }
112
67
  input, textarea, select { font-family: inherit; }
113
68
  ::selection { background: color-mix(in srgb, var(--accent) 26%, transparent); }
69
+ button:focus-visible,
70
+ [role="button"]:focus-visible,
71
+ input:focus-visible,
72
+ textarea:focus-visible,
73
+ select:focus-visible,
74
+ a:focus-visible {
75
+ outline: 2px solid var(--focus-ring);
76
+ outline-offset: 2px;
77
+ box-shadow: var(--shadow-glow);
78
+ }
114
79
 
115
80
  /* Scrollbars */
116
81
  *::-webkit-scrollbar { width: 11px; height: 11px; }
117
82
  *::-webkit-scrollbar-thumb {
118
83
  background: color-mix(in srgb, var(--ink) 18%, transparent);
119
- border-radius: 8px;
84
+ border-radius: var(--radius-pill);
120
85
  border: 3px solid transparent;
121
86
  background-clip: padding-box;
122
87
  }
@@ -127,28 +92,27 @@ input, textarea, select { font-family: inherit; }
127
92
  .serif { font-family: var(--serif); }
128
93
  .mono { font-family: var(--mono); }
129
94
  .kicker {
130
- font-family: var(--mono);
131
- font-size: 11px;
132
- font-weight: 500;
133
- letter-spacing: 0.14em;
95
+ font-family: var(--font-body);
96
+ font-size: 10.5px;
97
+ font-weight: 700;
98
+ line-height: 1;
99
+ letter-spacing: var(--tracking-eyebrow);
134
100
  text-transform: uppercase;
135
101
  color: var(--ink-muted);
136
102
  }
137
103
  .tnum { font-variant-numeric: tabular-nums; }
138
104
 
139
- /* The signature Broadsheet "masthead rule": a hairline above a heavier rule */
105
+ /* Legacy class retained as a single Growth Labs semantic separator. */
140
106
  .masthead-rule {
141
107
  border: 0;
142
- height: 3px;
143
- border-top: 1px solid var(--hairline);
144
- border-bottom: 2px solid var(--ink);
145
- background: transparent;
108
+ height: 1px;
109
+ background: var(--border-soft);
146
110
  }
147
111
 
148
112
  /* ---------- App shell ---------- */
149
113
  .app {
150
114
  display: grid;
151
- grid-template-columns: var(--sb-w, 248px) 1fr;
115
+ grid-template-columns: var(--sb-w, 224px) 1fr;
152
116
  height: 100%;
153
117
  overflow: hidden;
154
118
  transition: grid-template-columns 0.22s ease;
@@ -163,29 +127,29 @@ input, textarea, select { font-family: inherit; }
163
127
  flex-direction: column;
164
128
  min-height: 0;
165
129
  position: relative;
130
+ padding: 20px 14px;
131
+ gap: 20px;
166
132
  }
167
133
  .sb-brand {
168
134
  display: flex; align-items: center; gap: 11px;
169
- padding: 18px 18px 14px;
135
+ padding: 2px 8px;
170
136
  }
171
137
  .sb-mark {
172
- width: 30px; height: 30px; flex: none;
173
- border-radius: 8px;
174
- background: var(--ink);
175
- color: #fff;
138
+ width: 22px; height: 22px; flex: none;
139
+ border-radius: var(--radius-control);
140
+ background: var(--gl-gradient);
141
+ color: var(--gl-white);
176
142
  display: grid; place-items: center;
177
143
  }
178
- [data-theme="dark"] .sb-mark { background: var(--accent); }
179
- .sb-wordmark { font-family: var(--serif); font-weight: 600; font-size: 19px; letter-spacing: -0.01em; color: var(--ink); }
180
- .sb-wordmark .dot { color: var(--accent); }
144
+ .sb-wordmark { font-family: var(--font-display); font-weight: 600; font-size: 17px; line-height: 1.2; letter-spacing: -0.01em; color: var(--ink); }
181
145
 
182
146
  .site-switch {
183
- margin: 2px 12px 10px;
147
+ margin: 0 6px;
184
148
  display: flex; align-items: center; gap: 9px;
185
149
  padding: 8px 10px;
186
150
  border: 1px solid var(--border);
187
- border-radius: var(--radius-sm);
188
- background: var(--panel-2);
151
+ border-radius: var(--radius-control);
152
+ background: var(--panel);
189
153
  cursor: pointer;
190
154
  transition: border-color .15s, background .15s;
191
155
  }
@@ -194,27 +158,23 @@ input, textarea, select { font-family: inherit; }
194
158
  .site-name { font-size: 13px; font-weight: 600; color: var(--ink); flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
195
159
  .site-meta { font-size: 11px; color: var(--ink-muted); }
196
160
 
197
- .nav-section { padding: 6px 12px; }
161
+ .nav-section { padding: 0; }
198
162
  .nav-label {
199
- font-family: var(--mono); font-size: 10px; letter-spacing: 0.16em;
163
+ font-family: var(--font-body); font-size: 10.5px; font-weight: 700; letter-spacing: var(--tracking-eyebrow);
200
164
  text-transform: uppercase; color: var(--ink-faint);
201
- padding: 10px 10px 6px;
165
+ padding: 0 10px 8px;
202
166
  }
203
167
  .nav-item {
204
- display: flex; align-items: center; gap: 11px;
205
- padding: 8px 10px; border-radius: var(--radius-sm);
206
- color: var(--ink-soft); font-size: 13.5px; font-weight: 500;
168
+ width: 100%; display: flex; align-items: center; gap: 10px;
169
+ padding: 8px 10px; border-radius: var(--radius-control);
170
+ color: var(--ink-soft); font-family: var(--font-display); font-size: 13.5px; font-weight: 500;
207
171
  cursor: pointer; user-select: none;
208
172
  transition: background .12s, color .12s;
209
173
  position: relative;
210
174
  }
211
175
  .nav-item:hover { background: var(--hover); color: var(--ink); }
212
- .nav-item.active { background: var(--accent-tint); color: var(--accent); font-weight: 600; }
213
- [data-theme="dark"] .nav-item.active { color: var(--ink); }
214
- .nav-item.active::before {
215
- content: ""; position: absolute; left: -12px; top: 50%; transform: translateY(-50%);
216
- width: 3px; height: 18px; border-radius: 0 3px 3px 0; background: var(--accent);
217
- }
176
+ .nav-item.active { background: color-mix(in srgb, var(--accent-primary) 14%, transparent); color: var(--ink); font-weight: 600; }
177
+ .nav-item.active .ni-icon { color: var(--accent-primary-strong); }
218
178
  .nav-item .ni-icon { flex: none; color: currentColor; opacity: .9; }
219
179
  .nav-item .ni-count {
220
180
  margin-left: auto; font-family: var(--mono); font-size: 11px;
@@ -230,13 +190,13 @@ input, textarea, select { font-family: inherit; }
230
190
  [data-collapsed="true"] .sb-wordmark { display: none; }
231
191
  [data-collapsed="true"] .site-switch { justify-content: center; padding: 8px; }
232
192
 
233
- .sb-foot { margin-top: auto; padding: 12px; border-top: 1px solid var(--border); }
234
- .sb-user { display: flex; align-items: center; gap: 10px; padding: 6px 8px; border-radius: var(--radius-sm); cursor: pointer; }
193
+ .sb-foot { margin-top: auto; padding: 0; border-top: 1px solid var(--border-soft); }
194
+ .sb-user { display: flex; align-items: center; gap: 10px; padding: 6px 8px; border-radius: var(--legacy-radius-sm); cursor: pointer; }
235
195
  .sb-user:hover { background: var(--hover); }
236
196
  .avatar {
237
- width: 30px; height: 30px; border-radius: 50%; flex: none;
238
- display: grid; place-items: center; font-size: 12px; font-weight: 700; color: #fff;
239
- font-family: var(--ui);
197
+ width: 28px; height: 28px; border-radius: var(--radius-circle); flex: none;
198
+ display: grid; place-items: center; font-size: 11px; font-weight: 600; color: var(--text-on-inverse);
199
+ font-family: var(--font-display);
240
200
  }
241
201
 
242
202
  /* ---------- Main column ---------- */
@@ -244,70 +204,73 @@ input, textarea, select { font-family: inherit; }
244
204
  .topbar {
245
205
  height: 58px; flex: none;
246
206
  display: flex; align-items: center; gap: 14px;
247
- padding: 0 22px;
207
+ padding: 0 20px;
248
208
  border-bottom: 1px solid var(--border);
249
- background: color-mix(in srgb, var(--bg) 86%, transparent);
250
- backdrop-filter: blur(8px);
209
+ background: var(--surface-raised-nav);
210
+ backdrop-filter: var(--blur-panel);
251
211
  position: sticky; top: 0; z-index: 20;
252
212
  }
253
213
  .icon-btn {
254
- width: 34px; height: 34px; flex: none; border-radius: 8px;
214
+ width: 34px; height: 34px; flex: none; border-radius: var(--radius-control);
255
215
  border: 1px solid transparent; background: transparent; color: var(--ink-soft);
256
216
  display: grid; place-items: center; transition: background .12s, color .12s, border-color .12s;
257
217
  }
258
218
  .icon-btn:hover { background: var(--hover); color: var(--ink); }
219
+ .notification-dot { position: absolute; top: 7px; right: 8px; width: 7px; height: 7px; border-radius: var(--radius-circle); background: var(--gl-coral); border: 1.5px solid var(--surface-raised-nav); }
220
+ .topbar-divider { width: 1px; height: 22px; background: var(--border); margin: 0 4px; }
259
221
 
260
222
  .search {
261
223
  flex: 1; max-width: 460px;
262
224
  display: flex; align-items: center; gap: 9px;
263
225
  height: 36px; padding: 0 12px;
264
- background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px;
226
+ background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius-control);
265
227
  color: var(--ink-muted); font-size: 13px;
266
228
  }
267
229
  .search input { border: 0; background: transparent; outline: none; color: var(--ink); flex: 1; font-size: 13px; }
268
230
  .search .kbd {
269
231
  font-family: var(--mono); font-size: 10px; color: var(--ink-muted);
270
- border: 1px solid var(--border); border-radius: 5px; padding: 1px 6px;
232
+ border: 1px solid var(--border); border-radius: var(--radius-md); padding: 1px 6px;
271
233
  }
272
234
 
273
235
  .scroll { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; }
274
- .page { padding: 26px 30px 60px; max-width: 1280px; margin: 0 auto; }
236
+ .page { padding: 28px 32px 60px; max-width: 1280px; margin: 0 auto; }
275
237
  .page-wide { max-width: none; }
276
238
 
277
239
  .page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; margin-bottom: 22px; }
278
- .page-title { font-family: var(--serif); font-weight: 600; font-size: 30px; letter-spacing: -0.02em; color: var(--ink); margin: 0; line-height: 1.05; }
279
- .page-sub { color: var(--ink-muted); font-size: 13.5px; margin-top: 6px; }
240
+ .page-title { font-family: var(--font-display); font-weight: 600; font-size: 27px; letter-spacing: -0.01em; color: var(--ink); margin: 0; line-height: 1.15; }
241
+ .page-sub { color: var(--ink-muted); font-size: 13px; line-height: 1.4; margin-top: 4px; }
242
+ .shell-state { padding: 40px; color: var(--ink-muted); }
243
+ .shell-error-detail { margin-top: 16px; padding: 12px; font-size: 12px; color: var(--red); white-space: pre-wrap; word-break: break-word; background: var(--red-tint); border: 1px solid color-mix(in srgb, var(--red) 25%, transparent); border-radius: var(--radius-control); }
244
+ .editor-document { width: min(780px, calc(100% - 80px)); margin: 30px auto 0; padding: 44px 90px; box-sizing: border-box; background: var(--surface-card); border: 1px solid var(--border-default); box-shadow: var(--shadow-card); }
280
245
 
281
246
  /* ---------- Buttons ---------- */
282
247
  .btn {
283
248
  display: inline-flex; align-items: center; gap: 8px; justify-content: center;
284
- height: 36px; padding: 0 15px; border-radius: 9px;
285
- font-size: 13px; font-weight: 600; border: 1px solid var(--field-border);
249
+ height: 36px; padding: 0 14px; border-radius: var(--radius-control);
250
+ font-family: var(--font-display); font-size: 13px; font-weight: 600; border: 1px solid var(--field-border);
286
251
  background: var(--panel); color: var(--ink); transition: all .13s ease;
287
252
  white-space: nowrap;
288
253
  }
289
254
  .btn:hover { background: var(--hover); border-color: var(--hairline); }
290
- .btn.sm { height: 30px; padding: 0 11px; font-size: 12.5px; border-radius: 8px; }
255
+ .btn.sm { height: 30px; padding: 0 11px; font-size: 12.5px; border-radius: var(--radius-control); }
291
256
  .btn.lg { height: 42px; padding: 0 20px; font-size: 14px; }
292
257
  .btn.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-fg); }
293
- .btn.primary:hover { background: var(--accent-strong); border-color: var(--accent-strong); }
258
+ .btn.primary:hover { background: var(--accent-cta-hover); border-color: var(--accent-cta-hover); }
294
259
  .btn.ghost { background: transparent; border-color: transparent; }
295
260
  .btn.ghost:hover { background: var(--hover); }
296
- .btn.gold { background: var(--gold); border-color: var(--gold); color: #1a1402; }
297
- .btn.gold:hover { filter: brightness(1.06); }
298
261
  .btn.danger { color: var(--red); border-color: transparent; background: transparent; }
299
262
  .btn.danger:hover { background: var(--red-tint); }
300
263
 
301
264
  /* ---------- Panels / cards ---------- */
302
- .panel { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); }
265
+ .panel { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius-none); box-shadow: var(--shadow-card); }
303
266
  .panel-pad { padding: var(--pad); }
304
- .card-title { font-family: var(--serif); font-weight: 600; font-size: 17px; color: var(--ink); letter-spacing: -0.01em; }
267
+ .card-title { font-family: var(--font-display); font-weight: 600; font-size: 15px; line-height: 1.3; color: var(--ink); }
305
268
 
306
269
  /* ---------- Status pills ---------- */
307
270
  .pill {
308
271
  display: inline-flex; align-items: center; gap: 6px;
309
272
  font-family: var(--mono); font-size: 10.5px; font-weight: 500; letter-spacing: 0.06em;
310
- text-transform: uppercase; padding: 3px 9px; border-radius: 20px;
273
+ text-transform: uppercase; padding: 3px 9px; border-radius: var(--radius-pill);
311
274
  border: 1px solid transparent; white-space: nowrap;
312
275
  }
313
276
  .pill .pdot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
@@ -315,7 +278,7 @@ input, textarea, select { font-family: inherit; }
315
278
  .pill.draft { color: var(--ink-muted); background: var(--hover); }
316
279
  .pill.review { color: var(--amber); background: var(--amber-tint); }
317
280
  .pill.scheduled { color: var(--accent); background: var(--accent-tint); }
318
- .pill.processing { color: var(--amber); background: var(--amber-tint); }
281
+ .pill.processing { color: var(--violet); background: var(--violet-tint); }
319
282
 
320
283
  .type-tag {
321
284
  display: inline-flex; align-items: center; gap: 6px;
@@ -325,8 +288,8 @@ input, textarea, select { font-family: inherit; }
325
288
  /* ---------- Tables ---------- */
326
289
  .tbl { width: 100%; border-collapse: collapse; }
327
290
  .tbl thead th {
328
- font-family: var(--mono); font-size: 10.5px; letter-spacing: 0.1em; text-transform: uppercase;
329
- color: var(--ink-muted); font-weight: 500; text-align: left;
291
+ font-family: var(--font-body); font-size: 10.5px; line-height: 1; letter-spacing: var(--tracking-eyebrow); text-transform: uppercase;
292
+ color: var(--ink-muted); font-weight: 700; text-align: left;
330
293
  padding: 0 14px 11px; border-bottom: 1px solid var(--border);
331
294
  }
332
295
  .tbl tbody td { padding: 13px 14px; border-bottom: 1px solid var(--border-soft); vertical-align: middle; }
@@ -339,7 +302,7 @@ input, textarea, select { font-family: inherit; }
339
302
  .field-label .req { color: var(--red); }
340
303
  .input, .textarea, .selectbox {
341
304
  width: 100%; background: var(--field); border: 1px solid var(--field-border);
342
- border-radius: var(--radius-sm); color: var(--ink); font-size: 14px;
305
+ border-radius: var(--legacy-radius-sm); color: var(--ink); font-size: 14px;
343
306
  padding: 10px 12px; outline: none; transition: border-color .14s, box-shadow .14s;
344
307
  }
345
308
  .input:focus, .textarea:focus, .selectbox:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-tint); }
@@ -348,13 +311,13 @@ input, textarea, select { font-family: inherit; }
348
311
  .help { font-size: 12px; color: var(--ink-muted); margin-top: 6px; line-height: 1.5; }
349
312
 
350
313
  /* segmented control */
351
- .seg { display: inline-flex; background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px; padding: 3px; gap: 2px; }
314
+ .seg { display: inline-flex; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius-control); padding: 0; gap: 0; overflow: hidden; }
352
315
  .seg button {
353
316
  border: 0; background: transparent; color: var(--ink-muted); font-size: 12.5px; font-weight: 600;
354
- padding: 6px 13px; border-radius: 6px; transition: all .12s; display: inline-flex; align-items: center; gap: 7px;
317
+ padding: 8px 13px; border-radius: 0; transition: all .12s; display: inline-flex; align-items: center; gap: 7px;
355
318
  }
356
- .seg button.on { background: var(--panel); color: var(--ink); box-shadow: var(--shadow-sm); }
357
- [data-theme="dark"] .seg button.on { background: var(--hover); }
319
+ .seg button.on { background: var(--surface-inverse); color: var(--text-on-dark); box-shadow: none; }
320
+ [data-theme="dark"] .seg button.on { background: var(--surface-inverse); color: var(--surface-page); }
358
321
 
359
322
  /* ---------- Misc ---------- */
360
323
  .divider { height: 1px; background: var(--border); border: 0; margin: var(--gap) 0; }
@@ -367,10 +330,22 @@ input, textarea, select { font-family: inherit; }
367
330
  .grid-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
368
331
  .grid-split, .grid-split-wide { grid-template-columns: 1fr; }
369
332
  }
333
+ @media (max-width: 900px) {
334
+ .editor-document { width: calc(100% - 40px); padding: 32px; }
335
+ }
336
+ @media (max-width: 720px) {
337
+ .page { padding: 20px 16px 48px; }
338
+ .page-head { align-items: flex-start; flex-direction: column; }
339
+ .grid-stats { grid-template-columns: 1fr; }
340
+ .topbar { padding: 0 12px; gap: 8px; }
341
+ .topbar .search { max-width: none; }
342
+ .topbar .search input, .topbar .search .kbd { display: none; }
343
+ .editor-document { width: calc(100% - 24px); margin-top: 16px; padding: 20px; }
344
+ }
370
345
  .tag-chip {
371
346
  display: inline-flex; align-items: center; gap: 6px;
372
347
  font-size: 12px; color: var(--ink-soft); background: var(--panel-2);
373
- border: 1px solid var(--border); border-radius: 20px; padding: 3px 10px;
348
+ border: 1px solid var(--border); border-radius: var(--radius-pill); padding: 3px 10px;
374
349
  }
375
350
  .tag-chip .x { color: var(--ink-faint); }
376
351
  .tag-chip .x:hover { color: var(--red); }
@@ -406,16 +381,16 @@ input, textarea, select { font-family: inherit; }
406
381
 
407
382
  /* ── Typed editorial blocks (Phase 1) ──────────────────────────────────── */
408
383
  .ProseMirror div[data-callout] { border-left: 3px solid var(--accent); background: var(--panel-2); border-radius: 6px; padding: 10px 14px; margin: 1em 0; }
409
- .ProseMirror div[data-callout][data-tone="warning"], .ProseMirror div[data-callout][data-tone="caution"] { border-left-color: #b45309; }
410
- .ProseMirror div[data-callout][data-tone="tip"] { border-left-color: #15803d; }
411
- .ProseMirror div[data-callout][data-tone="important"] { border-left-color: #7c3aed; }
384
+ .ProseMirror div[data-callout][data-tone="warning"], .ProseMirror div[data-callout][data-tone="caution"] { border-left-color: var(--gl-orange); }
385
+ .ProseMirror div[data-callout][data-tone="tip"] { border-left-color: var(--accent-primary-strong); }
386
+ .ProseMirror div[data-callout][data-tone="important"] { border-left-color: var(--gl-violet); }
412
387
  .ProseMirror figure[data-pull-quote] { border-left: 3px solid var(--ink-faint); margin: 1.5em 0; padding: 4px 18px; font-size: 1.15em; font-style: italic; color: var(--ink-soft); }
413
388
  .ProseMirror figure[data-pull-quote][data-attribution]::after { content: "— " attr(data-attribution); display: block; font-size: 0.8em; font-style: normal; color: var(--ink-faint); margin-top: 6px; }
414
389
  .ProseMirror div[data-generated-faq] { border: 1px dashed var(--border); border-radius: 6px; padding: 8px 12px; margin: 1em 0; color: var(--ink-faint); font-size: 0.85em; user-select: none; }
415
390
  .ProseMirror a[data-citation] { text-decoration: underline dotted; color: var(--accent); }
416
391
 
417
392
  /* ── Slash menu + drag handle ─────────────────────────────────────────── */
418
- .slash-menu { position: absolute; z-index: 90; min-width: 240px; max-height: 320px; overflow-y: auto; background: var(--panel); border: 1px solid var(--border); border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,0.18); padding: 4px; }
393
+ .slash-menu { position: absolute; z-index: 90; min-width: 240px; max-height: 320px; overflow-y: auto; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius-control); box-shadow: var(--shadow-raised); padding: 4px; }
419
394
  .slash-menu-item { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; width: 100%; padding: 6px 10px; border: 0; border-radius: 6px; background: transparent; cursor: pointer; text-align: left; }
420
395
  .slash-menu-item.is-selected, .slash-menu-item:hover { background: var(--hover); }
421
396
  .slash-menu-title { font-size: 13px; font-weight: 600; color: var(--ink); }
@@ -0,0 +1,149 @@
1
+ /* @growth-labs/cms token snapshot.
2
+ * Source: growthlabs-work/src/styles/ds/tokens/{colors,effects,spacing,themes,typography}.css
3
+ * Verified: 2026-08-21. Package-owned because growthlabs-work is not a runtime dependency. */
4
+
5
+ :root {
6
+ --gl-mint-100: #DFFBE7;
7
+ --gl-mint-200: #B3FBE8;
8
+ --gl-aqua-300: #9AFBE9;
9
+ --gl-cyan-400: #50F5EC;
10
+ --gl-cyan-500: #46FBF5;
11
+ --gl-teal-400: #3ED1C6;
12
+ --gl-teal-500: #1FA3A8;
13
+ --gl-blue-400: #44C2ED;
14
+ --gl-blue-500: #2CA8E0;
15
+ --gl-coral: #F56A61;
16
+ --gl-coral-soft: #F89787;
17
+ --gl-orange: #F7A34B;
18
+ --gl-orange-soft: #FBB35E;
19
+ --gl-pink: #F0659C;
20
+ --gl-magenta: #F230B7;
21
+ --gl-purple: #8C5FD3;
22
+ --gl-violet: #8075ED;
23
+ --gl-periwinkle: #B3C5EA;
24
+ --gl-interactive: #2F6FBD;
25
+ --gl-interactive-hover: #3578C4;
26
+ --gl-interactive-active: #245CA8;
27
+ --gl-focus-ring: #1E5EA8;
28
+ --gl-white: #FFFFFF;
29
+ --gl-off-white: #F8FAFA;
30
+ --gl-light-gray: #F5F6F8;
31
+ --gl-mist: #ECF1F0;
32
+ --gl-mint-wash: #CFEDE8;
33
+ --gl-border: #D6DEE3;
34
+ --gl-gray: #B3B3B3;
35
+ --gl-text-light: #8C8C8C;
36
+ --gl-text: #4D4D4D;
37
+ --gl-charcoal: #2B2F33;
38
+ --gl-ink-900: #16191C;
39
+ --gl-ink-800: #1E2227;
40
+ --gl-ink-700: #262A30;
41
+ --gl-ink-600: #2F343A;
42
+ --gl-ink-500: #3A4046;
43
+ --gl-ink-text: #E7ECEB;
44
+ --gl-ink-text-soft: #A7B0B4;
45
+ --gl-ink-text-mute: #79838A;
46
+ --gl-gradient: linear-gradient(135deg, #A4F1D8 0%, #3ED1C6 50%, #2CA8E0 100%);
47
+ --gl-gradient-bright: linear-gradient(135deg, #DFFBE7 0%, #83FBEC 50%, #44C2ED 100%);
48
+ --gl-gradient-warm: linear-gradient(135deg, #F7A34B 0%, #F56A61 55%, #F0659C 100%);
49
+
50
+ --surface-page: var(--gl-mist);
51
+ --surface-card: var(--gl-white);
52
+ --surface-muted: var(--gl-light-gray);
53
+ --surface-inverse: var(--gl-charcoal);
54
+ --surface-nav: rgba(255, 255, 255, 0.82);
55
+ --surface-raised-nav: rgba(255, 255, 255, 0.92);
56
+ --text-primary: var(--gl-text);
57
+ --text-strong: var(--gl-charcoal);
58
+ --text-secondary: var(--gl-text-light);
59
+ --text-muted: var(--gl-gray);
60
+ --text-on-dark: var(--gl-white);
61
+ --text-on-inverse: var(--gl-white);
62
+ --text-accent: var(--gl-interactive);
63
+ --border-default: var(--gl-border);
64
+ --border-strong: var(--gl-gray);
65
+ --accent-primary: var(--gl-teal-400);
66
+ --accent-primary-strong: var(--gl-teal-500);
67
+ --accent-secondary: var(--gl-blue-500);
68
+ --accent-cta: var(--gl-interactive);
69
+ --accent-cta-hover: var(--gl-interactive-hover);
70
+ --accent-cta-active: var(--gl-interactive-active);
71
+ --accent-warm: var(--gl-coral);
72
+ --focus-ring: var(--gl-focus-ring);
73
+
74
+ --radius-none: 0;
75
+ --radius-sm: 2px;
76
+ --radius-md: 4px;
77
+ --radius-control: 6px;
78
+ --radius-pill: 999px;
79
+ --radius-circle: 50%;
80
+ --shadow-faint: 0 6px 14px rgba(77, 77, 77, 0.06);
81
+ --shadow-card: 0 8px 18px rgba(77, 77, 77, 0.08);
82
+ --shadow-raised: 0 14px 30px rgba(43, 47, 51, 0.12);
83
+ --shadow-chip: 0 10px 20px rgba(43, 47, 51, 0.10);
84
+ --shadow-glow: 0 0 0 6px rgba(62, 209, 198, 0.18);
85
+ --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
86
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
87
+ --duration-fast: 90ms;
88
+ --duration-base: 140ms;
89
+ --duration-slow: 320ms;
90
+ --blur-panel: blur(14px);
91
+ --border-thin: 1px;
92
+ --border-thick: 2px;
93
+
94
+ --space-0: 0;
95
+ --space-1: 4px;
96
+ --space-2: 8px;
97
+ --space-3: 12px;
98
+ --space-4: 16px;
99
+ --space-5: 24px;
100
+ --space-6: 32px;
101
+ --space-7: 48px;
102
+ --space-8: 64px;
103
+ --space-9: 96px;
104
+ --space-10: 128px;
105
+
106
+ --font-display: "Space Grotesk", "Lato", system-ui, sans-serif;
107
+ --font-body: "Lato", "Space Grotesk", system-ui, sans-serif;
108
+ --font-mono: "Space Grotesk", ui-monospace, "SF Mono", Menlo, monospace;
109
+ --weight-light: 300;
110
+ --weight-regular: 400;
111
+ --weight-medium: 500;
112
+ --weight-semibold: 600;
113
+ --weight-bold: 700;
114
+ --tracking-tighter: -0.02em;
115
+ --tracking-wide: 0.02em;
116
+ --tracking-eyebrow: 0.08em;
117
+ }
118
+
119
+ [data-theme="dark"],
120
+ .gl-dark {
121
+ color-scheme: dark;
122
+ --surface-page: var(--gl-ink-800);
123
+ --surface-card: var(--gl-ink-700);
124
+ --surface-muted: var(--gl-ink-600);
125
+ --surface-inverse: var(--gl-mist);
126
+ --surface-nav: rgba(24, 27, 31, 0.82);
127
+ --surface-raised-nav: rgba(24, 27, 31, 0.92);
128
+ --text-primary: var(--gl-ink-text);
129
+ --text-strong: var(--gl-ink-text);
130
+ --text-secondary: var(--gl-ink-text-soft);
131
+ --text-muted: var(--gl-ink-text-mute);
132
+ --text-on-dark: var(--gl-ink-text);
133
+ --text-on-inverse: var(--gl-charcoal);
134
+ --text-accent: var(--gl-cyan-400);
135
+ --border-default: rgba(255, 255, 255, 0.12);
136
+ --border-strong: rgba(255, 255, 255, 0.24);
137
+ --accent-primary: var(--gl-teal-400);
138
+ --accent-primary-strong: var(--gl-cyan-400);
139
+ --accent-secondary: var(--gl-blue-400);
140
+ --accent-cta: #3F86D8;
141
+ --accent-cta-hover: var(--gl-blue-400);
142
+ --accent-cta-active: var(--gl-interactive);
143
+ --focus-ring: var(--gl-cyan-400);
144
+ --shadow-faint: 0 6px 14px rgba(0, 0, 0, 0.35);
145
+ --shadow-card: 0 8px 18px rgba(0, 0, 0, 0.42);
146
+ --shadow-raised: 0 16px 34px rgba(0, 0, 0, 0.52);
147
+ --shadow-chip: 0 10px 20px rgba(0, 0, 0, 0.45);
148
+ --shadow-glow: 0 0 0 6px rgba(62, 209, 198, 0.22);
149
+ }
@@ -5,9 +5,10 @@ export interface AccentSet {
5
5
  tint: string;
6
6
  ring: string;
7
7
  }
8
- export type AccentName = 'Ink blue' | 'Press red' | 'Forest' | 'Violet';
9
- export declare const ACCENTS: Record<AccentName, AccentSet>;
10
- export declare const ACCENTS_DARK: Record<AccentName, AccentSet>;
8
+ type BrandAccentName = 'Growth Labs';
9
+ export type AccentName = BrandAccentName | 'Ink blue' | 'Press red' | 'Forest' | 'Violet';
10
+ export declare const ACCENTS: Record<BrandAccentName, AccentSet>;
11
+ export declare const ACCENTS_DARK: Record<BrandAccentName, AccentSet>;
11
12
  export type ThemeMode = 'light' | 'dark';
12
13
  export type Density = 'compact' | 'regular' | 'comfy';
13
14
  export type PreviewPos = 'right' | 'bottom' | 'off';
@@ -18,6 +19,8 @@ export declare const TWEAK_DEFAULTS: {
18
19
  previewPos: PreviewPos;
19
20
  serifDisplay: boolean;
20
21
  };
21
- export declare function serifVar(serifDisplay: boolean): string;
22
+ export declare function serifVar(_serifDisplay: boolean): string;
23
+ export declare function inverseTextVar(theme: ThemeMode): string;
22
24
  export declare function resolveAccentVars(theme: ThemeMode, accent: AccentName): Record<string, string>;
25
+ export {};
23
26
  //# sourceMappingURL=theme.d.ts.map