@growth-labs/cms 0.5.26 → 0.5.27
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/dist/ui/client/mount.d.ts +1 -0
- package/dist/ui/client/mount.d.ts.map +1 -1
- package/dist/ui/client/mount.js +1 -0
- package/dist/ui/client/mount.js.map +1 -1
- package/dist/ui/components/CmsApp.js +2 -11
- package/dist/ui/components/CmsApp.js.map +1 -1
- package/dist/ui/components/Sidebar.d.ts.map +1 -1
- package/dist/ui/components/Sidebar.js +2 -2
- package/dist/ui/components/Sidebar.js.map +1 -1
- package/dist/ui/components/Topbar.d.ts.map +1 -1
- package/dist/ui/components/Topbar.js +1 -10
- package/dist/ui/components/Topbar.js.map +1 -1
- package/dist/ui/editor/ContentForm.d.ts.map +1 -1
- package/dist/ui/editor/ContentForm.js +7 -8
- package/dist/ui/editor/ContentForm.js.map +1 -1
- package/dist/ui/editor/Rte.js +3 -3
- package/dist/ui/editor/Rte.js.map +1 -1
- package/dist/ui/inspector/FoundryTab.js +1 -1
- package/dist/ui/inspector/FoundryTab.js.map +1 -1
- package/dist/ui/pages/admin.astro +1 -1
- package/dist/ui/screens/AuthorsScreen.js +1 -1
- package/dist/ui/screens/ContentInsightsScreen.js +1 -1
- package/dist/ui/screens/ContentInsightsScreen.js.map +1 -1
- package/dist/ui/screens/EditorScreen.d.ts +3 -0
- package/dist/ui/screens/EditorScreen.d.ts.map +1 -1
- package/dist/ui/screens/EditorScreen.js +15 -9
- package/dist/ui/screens/EditorScreen.js.map +1 -1
- package/dist/ui/screens/LibraryScreen.js +2 -2
- package/dist/ui/screens/LibraryScreen.js.map +1 -1
- package/dist/ui/screens/SettingsScreen.js +1 -1
- package/dist/ui/screens/SubscriptionsScreen.js +2 -2
- package/dist/ui/styles/broadsheet.css +131 -156
- package/dist/ui/styles/growth-labs-tokens.css +149 -0
- package/dist/ui/theme.d.ts +7 -4
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +24 -65
- package/dist/ui/theme.js.map +1 -1
- package/dist/ui/use-tweaks.d.ts.map +1 -1
- package/dist/ui/use-tweaks.js +2 -1
- package/dist/ui/use-tweaks.js.map +1 -1
- package/package.json +1 -1
- package/src/ui/client/mount.tsx +1 -0
- package/src/ui/components/CmsApp.tsx +3 -20
- package/src/ui/components/Sidebar.tsx +5 -11
- package/src/ui/components/Topbar.tsx +2 -13
- package/src/ui/editor/ContentForm.tsx +7 -8
- package/src/ui/editor/Rte.tsx +3 -3
- package/src/ui/inspector/FoundryTab.tsx +1 -1
- package/src/ui/pages/admin.astro +1 -1
- package/src/ui/screens/AuthorsScreen.tsx +1 -1
- package/src/ui/screens/ContentInsightsScreen.tsx +1 -1
- package/src/ui/screens/EditorScreen.tsx +17 -9
- package/src/ui/screens/LibraryScreen.tsx +5 -2
- package/src/ui/screens/SettingsScreen.tsx +1 -1
- package/src/ui/screens/SubscriptionsScreen.tsx +2 -2
- package/src/ui/styles/broadsheet.css +131 -156
- package/src/ui/styles/growth-labs-tokens.css +149 -0
- package/src/ui/theme.ts +29 -68
- package/src/ui/use-tweaks.ts +2 -1
|
@@ -1,99 +1,54 @@
|
|
|
1
|
-
/*
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
9
|
-
--
|
|
10
|
-
--
|
|
11
|
-
--
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
--
|
|
15
|
-
--
|
|
16
|
-
|
|
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:
|
|
30
|
-
--radius-sm:
|
|
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:
|
|
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(--
|
|
131
|
-
font-size:
|
|
132
|
-
font-weight:
|
|
133
|
-
|
|
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
|
-
/*
|
|
105
|
+
/* Legacy class retained as a single Growth Labs semantic separator. */
|
|
140
106
|
.masthead-rule {
|
|
141
107
|
border: 0;
|
|
142
|
-
height:
|
|
143
|
-
|
|
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,
|
|
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:
|
|
135
|
+
padding: 2px 8px;
|
|
170
136
|
}
|
|
171
137
|
.sb-mark {
|
|
172
|
-
width:
|
|
173
|
-
border-radius:
|
|
174
|
-
background: var(--
|
|
175
|
-
color:
|
|
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
|
-
|
|
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:
|
|
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-
|
|
188
|
-
background: var(--panel
|
|
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:
|
|
161
|
+
.nav-section { padding: 0; }
|
|
198
162
|
.nav-label {
|
|
199
|
-
font-family: var(--
|
|
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:
|
|
165
|
+
padding: 0 10px 8px;
|
|
202
166
|
}
|
|
203
167
|
.nav-item {
|
|
204
|
-
display: flex; align-items: center; gap:
|
|
205
|
-
padding: 8px 10px; border-radius: var(--radius-
|
|
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-
|
|
213
|
-
|
|
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:
|
|
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:
|
|
238
|
-
display: grid; place-items: center; font-size:
|
|
239
|
-
font-family: var(--
|
|
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
|
|
207
|
+
padding: 0 20px;
|
|
248
208
|
border-bottom: 1px solid var(--border);
|
|
249
|
-
background:
|
|
250
|
-
backdrop-filter: blur
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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(--
|
|
279
|
-
.page-sub { color: var(--ink-muted); font-size:
|
|
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
|
|
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:
|
|
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-
|
|
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(--
|
|
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:
|
|
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(--
|
|
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(--
|
|
329
|
-
color: var(--ink-muted); font-weight:
|
|
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
|
|
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:
|
|
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(--
|
|
357
|
-
[data-theme="dark"] .seg button.on { background: var(--
|
|
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:
|
|
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:
|
|
410
|
-
.ProseMirror div[data-callout][data-tone="tip"] { border-left-color:
|
|
411
|
-
.ProseMirror div[data-callout][data-tone="important"] { border-left-color:
|
|
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:
|
|
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
|
+
}
|