@xenide-io/the-old-ui-theme 0.4.4 → 0.4.8

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 (76) hide show
  1. package/dist/{chunk-54ZR4VL5.mjs → chunk-RZXHZWUB.mjs} +44 -17
  2. package/dist/{index-B5NOyoKS.d.mts → index-Od4pIP4F.d.mts} +7 -1
  3. package/dist/{index-B5NOyoKS.d.ts → index-Od4pIP4F.d.ts} +7 -1
  4. package/dist/index.d.mts +2 -2
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.js +37 -10
  7. package/dist/index.mjs +1 -1
  8. package/dist/suite.d.mts +152 -41
  9. package/dist/suite.d.ts +152 -41
  10. package/dist/suite.js +1366 -671
  11. package/dist/suite.mjs +1304 -610
  12. package/dist/ui.d.mts +1 -1
  13. package/dist/ui.d.ts +1 -1
  14. package/dist/ui.js +37 -10
  15. package/dist/ui.mjs +1 -1
  16. package/package.json +7 -3
  17. package/src/components/ui/Modal.tsx +70 -26
  18. package/src/styles/suite-skin.css +284 -24
  19. package/src/suite/components/ai-panel.test.ts +20 -0
  20. package/src/suite/components/ai-panel.tsx +494 -103
  21. package/src/suite/components/suite-app-layout.tsx +48 -28
  22. package/src/suite/components/suite-layout.tsx +84 -40
  23. package/src/suite/components/suite-mobile-drawer.tsx +35 -22
  24. package/src/suite/components/suite-notification-bell.tsx +9 -3
  25. package/src/suite/components/suite-settings-layout.tsx +82 -0
  26. package/src/suite/components/suite-settings-mobile-nav.tsx +18 -17
  27. package/src/suite/components/suite-skeleton.tsx +3 -3
  28. package/src/suite/components/today-calibrating.tsx +11 -35
  29. package/src/suite/components/today-page-frame.tsx +19 -11
  30. package/src/suite/components/today-ui.tsx +276 -19
  31. package/src/suite/index.ts +41 -25
  32. package/src/suite/lib/apps.ts +32 -2
  33. package/src/suite/lib/use-sidebar-width.ts +114 -0
  34. package/src/components/sections/AccordionShowcase.tsx +0 -45
  35. package/src/components/sections/AlertShowcase.tsx +0 -40
  36. package/src/components/sections/AvatarShowcase.tsx +0 -80
  37. package/src/components/sections/BadgeShowcase.tsx +0 -65
  38. package/src/components/sections/ButtonShowcase.tsx +0 -308
  39. package/src/components/sections/CalendarShowcase.tsx +0 -35
  40. package/src/components/sections/CardShowcase.tsx +0 -159
  41. package/src/components/sections/CodeMockupShowcase.tsx +0 -56
  42. package/src/components/sections/ColorPalette.tsx +0 -117
  43. package/src/components/sections/CommandPaletteShowcase.tsx +0 -48
  44. package/src/components/sections/CountdownShowcase.tsx +0 -43
  45. package/src/components/sections/DiffShowcase.tsx +0 -70
  46. package/src/components/sections/DrawerShowcase.tsx +0 -97
  47. package/src/components/sections/DropdownShowcase.tsx +0 -98
  48. package/src/components/sections/EmptyStateShowcase.tsx +0 -50
  49. package/src/components/sections/FilterChipsShowcase.tsx +0 -98
  50. package/src/components/sections/FormShowcase.tsx +0 -127
  51. package/src/components/sections/HoverCardShowcase.tsx +0 -50
  52. package/src/components/sections/IconShowcase.tsx +0 -121
  53. package/src/components/sections/IndicatorShowcase.tsx +0 -52
  54. package/src/components/sections/KbdShowcase.tsx +0 -57
  55. package/src/components/sections/ModalShowcase.tsx +0 -211
  56. package/src/components/sections/NavigationShowcase.tsx +0 -199
  57. package/src/components/sections/NewComponentsShowcase.tsx +0 -1052
  58. package/src/components/sections/ProductLayoutsShowcase.tsx +0 -78
  59. package/src/components/sections/ProgressShowcase.tsx +0 -82
  60. package/src/components/sections/QuillChartShowcase.tsx +0 -92
  61. package/src/components/sections/QuillDashboardShowcase.tsx +0 -149
  62. package/src/components/sections/SegmentedControlShowcase.tsx +0 -49
  63. package/src/components/sections/SetupThemeShowcase.tsx +0 -262
  64. package/src/components/sections/SidebarShowcase.tsx +0 -152
  65. package/src/components/sections/StackShowcase.tsx +0 -33
  66. package/src/components/sections/StepperShowcase.tsx +0 -37
  67. package/src/components/sections/SuiteShowcase.tsx +0 -669
  68. package/src/components/sections/SwapShowcase.tsx +0 -99
  69. package/src/components/sections/TabShowcase.tsx +0 -84
  70. package/src/components/sections/TableShowcase.tsx +0 -142
  71. package/src/components/sections/TimelineShowcase.tsx +0 -83
  72. package/src/components/sections/ToastShowcase.tsx +0 -108
  73. package/src/components/sections/TooltipShowcase.tsx +0 -38
  74. package/src/components/sections/UtilityShowcase.tsx +0 -81
  75. package/src/styles/excel-themes.css +0 -110
  76. package/src/styles/lemon-primitives.css +0 -550
@@ -1,110 +0,0 @@
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
- }
@@ -1,550 +0,0 @@
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
- }