@xenide-io/the-old-ui-theme 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,110 @@
1
+ :root {
2
+ --ph-shadow-elevation-3000: 0 3px 0 var(--ph-border-3000);
3
+ --ph-chrome-depth: 0.1875rem;
4
+ --ph-chrome-inset-solid-top: inset 0 1px 0 hsl(0deg 0% 100% / 0.26);
5
+ --ph-chrome-inset-solid-bottom: inset 0 -1px 0 hsl(0deg 0% 0% / 0.14);
6
+ --ph-radius-app: 0.375rem;
7
+ --ph-border-control: color-mix(in oklab, var(--ph-border) 68%, var(--ph-border-strong));
8
+ /** Tailwind `ph.brand` maps to `--ph-accent`; plain CSS controls used only this name, so it must exist. */
9
+ --ph-brand: var(--ph-accent);
10
+ }
11
+ [data-theme="sheets"] {
12
+ color-scheme: light;
13
+
14
+ --ph-canvas: #f3f2f1;
15
+ --ph-surface: #ffffff;
16
+ --ph-muted: #edebe9;
17
+ --ph-toolbar: #e1dfdd;
18
+ --ph-border: #d2d0ce;
19
+ --ph-border-strong: #a19f9d;
20
+
21
+ --ph-text-primary: #323130;
22
+ --ph-text-secondary: #605e5c;
23
+ --ph-text-tertiary: #8a8886;
24
+
25
+ --ph-accent: #217346;
26
+ --ph-accent-hover: #185c37;
27
+ --ph-blue: #185abd;
28
+ --ph-violet: #5c2d91;
29
+ --ph-purple: #8764b8;
30
+
31
+ --ph-success: #217346;
32
+ --ph-warning: #ca5010;
33
+ --ph-danger: #a4262c;
34
+ --ph-info: #185abd;
35
+
36
+ --ph-text-3000: #323130;
37
+ --ph-primary-button-face: #ffffff;
38
+ --ph-primary-button-border: #185c37;
39
+ --ph-primary-button-border-hover: #134a2c;
40
+ --ph-primary-frame-bg: #2d9660;
41
+ --ph-secondary-button-bg: #f3f2f1;
42
+ --ph-secondary-frame-bg: #e1dfdd;
43
+ --ph-secondary-button-border: #c8c6c4;
44
+ --ph-secondary-button-border-hover: #a19f9d;
45
+
46
+ --ph-border-3000: #d2d0ce;
47
+ --ph-chrome-inset-face-top: inset 0 1px 0 hsl(0deg 0% 100% / 0.88);
48
+ --ph-chrome-inset-face-bottom: inset 0 -1px 0 hsl(0deg 0% 0% / 0.05);
49
+ --ph-accent-highlight-secondary: hsla(152deg 61% 29% / 10%);
50
+
51
+ --ph-data-1: #185abd;
52
+ --ph-data-2: #217346;
53
+ --ph-data-3: #498205;
54
+ --ph-data-4: #a4262c;
55
+ --ph-data-5: #ca5010;
56
+ --ph-data-6: #0078d4;
57
+ --ph-data-7: #8764b8;
58
+
59
+ --ph-product-session-replay: #217346;
60
+ --ph-product-product-analytics: #185abd;
61
+ --ph-product-data-pipeline: #0078d4;
62
+ --ph-product-feature-flags: #498205;
63
+ --ph-product-experiments: #8764b8;
64
+ --ph-product-data-warehouse: #5c2d91;
65
+ --ph-product-surveys: #a4262c;
66
+
67
+ --ph-select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='none' stroke='%238a8886' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 24 24'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
68
+ }
69
+ [data-theme="sheets-dark"] {
70
+ color-scheme: dark;
71
+
72
+ --ph-canvas: #1b1a19;
73
+ --ph-surface: #252423;
74
+ --ph-muted: #2d2c2b;
75
+ --ph-toolbar: #323130;
76
+ --ph-border: #484644;
77
+ --ph-border-strong: #797775;
78
+
79
+ --ph-text-primary: #f3f2f1;
80
+ --ph-text-secondary: #c8c6c4;
81
+ --ph-text-tertiary: #a19f9d;
82
+
83
+ --ph-accent: #33a867;
84
+ --ph-accent-hover: #4abe7a;
85
+ --ph-blue: #4f9ff5;
86
+ --ph-violet: #a78bfa;
87
+ --ph-purple: #8764b8;
88
+
89
+ --ph-success: #33a867;
90
+ --ph-warning: #e67e22;
91
+ --ph-danger: #f87171;
92
+ --ph-info: #4f9ff5;
93
+
94
+ --ph-text-3000: #f3f2f1;
95
+ --ph-primary-button-face: #252423;
96
+ --ph-primary-button-border: #217346;
97
+ --ph-primary-button-border-hover: #33a867;
98
+ --ph-primary-frame-bg: #33a867;
99
+ --ph-secondary-button-bg: #2d2c2b;
100
+ --ph-secondary-frame-bg: #484644;
101
+ --ph-secondary-button-border: #605e5c;
102
+ --ph-secondary-button-border-hover: #797775;
103
+
104
+ --ph-border-3000: #323130;
105
+ --ph-chrome-inset-face-top: inset 0 1px 0 hsl(0deg 0% 100% / 0.07);
106
+ --ph-chrome-inset-face-bottom: inset 0 -1px 0 hsl(0deg 0% 0% / 0.35);
107
+ --ph-accent-highlight-secondary: hsla(146deg 55% 45% / 14%);
108
+
109
+ --ph-select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='none' stroke='%23a19f9d' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 24 24'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
110
+ }
@@ -0,0 +1,550 @@
1
+ @layer components {
2
+ .ph-btn {
3
+ @apply inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-medium;
4
+ border-radius: var(--ph-radius-app);
5
+ min-height: 2.3125rem;
6
+ padding: 0.25rem 0.875rem;
7
+ font-size: 0.875rem;
8
+ line-height: 1.5rem;
9
+ transition:
10
+ transform 200ms ease,
11
+ opacity 200ms ease,
12
+ background-color 200ms ease,
13
+ color 200ms ease;
14
+ @apply disabled:pointer-events-none disabled:opacity-[0.65];
15
+ }
16
+
17
+ .ph-btn-sm {
18
+ min-height: 2.0625rem;
19
+ padding: 0.25rem 0.625rem;
20
+ font-size: 0.8125rem;
21
+ }
22
+
23
+ .ph-btn-xs {
24
+ min-height: 1.625rem;
25
+ padding: 0.125rem 0.5rem;
26
+ font-size: 0.6875rem;
27
+ }
28
+
29
+ .ph-btn-lg {
30
+ min-height: 3.0625rem;
31
+ padding: 0.375rem 1.25rem;
32
+ font-size: 1rem;
33
+ }
34
+
35
+ .ph-btn-wide {
36
+ @apply px-10;
37
+ }
38
+
39
+ .ph-btn-circle {
40
+ @apply aspect-square rounded-full p-0;
41
+ min-width: 2.3125rem;
42
+ }
43
+
44
+ .ph-btn-square {
45
+ @apply aspect-square p-0;
46
+ min-width: 2.3125rem;
47
+ }
48
+
49
+ /* Lemon chrome — primary & secondary (LemonButton.scss ::before / ::after on __chrome) */
50
+ .ph-btn-primary,
51
+ .ph-btn-secondary {
52
+ --ph-btn-depth: 0px;
53
+ --ph-btn-chrome-depth: var(--ph-chrome-depth);
54
+ --ph-btn-face: var(--ph-secondary-button-bg);
55
+ --ph-btn-border: var(--ph-secondary-button-border);
56
+ --ph-btn-border-hover: var(--ph-secondary-button-border-hover);
57
+ --ph-btn-frame: var(--ph-secondary-frame-bg);
58
+ --ph-btn-ink: var(--ph-text-secondary);
59
+
60
+ padding: 0;
61
+ min-height: unset;
62
+ border: none;
63
+ background: transparent;
64
+ transition:
65
+ opacity 200ms ease,
66
+ color 200ms ease;
67
+ }
68
+
69
+ .ph-btn-primary {
70
+ --ph-btn-face: var(--ph-primary-button-face);
71
+ --ph-btn-border: var(--ph-primary-button-border);
72
+ --ph-btn-border-hover: var(--ph-primary-button-border-hover);
73
+ --ph-btn-frame: var(--ph-primary-frame-bg);
74
+ --ph-btn-ink: var(--ph-text-3000);
75
+ }
76
+
77
+ .ph-btn-chrome,
78
+ .ph-btn-primary:not(:has(.ph-btn-chrome)),
79
+ .ph-btn-secondary:not(:has(.ph-btn-chrome)) {
80
+ position: relative;
81
+ isolation: isolate;
82
+ display: inline-flex;
83
+ flex: 1;
84
+ align-items: center;
85
+ justify-content: center;
86
+ gap: inherit;
87
+ width: 100%;
88
+ min-height: 2.3125rem;
89
+ padding:
90
+ calc(0.25rem - var(--ph-btn-chrome-depth) * 0.5) 0.875rem
91
+ calc(0.25rem + var(--ph-btn-chrome-depth) * 0.5);
92
+ font-weight: 500;
93
+ color: var(--ph-btn-ink);
94
+ background: transparent;
95
+ border: none;
96
+ }
97
+
98
+ .ph-btn-chrome > *,
99
+ .ph-btn-primary:not(:has(.ph-btn-chrome)) > *,
100
+ .ph-btn-secondary:not(:has(.ph-btn-chrome)) > * {
101
+ position: relative;
102
+ z-index: 1;
103
+ }
104
+
105
+ .ph-btn-sm.ph-btn-primary .ph-btn-chrome,
106
+ .ph-btn-sm.ph-btn-secondary .ph-btn-chrome,
107
+ .ph-btn-sm.ph-btn-primary:not(:has(.ph-btn-chrome)),
108
+ .ph-btn-sm.ph-btn-secondary:not(:has(.ph-btn-chrome)) {
109
+ min-height: 2.0625rem;
110
+ padding:
111
+ calc(0.25rem - var(--ph-btn-chrome-depth) * 0.5) 0.625rem
112
+ calc(0.25rem + var(--ph-btn-chrome-depth) * 0.5);
113
+ font-size: 0.8125rem;
114
+ }
115
+
116
+ .ph-btn-xs.ph-btn-primary .ph-btn-chrome,
117
+ .ph-btn-xs.ph-btn-secondary .ph-btn-chrome,
118
+ .ph-btn-xs.ph-btn-primary:not(:has(.ph-btn-chrome)),
119
+ .ph-btn-xs.ph-btn-secondary:not(:has(.ph-btn-chrome)) {
120
+ min-height: 1.625rem;
121
+ padding:
122
+ calc(0.125rem - var(--ph-btn-chrome-depth) * 0.5) 0.5rem
123
+ calc(0.125rem + var(--ph-btn-chrome-depth) * 0.5);
124
+ font-size: 0.6875rem;
125
+ }
126
+
127
+ .ph-btn-lg.ph-btn-primary .ph-btn-chrome,
128
+ .ph-btn-lg.ph-btn-secondary .ph-btn-chrome,
129
+ .ph-btn-lg.ph-btn-primary:not(:has(.ph-btn-chrome)),
130
+ .ph-btn-lg.ph-btn-secondary:not(:has(.ph-btn-chrome)) {
131
+ min-height: 3.0625rem;
132
+ padding:
133
+ calc(0.375rem - var(--ph-btn-chrome-depth) * 0.5) 1.25rem
134
+ calc(0.375rem + var(--ph-btn-chrome-depth) * 0.5);
135
+ font-size: 1rem;
136
+ }
137
+
138
+ .ph-btn-chrome::before,
139
+ .ph-btn-primary:not(:has(.ph-btn-chrome))::before,
140
+ .ph-btn-secondary:not(:has(.ph-btn-chrome))::before {
141
+ content: "";
142
+ position: absolute;
143
+ inset: -1px;
144
+ bottom: calc(var(--ph-btn-depth) - 1px);
145
+ z-index: -1;
146
+ border: 1px solid var(--ph-btn-border);
147
+ border-radius: var(--ph-radius-app);
148
+ pointer-events: none;
149
+ }
150
+
151
+ .ph-btn-chrome::after,
152
+ .ph-btn-primary:not(:has(.ph-btn-chrome))::after,
153
+ .ph-btn-secondary:not(:has(.ph-btn-chrome))::after {
154
+ content: "";
155
+ position: absolute;
156
+ inset: -1px -1px calc(var(--ph-btn-chrome-depth) - 1px);
157
+ z-index: -1;
158
+ background: var(--ph-btn-face);
159
+ border: 1px solid var(--ph-btn-border);
160
+ border-radius: var(--ph-radius-app);
161
+ box-shadow: 0 var(--ph-btn-chrome-depth) 0 -1px var(--ph-btn-frame);
162
+ pointer-events: none;
163
+ }
164
+
165
+ .ph-btn-primary:hover:not(:disabled),
166
+ .ph-btn-secondary:hover:not(:disabled) {
167
+ --ph-btn-depth: -0.03125rem;
168
+ }
169
+
170
+ .ph-btn-secondary:hover:not(:disabled) {
171
+ --ph-btn-ink: var(--ph-text-primary);
172
+ }
173
+
174
+ .ph-btn-primary:hover:not(:disabled) .ph-btn-chrome,
175
+ .ph-btn-secondary:hover:not(:disabled) .ph-btn-chrome,
176
+ .ph-btn-primary:not(:has(.ph-btn-chrome)):hover:not(:disabled),
177
+ .ph-btn-secondary:not(:has(.ph-btn-chrome)):hover:not(:disabled) {
178
+ transform: translateY(var(--ph-btn-depth));
179
+ color: var(--ph-btn-ink);
180
+ }
181
+
182
+ .ph-btn-primary:hover:not(:disabled) .ph-btn-chrome::before,
183
+ .ph-btn-secondary:hover:not(:disabled) .ph-btn-chrome::before,
184
+ .ph-btn-primary:not(:has(.ph-btn-chrome)):hover:not(:disabled)::before,
185
+ .ph-btn-secondary:not(:has(.ph-btn-chrome)):hover:not(:disabled)::before {
186
+ border-color: var(--ph-btn-border-hover);
187
+ }
188
+
189
+ .ph-btn-primary:hover:not(:disabled) .ph-btn-chrome::after,
190
+ .ph-btn-secondary:hover:not(:disabled) .ph-btn-chrome::after,
191
+ .ph-btn-primary:not(:has(.ph-btn-chrome)):hover:not(:disabled)::after,
192
+ .ph-btn-secondary:not(:has(.ph-btn-chrome)):hover:not(:disabled)::after {
193
+ border-color: var(--ph-btn-border-hover);
194
+ box-shadow: 0 calc(var(--ph-btn-chrome-depth) - var(--ph-btn-depth)) 0 -1px var(--ph-btn-frame);
195
+ }
196
+
197
+ .ph-btn-primary:active:not(:disabled),
198
+ .ph-btn-secondary:active:not(:disabled) {
199
+ --ph-btn-depth: 0.03125rem;
200
+ }
201
+
202
+ .ph-btn-primary:active:not(:disabled) .ph-btn-chrome,
203
+ .ph-btn-secondary:active:not(:disabled) .ph-btn-chrome,
204
+ .ph-btn-primary:not(:has(.ph-btn-chrome)):active:not(:disabled),
205
+ .ph-btn-secondary:not(:has(.ph-btn-chrome)):active:not(:disabled) {
206
+ transform: translateY(var(--ph-btn-depth));
207
+ }
208
+
209
+ .ph-btn-primary:active:not(:disabled) .ph-btn-chrome::after,
210
+ .ph-btn-secondary:active:not(:disabled) .ph-btn-chrome::after,
211
+ .ph-btn-primary:not(:has(.ph-btn-chrome)):active:not(:disabled)::after,
212
+ .ph-btn-secondary:not(:has(.ph-btn-chrome)):active:not(:disabled)::after {
213
+ border-color: var(--ph-btn-border-hover);
214
+ box-shadow: 0 calc(var(--ph-btn-chrome-depth) - var(--ph-btn-depth)) 0 -1px var(--ph-btn-frame);
215
+ }
216
+
217
+ .ph-btn-icon,
218
+ .ph-btn-side-icon {
219
+ @apply inline-flex shrink-0 items-center justify-center opacity-80;
220
+ }
221
+
222
+ .ph-btn-icon .ph-icon,
223
+ .ph-btn-side-icon .ph-icon {
224
+ display: block;
225
+ vertical-align: unset;
226
+ }
227
+
228
+ .ph-btn-primary:hover:not(:disabled) .ph-btn-icon,
229
+ .ph-btn-secondary:hover:not(:disabled) .ph-btn-icon,
230
+ .ph-btn-primary:hover:not(:disabled) .ph-btn-side-icon,
231
+ .ph-btn-secondary:hover:not(:disabled) .ph-btn-side-icon {
232
+ opacity: 0.75;
233
+ }
234
+
235
+ .ph-btn-split-divider {
236
+ align-self: stretch;
237
+ width: 1px;
238
+ margin-block: 0.125rem;
239
+ background: currentColor;
240
+ opacity: 0.28;
241
+ }
242
+
243
+ .ph-btn-signal {
244
+ border: 1px solid color-mix(in oklab, var(--ph-accent) 88%, black);
245
+ background-color: var(--ph-accent);
246
+ color: #fff;
247
+ font-weight: 500;
248
+ box-shadow: 0 var(--ph-chrome-depth) 0 -1px color-mix(in oklab, var(--ph-primary-frame-bg) 75%, var(--ph-accent));
249
+ }
250
+
251
+ .ph-btn-signal:hover:not(:disabled) {
252
+ transform: translateY(-0.03125rem);
253
+ }
254
+
255
+ .ph-btn-signal:active:not(:disabled) {
256
+ transform: translateY(0.03125rem);
257
+ }
258
+
259
+ .ph-btn-accent {
260
+ @apply border-violet-800 bg-violet-600 text-white font-medium;
261
+ box-shadow: 0 var(--ph-chrome-depth) 0 -1px #5b21b6;
262
+ }
263
+
264
+ .ph-btn-neutral {
265
+ @apply border-neutral-900 bg-neutral-900 text-neutral-100 font-medium;
266
+ box-shadow: 0 var(--ph-chrome-depth) 0 -1px rgb(55 55 62);
267
+ }
268
+
269
+ .ph-btn-info {
270
+ @apply border-ph-info bg-ph-info text-white font-medium;
271
+ box-shadow: 0 var(--ph-chrome-depth) 0 -1px color-mix(in oklab, var(--ph-info) 80%, black);
272
+ }
273
+
274
+ .ph-btn-success {
275
+ @apply border-ph-success bg-ph-success text-white font-medium;
276
+ box-shadow: 0 var(--ph-chrome-depth) 0 -1px color-mix(in oklab, var(--ph-success) 80%, black);
277
+ }
278
+
279
+ .ph-btn-warning {
280
+ @apply border-ph-warning bg-ph-warning text-white font-medium;
281
+ box-shadow: 0 var(--ph-chrome-depth) 0 -1px color-mix(in oklab, var(--ph-warning) 80%, black);
282
+ }
283
+
284
+ .ph-btn-danger {
285
+ @apply border-ph-danger bg-ph-danger text-white font-medium;
286
+ box-shadow: 0 var(--ph-chrome-depth) 0 -1px color-mix(in oklab, var(--ph-danger) 80%, black);
287
+ }
288
+
289
+ .ph-btn-accent:hover:not(:disabled),
290
+ .ph-btn-neutral:hover:not(:disabled),
291
+ .ph-btn-info:hover:not(:disabled),
292
+ .ph-btn-success:hover:not(:disabled),
293
+ .ph-btn-warning:hover:not(:disabled),
294
+ .ph-btn-danger:hover:not(:disabled) {
295
+ transform: translateY(-0.03125rem);
296
+ }
297
+
298
+ .ph-btn-accent:active:not(:disabled),
299
+ .ph-btn-neutral:active:not(:disabled),
300
+ .ph-btn-info:active:not(:disabled),
301
+ .ph-btn-success:active:not(:disabled),
302
+ .ph-btn-warning:active:not(:disabled),
303
+ .ph-btn-danger:active:not(:disabled) {
304
+ transform: translateY(0.03125rem);
305
+ }
306
+
307
+ .ph-btn-tertiary,
308
+ .ph-btn-ghost {
309
+ @apply border-transparent bg-transparent text-ph-ink;
310
+ box-shadow: none;
311
+ }
312
+
313
+ .ph-btn-tertiary:hover:not(:disabled),
314
+ .ph-btn-ghost:hover:not(:disabled) {
315
+ background-color: color-mix(in oklab, var(--ph-text-primary) 6%, transparent);
316
+ }
317
+
318
+ .ph-btn-link {
319
+ @apply min-h-0 border-transparent bg-transparent p-0 text-ph-brand underline-offset-4;
320
+ box-shadow: none;
321
+ }
322
+
323
+ .ph-btn-link:hover:not(:disabled) {
324
+ color: var(--ph-accent-hover);
325
+ text-decoration: underline;
326
+ }
327
+
328
+ .ph-btn-outline.ph-btn-primary .ph-btn-chrome::after,
329
+ .ph-btn-outline.ph-btn-secondary .ph-btn-chrome::after,
330
+ .ph-btn-outline.ph-btn-primary:not(:has(.ph-btn-chrome))::after,
331
+ .ph-btn-outline.ph-btn-secondary:not(:has(.ph-btn-chrome))::after {
332
+ background: transparent;
333
+ }
334
+ .ph-card {
335
+ @apply flex flex-col overflow-hidden border bg-ph-surface;
336
+ border-radius: var(--ph-radius-app);
337
+ border-color: var(--ph-border-control);
338
+ box-shadow:
339
+ var(--ph-chrome-inset-face-top),
340
+ var(--ph-chrome-inset-face-bottom),
341
+ var(--ph-shadow-elevation-3000);
342
+ transition:
343
+ border-color 0.15s ease,
344
+ box-shadow 0.15s ease;
345
+ }
346
+
347
+ .ph-card:hover {
348
+ border-color: var(--ph-border-strong);
349
+ box-shadow:
350
+ var(--ph-chrome-inset-face-top),
351
+ var(--ph-chrome-inset-face-bottom),
352
+ var(--ph-shadow-elevation-3000),
353
+ 0 4px 14px hsl(0deg 0% 0% / 0.06);
354
+ }
355
+
356
+ /* Dashboard / inset insight shells */
357
+ .ph-dashboard-well {
358
+ @apply border border-ph-border bg-ph-canvas p-6;
359
+ border-radius: var(--ph-radius-app);
360
+ box-shadow: inset 0 1px 0 hsl(0deg 0% 100% / 0.6);
361
+ }
362
+
363
+ .ph-insight-shell {
364
+ @apply flex flex-col overflow-hidden bg-ph-surface;
365
+ border-radius: var(--ph-radius-app);
366
+ border: 1px solid var(--ph-border-control);
367
+ box-shadow:
368
+ var(--ph-chrome-inset-face-top),
369
+ var(--ph-chrome-inset-face-bottom),
370
+ var(--ph-shadow-elevation-3000);
371
+ }
372
+
373
+ .ph-insight-shell__ribbon {
374
+ width: 0.28rem;
375
+ flex-shrink: 0;
376
+ border-radius: var(--ph-radius-app) 0 0 var(--ph-radius-app);
377
+ }
378
+
379
+ .ph-dashboard-placeholder {
380
+ @apply flex min-h-[8rem] w-full cursor-pointer flex-col items-center justify-center gap-2 border-2 border-dashed border-ph-border p-6 text-center;
381
+ border-radius: var(--ph-radius-app);
382
+ box-shadow: inset 0 1px 0 hsl(0deg 0% 100% / 0.5);
383
+ background-color: color-mix(in oklab, var(--ph-muted) 65%, var(--ph-canvas));
384
+ }
385
+
386
+ .ph-card-body {
387
+ @apply flex flex-1 flex-col gap-3 p-5;
388
+ }
389
+
390
+ .ph-card-title {
391
+ @apply flex items-center gap-2 text-lg font-semibold text-ph-ink;
392
+ }
393
+
394
+ .ph-card-actions {
395
+ @apply mt-auto flex flex-wrap items-center justify-end gap-2 pt-2;
396
+ }
397
+ /* Forms */
398
+ .ph-field {
399
+ @apply flex w-full flex-col gap-1.5;
400
+ }
401
+
402
+ .ph-label {
403
+ @apply text-sm font-medium text-ph-subtle;
404
+ }
405
+
406
+ .ph-label-alt {
407
+ @apply text-xs text-ph-mutedtext;
408
+ }
409
+
410
+ /* Forms — control outline + Lemon inset lip + bottom elevation */
411
+ .ph-input-base {
412
+ @apply w-full bg-ph-surface px-3 py-2 text-sm text-ph-ink transition box-border;
413
+ border-radius: var(--ph-radius-app);
414
+ border: 1px solid var(--ph-border-control);
415
+ min-height: 2.3125rem;
416
+ line-height: 1.5rem;
417
+ font-family: inherit;
418
+ box-shadow:
419
+ var(--ph-chrome-inset-face-top),
420
+ var(--ph-chrome-inset-face-bottom),
421
+ var(--ph-shadow-elevation-3000);
422
+ }
423
+
424
+ .ph-input:focus,
425
+ .ph-select:focus,
426
+ .ph-textarea:focus {
427
+ outline: none;
428
+ box-shadow:
429
+ 0 0 0 3px color-mix(in oklab, var(--ph-accent) 18%, transparent),
430
+ var(--ph-chrome-inset-face-top),
431
+ var(--ph-chrome-inset-face-bottom),
432
+ var(--ph-shadow-elevation-3000);
433
+ border-color: color-mix(in oklab, var(--ph-accent) 45%, var(--ph-border));
434
+ }
435
+
436
+ .ph-input {
437
+ @apply ph-input-base;
438
+ }
439
+
440
+ .ph-input-error:focus,
441
+ .ph-select.ph-input-error:focus,
442
+ .ph-textarea.ph-input-error:focus {
443
+ box-shadow:
444
+ 0 0 0 3px color-mix(in oklab, var(--ph-danger) 20%, transparent),
445
+ var(--ph-chrome-inset-face-top),
446
+ var(--ph-chrome-inset-face-bottom),
447
+ var(--ph-shadow-elevation-3000);
448
+ }
449
+
450
+ .ph-input-error {
451
+ @apply border-ph-danger;
452
+ }
453
+
454
+ .ph-input-ghost {
455
+ @apply border-transparent bg-transparent shadow-none;
456
+ box-shadow: none;
457
+ }
458
+
459
+ .ph-input-group-field {
460
+ @apply rounded-none border-0 shadow-none focus:ring-0;
461
+ box-shadow: none;
462
+ padding-left: 1rem;
463
+ padding-right: 0.75rem;
464
+ }
465
+
466
+ .ph-input-group-field:focus {
467
+ box-shadow: none;
468
+ border-color: transparent;
469
+ }
470
+
471
+ /** Search field + submit — single outline, 1px `divide-x` seam, same min-height as `.ph-input` / primary chrome */
472
+ .ph-search-group {
473
+ @apply overflow-hidden rounded-[var(--ph-radius-app)];
474
+ border: 1px solid var(--ph-border-control);
475
+ background-color: var(--ph-surface);
476
+ box-shadow:
477
+ var(--ph-chrome-inset-face-top),
478
+ var(--ph-chrome-inset-face-bottom),
479
+ var(--ph-shadow-elevation-3000);
480
+ }
481
+
482
+ .ph-search-group:focus-within {
483
+ outline: none;
484
+ border-color: color-mix(in oklab, var(--ph-accent) 45%, var(--ph-border));
485
+ box-shadow:
486
+ 0 0 0 3px color-mix(in oklab, var(--ph-accent) 18%, transparent),
487
+ var(--ph-chrome-inset-face-top),
488
+ var(--ph-chrome-inset-face-bottom),
489
+ var(--ph-shadow-elevation-3000);
490
+ }
491
+
492
+ .ph-search-group .ph-input-group-field:focus {
493
+ box-shadow: none;
494
+ border-color: transparent;
495
+ }
496
+
497
+ .ph-search-group__submit.ph-btn {
498
+ @apply flex min-h-0 shrink-0 rounded-none;
499
+ align-self: stretch;
500
+ }
501
+
502
+ .ph-search-group__submit .ph-btn-chrome {
503
+ box-sizing: border-box;
504
+ height: 100%;
505
+ min-height: 2.3125rem;
506
+ padding-left: 0.75rem;
507
+ padding-right: 0.75rem;
508
+ }
509
+
510
+ .ph-select {
511
+ @apply ph-input-base cursor-pointer;
512
+ vertical-align: middle;
513
+ appearance: none;
514
+ -webkit-appearance: none;
515
+ -moz-appearance: none;
516
+ /* Pad past custom chevron (`.ph-select::-ms-expand` removes legacy IE arrow surface) */
517
+ padding-right: 2.4375rem;
518
+ background-image: var(--ph-select-chevron);
519
+ background-repeat: no-repeat;
520
+ background-position: right 0.75rem center;
521
+ background-size: 0.9375rem 0.9375rem;
522
+ }
523
+
524
+ .ph-select::-ms-expand {
525
+ display: none;
526
+ }
527
+
528
+ .ph-select:disabled {
529
+ @apply cursor-not-allowed opacity-[0.65];
530
+ }
531
+
532
+ .ph-textarea {
533
+ @apply ph-input-base min-h-[6rem] resize-y py-2;
534
+ min-height: 6rem;
535
+ }
536
+ .ph-modal-overlay {
537
+ @apply fixed inset-0 z-[100] flex items-center justify-center bg-black/40 backdrop-blur-sm p-4;
538
+ }
539
+
540
+ .ph-modal-panel {
541
+ @apply w-full max-w-lg bg-ph-surface p-6 text-ph-ink;
542
+ border-radius: var(--ph-radius-app);
543
+ border: 1px solid var(--ph-border-control);
544
+ box-shadow:
545
+ var(--ph-chrome-inset-face-top),
546
+ var(--ph-chrome-inset-face-bottom),
547
+ var(--ph-shadow-elevation-3000),
548
+ 0px 16px 16px -16px rgb(0 0 0 / 35%);
549
+ }
550
+ }