@cawalch/porchlight 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +28 -0
  2. package/dist/porchlight.css +3765 -0
  3. package/dist/porchlight.min.css +1 -0
  4. package/package.json +59 -0
  5. package/porchlight.css +62 -0
  6. package/src/00-layer-order.css +22 -0
  7. package/src/01-reset.css +53 -0
  8. package/src/02-tokens.css +254 -0
  9. package/src/03-themes.css +79 -0
  10. package/src/04-base.css +78 -0
  11. package/src/05-layout.css +209 -0
  12. package/src/06-components/accordion.css +161 -0
  13. package/src/06-components/alert.css +102 -0
  14. package/src/06-components/avatar.css +112 -0
  15. package/src/06-components/badge.css +73 -0
  16. package/src/06-components/breadcrumb.css +111 -0
  17. package/src/06-components/button.css +180 -0
  18. package/src/06-components/card.css +186 -0
  19. package/src/06-components/chip.css +146 -0
  20. package/src/06-components/command-palette.css +201 -0
  21. package/src/06-components/data-table.css +380 -0
  22. package/src/06-components/dialog.css +148 -0
  23. package/src/06-components/drawer.css +137 -0
  24. package/src/06-components/dropdown.css +180 -0
  25. package/src/06-components/empty-state.css +85 -0
  26. package/src/06-components/field.css +125 -0
  27. package/src/06-components/file-upload.css +104 -0
  28. package/src/06-components/nav.css +185 -0
  29. package/src/06-components/pagination.css +106 -0
  30. package/src/06-components/popover-menu.css +146 -0
  31. package/src/06-components/progress.css +77 -0
  32. package/src/06-components/reveal.css +73 -0
  33. package/src/06-components/scroll-progress.css +73 -0
  34. package/src/06-components/segmented.css +113 -0
  35. package/src/06-components/skeleton.css +73 -0
  36. package/src/06-components/stat.css +107 -0
  37. package/src/06-components/stepper.css +172 -0
  38. package/src/06-components/switch.css +138 -0
  39. package/src/06-components/tabs.css +164 -0
  40. package/src/06-components/tag-input.css +77 -0
  41. package/src/06-components/textarea-auto.css +77 -0
  42. package/src/06-components/timeline.css +129 -0
  43. package/src/06-components/toast.css +175 -0
  44. package/src/06-components/toolbar.css +87 -0
  45. package/src/06-components/tooltip.css +104 -0
  46. package/src/07-utilities.css +77 -0
  47. package/src/08-enhancements.css +129 -0
@@ -0,0 +1,3765 @@
1
+ @layer porchlight {
2
+ @layer reset, tokens, themes, base, layout, components, utilities, enhancements, print;
3
+ }
4
+
5
+ @layer porchlight.reset {
6
+ *, :before, :after {
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ :where(html) {
11
+ color-scheme: light dark;
12
+ text-size-adjust: 100%;
13
+ }
14
+
15
+ :where(body) {
16
+ min-block-size: 100dvb;
17
+ margin: 0;
18
+ }
19
+
20
+ :where(img, svg, video, canvas) {
21
+ block-size: auto;
22
+ max-inline-size: 100%;
23
+ display: block;
24
+ }
25
+
26
+ :where(button, input, select, textarea) {
27
+ font: inherit;
28
+ color: inherit;
29
+ }
30
+
31
+ :where(button, [role="button"], input, select, textarea, summary) {
32
+ touch-action: manipulation;
33
+ }
34
+
35
+ :where(table) {
36
+ border-collapse: separate;
37
+ border-spacing: 0;
38
+ }
39
+
40
+ :where([hidden]) {
41
+ display: none !important;
42
+ }
43
+ }
44
+
45
+ @layer porchlight.tokens {
46
+ @property --pl-motion-scale {
47
+ syntax: "<number>";
48
+ inherits: true;
49
+ initial-value: 1;
50
+ }
51
+
52
+ @property --pl-radius-control {
53
+ syntax: "<length>";
54
+ inherits: true;
55
+ initial-value: .5rem;
56
+ }
57
+
58
+ @property --pl-focus-size {
59
+ syntax: "<length>";
60
+ inherits: true;
61
+ initial-value: 2px;
62
+ }
63
+
64
+ :root {
65
+ --pl-font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu,
66
+ Cantarell, "Noto Sans", sans-serif;
67
+ --pl-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
68
+ monospace;
69
+ --pl-font-weight-normal: 400;
70
+ --pl-font-weight-medium: 500;
71
+ --pl-font-weight-semibold: 600;
72
+ --pl-font-weight-bold: 700;
73
+ --pl-font-weight-black: 900;
74
+ --pl-text-xs: clamp(.75rem, .72rem + .1vi, .8125rem);
75
+ --pl-text-sm: clamp(.875rem, .84rem + .1vi, .9375rem);
76
+ --pl-text-md: 1rem;
77
+ --pl-text-lg: clamp(1.125rem, 1.05rem + .25vi, 1.25rem);
78
+ --pl-text-xl: clamp(1.25rem, 1.1rem + .55vi, 1.625rem);
79
+ --pl-text-2xl: clamp(1.5rem, 1.2rem + 1vi, 2rem);
80
+ --pl-text-3xl: clamp(1.875rem, 1.4rem + 1.6vi, 2.75rem);
81
+ --pl-text-display: clamp(2.5rem, 1.8rem + 3vi, 4.5rem);
82
+ --pl-leading-tight: 1.15;
83
+ --pl-leading-snug: 1.3;
84
+ --pl-leading-normal: 1.5;
85
+ --pl-leading-loose: 1.7;
86
+ --pl-space-0: 0;
87
+ --pl-space-1: .25rem;
88
+ --pl-space-2: .5rem;
89
+ --pl-space-3: .75rem;
90
+ --pl-space-4: 1rem;
91
+ --pl-space-5: 1.25rem;
92
+ --pl-space-6: 1.5rem;
93
+ --pl-space-8: 2rem;
94
+ --pl-space-10: 2.5rem;
95
+ --pl-space-12: 3rem;
96
+ --pl-radius-xs: .25rem;
97
+ --pl-radius-sm: .375rem;
98
+ --pl-radius-md: .5rem;
99
+ --pl-radius-lg: .75rem;
100
+ --pl-radius-xl: 1rem;
101
+ --pl-radius-2xl: 1.5rem;
102
+ --pl-radius-3xl: 2rem;
103
+ --pl-radius-pill: 999rem;
104
+ --pl-duration-1: calc(.12s * var(--pl-motion-scale));
105
+ --pl-duration-2: calc(.18s * var(--pl-motion-scale));
106
+ --pl-duration-3: calc(.26s * var(--pl-motion-scale));
107
+ --pl-duration-enter: calc(.22s * var(--pl-motion-scale));
108
+ --pl-duration-exit: calc(.16s * var(--pl-motion-scale));
109
+ --pl-ease-standard: cubic-bezier(.2, 0, 0, 1);
110
+ --pl-ease-emphasized: cubic-bezier(.2, 0, 0, 1.2);
111
+ --pl-ease-spring: cubic-bezier(.34, 1.56, .64, 1);
112
+ --pl-ease-decelerate: cubic-bezier(0, 0, .2, 1);
113
+ --pl-ease-accelerate: cubic-bezier(.4, 0, 1, 1);
114
+ --pl-z-base: 0;
115
+ --pl-z-raised: 10;
116
+ --pl-z-sticky: 100;
117
+ --pl-z-overlay: 1000;
118
+ --pl-z-toast: 1100;
119
+ --pl-brand-1: oklch(97% .02 82);
120
+ --pl-brand-2: oklch(89% .05 82);
121
+ --pl-brand-3: oklch(80% .09 82);
122
+ --pl-brand-4: oklch(70% .13 82);
123
+ --pl-brand-5: oklch(63% .15 82);
124
+ --pl-brand-6: oklch(56% .14 82);
125
+ --pl-brand-7: oklch(48% .11 82);
126
+ --pl-brand-8: oklch(39% .07 82);
127
+ --pl-brand-9: oklch(29% .04 82);
128
+ --pl-color-bg: light-dark(oklch(98% .005 60), oklch(14% .008 55));
129
+ --pl-color-surface: light-dark(oklch(100% 0 0), oklch(18% .008 55));
130
+ --pl-color-surface-2: light-dark(oklch(94% .008 60), oklch(22% .012 55));
131
+ --pl-color-text: light-dark(oklch(20% .012 55), oklch(96% .008 60));
132
+ --pl-color-text-muted: light-dark(oklch(46% .015 55), oklch(72% .012 55));
133
+ --pl-color-border: light-dark(oklch(80% .015 55 / .75), oklch(45% .012 55 / .3));
134
+ --pl-color-border-overlay: transparent;
135
+ --pl-color-accent: light-dark(var(--pl-brand-7), var(--pl-brand-4));
136
+ --pl-color-accent-text: light-dark(#fff, oklch(16% .01 55));
137
+ --pl-color-accent-hover: color-mix(in oklab,
138
+ var(--pl-color-accent),
139
+ oklch(16% .01 55) 10%);
140
+ --pl-color-danger: oklch(60% .22 25);
141
+ --pl-color-danger-bg: light-dark(oklch(96% .04 25), oklch(22% .08 25));
142
+ --pl-color-danger-text: light-dark(oklch(36% .18 25), oklch(90% .06 25));
143
+ --pl-color-success: oklch(58% .18 150);
144
+ --pl-color-success-bg: light-dark(oklch(96% .04 150), oklch(22% .08 150));
145
+ --pl-color-success-text: light-dark(oklch(34% .15 150), oklch(82% .15 150));
146
+ --pl-color-warning: oklch(62% .19 75);
147
+ --pl-color-warning-bg: light-dark(oklch(96% .06 75), oklch(24% .09 75));
148
+ --pl-color-warning-text: light-dark(oklch(40% .17 75), oklch(84% .15 75));
149
+ --pl-opacity-disabled: .5;
150
+ --pl-accent-bar-width: 3px;
151
+ --pl-color-scrim: oklch(0% 0 0 / .55);
152
+ --pl-control-block-size: 2.5rem;
153
+ --pl-control-padding-inline: var(--pl-space-4);
154
+ --pl-control-gap: var(--pl-space-2);
155
+ --pl-control-border-width: 1px;
156
+ --pl-control-radius: var(--pl-radius-control);
157
+ --pl-focus-color: light-dark(oklch(52% .14 82), oklch(72% .13 82));
158
+ --pl-focus-offset: 2px;
159
+ --pl-focus-size: 2px;
160
+ --pl-focus-glow-opacity: 85%;
161
+ --pl-backdrop-blur: 12px;
162
+ --pl-backdrop-saturate: 160%;
163
+ --pl-backdrop-blur-strong: 20px;
164
+ --pl-backdrop-saturate-strong: 180%;
165
+ --pl-backdrop-blur-scrim: 4px;
166
+ --pl-backdrop-saturate-scrim: 80%;
167
+ --pl-shadow-1: 0 1px 2px oklch(0% 0 0 / .08),
168
+ 0 1px 4px oklch(30% .04 40 / .06);
169
+ --pl-shadow-2: 0 4px 8px oklch(0% 0 0 / .08),
170
+ 0 8px 24px oklch(25% .06 40 / .12),
171
+ inset 0 1px 0 oklch(100% 0 0 / .06);
172
+ --pl-shadow-3: 0 8px 16px oklch(0% 0 0 / .1),
173
+ 0 24px 64px oklch(20% .08 40 / .18),
174
+ inset 0 1px 0 oklch(100% 0 0 / .08);
175
+ --pl-shadow-glow: 0 0 0 4px color-mix(in oklab, var(--pl-color-accent), transparent 72%);
176
+ }
177
+ }
178
+
179
+ @layer porchlight.themes {
180
+ :where([data-theme="light"]) {
181
+ color-scheme: light;
182
+ }
183
+
184
+ :where([data-theme="dark"]) {
185
+ color-scheme: dark;
186
+ }
187
+
188
+ :where([data-density="compact"]) {
189
+ --pl-control-block-size: 2rem;
190
+ --pl-control-padding-inline: var(--pl-space-3);
191
+ --pl-control-gap: var(--pl-space-1);
192
+ }
193
+
194
+ :where([data-density="comfortable"]) {
195
+ --pl-control-block-size: 2.5rem;
196
+ }
197
+
198
+ :where([data-density="touch"]) {
199
+ --pl-control-block-size: 2.75rem;
200
+ --pl-control-padding-inline: var(--pl-space-5);
201
+ }
202
+
203
+ @media (prefers-reduced-motion: reduce) {
204
+ :root {
205
+ --pl-motion-scale: 0;
206
+ scroll-behavior: auto;
207
+ }
208
+
209
+ *, :before, :after {
210
+ transition-duration: 1ms !important;
211
+ animation-duration: 1ms !important;
212
+ animation-iteration-count: 1 !important;
213
+ }
214
+ }
215
+
216
+ @media (forced-colors: active) {
217
+ :root {
218
+ --pl-color-bg: Canvas;
219
+ --pl-color-surface: Canvas;
220
+ --pl-color-surface-2: Canvas;
221
+ --pl-color-text: CanvasText;
222
+ --pl-color-text-muted: CanvasText;
223
+ --pl-color-border: ButtonBorder;
224
+ --pl-color-accent: Highlight;
225
+ --pl-color-accent-text: HighlightText;
226
+ --pl-focus-color: Highlight;
227
+ --pl-shadow-1: none;
228
+ --pl-shadow-2: none;
229
+ --pl-shadow-3: none;
230
+ }
231
+ }
232
+ }
233
+
234
+ @layer porchlight.base {
235
+ :where(html) {
236
+ font-family: var(--pl-font-sans);
237
+ background: var(--pl-color-bg);
238
+ color: var(--pl-color-text);
239
+ accent-color: var(--pl-color-accent);
240
+ }
241
+
242
+ :where(body) {
243
+ font-size: var(--pl-text-md);
244
+ line-height: var(--pl-leading-normal);
245
+ background: var(--pl-color-bg);
246
+ color: var(--pl-color-text);
247
+ text-rendering: optimizelegibility;
248
+ }
249
+
250
+ :where(a) {
251
+ color: var(--pl-color-accent);
252
+ text-underline-offset: .18em;
253
+ text-decoration-thickness: .08em;
254
+ }
255
+
256
+ :where(a:hover) {
257
+ color: var(--pl-color-accent-hover);
258
+ }
259
+
260
+ :where(:focus-visible) {
261
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
262
+ outline-offset: var(--pl-focus-offset);
263
+ }
264
+
265
+ :where(h1, h2, h3, h4) {
266
+ line-height: var(--pl-leading-tight);
267
+ text-wrap: balance;
268
+ letter-spacing: -.02em;
269
+ margin-block: 0;
270
+ }
271
+
272
+ :where(h1) {
273
+ font-weight: var(--pl-font-weight-black, 900);
274
+ letter-spacing: -.03em;
275
+ }
276
+
277
+ :where(h2) {
278
+ font-weight: var(--pl-font-weight-bold, 700);
279
+ letter-spacing: -.025em;
280
+ }
281
+
282
+ :where(p, ul, ol, dl, figure, blockquote) {
283
+ margin-block: 0;
284
+ }
285
+
286
+ :where(code, kbd, samp, pre) {
287
+ font-family: var(--pl-font-mono);
288
+ }
289
+
290
+ :where() {
291
+ background: color-mix(in oklab, var(--pl-color-accent), transparent 60%);
292
+ }
293
+ }
294
+
295
+ @layer porchlight.layout {
296
+ :where(.l-stack) {
297
+ gap: var(--l-stack-gap, var(--pl-space-4));
298
+ flex-direction: column;
299
+ display: flex;
300
+ }
301
+
302
+ :where(.l-cluster) {
303
+ align-items: var(--l-cluster-align, center);
304
+ justify-content: var(--l-cluster-justify, flex-start);
305
+ gap: var(--l-cluster-gap, var(--pl-space-3));
306
+ flex-wrap: wrap;
307
+ display: flex;
308
+ }
309
+
310
+ :where(.l-grid) {
311
+ gap: var(--l-grid-gap, var(--pl-space-4));
312
+ grid-template-columns: repeat(auto-fit,
313
+ minmax(min(var(--l-grid-min, 16rem), 100%), 1fr));
314
+ display: grid;
315
+ }
316
+
317
+ :where(.l-sidebar) {
318
+ gap: var(--l-sidebar-gap, var(--pl-space-4));
319
+ grid-template-columns: minmax(0, var(--l-sidebar-size, 16rem))
320
+ minmax(0, 1fr);
321
+ display: grid;
322
+ }
323
+
324
+ @media (width < 48rem) {
325
+ :where(.l-sidebar) {
326
+ grid-template-columns: 1fr;
327
+ }
328
+ }
329
+
330
+ @container (inline-size < 48rem) {
331
+ :where(.l-sidebar) {
332
+ grid-template-columns: 1fr;
333
+ }
334
+ }
335
+
336
+ :where(.l-page) {
337
+ inline-size: min(100% - 2 * var(--pl-space-4), var(--l-page-max, 88rem));
338
+ margin-inline: auto;
339
+ }
340
+
341
+ :where(.l-scroll-area) {
342
+ scrollbar-gutter: stable;
343
+ overscroll-behavior: contain;
344
+ overflow: auto;
345
+ }
346
+
347
+ :where(.l-app-shell) {
348
+ grid-template: "topbar topbar"
349
+ "sidebar main" minmax(0, 1fr)
350
+ / auto minmax(0, 1fr);
351
+ min-block-size: 100dvb;
352
+ display: grid;
353
+ }
354
+
355
+ :where(.l-app-shell__topbar) {
356
+ z-index: var(--pl-z-sticky);
357
+ grid-area: topbar;
358
+ position: sticky;
359
+ inset-block-start: 0;
360
+ }
361
+
362
+ :where(.l-app-shell__topbar[data-glass]) {
363
+ background: color-mix(in oklab, var(--pl-color-surface), transparent 18%);
364
+ -webkit-backdrop-filter: blur(16px) saturate(180%);
365
+ border-block-end: 1px solid color-mix(in oklab,
366
+ var(--pl-color-border),
367
+ transparent 50%);
368
+ }
369
+
370
+ :where(.l-app-shell__sidebar) {
371
+ inline-size: var(--app-sidebar-size, 16rem);
372
+ overflow-inline: clip;
373
+ transition: inline-size var(--pl-duration-2) var(--pl-ease-standard);
374
+ grid-area: sidebar;
375
+ }
376
+
377
+ :where(.l-app-shell__sidebar[data-sidebar="collapsed"]) {
378
+ inline-size: var(--app-sidebar-collapsed, 3.5rem);
379
+ }
380
+
381
+ :where(.l-app-shell__main) {
382
+ scrollbar-gutter: stable;
383
+ overscroll-behavior: contain;
384
+ grid-area: main;
385
+ min-inline-size: 0;
386
+ overflow: auto;
387
+ container-type: inline-size;
388
+ }
389
+
390
+ @media (width < 60rem) {
391
+ :where(.l-app-shell) {
392
+ grid-template: "topbar"
393
+ "main" minmax(0, 1fr)
394
+ / minmax(0, 1fr);
395
+ }
396
+
397
+ :where(.l-app-shell__sidebar) {
398
+ display: none;
399
+ }
400
+ }
401
+
402
+ :where(.l-columns) {
403
+ --l-columns-width: 16rem;
404
+ columns: var(--l-columns-width) var(--l-columns-count, auto);
405
+ column-gap: var(--l-columns-gap, var(--pl-space-4));
406
+ }
407
+
408
+ :where(.l-columns > *) {
409
+ break-inside: avoid;
410
+ margin-block-end: var(--l-columns-gap, var(--pl-space-4));
411
+ }
412
+
413
+ :where(.l-container) {
414
+ inline-size: min(100% - 2 * var(--l-container-pad, var(--pl-space-4)),
415
+ var(--l-container-max, 80rem));
416
+ margin-inline: auto;
417
+ }
418
+
419
+ :where(.l-inset) {
420
+ inline-size: min(100%, var(--l-inset-max, 48rem));
421
+ margin-inline: auto;
422
+ }
423
+ }
424
+
425
+ @layer porchlight.components {
426
+ @scope (.c-button) {
427
+ :scope {
428
+ --c-button-bg: var(--pl-color-surface);
429
+ --c-button-fg: var(--pl-color-text);
430
+ --c-button-border: var(--pl-color-border);
431
+ --c-button-highlight: transparent;
432
+ justify-content: center;
433
+ align-items: center;
434
+ gap: var(--pl-control-gap);
435
+ min-block-size: var(--pl-control-block-size);
436
+ min-inline-size: var(--pl-control-block-size);
437
+ padding-inline: var(--pl-control-padding-inline);
438
+ border: var(--pl-control-border-width) solid var(--c-button-border);
439
+ border-radius: var(--pl-control-radius);
440
+ background: var(--c-button-bg);
441
+ color: var(--c-button-fg);
442
+ font-family: inherit;
443
+ font-weight: var(--pl-font-weight-semibold);
444
+ text-align: center;
445
+ white-space: nowrap;
446
+ cursor: default;
447
+ user-select: none;
448
+ box-shadow: inset 0 1px 0 var(--c-button-highlight);
449
+ transition: background-color var(--pl-duration-1) var(--pl-ease-standard),
450
+ border-color var(--pl-duration-1) var(--pl-ease-standard),
451
+ color var(--pl-duration-1) var(--pl-ease-standard),
452
+ transform var(--pl-duration-1) var(--pl-ease-spring),
453
+ box-shadow var(--pl-duration-1) var(--pl-ease-standard);
454
+ line-height: 1;
455
+ text-decoration: none;
456
+ display: inline-flex;
457
+ }
458
+
459
+ :scope[data-variant="primary"] {
460
+ --c-button-bg: var(--pl-color-accent);
461
+ --c-button-fg: var(--pl-color-accent-text);
462
+ --c-button-border: var(--pl-color-accent);
463
+ --c-button-highlight: oklch(100% 0 0 / .14);
464
+ }
465
+
466
+ :scope[data-variant="secondary"] {
467
+ --c-button-bg: var(--pl-color-surface-2);
468
+ }
469
+
470
+ :scope[data-variant="ghost"] {
471
+ --c-button-bg: transparent;
472
+ --c-button-border: transparent;
473
+ }
474
+
475
+ :scope:not([data-variant]) {
476
+ --c-button-border: color-mix(in oklab,
477
+ var(--pl-color-border),
478
+ transparent 20%);
479
+ }
480
+
481
+ :scope:is(:hover, [data-hover]):not(:disabled, [aria-disabled="true"]) {
482
+ background-color: color-mix(in oklab,
483
+ var(--c-button-bg),
484
+ var(--pl-color-text) 12%);
485
+ cursor: pointer;
486
+ }
487
+
488
+ :scope[data-variant="ghost"]:is(:hover, [data-hover]):not(:disabled, [aria-disabled="true"]) {
489
+ background-color: color-mix(in oklab,
490
+ var(--pl-color-accent),
491
+ transparent 85%);
492
+ }
493
+
494
+ :scope:is(:active, [aria-pressed="true"]):not(:disabled, [aria-disabled="true"]) {
495
+ transform: scale(.97);
496
+ }
497
+
498
+ :scope[data-variant="primary"]:focus-visible {
499
+ box-shadow: var(--pl-shadow-glow),
500
+ inset 0 1px 0 var(--c-button-highlight);
501
+ outline: none;
502
+ }
503
+
504
+ :scope:is([data-variant="ghost"], [data-variant="secondary"])[aria-pressed="true"] {
505
+ --c-button-bg: color-mix(in oklab,
506
+ var(--pl-color-accent),
507
+ transparent 82%);
508
+ --c-button-fg: var(--pl-color-text);
509
+ }
510
+
511
+ :scope:is(:disabled, [aria-disabled="true"]) {
512
+ opacity: var(--pl-opacity-disabled);
513
+ cursor: not-allowed;
514
+ box-shadow: none;
515
+ }
516
+
517
+ @supports (text-box: trim-both cap alphabetic) {
518
+ :scope {
519
+ text-box: trim-both cap alphabetic;
520
+ }
521
+ }
522
+
523
+ @media (forced-colors: active) {
524
+ :scope {
525
+ border-color: buttonborder;
526
+ }
527
+
528
+ :scope[data-variant="primary"] {
529
+ color: highlighttext;
530
+ background: highlight;
531
+ border-color: highlight;
532
+ }
533
+ }
534
+ }
535
+
536
+ @scope (.c-field) {
537
+ :scope {
538
+ --c-field-border: var(--pl-color-border);
539
+ --c-field-bg: var(--pl-color-surface);
540
+ --c-field-fg: var(--pl-color-text);
541
+ gap: var(--pl-space-2);
542
+ color: var(--c-field-fg);
543
+ display: grid;
544
+ }
545
+
546
+ .c-field__label {
547
+ font-size: var(--pl-text-sm);
548
+ font-weight: var(--pl-font-weight-semibold);
549
+ }
550
+
551
+ .c-field__control {
552
+ appearance: none;
553
+ inline-size: 100%;
554
+ min-block-size: var(--pl-control-block-size);
555
+ padding-block: var(--pl-space-1);
556
+ padding-inline: var(--pl-control-padding-inline);
557
+ border: var(--pl-control-border-width) solid var(--c-field-border);
558
+ border-radius: var(--pl-control-radius);
559
+ background: var(--c-field-bg);
560
+ color: var(--c-field-fg);
561
+ transition: border-color var(--pl-duration-1) var(--pl-ease-standard),
562
+ box-shadow var(--pl-duration-1) var(--pl-ease-standard);
563
+ }
564
+
565
+ select.c-field__control {
566
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
567
+ background-repeat: no-repeat;
568
+ background-position: right var(--pl-space-3) center;
569
+ background-size: 1rem;
570
+ padding-inline-end: var(--pl-space-8);
571
+ }
572
+
573
+ .c-field__control::placeholder {
574
+ color: var(--pl-color-text-muted);
575
+ }
576
+
577
+ .c-field__hint {
578
+ color: var(--pl-color-text-muted);
579
+ font-size: var(--pl-text-sm);
580
+ }
581
+ }
582
+
583
+ :where(.c-field) .c-field__control:focus-visible {
584
+ border-color: var(--pl-focus-color);
585
+ box-shadow: 0 0 0 4px
586
+ color-mix(in oklab, var(--pl-focus-color), transparent var(--pl-focus-glow-opacity));
587
+ outline: none;
588
+ }
589
+
590
+ :where(.c-field) .c-field__control:user-invalid {
591
+ border-color: var(--pl-color-danger);
592
+ box-shadow: 0 0 0 4px
593
+ color-mix(in oklab, var(--pl-color-danger), transparent var(--pl-focus-glow-opacity));
594
+ }
595
+
596
+ :where(.c-field):has(.c-field__control:user-invalid) .c-field__hint {
597
+ color: var(--pl-color-danger-text);
598
+ }
599
+
600
+ :where(.c-field):has(.c-field__control:disabled) {
601
+ opacity: var(--pl-opacity-disabled);
602
+ }
603
+
604
+ :where(.c-field):has(.c-field__control:disabled) .c-field__control {
605
+ cursor: not-allowed;
606
+ }
607
+
608
+ @media (forced-colors: active) {
609
+ :where(.c-field) .c-field__control {
610
+ border-color: buttonborder;
611
+ }
612
+ }
613
+
614
+ @scope (.c-card) {
615
+ :scope {
616
+ --c-card-padding: var(--pl-space-5);
617
+ --c-card-bg: var(--pl-color-surface);
618
+ --c-card-border: var(--pl-color-border);
619
+ --c-card-shadow: var(--pl-shadow-1);
620
+ --c-card-radius: var(--pl-radius-2xl);
621
+ gap: var(--pl-space-4);
622
+ padding: var(--c-card-padding);
623
+ border: 1px solid var(--c-card-border);
624
+ border-radius: var(--c-card-radius);
625
+ background: var(--c-card-bg);
626
+ box-shadow: var(--c-card-shadow);
627
+ align-content: start;
628
+ display: grid;
629
+ container: c-card / inline-size;
630
+ }
631
+
632
+ :scope[data-elevated] {
633
+ --c-card-border: transparent;
634
+ --c-card-shadow: var(--pl-shadow-2);
635
+ }
636
+
637
+ :scope[data-variant="accent"] {
638
+ --c-card-border: color-mix(in oklab,
639
+ var(--pl-color-accent),
640
+ transparent 70%);
641
+ background: color-mix(in oklab,
642
+ var(--pl-color-accent),
643
+ var(--pl-color-surface) 94%);
644
+ box-shadow: inset var(--pl-accent-bar-width) 0 0 var(--pl-color-accent),
645
+ var(--pl-shadow-1);
646
+ }
647
+
648
+ :scope:has(.c-badge[data-variant="danger"]), :scope:has([data-status="error"]) {
649
+ --c-card-border: color-mix(in oklab,
650
+ var(--pl-color-danger),
651
+ transparent 55%);
652
+ box-shadow: 0 0 0 1px color-mix(in oklab, var(--pl-color-danger), transparent 72%),
653
+ var(--pl-shadow-1);
654
+ }
655
+
656
+ :scope:has(.c-badge[data-variant="success"]), :scope:has([data-status="success"]) {
657
+ --c-card-border: color-mix(in oklab,
658
+ var(--pl-color-success),
659
+ transparent 55%);
660
+ box-shadow: 0 0 0 1px color-mix(in oklab, var(--pl-color-success), transparent 72%),
661
+ var(--pl-shadow-1);
662
+ }
663
+
664
+ .c-card__header {
665
+ justify-content: space-between;
666
+ align-items: start;
667
+ gap: var(--pl-space-3);
668
+ display: flex;
669
+ }
670
+
671
+ .c-card__title {
672
+ font-size: var(--pl-text-lg);
673
+ font-weight: var(--pl-font-weight-bold);
674
+ line-height: var(--pl-leading-tight);
675
+ text-wrap: balance;
676
+ margin: 0;
677
+ }
678
+
679
+ .c-card__body {
680
+ color: var(--pl-color-text-muted);
681
+ }
682
+
683
+ .c-card__footer {
684
+ justify-content: flex-end;
685
+ align-items: center;
686
+ gap: var(--pl-space-2);
687
+ border-block-start: 1px solid color-mix(in oklab,
688
+ var(--c-card-border),
689
+ transparent 45%);
690
+ padding-block-start: var(--pl-space-3);
691
+ display: flex;
692
+ }
693
+
694
+ @container c-card (inline-size < 28rem) {
695
+ .c-card__header {
696
+ flex-direction: column;
697
+ align-items: stretch;
698
+ }
699
+ }
700
+
701
+ :scope[data-interactive], :scope[href] {
702
+ cursor: pointer;
703
+ color: inherit;
704
+ transition: transform var(--pl-duration-exit) var(--pl-ease-accelerate),
705
+ box-shadow var(--pl-duration-exit) var(--pl-ease-accelerate);
706
+ text-decoration: none;
707
+ }
708
+
709
+ :scope[data-interactive]:is(:hover, [data-hover]), :scope[href]:is(:hover, [data-hover]) {
710
+ transition: transform var(--pl-duration-enter) var(--pl-ease-decelerate),
711
+ box-shadow var(--pl-duration-enter) var(--pl-ease-decelerate);
712
+ box-shadow: var(--pl-shadow-2),
713
+ 0 0 0 1px color-mix(in oklab, var(--pl-color-accent), transparent 88%);
714
+ transform: translateY(-3px);
715
+ }
716
+
717
+ :scope[data-interactive]:focus-visible, :scope[href]:focus-visible {
718
+ box-shadow: 0 0 0 var(--pl-focus-size) var(--pl-focus-color),
719
+ var(--pl-shadow-2);
720
+ outline: none;
721
+ }
722
+ }
723
+
724
+ @media (forced-colors: active) {
725
+ :where(.c-card) {
726
+ border-color: buttonborder;
727
+ }
728
+ }
729
+
730
+ @scope (.c-badge) {
731
+ :scope {
732
+ align-items: center;
733
+ gap: var(--pl-space-1);
734
+ min-block-size: var(--pl-space-6);
735
+ padding-inline: var(--pl-space-2);
736
+ border-radius: var(--pl-radius-pill);
737
+ font-size: var(--pl-text-xs);
738
+ font-weight: var(--pl-font-weight-semibold);
739
+ text-wrap: nowrap;
740
+ background: var(--pl-color-surface-2);
741
+ color: var(--pl-color-text);
742
+ line-height: 1;
743
+ display: inline-flex;
744
+ }
745
+
746
+ :scope[data-tone="accent"] {
747
+ background: var(--pl-color-accent);
748
+ color: var(--pl-color-accent-text);
749
+ }
750
+
751
+ :scope[data-tone="success"] {
752
+ background: var(--pl-color-success-bg);
753
+ color: var(--pl-color-success-text);
754
+ }
755
+
756
+ :scope[data-tone="warning"] {
757
+ background: var(--pl-color-warning-bg);
758
+ color: var(--pl-color-warning-text);
759
+ }
760
+
761
+ :scope[data-tone="danger"] {
762
+ background: var(--pl-color-danger-bg);
763
+ color: var(--pl-color-danger-text);
764
+ }
765
+
766
+ .c-badge__dot {
767
+ border-radius: var(--pl-radius-pill);
768
+ opacity: .9;
769
+ background: currentColor;
770
+ block-size: .375rem;
771
+ inline-size: .375rem;
772
+ }
773
+
774
+ @media (forced-colors: active) {
775
+ :scope {
776
+ border: 1px solid buttonborder;
777
+ }
778
+ }
779
+ }
780
+
781
+ @scope (.c-menu) {
782
+ :scope {
783
+ --c-menu-anchor: --pl-menu-anchor;
784
+ display: inline-block;
785
+ }
786
+
787
+ .c-menu__trigger {
788
+ anchor-name: var(--c-menu-anchor);
789
+ }
790
+
791
+ .c-menu__popover {
792
+ padding: var(--pl-space-2);
793
+ border: 1px solid color-mix(in oklab,
794
+ var(--pl-color-border),
795
+ transparent 30%);
796
+ border-radius: var(--pl-radius-xl);
797
+ min-inline-size: 12rem;
798
+ -webkit-backdrop-filter: blur(var(--pl-backdrop-blur)) saturate(var(--pl-backdrop-saturate));
799
+ color: var(--pl-color-text);
800
+ box-shadow: var(--pl-shadow-3);
801
+ opacity: 0;
802
+ transition: opacity var(--pl-duration-enter) var(--pl-ease-decelerate),
803
+ transform var(--pl-duration-enter) var(--pl-ease-decelerate),
804
+ overlay var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete,
805
+ display var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete;
806
+ background: light-dark(oklch(100% 0 0 / .96), oklch(17% .04 250 / .94));
807
+ margin: 0;
808
+ transform: translateY(-4px);
809
+ }
810
+
811
+ @supports (position-anchor: --x) {
812
+ .c-menu__popover {
813
+ position-anchor: var(--c-menu-anchor);
814
+ position-area: block-end span-inline-end;
815
+ position-try-fallbacks: flip-block;
816
+ margin-block-start: var(--pl-space-2);
817
+ position: absolute;
818
+ inset: auto;
819
+ }
820
+ }
821
+
822
+ .c-menu__popover:popover-open {
823
+ opacity: 1;
824
+ transform: translateY(0);
825
+ }
826
+
827
+ @starting-style {
828
+ .c-menu__popover:popover-open {
829
+ opacity: 0;
830
+ transform: translateY(-4px);
831
+ }
832
+ }
833
+
834
+ .c-menu__divider {
835
+ margin-block: var(--pl-space-1);
836
+ border: 0;
837
+ border-block-start: 1px solid var(--pl-color-border);
838
+ }
839
+ }
840
+
841
+ :where(.c-menu__popover) > :is(a, button) {
842
+ align-items: center;
843
+ gap: var(--pl-space-2);
844
+ min-block-size: 2.25rem;
845
+ inline-size: 100%;
846
+ padding-inline: var(--pl-space-3);
847
+ border-radius: var(--pl-radius-sm);
848
+ color: inherit;
849
+ font: inherit;
850
+ text-align: start;
851
+ cursor: pointer;
852
+ background: none;
853
+ border: 0;
854
+ text-decoration: none;
855
+ display: flex;
856
+ }
857
+
858
+ :where(.c-menu__popover) > :is(a, button):is(:hover, :focus-visible) {
859
+ background: var(--pl-color-surface-2);
860
+ }
861
+
862
+ :where(.c-menu__popover) > :is(a, button):focus-visible {
863
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
864
+ outline-offset: calc(var(--pl-focus-offset) * -1);
865
+ }
866
+
867
+ :where(.c-menu__popover) > :is(a, button)[data-tone="danger"] {
868
+ color: var(--pl-color-danger-text);
869
+ }
870
+
871
+ :where(.c-menu__popover) > :is(a, button)[data-tone="danger"]:is(:hover, :focus-visible) {
872
+ background: var(--pl-color-danger-bg);
873
+ }
874
+
875
+ @media (forced-colors: active) {
876
+ :where(.c-menu__popover) {
877
+ border-color: buttonborder;
878
+ }
879
+
880
+ :where(.c-menu__popover) > :is(a, button):focus-visible {
881
+ outline-color: highlight;
882
+ }
883
+ }
884
+
885
+ @scope (.c-dialog) {
886
+ :scope {
887
+ --c-dialog-size: 42rem;
888
+ inline-size: min(100% - 2rem, var(--c-dialog-size));
889
+ border-radius: var(--pl-radius-2xl);
890
+ max-block-size: min(100dvb - 2rem, 80dvb);
891
+ -webkit-backdrop-filter: blur(var(--pl-backdrop-blur-strong)) saturate(var(--pl-backdrop-saturate-strong));
892
+ color: var(--pl-color-text);
893
+ box-shadow: var(--pl-shadow-3);
894
+ opacity: 0;
895
+ transition: opacity var(--pl-duration-enter) var(--pl-ease-decelerate),
896
+ transform var(--pl-duration-enter) var(--pl-ease-decelerate),
897
+ overlay var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete,
898
+ display var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete;
899
+ background: light-dark(oklch(100% 0 0 / .94), oklch(17% .04 250 / .92));
900
+ border: none;
901
+ margin: auto;
902
+ padding: 0;
903
+ overflow: auto;
904
+ transform: scale(.97) translateY(10px);
905
+ }
906
+
907
+ :is(:scope:modal, :scope[open]) {
908
+ opacity: 1;
909
+ transform: scale(1) translateY(0);
910
+ }
911
+
912
+ @starting-style {
913
+ :is(:scope:modal, :scope[open]) {
914
+ opacity: 0;
915
+ transform: scale(.97) translateY(10px);
916
+ }
917
+ }
918
+
919
+ :scope::backdrop {
920
+ background: var(--pl-color-scrim);
921
+ backdrop-filter: blur(var(--pl-backdrop-blur-scrim)) saturate(var(--pl-backdrop-saturate-scrim));
922
+ }
923
+
924
+ .c-dialog__header {
925
+ justify-content: space-between;
926
+ align-items: center;
927
+ gap: var(--pl-space-3);
928
+ min-block-size: var(--pl-control-block-size);
929
+ padding: var(--pl-space-5);
930
+ border-block-end: 1px solid color-mix(in oklab,
931
+ var(--pl-color-border),
932
+ transparent 40%);
933
+ display: flex;
934
+ }
935
+
936
+ .c-dialog__title {
937
+ font-size: var(--pl-text-lg);
938
+ font-weight: var(--pl-font-weight-bold);
939
+ line-height: var(--pl-leading-tight);
940
+ text-wrap: balance;
941
+ margin: 0;
942
+ }
943
+
944
+ .c-dialog__close {
945
+ inline-size: var(--pl-control-block-size);
946
+ block-size: var(--pl-control-block-size);
947
+ border-radius: var(--pl-radius-md);
948
+ color: var(--pl-color-text-muted);
949
+ font: inherit;
950
+ cursor: pointer;
951
+ transition: background-color var(--pl-duration-1) var(--pl-ease-standard),
952
+ color var(--pl-duration-1) var(--pl-ease-standard);
953
+ background: none;
954
+ border: 0;
955
+ flex-shrink: 0;
956
+ justify-content: center;
957
+ align-items: center;
958
+ padding: 0;
959
+ display: inline-flex;
960
+ }
961
+
962
+ .c-dialog__close:hover {
963
+ background: var(--pl-color-surface-2);
964
+ color: var(--pl-color-text);
965
+ }
966
+
967
+ .c-dialog__body {
968
+ padding: var(--pl-space-5);
969
+ }
970
+
971
+ .c-dialog__footer {
972
+ justify-content: flex-end;
973
+ align-items: center;
974
+ gap: var(--pl-space-3);
975
+ padding: var(--pl-space-5);
976
+ border-block-start: 1px solid color-mix(in oklab,
977
+ var(--pl-color-border),
978
+ transparent 40%);
979
+ display: flex;
980
+ }
981
+
982
+ @media (forced-colors: active) {
983
+ :scope {
984
+ border-color: buttonborder;
985
+ }
986
+ }
987
+ }
988
+
989
+ @scope (.c-table-wrap) {
990
+ :scope {
991
+ --c-table-cell-pad: var(--pl-space-3) var(--pl-space-4);
992
+ --c-table-min: 48rem;
993
+ --c-table-row-min-block-size: 3rem;
994
+ --c-table-radius: var(--pl-radius-xl);
995
+ border: 1px solid color-mix(in oklab,
996
+ var(--pl-color-border),
997
+ transparent 20%);
998
+ border-radius: var(--c-table-radius);
999
+ background: var(--pl-color-surface);
1000
+ overflow: auto;
1001
+ container: c-table-wrap / inline-size;
1002
+ }
1003
+
1004
+ :scope[data-density="compact"] {
1005
+ --c-table-cell-pad: var(--pl-space-1) var(--pl-space-3);
1006
+ --c-table-row-min-block-size: 2.25rem;
1007
+ }
1008
+
1009
+ .c-table {
1010
+ inline-size: 100%;
1011
+ min-inline-size: var(--c-table-min);
1012
+ border-collapse: separate;
1013
+ border-spacing: 0;
1014
+ }
1015
+
1016
+ .c-table thead tr:first-child th:first-child {
1017
+ border-start-start-radius: calc(var(--c-table-radius) - 1px);
1018
+ }
1019
+
1020
+ .c-table thead tr:first-child th:last-child {
1021
+ border-start-end-radius: calc(var(--c-table-radius) - 1px);
1022
+ }
1023
+
1024
+ .c-table tbody tr:last-child td:first-child {
1025
+ border-end-start-radius: calc(var(--c-table-radius) - 1px);
1026
+ }
1027
+
1028
+ .c-table tbody tr:last-child td:last-child {
1029
+ border-end-end-radius: calc(var(--c-table-radius) - 1px);
1030
+ }
1031
+
1032
+ .c-table :where(th, td) {
1033
+ padding: var(--c-table-cell-pad);
1034
+ border-block-end: 1px solid var(--pl-color-border);
1035
+ text-align: start;
1036
+ vertical-align: middle;
1037
+ white-space: nowrap;
1038
+ min-block-size: var(--c-table-row-min-block-size);
1039
+ }
1040
+
1041
+ .c-table :where(td) {
1042
+ color: var(--pl-color-text);
1043
+ }
1044
+
1045
+ .c-table :where(th) {
1046
+ z-index: var(--pl-z-raised);
1047
+ background: var(--pl-color-surface-2);
1048
+ font-size: var(--pl-text-sm);
1049
+ font-weight: var(--pl-font-weight-semibold);
1050
+ color: var(--pl-color-text-muted);
1051
+ border-block-end: 1px solid var(--pl-color-border);
1052
+ position: sticky;
1053
+ inset-block-start: 0;
1054
+ }
1055
+
1056
+ @container c-table-wrap (inline-size < 40rem) {
1057
+ .c-table :where(th, td) {
1058
+ padding-inline: var(--pl-space-2);
1059
+ }
1060
+ }
1061
+
1062
+ .c-table :where([data-align="end"]) {
1063
+ text-align: end;
1064
+ font-variant-numeric: tabular-nums;
1065
+ }
1066
+
1067
+ .c-table :where([data-align="center"]) {
1068
+ text-align: center;
1069
+ }
1070
+
1071
+ .c-table th[data-sort] {
1072
+ cursor: pointer;
1073
+ user-select: none;
1074
+
1075
+ &:hover {
1076
+ color: var(--pl-color-text);
1077
+ }
1078
+ }
1079
+
1080
+ .c-table__sort-icon {
1081
+ color: var(--pl-color-text-muted);
1082
+ opacity: .4;
1083
+ transition: opacity var(--pl-duration-1) var(--pl-ease-standard),
1084
+ color var(--pl-duration-1) var(--pl-ease-standard);
1085
+ align-items: center;
1086
+ margin-inline-start: var(--pl-space-1);
1087
+ font-size: .7em;
1088
+ display: inline-flex;
1089
+ }
1090
+
1091
+ .c-table__sort-icon:before {
1092
+ content: "⇅";
1093
+ }
1094
+
1095
+ .c-table th[data-sort="asc"] .c-table__sort-icon {
1096
+ opacity: 1;
1097
+ color: var(--pl-color-accent);
1098
+ }
1099
+
1100
+ .c-table th[data-sort="asc"] .c-table__sort-icon:before {
1101
+ content: "↑";
1102
+ }
1103
+
1104
+ .c-table th[data-sort="desc"] .c-table__sort-icon {
1105
+ opacity: 1;
1106
+ color: var(--pl-color-accent);
1107
+ }
1108
+
1109
+ .c-table th[data-sort="desc"] .c-table__sort-icon:before {
1110
+ content: "↓";
1111
+ }
1112
+
1113
+ .c-table th[data-sort="asc"], .c-table th[data-sort="desc"] {
1114
+ color: var(--pl-color-text);
1115
+ }
1116
+
1117
+ .c-table .c-table__check {
1118
+ text-align: center;
1119
+ inline-size: 2.5rem;
1120
+ min-inline-size: 2.5rem;
1121
+ }
1122
+
1123
+ .c-table .c-table__check input[type="checkbox"] {
1124
+ block-size: 1rem;
1125
+ inline-size: 1rem;
1126
+ accent-color: var(--pl-color-accent);
1127
+ cursor: pointer;
1128
+ }
1129
+
1130
+ .c-table .c-table__detail td {
1131
+ border-block-end: 1px solid var(--pl-color-border);
1132
+ background: color-mix(in oklab,
1133
+ var(--pl-color-surface-2),
1134
+ var(--pl-color-text) 2%);
1135
+ box-shadow: inset var(--pl-accent-bar-width) 0 0 color-mix(in oklab,
1136
+ var(--pl-color-accent),
1137
+ transparent 70%);
1138
+ padding: 0;
1139
+ }
1140
+
1141
+ .c-table__detail-inner {
1142
+ transition: grid-template-rows var(--pl-duration-3)
1143
+ var(--pl-ease-standard);
1144
+ grid-template-rows: 0fr;
1145
+ display: grid;
1146
+ overflow: hidden;
1147
+ }
1148
+
1149
+ .c-table .c-table__detail[open] .c-table__detail-inner {
1150
+ grid-template-rows: 1fr;
1151
+ }
1152
+
1153
+ .c-table__detail-content {
1154
+ padding: var(--pl-space-4);
1155
+ overflow: hidden;
1156
+ }
1157
+
1158
+ .c-table__expand {
1159
+ border-radius: var(--pl-radius-sm);
1160
+ block-size: 1.5rem;
1161
+ inline-size: 1.5rem;
1162
+ color: var(--pl-color-text-muted);
1163
+ cursor: pointer;
1164
+ transition: background-color var(--pl-duration-1) var(--pl-ease-standard);
1165
+ background: none;
1166
+ border: 0;
1167
+ justify-content: center;
1168
+ align-items: center;
1169
+ padding: 0;
1170
+ display: inline-flex;
1171
+ }
1172
+
1173
+ .c-table__expand:hover {
1174
+ background: var(--pl-color-surface-2);
1175
+ color: var(--pl-color-text);
1176
+ }
1177
+
1178
+ .c-table__expand:focus-visible {
1179
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
1180
+ outline-offset: var(--pl-focus-offset);
1181
+ }
1182
+
1183
+ .c-table__expand svg {
1184
+ block-size: .875rem;
1185
+ inline-size: .875rem;
1186
+ transition: rotate var(--pl-duration-2) var(--pl-ease-standard);
1187
+ }
1188
+
1189
+ .c-table__expand[aria-expanded="true"] svg {
1190
+ rotate: 180deg;
1191
+ }
1192
+
1193
+ .c-table .c-table__sticky-col {
1194
+ z-index: calc(var(--pl-z-raised) + 1);
1195
+ background: var(--pl-color-surface);
1196
+ position: sticky;
1197
+ inset-inline-start: 0;
1198
+ }
1199
+
1200
+ .c-table th.c-table__sticky-col {
1201
+ z-index: calc(var(--pl-z-raised) + 2);
1202
+ background: var(--pl-color-surface-2);
1203
+ }
1204
+
1205
+ .c-table .c-table__sticky-col:not(:last-child) {
1206
+ box-shadow: 4px 0 8px -2px oklch(0% 0 0 / .1);
1207
+ }
1208
+
1209
+ :where(.c-table) tbody tr:hover .c-table__sticky-col, :where(.c-table) tbody tr[aria-selected="true"] .c-table__sticky-col {
1210
+ background: inherit;
1211
+ }
1212
+ }
1213
+
1214
+ :where(.c-table) tbody tr {
1215
+ transition: background-color var(--pl-duration-1) var(--pl-ease-standard);
1216
+ }
1217
+
1218
+ :where(.c-table) tbody tr:hover {
1219
+ background: color-mix(in oklab,
1220
+ var(--pl-color-surface-2),
1221
+ var(--pl-color-text) 3.5%);
1222
+ }
1223
+
1224
+ :where(.c-table) tbody tr[aria-selected="true"] {
1225
+ background: color-mix(in oklab, var(--pl-color-accent), transparent 84%);
1226
+ box-shadow: inset var(--pl-accent-bar-width) 0 0 var(--pl-color-accent);
1227
+ }
1228
+
1229
+ :where(.c-table) tbody tr:last-child td {
1230
+ border-block-end: none;
1231
+ }
1232
+
1233
+ :where(.c-table-wrap[data-zebra]) .c-table tbody tr:nth-child(2n) {
1234
+ background: color-mix(in oklab,
1235
+ var(--pl-color-surface-2),
1236
+ transparent 50%);
1237
+ }
1238
+
1239
+ :where(.c-table) tbody[data-loading] tr {
1240
+ pointer-events: none;
1241
+ }
1242
+
1243
+ @media (forced-colors: active) {
1244
+ :where(.c-table) :where(th, td) {
1245
+ border-block-end-color: canvastext;
1246
+ }
1247
+
1248
+ :where(.c-table__sticky-col) {
1249
+ border-inline-end: 1px solid canvastext;
1250
+ }
1251
+ }
1252
+
1253
+ @scope (.c-tabs) {
1254
+ :scope {
1255
+ --c-tabs-gap: var(--pl-space-4);
1256
+ --c-tabs-indicator: 3px;
1257
+ gap: var(--c-tabs-gap);
1258
+ display: grid;
1259
+ }
1260
+
1261
+ .c-tabs__list {
1262
+ gap: var(--pl-space-1);
1263
+ border-block-end: 1px solid color-mix(in oklab,
1264
+ var(--pl-color-border),
1265
+ transparent 20%);
1266
+ scrollbar-width: none;
1267
+ margin: 0;
1268
+ padding: 0;
1269
+ list-style: none;
1270
+ display: flex;
1271
+ overflow-x: auto;
1272
+
1273
+ &::-webkit-scrollbar {
1274
+ display: none;
1275
+ }
1276
+ }
1277
+
1278
+ .c-tabs__tab {
1279
+ --c-tabs-tab-padding: var(--pl-space-3);
1280
+ appearance: none;
1281
+ align-items: center;
1282
+ gap: var(--pl-space-2);
1283
+ padding: var(--pl-space-2) var(--c-tabs-tab-padding);
1284
+ color: var(--pl-color-text-muted);
1285
+ font: inherit;
1286
+ font-weight: var(--pl-font-weight-medium);
1287
+ white-space: nowrap;
1288
+ cursor: pointer;
1289
+ box-shadow: inset 0 calc(var(--c-tabs-indicator) * -1) 0 0 transparent;
1290
+ transition: color var(--pl-duration-1) var(--pl-ease-standard),
1291
+ box-shadow var(--pl-duration-1) var(--pl-ease-standard);
1292
+ background: none;
1293
+ border: 0;
1294
+ flex-shrink: 0;
1295
+ display: inline-flex;
1296
+ }
1297
+
1298
+ .c-tabs__tab[aria-selected="true"] {
1299
+ color: var(--pl-color-accent);
1300
+ font-weight: var(--pl-font-weight-semibold);
1301
+ box-shadow: inset 0 calc(var(--c-tabs-indicator) * -1) 0 0
1302
+ var(--pl-color-accent);
1303
+ }
1304
+
1305
+ .c-tabs__tab:disabled, .c-tabs__tab[aria-disabled="true"] {
1306
+ color: var(--pl-color-text-muted);
1307
+ opacity: var(--pl-opacity-disabled);
1308
+ }
1309
+
1310
+ .c-tabs__tab .c-tabs__count {
1311
+ padding-inline: var(--pl-space-2);
1312
+ border-radius: var(--pl-radius-pill);
1313
+ background: var(--pl-color-surface-2);
1314
+ color: var(--pl-color-text-muted);
1315
+ font-size: var(--pl-text-xs);
1316
+ font-weight: var(--pl-font-weight-semibold);
1317
+ line-height: var(--pl-leading-snug);
1318
+ }
1319
+
1320
+ .c-tabs__tab[aria-selected="true"] .c-tabs__count {
1321
+ background: color-mix(in oklab, var(--pl-color-accent), transparent 82%);
1322
+ color: var(--pl-color-accent);
1323
+ }
1324
+
1325
+ .c-tabs__panel {
1326
+ animation: c-tabs-reveal var(--pl-duration-2) var(--pl-ease-standard);
1327
+ }
1328
+ }
1329
+
1330
+ :where(.c-tabs__list) .c-tabs__tab:is(:hover, :focus-visible):not(:disabled, [aria-disabled="true"]) {
1331
+ background: var(--pl-color-surface-2);
1332
+ color: var(--pl-color-text);
1333
+ }
1334
+
1335
+ :where(.c-tabs__list) .c-tabs__tab:hover:not(:disabled, [aria-disabled="true"]) {
1336
+ color: var(--pl-color-text);
1337
+ }
1338
+
1339
+ :where(.c-tabs__list) .c-tabs__tab:focus-visible {
1340
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
1341
+ outline-offset: calc(var(--pl-focus-offset) * -1);
1342
+ }
1343
+
1344
+ @keyframes c-tabs-reveal {
1345
+ from {
1346
+ opacity: 0;
1347
+ transform: translateY(2px);
1348
+ }
1349
+ }
1350
+
1351
+ @media (forced-colors: active) {
1352
+ :where(.c-tabs__list) {
1353
+ border-block-end-color: canvastext;
1354
+ }
1355
+
1356
+ :where(.c-tabs__tab)[aria-selected="true"] {
1357
+ color: highlight;
1358
+ box-shadow: inset 0 calc(var(--c-tabs-indicator) * -1) 0 0 Highlight;
1359
+ }
1360
+
1361
+ :where(.c-tabs__tab):focus-visible {
1362
+ outline-color: highlight;
1363
+ }
1364
+ }
1365
+
1366
+ @scope (.c-toolbar) {
1367
+ :scope {
1368
+ --c-toolbar-gap: var(--pl-space-3);
1369
+ --c-toolbar-pad: var(--pl-space-3);
1370
+ --c-toolbar-min: 10rem;
1371
+ justify-content: space-between;
1372
+ align-items: center;
1373
+ gap: var(--c-toolbar-gap);
1374
+ padding: var(--c-toolbar-pad);
1375
+ border-block-end: 1px solid color-mix(in oklab,
1376
+ var(--pl-color-border),
1377
+ transparent 20%);
1378
+ background: var(--pl-color-surface);
1379
+ flex-wrap: wrap;
1380
+ display: flex;
1381
+ container: c-toolbar / inline-size;
1382
+ }
1383
+
1384
+ .c-toolbar__group {
1385
+ align-items: center;
1386
+ gap: var(--pl-space-2);
1387
+ min-inline-size: var(--c-toolbar-min);
1388
+ flex-wrap: wrap;
1389
+ flex: auto;
1390
+ display: flex;
1391
+ }
1392
+
1393
+ .c-toolbar__group:last-child {
1394
+ flex: 0 auto;
1395
+ justify-content: flex-end;
1396
+ }
1397
+
1398
+ .c-toolbar__divider {
1399
+ background: color-mix(in oklab,
1400
+ var(--pl-color-border),
1401
+ transparent 20%);
1402
+ flex-shrink: 0;
1403
+ align-self: center;
1404
+ block-size: 1.5rem;
1405
+ inline-size: 1px;
1406
+ }
1407
+
1408
+ @container c-toolbar (inline-size < 36rem) {
1409
+ :scope {
1410
+ --c-toolbar-pad: var(--pl-space-2);
1411
+ --c-toolbar-gap: var(--pl-space-2);
1412
+ }
1413
+ }
1414
+ }
1415
+
1416
+ @media (forced-colors: active) {
1417
+ :where(.c-toolbar) {
1418
+ border-block-end-color: canvastext;
1419
+ }
1420
+
1421
+ :where(.c-toolbar__divider) {
1422
+ background: canvastext;
1423
+ }
1424
+ }
1425
+
1426
+ @scope (.c-pagination) {
1427
+ :scope {
1428
+ --c-pagination-min: var(--pl-control-block-size);
1429
+ align-items: center;
1430
+ gap: var(--pl-space-1);
1431
+ display: flex;
1432
+ }
1433
+
1434
+ .c-pagination__page, .c-pagination__nav {
1435
+ appearance: none;
1436
+ justify-content: center;
1437
+ align-items: center;
1438
+ gap: var(--pl-space-1);
1439
+ min-block-size: var(--c-pagination-min);
1440
+ min-inline-size: var(--c-pagination-min);
1441
+ padding-inline: var(--pl-space-2);
1442
+ border-radius: var(--pl-radius-md);
1443
+ color: var(--pl-color-text-muted);
1444
+ font: inherit;
1445
+ font-weight: var(--pl-font-weight-medium);
1446
+ cursor: pointer;
1447
+ transition: background-color var(--pl-duration-1) var(--pl-ease-standard),
1448
+ color var(--pl-duration-1) var(--pl-ease-standard);
1449
+ background: none;
1450
+ border: 1px solid #0000;
1451
+ display: inline-flex;
1452
+ }
1453
+
1454
+ .c-pagination__page[aria-current="page"] {
1455
+ background: var(--pl-color-accent);
1456
+ color: var(--pl-color-accent-text);
1457
+ font-weight: var(--pl-font-weight-semibold);
1458
+ }
1459
+
1460
+ :scope[data-size="sm"] {
1461
+ --c-pagination-min: 2rem;
1462
+ }
1463
+
1464
+ .c-pagination__page:disabled, .c-pagination__nav:disabled {
1465
+ opacity: var(--pl-opacity-disabled);
1466
+ cursor: not-allowed;
1467
+ }
1468
+
1469
+ .c-pagination__ellipsis {
1470
+ min-inline-size: var(--c-pagination-min);
1471
+ color: var(--pl-color-text-muted);
1472
+ user-select: none;
1473
+ justify-content: center;
1474
+ align-items: center;
1475
+ display: inline-flex;
1476
+ }
1477
+ }
1478
+
1479
+ :where(.c-pagination__page:not([aria-current="page"])):is(:hover, :focus-visible) {
1480
+ background: var(--pl-color-surface-2);
1481
+ color: var(--pl-color-text);
1482
+ }
1483
+
1484
+ :where(.c-pagination__page):focus-visible, :where(.c-pagination__nav):focus-visible {
1485
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
1486
+ outline-offset: calc(var(--pl-focus-offset) * -1);
1487
+ }
1488
+
1489
+ @media (forced-colors: active) {
1490
+ :where(.c-pagination__page)[aria-current="page"] {
1491
+ color: highlighttext;
1492
+ background: highlight;
1493
+ }
1494
+
1495
+ :where(.c-pagination__page):focus-visible, :where(.c-pagination__nav):focus-visible {
1496
+ outline-color: highlight;
1497
+ }
1498
+ }
1499
+
1500
+ @scope (.c-skeleton) {
1501
+ :scope {
1502
+ --c-skeleton-w: 100%;
1503
+ inline-size: var(--c-skeleton-w);
1504
+ block-size: var(--pl-text-md);
1505
+ border-radius: var(--pl-radius-sm);
1506
+ background: var(--pl-color-surface-2);
1507
+ animation: c-skeleton-pulse 1.8s var(--pl-ease-standard) infinite;
1508
+ display: block;
1509
+ }
1510
+
1511
+ :scope[data-shape="circle"] {
1512
+ inline-size: var(--c-skeleton-w, 2.5rem);
1513
+ block-size: var(--c-skeleton-w, 2.5rem);
1514
+ border-radius: var(--pl-radius-pill);
1515
+ }
1516
+
1517
+ :scope[data-shape="rect"] {
1518
+ block-size: var(--c-skeleton-w, 6rem);
1519
+ border-radius: var(--pl-radius-md);
1520
+ inline-size: 100%;
1521
+ }
1522
+
1523
+ :scope[data-shape="text"][data-line="sm"] {
1524
+ block-size: var(--pl-text-sm);
1525
+ }
1526
+ }
1527
+
1528
+ :where(.c-skeleton-group) {
1529
+ gap: var(--pl-space-2);
1530
+ flex-direction: column;
1531
+ display: flex;
1532
+ }
1533
+
1534
+ @keyframes c-skeleton-pulse {
1535
+ 0%, 100% {
1536
+ opacity: 1;
1537
+ }
1538
+
1539
+ 50% {
1540
+ opacity: .4;
1541
+ }
1542
+ }
1543
+
1544
+ @media (forced-colors: active) {
1545
+ :where(.c-skeleton) {
1546
+ opacity: .3;
1547
+ background: canvastext;
1548
+ }
1549
+ }
1550
+
1551
+ @scope (.c-empty) {
1552
+ :scope {
1553
+ --c-empty-pad: var(--pl-space-8);
1554
+ --c-empty-tone: var(--pl-color-text-muted);
1555
+ justify-items: center;
1556
+ gap: var(--pl-space-3);
1557
+ padding: var(--c-empty-pad);
1558
+ text-align: center;
1559
+ color: var(--pl-color-text-muted);
1560
+ display: grid;
1561
+ }
1562
+
1563
+ .c-empty__media {
1564
+ inline-size: var(--c-empty-media-size, 3rem);
1565
+ block-size: var(--c-empty-media-size, 3rem);
1566
+ color: var(--c-empty-tone);
1567
+ opacity: .6;
1568
+ justify-content: center;
1569
+ align-items: center;
1570
+ display: flex;
1571
+ }
1572
+
1573
+ .c-empty__media svg, .c-empty__media img {
1574
+ block-size: 100%;
1575
+ inline-size: 100%;
1576
+ }
1577
+
1578
+ .c-empty__title {
1579
+ font-size: var(--pl-text-lg);
1580
+ font-weight: var(--pl-font-weight-semibold);
1581
+ color: var(--pl-color-text);
1582
+ text-wrap: balance;
1583
+ margin: 0;
1584
+ }
1585
+
1586
+ .c-empty__description {
1587
+ max-inline-size: 36ch;
1588
+ font-size: var(--pl-text-sm);
1589
+ text-wrap: pretty;
1590
+ margin: 0;
1591
+ }
1592
+
1593
+ .c-empty__actions {
1594
+ justify-content: center;
1595
+ align-items: center;
1596
+ gap: var(--pl-space-2);
1597
+ flex-wrap: wrap;
1598
+ margin-block-start: var(--pl-space-2);
1599
+ display: flex;
1600
+ }
1601
+
1602
+ :scope[data-tone="danger"] {
1603
+ --c-empty-tone: var(--pl-color-danger);
1604
+ }
1605
+
1606
+ :scope[data-tone="success"] {
1607
+ --c-empty-tone: var(--pl-color-success);
1608
+ }
1609
+ }
1610
+
1611
+ @media (forced-colors: active) {
1612
+ :where(.c-empty__media) {
1613
+ color: canvastext;
1614
+ }
1615
+ }
1616
+
1617
+ @scope (.c-stat) {
1618
+ :scope {
1619
+ --c-stat-gap: var(--pl-space-1);
1620
+ gap: var(--pl-space-2);
1621
+ flex-direction: column;
1622
+ display: flex;
1623
+ }
1624
+
1625
+ .c-stat__label {
1626
+ font-size: var(--pl-text-sm);
1627
+ font-weight: var(--pl-font-weight-semibold);
1628
+ color: var(--pl-color-text-muted);
1629
+ line-height: 1;
1630
+ }
1631
+
1632
+ .c-stat__value {
1633
+ align-items: baseline;
1634
+ gap: var(--pl-space-2);
1635
+ font-size: clamp(1.75rem, 1.5rem + 1vi, 2.25rem);
1636
+ font-weight: var(--pl-font-weight-bold);
1637
+ line-height: var(--pl-leading-tight);
1638
+ color: var(--pl-color-text);
1639
+ font-variant-numeric: tabular-nums;
1640
+ letter-spacing: -.02em;
1641
+ display: flex;
1642
+ }
1643
+
1644
+ .c-stat__unit {
1645
+ font-size: var(--pl-text-md);
1646
+ font-weight: var(--pl-font-weight-medium);
1647
+ color: var(--pl-color-text-muted);
1648
+ }
1649
+
1650
+ .c-stat__trend {
1651
+ align-items: center;
1652
+ gap: var(--pl-space-1);
1653
+ font-size: var(--pl-text-sm);
1654
+ font-weight: var(--pl-font-weight-semibold);
1655
+ font-variant-numeric: tabular-nums;
1656
+ color: var(--pl-color-text-muted);
1657
+ display: inline-flex;
1658
+ }
1659
+
1660
+ .c-stat__trend[data-direction="up"] {
1661
+ color: var(--pl-color-success-text);
1662
+ }
1663
+
1664
+ .c-stat__trend[data-direction="down"] {
1665
+ color: var(--pl-color-danger-text);
1666
+ }
1667
+
1668
+ .c-stat__trend:before {
1669
+ font-size: .7em;
1670
+ line-height: 1;
1671
+ display: inline-block;
1672
+ }
1673
+
1674
+ .c-stat__trend[data-direction="up"]:before {
1675
+ content: "▲";
1676
+ }
1677
+
1678
+ .c-stat__trend[data-direction="down"]:before {
1679
+ content: "▼";
1680
+ }
1681
+
1682
+ .c-stat__trend[data-direction="flat"]:before {
1683
+ content: "▶";
1684
+ transform: rotate(-90deg);
1685
+ }
1686
+
1687
+ .c-stat__spark {
1688
+ margin-block-start: var(--pl-space-1);
1689
+ }
1690
+ }
1691
+
1692
+ @media (forced-colors: active) {
1693
+ :where(.c-stat__trend)[data-direction="up"], :where(.c-stat__trend)[data-direction="down"] {
1694
+ color: canvastext;
1695
+ }
1696
+ }
1697
+
1698
+ @scope (.c-alert) {
1699
+ :scope {
1700
+ --c-alert-tone: var(--pl-color-accent);
1701
+ --c-alert-tone-bg: var(--pl-color-accent);
1702
+ --c-alert-pad: var(--pl-space-4);
1703
+ --c-alert-gap: var(--pl-space-3);
1704
+ gap: var(--c-alert-gap);
1705
+ padding: var(--c-alert-pad);
1706
+ border: 1px solid var(--pl-color-border);
1707
+ border-inline-start: var(--pl-accent-bar-width) solid var(--c-alert-tone);
1708
+ border-radius: var(--pl-radius-xl);
1709
+ background: color-mix(in oklab,
1710
+ var(--c-alert-tone-bg),
1711
+ var(--pl-color-surface) 92%);
1712
+ color: var(--pl-color-text);
1713
+ grid-template-columns: auto 1fr;
1714
+ display: grid;
1715
+ }
1716
+
1717
+ .c-alert__icon {
1718
+ color: var(--c-alert-tone);
1719
+ flex-shrink: 0;
1720
+ align-items: flex-start;
1721
+ display: flex;
1722
+ }
1723
+
1724
+ .c-alert__icon svg {
1725
+ block-size: 1.25rem;
1726
+ inline-size: 1.25rem;
1727
+ }
1728
+
1729
+ .c-alert__content {
1730
+ gap: var(--pl-space-1);
1731
+ flex-direction: column;
1732
+ min-inline-size: 0;
1733
+ display: flex;
1734
+ }
1735
+
1736
+ .c-alert__title {
1737
+ font-weight: var(--pl-font-weight-semibold);
1738
+ font-size: var(--pl-text-sm);
1739
+ color: var(--pl-color-text);
1740
+ }
1741
+
1742
+ .c-alert__body {
1743
+ font-size: var(--pl-text-sm);
1744
+ color: var(--pl-color-text-muted);
1745
+ }
1746
+
1747
+ :scope[data-tone="success"] {
1748
+ --c-alert-tone: var(--pl-color-success);
1749
+ --c-alert-tone-bg: var(--pl-color-success-bg);
1750
+ }
1751
+
1752
+ :scope[data-tone="warning"] {
1753
+ --c-alert-tone: var(--pl-color-warning);
1754
+ --c-alert-tone-bg: var(--pl-color-warning-bg);
1755
+ }
1756
+
1757
+ :scope[data-tone="danger"] {
1758
+ --c-alert-tone: var(--pl-color-danger);
1759
+ --c-alert-tone-bg: var(--pl-color-danger-bg);
1760
+ }
1761
+
1762
+ .c-alert__close {
1763
+ position: absolute;
1764
+ inset-block-start: var(--pl-space-2);
1765
+ inset-inline-end: var(--pl-space-2);
1766
+ }
1767
+ }
1768
+
1769
+ :where(.c-alert) {
1770
+ position: relative;
1771
+ }
1772
+
1773
+ @media (forced-colors: active) {
1774
+ :where(.c-alert) {
1775
+ border-color: canvastext;
1776
+ }
1777
+ }
1778
+
1779
+ @scope (.c-progress) {
1780
+ :scope {
1781
+ --c-progress-tone: var(--pl-color-accent);
1782
+ --c-progress-height: .375rem;
1783
+ block-size: var(--c-progress-height);
1784
+ border-radius: var(--pl-radius-pill);
1785
+ background: var(--pl-color-surface-2);
1786
+ position: relative;
1787
+ overflow: hidden;
1788
+ }
1789
+
1790
+ .c-progress__bar {
1791
+ border-radius: var(--pl-radius-pill);
1792
+ background: var(--c-progress-tone);
1793
+ block-size: 100%;
1794
+ transition: inline-size var(--pl-duration-3) var(--pl-ease-standard);
1795
+ }
1796
+
1797
+ :scope[data-tone="success"] {
1798
+ --c-progress-tone: var(--pl-color-success);
1799
+ }
1800
+
1801
+ :scope[data-tone="warning"] {
1802
+ --c-progress-tone: var(--pl-color-warning);
1803
+ }
1804
+
1805
+ :scope[data-tone="danger"] {
1806
+ --c-progress-tone: var(--pl-color-danger);
1807
+ }
1808
+
1809
+ :scope[data-indeterminate] .c-progress__bar {
1810
+ inline-size: 40%;
1811
+ animation: c-progress-sweep 1.4s var(--pl-ease-standard) infinite;
1812
+ position: absolute;
1813
+ inset-block: 0;
1814
+ }
1815
+ }
1816
+
1817
+ @keyframes c-progress-sweep {
1818
+ 0% {
1819
+ inset-inline-start: -40%;
1820
+ }
1821
+
1822
+ 100% {
1823
+ inset-inline-start: 100%;
1824
+ }
1825
+ }
1826
+
1827
+ @media (forced-colors: active) {
1828
+ :where(.c-progress) {
1829
+ background: canvastext;
1830
+ }
1831
+
1832
+ :where(.c-progress__bar) {
1833
+ background: highlight;
1834
+ }
1835
+ }
1836
+
1837
+ @scope (.c-avatar) {
1838
+ :scope {
1839
+ --c-avatar-size: 2.5rem;
1840
+ inline-size: var(--c-avatar-size);
1841
+ block-size: var(--c-avatar-size);
1842
+ border-radius: var(--pl-radius-pill);
1843
+ background: var(--pl-color-accent);
1844
+ color: var(--pl-color-accent-text);
1845
+ font-size: calc(var(--c-avatar-size) * .4);
1846
+ font-weight: var(--pl-font-weight-semibold);
1847
+ user-select: none;
1848
+ flex-shrink: 0;
1849
+ justify-content: center;
1850
+ align-items: center;
1851
+ line-height: 1;
1852
+ display: inline-flex;
1853
+ overflow: hidden;
1854
+ }
1855
+
1856
+ :scope[data-size="sm"] {
1857
+ --c-avatar-size: 1.5rem;
1858
+ font-size: var(--pl-text-xs);
1859
+ }
1860
+
1861
+ :scope[data-size="lg"] {
1862
+ --c-avatar-size: 3rem;
1863
+ font-size: var(--pl-text-lg);
1864
+ }
1865
+
1866
+ .c-avatar__img {
1867
+ object-fit: cover;
1868
+ block-size: 100%;
1869
+ inline-size: 100%;
1870
+ }
1871
+ }
1872
+
1873
+ :where(.c-avatar-group) {
1874
+ --c-avatar-group-size: 2.5rem;
1875
+ align-items: center;
1876
+ display: inline-flex;
1877
+ }
1878
+
1879
+ :where(.c-avatar-group[data-size="sm"]) {
1880
+ --c-avatar-group-size: 1.5rem;
1881
+ }
1882
+
1883
+ :where(.c-avatar-group[data-size="lg"]) {
1884
+ --c-avatar-group-size: 3rem;
1885
+ }
1886
+
1887
+ :where(.c-avatar-group) .c-avatar {
1888
+ --c-avatar-size: var(--c-avatar-group-size);
1889
+ border: 2px solid var(--pl-color-surface);
1890
+ margin-inline-start: calc(var(--c-avatar-group-size) * -.35);
1891
+ }
1892
+
1893
+ :where(.c-avatar-group) .c-avatar:first-child {
1894
+ margin-inline-start: 0;
1895
+ }
1896
+
1897
+ :where(.c-avatar-group__more) {
1898
+ inline-size: var(--c-avatar-group-size, 2.5rem);
1899
+ block-size: var(--c-avatar-group-size, 2.5rem);
1900
+ border-radius: var(--pl-radius-pill);
1901
+ border: 2px solid var(--pl-color-surface);
1902
+ background: var(--pl-color-surface-2);
1903
+ color: var(--pl-color-text-muted);
1904
+ font-size: calc(var(--c-avatar-group-size, 2.5rem) * .4);
1905
+ font-weight: var(--pl-font-weight-semibold);
1906
+ justify-content: center;
1907
+ align-items: center;
1908
+ margin-inline-start: calc(var(--c-avatar-group-size, 2.5rem) * -.35);
1909
+ display: inline-flex;
1910
+ }
1911
+
1912
+ :where(.c-avatar-group[data-size="sm"]) .c-avatar-group__more {
1913
+ font-size: var(--pl-text-xs);
1914
+ }
1915
+
1916
+ :where(.c-avatar-group[data-size="lg"]) .c-avatar-group__more {
1917
+ font-size: var(--pl-text-lg);
1918
+ }
1919
+
1920
+ @media (forced-colors: active) {
1921
+ :where(.c-avatar) {
1922
+ color: highlighttext;
1923
+ background: highlight;
1924
+ }
1925
+ }
1926
+
1927
+ @scope (.c-tooltip) {
1928
+ :scope {
1929
+ --c-tooltip-anchor: --pl-tooltip-anchor;
1930
+ --c-tooltip-bg: var(--pl-color-text);
1931
+ --c-tooltip-text: var(--pl-color-bg);
1932
+ --c-tooltip-pad: var(--pl-space-2) var(--pl-space-3);
1933
+ --c-tooltip-radius: var(--pl-radius-lg);
1934
+ --c-tooltip-font-size: var(--pl-text-sm);
1935
+ --c-tooltip-max-inline: 20rem;
1936
+ display: inline-flex;
1937
+ position: relative;
1938
+ }
1939
+
1940
+ .c-tooltip__trigger {
1941
+ anchor-name: var(--c-tooltip-anchor);
1942
+ display: inline-flex;
1943
+ }
1944
+
1945
+ .c-tooltip__body {
1946
+ opacity: 0;
1947
+ pointer-events: none;
1948
+ padding: var(--c-tooltip-pad);
1949
+ border-radius: var(--c-tooltip-radius);
1950
+ background: var(--c-tooltip-bg);
1951
+ color: var(--c-tooltip-text);
1952
+ font-size: var(--c-tooltip-font-size);
1953
+ line-height: var(--pl-leading-tight);
1954
+ max-inline-size: var(--c-tooltip-max-inline);
1955
+ text-wrap: balance;
1956
+ box-shadow: var(--pl-shadow-2);
1957
+ z-index: var(--pl-z-overlay);
1958
+ transition: opacity var(--pl-duration-1) var(--pl-ease-standard),
1959
+ display var(--pl-duration-1) var(--pl-ease-standard) allow-discrete;
1960
+ display: none;
1961
+ position: absolute;
1962
+ }
1963
+
1964
+ @supports (position-anchor: --x) {
1965
+ .c-tooltip__body {
1966
+ position-anchor: var(--c-tooltip-anchor);
1967
+ position-area: block-start span-inline-end;
1968
+ position-try-fallbacks: flip-block;
1969
+ margin-block-end: var(--pl-space-2);
1970
+ }
1971
+ }
1972
+
1973
+ :scope:has(.c-tooltip__trigger:hover) .c-tooltip__body, :scope:has(.c-tooltip__trigger:focus-visible) .c-tooltip__body {
1974
+ opacity: 1;
1975
+ display: block;
1976
+ }
1977
+
1978
+ @starting-style {
1979
+ :scope:has(.c-tooltip__trigger:hover) .c-tooltip__body, :scope:has(.c-tooltip__trigger:focus-visible) .c-tooltip__body {
1980
+ opacity: 0;
1981
+ }
1982
+ }
1983
+ }
1984
+
1985
+ @supports not (position-anchor: --x) {
1986
+ :where(.c-tooltip__body) {
1987
+ display: none;
1988
+ }
1989
+ }
1990
+
1991
+ @media (forced-colors: active) {
1992
+ :where(.c-tooltip__body) {
1993
+ color: canvas;
1994
+ background: canvastext;
1995
+ border: 1px solid canvastext;
1996
+ }
1997
+ }
1998
+
1999
+ @scope (.c-accordion) {
2000
+ :scope {
2001
+ --c-accordion-border: var(--pl-color-border);
2002
+ --c-accordion-bg: var(--pl-color-surface);
2003
+ --c-accordion-radius: var(--pl-radius-xl);
2004
+ --c-accordion-header-pad: var(--pl-space-4);
2005
+ --c-accordion-content-pad: 0 var(--pl-space-4) var(--pl-space-4);
2006
+ --c-accordion-gap: var(--pl-space-2);
2007
+ gap: var(--c-accordion-gap);
2008
+ flex-direction: column;
2009
+ display: flex;
2010
+ }
2011
+ }
2012
+
2013
+ @scope (.c-accordion__item) {
2014
+ :scope {
2015
+ border: 1px solid var(--c-accordion-border, var(--pl-color-border));
2016
+ border-radius: var(--c-accordion-radius, var(--pl-radius-lg));
2017
+ background: var(--c-accordion-bg, var(--pl-color-surface));
2018
+ overflow: hidden;
2019
+ }
2020
+
2021
+ .c-accordion__header {
2022
+ justify-content: space-between;
2023
+ align-items: center;
2024
+ gap: var(--pl-space-3);
2025
+ padding: var(--c-accordion-header-pad, var(--pl-space-4));
2026
+ font-weight: var(--pl-font-weight-semibold);
2027
+ cursor: pointer;
2028
+ user-select: none;
2029
+ list-style: none;
2030
+ display: flex;
2031
+
2032
+ &::-webkit-details-marker {
2033
+ display: none;
2034
+ }
2035
+
2036
+ &::marker {
2037
+ content: "";
2038
+ }
2039
+ }
2040
+
2041
+ .c-accordion__header:hover {
2042
+ background: var(--pl-color-surface-2);
2043
+ }
2044
+
2045
+ .c-accordion__header:focus-visible {
2046
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
2047
+ outline-offset: calc(var(--pl-focus-offset) * -1);
2048
+ }
2049
+
2050
+ .c-accordion__icon {
2051
+ block-size: 1.25rem;
2052
+ inline-size: 1.25rem;
2053
+ color: var(--pl-color-text-muted);
2054
+ transition: rotate var(--pl-duration-2) var(--pl-ease-standard);
2055
+ flex-shrink: 0;
2056
+ }
2057
+
2058
+ :scope[open] .c-accordion__icon {
2059
+ rotate: 180deg;
2060
+ }
2061
+
2062
+ .c-accordion__panel {
2063
+ transition: grid-template-rows var(--pl-duration-3)
2064
+ var(--pl-ease-standard);
2065
+ grid-template-rows: 0fr;
2066
+ display: grid;
2067
+ }
2068
+
2069
+ :scope[open] .c-accordion__panel {
2070
+ grid-template-rows: 1fr;
2071
+ }
2072
+
2073
+ .c-accordion__content {
2074
+ padding: var(--c-accordion-content-pad, 0 var(--pl-space-4) var(--pl-space-4));
2075
+ color: var(--pl-color-text-muted);
2076
+ line-height: var(--pl-leading-normal);
2077
+ overflow: hidden;
2078
+ }
2079
+
2080
+ @supports (interpolate-size: allow-keywords) {
2081
+ .c-accordion__panel {
2082
+ grid-template-rows: initial;
2083
+ block-size: 0;
2084
+ transition: block-size var(--pl-duration-3) var(--pl-ease-standard);
2085
+ display: block;
2086
+ overflow: hidden;
2087
+ }
2088
+
2089
+ :scope[open] .c-accordion__panel {
2090
+ block-size: auto;
2091
+ }
2092
+
2093
+ @starting-style {
2094
+ :scope[open] .c-accordion__panel {
2095
+ block-size: 0;
2096
+ }
2097
+ }
2098
+ }
2099
+ }
2100
+
2101
+ @media (forced-colors: active) {
2102
+ :where(.c-accordion__item) {
2103
+ border-color: buttonborder;
2104
+ }
2105
+
2106
+ :where(.c-accordion__header:focus-visible) {
2107
+ outline-color: highlight;
2108
+ }
2109
+ }
2110
+
2111
+ @scope (.c-switch) {
2112
+ :scope {
2113
+ --c-switch-track-w: 2.75rem;
2114
+ --c-switch-track-h: 1.5rem;
2115
+ --c-switch-thumb: calc(var(--c-switch-track-h) - .25rem);
2116
+ --c-switch-gap: var(--pl-space-2);
2117
+ --c-switch-on: var(--pl-color-accent);
2118
+ --c-switch-off: var(--pl-color-surface-2);
2119
+ align-items: center;
2120
+ gap: var(--c-switch-gap);
2121
+ cursor: pointer;
2122
+ user-select: none;
2123
+ display: inline-flex;
2124
+ }
2125
+
2126
+ :scope[disabled], :scope:has(.c-switch__input:disabled) {
2127
+ opacity: var(--pl-opacity-disabled);
2128
+ cursor: not-allowed;
2129
+ }
2130
+
2131
+ .c-switch__input {
2132
+ clip: rect(0, 0, 0, 0);
2133
+ white-space: nowrap;
2134
+ border: 0;
2135
+ block-size: 1px;
2136
+ inline-size: 1px;
2137
+ margin: -1px;
2138
+ padding: 0;
2139
+ position: absolute;
2140
+ overflow: hidden;
2141
+ }
2142
+
2143
+ .c-switch__track {
2144
+ inline-size: var(--c-switch-track-w);
2145
+ block-size: var(--c-switch-track-h);
2146
+ border-radius: var(--pl-radius-pill);
2147
+ background: var(--c-switch-off);
2148
+ transition: background-color var(--pl-duration-2) var(--pl-ease-standard);
2149
+ flex-shrink: 0;
2150
+ align-items: center;
2151
+ display: inline-flex;
2152
+ position: relative;
2153
+ }
2154
+
2155
+ .c-switch__thumb {
2156
+ inline-size: var(--c-switch-thumb);
2157
+ block-size: var(--c-switch-thumb);
2158
+ background: var(--pl-color-surface);
2159
+ box-shadow: var(--pl-shadow-1);
2160
+ transition: inset-inline-start var(--pl-duration-2)
2161
+ var(--pl-ease-standard);
2162
+ border-radius: 50%;
2163
+ position: absolute;
2164
+ inset-inline-start: .125rem;
2165
+ }
2166
+
2167
+ :scope:has(.c-switch__input:checked) .c-switch__track {
2168
+ background: var(--c-switch-on);
2169
+ border-color: #0000;
2170
+ }
2171
+
2172
+ :scope:has(.c-switch__input:checked) .c-switch__thumb {
2173
+ inset-inline-start: calc(var(--c-switch-track-w) - var(--c-switch-thumb) - .125rem);
2174
+ }
2175
+
2176
+ :scope:has(.c-switch__input:focus-visible) .c-switch__track {
2177
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
2178
+ outline-offset: var(--pl-focus-offset);
2179
+ }
2180
+
2181
+ :scope[data-size="sm"] {
2182
+ --c-switch-track-w: 2.25rem;
2183
+ --c-switch-track-h: 1.25rem;
2184
+ }
2185
+
2186
+ :scope[data-size="lg"] {
2187
+ --c-switch-track-w: 3.25rem;
2188
+ --c-switch-track-h: 1.75rem;
2189
+ }
2190
+
2191
+ .c-switch__label {
2192
+ font-size: var(--pl-text-sm);
2193
+ color: var(--pl-color-text);
2194
+ }
2195
+ }
2196
+
2197
+ @media (forced-colors: active) {
2198
+ :where(.c-switch__track) {
2199
+ background: buttonface;
2200
+ border-color: buttontext;
2201
+ }
2202
+
2203
+ :where(.c-switch:has(.c-switch__input:checked) .c-switch__track) {
2204
+ background: highlight;
2205
+ }
2206
+
2207
+ :where(.c-switch__thumb) {
2208
+ background: buttontext;
2209
+ }
2210
+
2211
+ :where(.c-switch:has(.c-switch__input:checked) .c-switch__thumb) {
2212
+ background: highlighttext;
2213
+ }
2214
+ }
2215
+
2216
+ @scope (.c-chip) {
2217
+ :scope {
2218
+ --c-chip-bg: oklch(from var(--pl-color-accent) calc(l + .35) c h / 10%);
2219
+ --c-chip-text: var(--pl-color-accent);
2220
+ --c-chip-pad: var(--pl-space-1) var(--pl-space-2);
2221
+ --c-chip-gap: var(--pl-space-1);
2222
+ align-items: center;
2223
+ gap: var(--c-chip-gap);
2224
+ padding: var(--c-chip-pad);
2225
+ border-radius: var(--pl-radius-pill);
2226
+ background: var(--c-chip-bg);
2227
+ color: var(--c-chip-text);
2228
+ font-size: var(--pl-text-xs);
2229
+ font-weight: var(--pl-font-weight-medium);
2230
+ line-height: var(--pl-leading-snug);
2231
+ white-space: nowrap;
2232
+ display: inline-flex;
2233
+ }
2234
+
2235
+ @supports not (background: oklch(from red l c h)) {
2236
+ :scope {
2237
+ --c-chip-bg: color-mix(in oklab,
2238
+ var(--pl-color-accent),
2239
+ transparent 88%);
2240
+ }
2241
+ }
2242
+
2243
+ :scope[data-tone="success"] {
2244
+ --c-chip-bg: oklch(from var(--pl-color-success) calc(l + .35) c h / 12%);
2245
+ --c-chip-text: var(--pl-color-success-text);
2246
+
2247
+ @supports not (background: oklch(from red l c h)) {
2248
+ --c-chip-bg: color-mix(in oklab,
2249
+ var(--pl-color-success),
2250
+ transparent 86%);
2251
+ }
2252
+ }
2253
+
2254
+ :scope[data-tone="warning"] {
2255
+ --c-chip-bg: oklch(from var(--pl-color-warning) calc(l + .35) c h / 14%);
2256
+ --c-chip-text: var(--pl-color-warning-text);
2257
+
2258
+ @supports not (background: oklch(from red l c h)) {
2259
+ --c-chip-bg: color-mix(in oklab,
2260
+ var(--pl-color-warning),
2261
+ transparent 84%);
2262
+ }
2263
+ }
2264
+
2265
+ :scope[data-tone="danger"] {
2266
+ --c-chip-bg: oklch(from var(--pl-color-danger) calc(l + .35) c h / 12%);
2267
+ --c-chip-text: var(--pl-color-danger-text);
2268
+
2269
+ @supports not (background: oklch(from red l c h)) {
2270
+ --c-chip-bg: color-mix(in oklab,
2271
+ var(--pl-color-danger),
2272
+ transparent 86%);
2273
+ }
2274
+ }
2275
+
2276
+ :scope[data-size="sm"] {
2277
+ --c-chip-pad: .125rem var(--pl-space-2);
2278
+ font-size: .6875rem;
2279
+ }
2280
+
2281
+ .c-chip__remove {
2282
+ block-size: 1rem;
2283
+ inline-size: 1rem;
2284
+ color: inherit;
2285
+ cursor: pointer;
2286
+ opacity: .7;
2287
+ transition: opacity var(--pl-duration-1) var(--pl-ease-standard);
2288
+ background: none;
2289
+ border: 0;
2290
+ border-radius: 50%;
2291
+ justify-content: center;
2292
+ align-items: center;
2293
+ padding: 0;
2294
+ font-size: .75rem;
2295
+ line-height: 1;
2296
+ display: inline-flex;
2297
+ }
2298
+
2299
+ .c-chip__remove:hover:not(:disabled) {
2300
+ opacity: 1;
2301
+ background: oklch(from currentColor l c h / 12%);
2302
+ }
2303
+
2304
+ .c-chip__remove:focus-visible {
2305
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
2306
+ outline-offset: calc(var(--pl-focus-offset) / 2);
2307
+ }
2308
+ }
2309
+
2310
+ :where(.c-chip-group) {
2311
+ gap: var(--pl-space-2);
2312
+ flex-wrap: wrap;
2313
+ align-items: center;
2314
+ display: flex;
2315
+ }
2316
+
2317
+ @media (forced-colors: active) {
2318
+ :where(.c-chip) {
2319
+ border: 1px solid buttonborder;
2320
+ }
2321
+ }
2322
+
2323
+ @scope (.c-drawer) {
2324
+ :scope {
2325
+ --c-drawer-inline: min(24rem, 100vi);
2326
+ --c-drawer-block: 100vb;
2327
+ --c-drawer-pad: var(--pl-space-4);
2328
+ --c-drawer-gap: var(--pl-space-3);
2329
+ inline-size: var(--c-drawer-inline);
2330
+ block-size: var(--c-drawer-block);
2331
+ -webkit-backdrop-filter: blur(var(--pl-backdrop-blur)) saturate(var(--pl-backdrop-saturate));
2332
+ box-shadow: var(--pl-shadow-3);
2333
+ opacity: 0;
2334
+ transition: opacity var(--pl-duration-enter) var(--pl-ease-decelerate),
2335
+ transform var(--pl-duration-enter) var(--pl-ease-decelerate),
2336
+ overlay var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete,
2337
+ display var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete;
2338
+ background: light-dark(oklch(100% 0 0 / .96), oklch(17% .04 250 / .94));
2339
+ border: 0;
2340
+ margin: 0;
2341
+ padding: 0;
2342
+ inset-block: 0;
2343
+ inset-inline: auto 0;
2344
+ transform: translateX(100%);
2345
+ }
2346
+
2347
+ :scope[data-side="start"] {
2348
+ inset-inline: 0 auto;
2349
+ transform: translateX(-100%);
2350
+ }
2351
+
2352
+ :scope:popover-open {
2353
+ opacity: 1;
2354
+ transform: translateX(0);
2355
+ }
2356
+
2357
+ @starting-style {
2358
+ :scope:popover-open {
2359
+ opacity: 0;
2360
+ transform: translateX(100%);
2361
+ }
2362
+
2363
+ :scope[data-side="start"]:popover-open {
2364
+ transform: translateX(-100%);
2365
+ }
2366
+ }
2367
+
2368
+ :scope::backdrop {
2369
+ background: var(--pl-color-scrim);
2370
+ backdrop-filter: blur(var(--pl-backdrop-blur-scrim)) saturate(var(--pl-backdrop-saturate-scrim));
2371
+ }
2372
+
2373
+ .c-drawer__header {
2374
+ justify-content: space-between;
2375
+ align-items: center;
2376
+ gap: var(--c-drawer-gap);
2377
+ padding: var(--c-drawer-pad);
2378
+ border-block-end: 1px solid color-mix(in oklab,
2379
+ var(--pl-color-border),
2380
+ transparent 40%);
2381
+ display: flex;
2382
+ }
2383
+
2384
+ .c-drawer__title {
2385
+ font-size: var(--pl-text-lg);
2386
+ font-weight: var(--pl-font-weight-semibold);
2387
+ }
2388
+
2389
+ .c-drawer__body {
2390
+ padding: var(--c-drawer-pad);
2391
+ overflow-y: auto;
2392
+ }
2393
+
2394
+ .c-drawer__footer {
2395
+ gap: var(--c-drawer-gap);
2396
+ padding: var(--c-drawer-pad);
2397
+ border-block-start: 1px solid color-mix(in oklab,
2398
+ var(--pl-color-border),
2399
+ transparent 40%);
2400
+ display: flex;
2401
+ }
2402
+ }
2403
+
2404
+ @media (forced-colors: active) {
2405
+ :where(.c-drawer) {
2406
+ background: canvas;
2407
+ border-color: buttonborder;
2408
+ }
2409
+ }
2410
+
2411
+ :where(.c-toast-stack) {
2412
+ z-index: var(--pl-z-toast);
2413
+ gap: var(--pl-space-2);
2414
+ inline-size: min(24rem, calc(100vi - 2 * var(--pl-space-4)));
2415
+ pointer-events: none;
2416
+ flex-direction: column;
2417
+ display: flex;
2418
+ position: fixed;
2419
+ inset-block-end: var(--pl-space-4);
2420
+ inset-inline-end: var(--pl-space-4);
2421
+ }
2422
+
2423
+ @scope (.c-toast) {
2424
+ :scope {
2425
+ --c-toast-tone: var(--pl-color-accent);
2426
+ --c-toast-pad: var(--pl-space-3) var(--pl-space-4);
2427
+ --c-toast-radius: var(--pl-radius-xl);
2428
+ --c-toast-gap: var(--pl-space-3);
2429
+ gap: var(--c-toast-gap);
2430
+ padding: var(--c-toast-pad);
2431
+ border: 1px solid color-mix(in oklab,
2432
+ var(--pl-color-border),
2433
+ transparent 25%);
2434
+ border-inline-start: var(--pl-accent-bar-width) solid var(--c-toast-tone);
2435
+ border-radius: var(--c-toast-radius);
2436
+ -webkit-backdrop-filter: blur(var(--pl-backdrop-blur)) saturate(var(--pl-backdrop-saturate));
2437
+ box-shadow: var(--pl-shadow-3);
2438
+ pointer-events: auto;
2439
+ opacity: 0;
2440
+ transition: opacity var(--pl-duration-enter) var(--pl-ease-decelerate),
2441
+ transform var(--pl-duration-enter) var(--pl-ease-decelerate);
2442
+ interpolate-size: allow-keywords;
2443
+ background: light-dark(oklch(100% 0 0 / .96), oklch(17% .04 250 / .94));
2444
+ grid-template-columns: auto 1fr auto;
2445
+ align-items: start;
2446
+ display: grid;
2447
+ transform: translateX(100%);
2448
+ }
2449
+
2450
+ :scope[data-visible] {
2451
+ opacity: 1;
2452
+ transform: translateX(0);
2453
+ }
2454
+
2455
+ @starting-style {
2456
+ :scope[data-visible] {
2457
+ opacity: 0;
2458
+ transform: translateX(100%);
2459
+ }
2460
+ }
2461
+
2462
+ :scope[data-tone="success"] {
2463
+ --c-toast-tone: var(--pl-color-success);
2464
+ }
2465
+
2466
+ :scope[data-tone="warning"] {
2467
+ --c-toast-tone: var(--pl-color-warning);
2468
+ }
2469
+
2470
+ :scope[data-tone="danger"] {
2471
+ --c-toast-tone: var(--pl-color-danger);
2472
+ }
2473
+
2474
+ .c-toast__icon {
2475
+ color: var(--c-toast-tone);
2476
+ flex-shrink: 0;
2477
+ align-items: flex-start;
2478
+ display: flex;
2479
+ }
2480
+
2481
+ .c-toast__icon svg {
2482
+ block-size: 1.25rem;
2483
+ inline-size: 1.25rem;
2484
+ }
2485
+
2486
+ .c-toast__content {
2487
+ gap: var(--pl-space-1);
2488
+ flex-direction: column;
2489
+ min-inline-size: 0;
2490
+ display: flex;
2491
+ }
2492
+
2493
+ .c-toast__title {
2494
+ font-weight: var(--pl-font-weight-semibold);
2495
+ font-size: var(--pl-text-sm);
2496
+ }
2497
+
2498
+ .c-toast__body {
2499
+ font-size: var(--pl-text-sm);
2500
+ color: var(--pl-color-text-muted);
2501
+ }
2502
+
2503
+ .c-toast__close {
2504
+ border-radius: var(--pl-radius-sm);
2505
+ block-size: 1.5rem;
2506
+ inline-size: 1.5rem;
2507
+ color: var(--pl-color-text-muted);
2508
+ cursor: pointer;
2509
+ transition: background-color var(--pl-duration-1) var(--pl-ease-standard);
2510
+ background: none;
2511
+ border: 0;
2512
+ flex-shrink: 0;
2513
+ justify-content: center;
2514
+ align-items: center;
2515
+ padding: 0;
2516
+ display: inline-flex;
2517
+ }
2518
+
2519
+ .c-toast__close:hover {
2520
+ background: var(--pl-color-surface-2);
2521
+ }
2522
+
2523
+ .c-toast__close:focus-visible {
2524
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
2525
+ outline-offset: var(--pl-focus-offset);
2526
+ }
2527
+ }
2528
+
2529
+ @media (forced-colors: active) {
2530
+ :where(.c-toast) {
2531
+ background: canvas;
2532
+ border-color: buttonborder;
2533
+ }
2534
+
2535
+ :where(.c-toast__close:focus-visible) {
2536
+ outline-color: highlight;
2537
+ }
2538
+ }
2539
+
2540
+ @supports (animation-timeline: scroll()) {
2541
+ :where(.c-scroll-progress) {
2542
+ --c-progress-tone: var(--pl-color-accent);
2543
+ z-index: var(--pl-z-sticky);
2544
+ block-size: 4px;
2545
+ transform-origin: inline-start;
2546
+ background: var(--c-progress-tone);
2547
+ animation: linear c-scroll-progress-grow scroll(root);
2548
+ position: fixed;
2549
+ inset-block-start: 0;
2550
+ inset-inline: 0;
2551
+ }
2552
+
2553
+ :where(.c-scroll-progress[data-tone="success"]) {
2554
+ --c-progress-tone: var(--pl-color-success);
2555
+ }
2556
+
2557
+ :where(.c-scroll-progress[data-tone="warning"]) {
2558
+ --c-progress-tone: var(--pl-color-warning);
2559
+ }
2560
+
2561
+ :where(.c-scroll-progress[data-tone="danger"]) {
2562
+ --c-progress-tone: var(--pl-color-danger);
2563
+ }
2564
+ }
2565
+
2566
+ @supports not (animation-timeline: scroll()) {
2567
+ :where(.c-scroll-progress) {
2568
+ display: none;
2569
+ }
2570
+ }
2571
+
2572
+ @media (forced-colors: active) {
2573
+ :where(.c-scroll-progress) {
2574
+ background: highlight;
2575
+ }
2576
+ }
2577
+
2578
+ @keyframes c-scroll-progress-grow {
2579
+ from {
2580
+ transform: scaleX(0);
2581
+ }
2582
+
2583
+ to {
2584
+ transform: scaleX(1);
2585
+ }
2586
+ }
2587
+
2588
+ @supports (animation-timeline: view()) {
2589
+ :where(.c-reveal) {
2590
+ animation: linear both c-reveal-enter view();
2591
+ animation-range: entry cover 30%;
2592
+ }
2593
+
2594
+ :where(.c-reveal[data-delay="1"]) {
2595
+ animation-range: entry 10% cover 35%;
2596
+ }
2597
+
2598
+ :where(.c-reveal[data-delay="2"]) {
2599
+ animation-range: entry 20% cover 40%;
2600
+ }
2601
+
2602
+ :where(.c-reveal[data-delay="3"]) {
2603
+ animation-range: entry 30% cover 45%;
2604
+ }
2605
+ }
2606
+
2607
+ @supports not (animation-timeline: view()) {
2608
+ :where(.c-reveal) {
2609
+ opacity: 1;
2610
+ animation: none;
2611
+ transform: none;
2612
+ }
2613
+ }
2614
+
2615
+ @media (forced-colors: active) {
2616
+ :where(.c-reveal) {
2617
+ opacity: 1;
2618
+ animation: none;
2619
+ transform: none;
2620
+ }
2621
+ }
2622
+
2623
+ @keyframes c-reveal-enter {
2624
+ from {
2625
+ opacity: 0;
2626
+ transform: translateY(1.5rem);
2627
+ }
2628
+
2629
+ to {
2630
+ opacity: 1;
2631
+ transform: translateY(0);
2632
+ }
2633
+ }
2634
+
2635
+ @scope (.c-breadcrumb) {
2636
+ .c-breadcrumb__list {
2637
+ align-items: center;
2638
+ gap: var(--pl-space-1);
2639
+ flex-wrap: wrap;
2640
+ margin: 0;
2641
+ padding: 0;
2642
+ list-style: none;
2643
+ display: flex;
2644
+ }
2645
+
2646
+ .c-breadcrumb__item {
2647
+ align-items: center;
2648
+ gap: var(--pl-space-1);
2649
+ display: inline-flex;
2650
+ }
2651
+
2652
+ .c-breadcrumb__item:not(:last-child):after {
2653
+ content: "/";
2654
+ color: var(--pl-color-text-muted);
2655
+ font-size: var(--pl-text-sm);
2656
+ opacity: .6;
2657
+ margin-inline-start: var(--pl-space-1);
2658
+ }
2659
+
2660
+ .c-breadcrumb__link {
2661
+ color: var(--pl-color-text-muted);
2662
+ font-size: var(--pl-text-sm);
2663
+ transition: color var(--pl-duration-1) var(--pl-ease-standard);
2664
+ text-decoration: none;
2665
+ }
2666
+
2667
+ .c-breadcrumb__link:hover {
2668
+ color: var(--pl-color-accent);
2669
+ text-decoration: underline;
2670
+ }
2671
+
2672
+ .c-breadcrumb__link:focus-visible {
2673
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
2674
+ outline-offset: var(--pl-focus-offset);
2675
+ border-radius: var(--pl-radius-sm);
2676
+ }
2677
+
2678
+ .c-breadcrumb__current {
2679
+ color: var(--pl-color-text);
2680
+ font-size: var(--pl-text-sm);
2681
+ font-weight: var(--pl-font-weight-medium);
2682
+ }
2683
+
2684
+ .c-breadcrumb__item[data-truncate] :is(.c-breadcrumb__link, .c-breadcrumb__current) {
2685
+ text-overflow: ellipsis;
2686
+ white-space: nowrap;
2687
+ vertical-align: bottom;
2688
+ max-inline-size: 8rem;
2689
+ display: inline-block;
2690
+ overflow: hidden;
2691
+ }
2692
+ }
2693
+
2694
+ @supports (rule: 1px solid CanvasText) {
2695
+ :where(.c-breadcrumb__list) {
2696
+ rule: 0 auto var(--pl-color-border);
2697
+ rule-visibility-items: between;
2698
+ }
2699
+
2700
+ :where(.c-breadcrumb__item:not(:last-child)):after {
2701
+ content: none;
2702
+ }
2703
+ }
2704
+
2705
+ @media (forced-colors: active) {
2706
+ :where(.c-breadcrumb__link) {
2707
+ color: linktext;
2708
+ }
2709
+
2710
+ :where(.c-breadcrumb__current) {
2711
+ color: canvastext;
2712
+ }
2713
+ }
2714
+
2715
+ @scope (.c-stepper) {
2716
+ :scope {
2717
+ --c-stepper-marker-size: 2rem;
2718
+ --c-stepper-gap: var(--pl-space-4);
2719
+ align-items: flex-start;
2720
+ gap: var(--c-stepper-gap);
2721
+ margin: 0;
2722
+ padding: 0;
2723
+ list-style: none;
2724
+ display: flex;
2725
+ }
2726
+
2727
+ .c-stepper__step {
2728
+ align-items: center;
2729
+ gap: var(--pl-space-2);
2730
+ text-align: center;
2731
+ flex-direction: column;
2732
+ flex: 1;
2733
+ display: flex;
2734
+ position: relative;
2735
+
2736
+ &:before {
2737
+ content: "";
2738
+ inset-block-start: calc(var(--c-stepper-marker-size) / 2);
2739
+ inset-inline: calc(50% + var(--c-stepper-marker-size) / 2 + var(--c-stepper-gap) / 2)
2740
+ calc(-50% + var(--c-stepper-marker-size) / 2 + var(--c-stepper-gap) / 2);
2741
+ background: var(--pl-color-border);
2742
+ block-size: 2px;
2743
+ z-index: var(--pl-z-base);
2744
+ position: absolute;
2745
+ }
2746
+
2747
+ &:last-child:before {
2748
+ content: none;
2749
+ }
2750
+ }
2751
+
2752
+ .c-stepper__step[data-state="completed"]:before {
2753
+ background: var(--pl-color-accent);
2754
+ }
2755
+
2756
+ .c-stepper__marker {
2757
+ inline-size: var(--c-stepper-marker-size);
2758
+ block-size: var(--c-stepper-marker-size);
2759
+ border: 2px solid var(--pl-color-border);
2760
+ background: var(--pl-color-surface);
2761
+ color: var(--pl-color-text-muted);
2762
+ font-size: var(--pl-text-sm);
2763
+ font-weight: var(--pl-font-weight-semibold);
2764
+ z-index: var(--pl-z-raised);
2765
+ transition: background-color var(--pl-duration-2) var(--pl-ease-standard),
2766
+ border-color var(--pl-duration-2) var(--pl-ease-standard),
2767
+ color var(--pl-duration-2) var(--pl-ease-standard),
2768
+ box-shadow var(--pl-duration-2) var(--pl-ease-standard);
2769
+ border-radius: 50%;
2770
+ justify-content: center;
2771
+ align-items: center;
2772
+ display: inline-flex;
2773
+ }
2774
+
2775
+ .c-stepper__step[data-state="completed"] .c-stepper__marker {
2776
+ border-color: var(--pl-color-accent);
2777
+ background: var(--pl-color-accent);
2778
+ color: var(--pl-color-accent-text);
2779
+ }
2780
+
2781
+ .c-stepper__step[data-state="current"] .c-stepper__marker {
2782
+ border-color: var(--pl-color-accent);
2783
+ color: var(--pl-color-accent);
2784
+ box-shadow: 0 0 0 4px
2785
+ color-mix(in oklab, var(--pl-color-accent), transparent var(--pl-focus-glow-opacity));
2786
+ }
2787
+
2788
+ .c-stepper__label {
2789
+ font-size: var(--pl-text-sm);
2790
+ color: var(--pl-color-text-muted);
2791
+ line-height: var(--pl-leading-snug);
2792
+ }
2793
+
2794
+ .c-stepper__step[data-state="current"] .c-stepper__label {
2795
+ color: var(--pl-color-text);
2796
+ font-weight: var(--pl-font-weight-semibold);
2797
+ }
2798
+
2799
+ @container (width <= 36rem) {
2800
+ :scope {
2801
+ flex-direction: column;
2802
+ gap: 0;
2803
+ }
2804
+
2805
+ .c-stepper__step {
2806
+ text-align: start;
2807
+ flex-direction: row;
2808
+ flex: none;
2809
+ align-items: center;
2810
+ padding-block-end: var(--pl-space-4);
2811
+
2812
+ &:before {
2813
+ inset-block: var(--c-stepper-marker-size) 0;
2814
+ inset-inline: calc(var(--c-stepper-marker-size) / 2) auto;
2815
+ inline-size: 2px;
2816
+ }
2817
+ }
2818
+ }
2819
+ }
2820
+
2821
+ :where(.c-stepper) {
2822
+ container-type: inline-size;
2823
+ }
2824
+
2825
+ @media (forced-colors: active) {
2826
+ :where(.c-stepper__marker) {
2827
+ border-color: buttonborder;
2828
+ }
2829
+
2830
+ :where(.c-stepper__step[data-state="completed"] .c-stepper__marker) {
2831
+ color: highlighttext;
2832
+ background: highlight;
2833
+ border-color: highlight;
2834
+ }
2835
+
2836
+ :where(.c-stepper__step[data-state="current"] .c-stepper__marker) {
2837
+ border-color: highlight;
2838
+ }
2839
+ }
2840
+
2841
+ @scope (.c-timeline) {
2842
+ :scope {
2843
+ --c-timeline-dot-size: .75rem;
2844
+ --c-timeline-line-color: var(--pl-color-border);
2845
+ --c-timeline-gap: var(--pl-space-4);
2846
+ padding-inline: var(--pl-space-1) 0;
2847
+ flex-direction: column;
2848
+ margin: 0;
2849
+ list-style: none;
2850
+ display: flex;
2851
+ }
2852
+
2853
+ .c-timeline__item {
2854
+ grid-template-columns: var(--c-timeline-dot-size) 1fr;
2855
+ gap: var(--c-timeline-gap);
2856
+ padding-block-end: var(--pl-space-5);
2857
+ display: grid;
2858
+ position: relative;
2859
+ }
2860
+
2861
+ .c-timeline__item:not(:last-child):before {
2862
+ content: "";
2863
+ inset-block: var(--c-timeline-dot-size) 0;
2864
+ background: var(--c-timeline-line-color);
2865
+ inline-size: 2px;
2866
+ position: absolute;
2867
+ inset-inline-start: calc(var(--c-timeline-dot-size) / 2);
2868
+ transform: translateX(-50%);
2869
+ }
2870
+
2871
+ .c-timeline__dot {
2872
+ inline-size: var(--c-timeline-dot-size);
2873
+ block-size: var(--c-timeline-dot-size);
2874
+ background: var(--pl-color-accent);
2875
+ border: 2px solid var(--pl-color-surface);
2876
+ box-shadow: 0 0 0 2px var(--pl-color-accent);
2877
+ z-index: var(--pl-z-raised);
2878
+ border-radius: 50%;
2879
+ margin-block-start: .1875rem;
2880
+ }
2881
+
2882
+ .c-timeline__item[data-tone="success"] .c-timeline__dot {
2883
+ background: var(--pl-color-success);
2884
+ box-shadow: 0 0 0 2px var(--pl-color-success);
2885
+ }
2886
+
2887
+ .c-timeline__item[data-tone="warning"] .c-timeline__dot {
2888
+ background: var(--pl-color-warning);
2889
+ box-shadow: 0 0 0 2px var(--pl-color-warning);
2890
+ }
2891
+
2892
+ .c-timeline__item[data-tone="danger"] .c-timeline__dot {
2893
+ background: var(--pl-color-danger);
2894
+ box-shadow: 0 0 0 2px var(--pl-color-danger);
2895
+ }
2896
+
2897
+ .c-timeline__content {
2898
+ min-inline-size: 0;
2899
+ }
2900
+
2901
+ .c-timeline__header {
2902
+ justify-content: space-between;
2903
+ align-items: baseline;
2904
+ gap: var(--pl-space-2);
2905
+ margin-block-end: var(--pl-space-1);
2906
+ display: flex;
2907
+ }
2908
+
2909
+ .c-timeline__title {
2910
+ font-size: var(--pl-text-sm);
2911
+ font-weight: var(--pl-font-weight-semibold);
2912
+ }
2913
+
2914
+ .c-timeline__time {
2915
+ font-size: var(--pl-text-xs);
2916
+ color: var(--pl-color-text-muted);
2917
+ white-space: nowrap;
2918
+ }
2919
+
2920
+ .c-timeline__body {
2921
+ font-size: var(--pl-text-sm);
2922
+ color: var(--pl-color-text-muted);
2923
+ line-height: var(--pl-leading-normal);
2924
+ }
2925
+ }
2926
+
2927
+ @media (forced-colors: active) {
2928
+ :where(.c-timeline__dot) {
2929
+ background: highlight;
2930
+ box-shadow: 0 0 0 2px highlight;
2931
+ }
2932
+
2933
+ :where(.c-timeline__item:not(:last-child)):before {
2934
+ background: buttonborder;
2935
+ }
2936
+ }
2937
+
2938
+ @scope (.c-textarea-auto) {
2939
+ :scope {
2940
+ --c-textarea-max-block: 24rem;
2941
+ inline-size: 100%;
2942
+ padding: var(--pl-space-3);
2943
+ border: 1px solid var(--pl-color-border);
2944
+ border-radius: var(--pl-radius-md);
2945
+ background: var(--pl-color-surface);
2946
+ color: var(--pl-color-text);
2947
+ font: inherit;
2948
+ font-size: var(--pl-text-sm);
2949
+ line-height: var(--pl-leading-normal);
2950
+ resize: vertical;
2951
+ transition: border-color var(--pl-duration-1) var(--pl-ease-standard),
2952
+ box-shadow var(--pl-duration-1) var(--pl-ease-standard);
2953
+ }
2954
+
2955
+ :scope:focus-visible {
2956
+ border-color: var(--pl-focus-color);
2957
+ box-shadow: 0 0 0 4px
2958
+ color-mix(in oklab, var(--pl-focus-color), transparent var(--pl-focus-glow-opacity));
2959
+ outline: none;
2960
+ }
2961
+
2962
+ :scope:user-invalid {
2963
+ border-color: var(--pl-color-danger);
2964
+ box-shadow: 0 0 0 4px
2965
+ color-mix(in oklab, var(--pl-color-danger), transparent var(--pl-focus-glow-opacity));
2966
+ }
2967
+
2968
+ :scope:disabled {
2969
+ opacity: var(--pl-opacity-disabled);
2970
+ }
2971
+
2972
+ @supports (field-sizing: content) {
2973
+ :scope {
2974
+ field-sizing: content;
2975
+ max-block-size: var(--c-textarea-max-block);
2976
+ overflow-y: auto;
2977
+ }
2978
+ }
2979
+ }
2980
+
2981
+ @media (forced-colors: active) {
2982
+ :where(.c-textarea-auto) {
2983
+ background: canvas;
2984
+ border-color: buttonborder;
2985
+ }
2986
+
2987
+ :where(.c-textarea-auto:focus-visible) {
2988
+ outline-color: highlight;
2989
+ }
2990
+ }
2991
+
2992
+ @scope (.c-segmented) {
2993
+ :scope {
2994
+ --c-segmented-pad: .125rem;
2995
+ --c-segmented-gap: var(--pl-space-1);
2996
+ --c-segmented-radius: var(--pl-radius-pill);
2997
+ gap: var(--c-segmented-gap);
2998
+ padding: var(--c-segmented-pad);
2999
+ border: 1px solid var(--pl-color-border);
3000
+ border-radius: var(--c-segmented-radius);
3001
+ background: var(--pl-color-surface-2);
3002
+ display: inline-flex;
3003
+ }
3004
+
3005
+ .c-segmented__item {
3006
+ justify-content: center;
3007
+ align-items: center;
3008
+ display: inline-flex;
3009
+ position: relative;
3010
+ }
3011
+
3012
+ .c-segmented__item input {
3013
+ clip: rect(0, 0, 0, 0);
3014
+ white-space: nowrap;
3015
+ border: 0;
3016
+ block-size: 1px;
3017
+ inline-size: 1px;
3018
+ margin: -1px;
3019
+ padding: 0;
3020
+ position: absolute;
3021
+ overflow: hidden;
3022
+ }
3023
+
3024
+ .c-segmented__item span {
3025
+ align-items: center;
3026
+ gap: var(--pl-space-1);
3027
+ padding: var(--pl-space-1) var(--pl-space-3);
3028
+ border-radius: var(--c-segmented-radius);
3029
+ color: var(--pl-color-text-muted);
3030
+ font-size: var(--pl-text-sm);
3031
+ font-weight: var(--pl-font-weight-medium);
3032
+ cursor: pointer;
3033
+ user-select: none;
3034
+ white-space: nowrap;
3035
+ transition: background-color var(--pl-duration-1) var(--pl-ease-standard),
3036
+ color var(--pl-duration-1) var(--pl-ease-standard);
3037
+ display: inline-flex;
3038
+ }
3039
+
3040
+ .c-segmented__item:has(input:checked) span {
3041
+ background: var(--pl-color-surface);
3042
+ color: var(--pl-color-accent);
3043
+ font-weight: var(--pl-font-weight-semibold);
3044
+ box-shadow: var(--pl-shadow-1);
3045
+ }
3046
+
3047
+ .c-segmented__item:not(:has(input:checked), :has(input:disabled)) span:hover {
3048
+ color: var(--pl-color-text);
3049
+ }
3050
+
3051
+ .c-segmented__item:has(input:focus-visible) span {
3052
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
3053
+ outline-offset: var(--pl-focus-offset);
3054
+ }
3055
+
3056
+ .c-segmented__item:has(input:disabled) span {
3057
+ opacity: var(--pl-opacity-disabled);
3058
+ cursor: not-allowed;
3059
+ }
3060
+ }
3061
+
3062
+ @media (forced-colors: active) {
3063
+ :where(.c-segmented) {
3064
+ border-color: buttonborder;
3065
+ }
3066
+
3067
+ :where(.c-segmented__item:has(input:checked) span) {
3068
+ color: highlighttext;
3069
+ background: highlight;
3070
+ }
3071
+ }
3072
+
3073
+ @scope (.c-tag-input) {
3074
+ :scope {
3075
+ --c-tag-input-pad: var(--pl-space-2);
3076
+ --c-tag-input-gap: var(--pl-space-2);
3077
+ --c-tag-input-min-h: calc(var(--pl-control-block-size) - 2px);
3078
+ align-items: center;
3079
+ gap: var(--c-tag-input-gap);
3080
+ min-block-size: var(--c-tag-input-min-h);
3081
+ padding: var(--c-tag-input-pad);
3082
+ border: 1px solid var(--pl-color-border);
3083
+ border-radius: var(--pl-radius-md);
3084
+ background: var(--pl-color-surface);
3085
+ cursor: text;
3086
+ transition: border-color var(--pl-duration-1) var(--pl-ease-standard),
3087
+ box-shadow var(--pl-duration-1) var(--pl-ease-standard);
3088
+ flex-wrap: wrap;
3089
+ display: flex;
3090
+ }
3091
+
3092
+ :scope:focus-within {
3093
+ border-color: var(--pl-focus-color);
3094
+ box-shadow: 0 0 0 4px
3095
+ color-mix(in oklab, var(--pl-focus-color), transparent var(--pl-focus-glow-opacity));
3096
+ outline: none;
3097
+ }
3098
+
3099
+ .c-tag-input__field {
3100
+ min-inline-size: 6rem;
3101
+ color: inherit;
3102
+ font: inherit;
3103
+ font-size: var(--pl-text-sm);
3104
+ background: none;
3105
+ border: 0;
3106
+ outline: none;
3107
+ flex: 1;
3108
+ padding: 0;
3109
+ }
3110
+
3111
+ .c-tag-input__field::placeholder {
3112
+ color: var(--pl-color-text-muted);
3113
+ }
3114
+
3115
+ @supports (field-sizing: content) {
3116
+ .c-tag-input__field {
3117
+ field-sizing: content;
3118
+ min-inline-size: 4rem;
3119
+ }
3120
+ }
3121
+ }
3122
+
3123
+ @media (forced-colors: active) {
3124
+ :where(.c-tag-input) {
3125
+ background: canvas;
3126
+ border-color: buttonborder;
3127
+ }
3128
+ }
3129
+
3130
+ @scope (.c-dropdown) {
3131
+ :scope {
3132
+ --c-dropdown-anchor: --pl-dropdown-anchor;
3133
+ --c-dropdown-min-inline: 12rem;
3134
+ --c-dropdown-max-block: 20rem;
3135
+ display: inline-block;
3136
+ position: relative;
3137
+ }
3138
+
3139
+ .c-dropdown__trigger {
3140
+ align-items: center;
3141
+ gap: var(--pl-space-2);
3142
+ inline-size: 100%;
3143
+ min-block-size: var(--pl-control-block-size);
3144
+ padding-inline: var(--pl-control-padding-inline);
3145
+ border: 1px solid var(--pl-color-border);
3146
+ border-radius: var(--pl-control-radius);
3147
+ background: var(--pl-color-surface);
3148
+ color: var(--pl-color-text);
3149
+ font: inherit;
3150
+ font-size: var(--pl-text-sm);
3151
+ text-align: start;
3152
+ cursor: pointer;
3153
+ anchor-name: var(--c-dropdown-anchor);
3154
+ transition: border-color var(--pl-duration-1) var(--pl-ease-standard);
3155
+ display: inline-flex;
3156
+ }
3157
+
3158
+ .c-dropdown__trigger:hover {
3159
+ border-color: var(--pl-color-accent);
3160
+ }
3161
+
3162
+ .c-dropdown__trigger:focus-visible {
3163
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
3164
+ outline-offset: var(--pl-focus-offset);
3165
+ }
3166
+
3167
+ .c-dropdown__chevron {
3168
+ block-size: 1rem;
3169
+ inline-size: 1rem;
3170
+ color: var(--pl-color-text-muted);
3171
+ transition: rotate var(--pl-duration-2) var(--pl-ease-standard);
3172
+ flex-shrink: 0;
3173
+ margin-inline-start: auto;
3174
+ }
3175
+
3176
+ .c-dropdown__trigger:has( ~ .c-dropdown__menu:popover-open) .c-dropdown__chevron {
3177
+ rotate: 180deg;
3178
+ }
3179
+
3180
+ .c-dropdown__menu {
3181
+ padding: var(--pl-space-2);
3182
+ min-inline-size: var(--c-dropdown-min-inline);
3183
+ max-block-size: var(--c-dropdown-max-block);
3184
+ border: 1px solid color-mix(in oklab,
3185
+ var(--pl-color-border),
3186
+ transparent 30%);
3187
+ border-radius: var(--pl-radius-xl);
3188
+ -webkit-backdrop-filter: blur(var(--pl-backdrop-blur)) saturate(var(--pl-backdrop-saturate));
3189
+ box-shadow: var(--pl-shadow-3);
3190
+ opacity: 0;
3191
+ transition: opacity var(--pl-duration-enter) var(--pl-ease-decelerate),
3192
+ transform var(--pl-duration-enter) var(--pl-ease-decelerate),
3193
+ overlay var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete,
3194
+ display var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete;
3195
+ background: light-dark(oklch(100% 0 0 / .96), oklch(17% .04 250 / .94));
3196
+ margin: 0;
3197
+ overflow-y: auto;
3198
+ transform: translateY(-4px);
3199
+ }
3200
+
3201
+ @supports (position-anchor: --x) {
3202
+ .c-dropdown__menu {
3203
+ position-anchor: var(--c-dropdown-anchor);
3204
+ position-area: block-end span-inline-end;
3205
+ position-try-fallbacks: flip-block;
3206
+ margin-block-start: var(--pl-space-1);
3207
+ position: absolute;
3208
+ inset: auto;
3209
+ }
3210
+ }
3211
+
3212
+ .c-dropdown__menu:popover-open {
3213
+ opacity: 1;
3214
+ transform: translateY(0);
3215
+ }
3216
+
3217
+ @starting-style {
3218
+ .c-dropdown__menu:popover-open {
3219
+ opacity: 0;
3220
+ transform: translateY(-4px);
3221
+ }
3222
+ }
3223
+ }
3224
+
3225
+ :where(.c-dropdown__menu) > :is(a, button, [role="option"]) {
3226
+ align-items: center;
3227
+ gap: var(--pl-space-2);
3228
+ min-block-size: 2.25rem;
3229
+ inline-size: 100%;
3230
+ padding-inline: var(--pl-space-3);
3231
+ border-radius: var(--pl-radius-sm);
3232
+ color: inherit;
3233
+ font: inherit;
3234
+ font-size: var(--pl-text-sm);
3235
+ text-align: start;
3236
+ cursor: pointer;
3237
+ background: none;
3238
+ border: 0;
3239
+ text-decoration: none;
3240
+ display: flex;
3241
+ }
3242
+
3243
+ :where(.c-dropdown__menu) > :is(a, button, [role="option"]):is(:hover, :focus-visible) {
3244
+ background: var(--pl-color-surface-2);
3245
+ }
3246
+
3247
+ :where(.c-dropdown__menu) > :is(a, button, [role="option"]):focus-visible {
3248
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
3249
+ outline-offset: calc(var(--pl-focus-offset) * -1);
3250
+ }
3251
+
3252
+ :where(.c-dropdown__menu) > [aria-selected="true"] {
3253
+ color: var(--pl-color-accent);
3254
+ font-weight: var(--pl-font-weight-semibold);
3255
+ background: color-mix(in oklab, var(--pl-color-accent), transparent 92%);
3256
+ }
3257
+
3258
+ @media (forced-colors: active) {
3259
+ :where(.c-dropdown__trigger), :where(.c-dropdown__menu) {
3260
+ border-color: buttonborder;
3261
+ }
3262
+
3263
+ :where(.c-dropdown__menu) > :is(a, button):focus-visible {
3264
+ outline-color: highlight;
3265
+ }
3266
+ }
3267
+
3268
+ @scope (.c-file-upload) {
3269
+ :scope {
3270
+ --c-upload-pad: var(--pl-space-6);
3271
+ --c-upload-gap: var(--pl-space-3);
3272
+ --c-upload-border: 2px dashed var(--pl-color-border);
3273
+ --c-upload-radius: var(--pl-radius-lg);
3274
+ cursor: pointer;
3275
+ display: block;
3276
+ }
3277
+
3278
+ .c-file-upload__input {
3279
+ clip: rect(0, 0, 0, 0);
3280
+ white-space: nowrap;
3281
+ border: 0;
3282
+ block-size: 1px;
3283
+ inline-size: 1px;
3284
+ margin: -1px;
3285
+ padding: 0;
3286
+ position: absolute;
3287
+ overflow: hidden;
3288
+ }
3289
+
3290
+ .c-file-upload__zone {
3291
+ justify-content: center;
3292
+ align-items: center;
3293
+ gap: var(--c-upload-gap);
3294
+ padding: var(--c-upload-pad);
3295
+ border: var(--c-upload-border);
3296
+ border-radius: var(--c-upload-radius);
3297
+ background: var(--pl-color-surface-2);
3298
+ text-align: center;
3299
+ transition: border-color var(--pl-duration-2) var(--pl-ease-standard),
3300
+ background-color var(--pl-duration-2) var(--pl-ease-standard);
3301
+ flex-direction: column;
3302
+ display: flex;
3303
+ }
3304
+
3305
+ :scope:hover .c-file-upload__zone, :scope[data-dragging] .c-file-upload__zone {
3306
+ border-color: var(--pl-color-accent);
3307
+ background: color-mix(in oklab, var(--pl-color-accent), transparent 92%);
3308
+ }
3309
+
3310
+ :scope:has(input:focus-visible) .c-file-upload__zone {
3311
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
3312
+ outline-offset: var(--pl-focus-offset);
3313
+ }
3314
+
3315
+ :scope:has(input:disabled) {
3316
+ cursor: not-allowed;
3317
+
3318
+ & .c-file-upload__zone {
3319
+ opacity: var(--pl-opacity-disabled);
3320
+ }
3321
+ }
3322
+
3323
+ .c-file-upload__icon {
3324
+ block-size: 2rem;
3325
+ inline-size: 2rem;
3326
+ color: var(--pl-color-text-muted);
3327
+ }
3328
+
3329
+ .c-file-upload__text {
3330
+ font-size: var(--pl-text-sm);
3331
+ color: var(--pl-color-text-muted);
3332
+ }
3333
+
3334
+ .c-file-upload__text strong {
3335
+ color: var(--pl-color-text);
3336
+ }
3337
+ }
3338
+
3339
+ @media (forced-colors: active) {
3340
+ :where(.c-file-upload__zone) {
3341
+ background: canvas;
3342
+ border-color: buttonborder;
3343
+ }
3344
+ }
3345
+
3346
+ @scope (.c-command) {
3347
+ :scope {
3348
+ --c-command-inline: min(36rem, calc(100vi - 2 * var(--pl-space-4)));
3349
+ --c-command-max-block: 28rem;
3350
+ inline-size: var(--c-command-inline);
3351
+ max-block-size: var(--c-command-max-block);
3352
+ border-radius: var(--pl-radius-2xl);
3353
+ -webkit-backdrop-filter: blur(var(--pl-backdrop-blur-strong)) saturate(var(--pl-backdrop-saturate-strong));
3354
+ box-shadow: var(--pl-shadow-3);
3355
+ opacity: 0;
3356
+ transition: opacity var(--pl-duration-enter) var(--pl-ease-decelerate),
3357
+ transform var(--pl-duration-enter) var(--pl-ease-decelerate),
3358
+ overlay var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete,
3359
+ display var(--pl-duration-exit) var(--pl-ease-accelerate) allow-discrete;
3360
+ background: light-dark(oklch(100% 0 0 / .94), oklch(17% .04 250 / .92));
3361
+ border: none;
3362
+ margin: auto;
3363
+ padding: 0;
3364
+ overflow: hidden;
3365
+ transform: scale(.97) translateY(-10px);
3366
+ }
3367
+
3368
+ :scope:popover-open {
3369
+ opacity: 1;
3370
+ transform: scale(1) translateY(0);
3371
+ }
3372
+
3373
+ @starting-style {
3374
+ :scope:popover-open {
3375
+ opacity: 0;
3376
+ transform: scale(.97) translateY(-10px);
3377
+ }
3378
+ }
3379
+
3380
+ .c-command__search {
3381
+ inline-size: 100%;
3382
+ padding: var(--pl-space-4);
3383
+ border: 0;
3384
+ border-block-end: 1px solid color-mix(in oklab,
3385
+ var(--pl-color-border),
3386
+ transparent 40%);
3387
+ color: var(--pl-color-text);
3388
+ font: inherit;
3389
+ font-size: var(--pl-text-md);
3390
+ background: none;
3391
+ outline: none;
3392
+ }
3393
+
3394
+ .c-command__search::placeholder {
3395
+ color: var(--pl-color-text-muted);
3396
+ }
3397
+
3398
+ .c-command__body {
3399
+ max-block-size: calc(var(--c-command-max-block) - 4rem);
3400
+ padding: var(--pl-space-2);
3401
+ overflow-y: auto;
3402
+ }
3403
+
3404
+ .c-command__group + .c-command__group {
3405
+ margin-block-start: var(--pl-space-2);
3406
+ }
3407
+
3408
+ .c-command__heading {
3409
+ margin-block: var(--pl-space-2) var(--pl-space-1);
3410
+ padding-inline: var(--pl-space-3);
3411
+ font-size: var(--pl-text-xs);
3412
+ font-weight: var(--pl-font-weight-semibold);
3413
+ text-transform: uppercase;
3414
+ letter-spacing: .04em;
3415
+ color: var(--pl-color-text-muted);
3416
+ }
3417
+
3418
+ .c-command__item {
3419
+ align-items: center;
3420
+ gap: var(--pl-space-3);
3421
+ inline-size: 100%;
3422
+ padding: var(--pl-space-2) var(--pl-space-3);
3423
+ border-radius: var(--pl-radius-sm);
3424
+ color: var(--pl-color-text);
3425
+ font: inherit;
3426
+ font-size: var(--pl-text-sm);
3427
+ text-align: start;
3428
+ cursor: pointer;
3429
+ background: none;
3430
+ border: 0;
3431
+ display: flex;
3432
+ }
3433
+
3434
+ .c-command__item:hover, .c-command__item[data-selected] {
3435
+ background: var(--pl-color-surface-2);
3436
+ }
3437
+
3438
+ .c-command__item[data-selected] {
3439
+ box-shadow: inset var(--pl-accent-bar-width) 0 0 var(--pl-color-accent);
3440
+ color: var(--pl-color-accent);
3441
+ }
3442
+
3443
+ .c-command__item:focus-visible {
3444
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
3445
+ outline-offset: calc(var(--pl-focus-offset) * -1);
3446
+ }
3447
+
3448
+ .c-command__icon {
3449
+ block-size: 1rem;
3450
+ inline-size: 1rem;
3451
+ color: var(--pl-color-text-muted);
3452
+ flex-shrink: 0;
3453
+ }
3454
+
3455
+ .c-command__shortcut {
3456
+ padding: .125rem var(--pl-space-1);
3457
+ border-radius: var(--pl-radius-sm);
3458
+ background: var(--pl-color-surface);
3459
+ border: 1px solid var(--pl-color-border);
3460
+ font-size: var(--pl-text-xs);
3461
+ color: var(--pl-color-text-muted);
3462
+ font-family: var(--pl-font-mono);
3463
+ margin-inline-start: auto;
3464
+ }
3465
+
3466
+ .c-command__footer {
3467
+ gap: var(--pl-space-4);
3468
+ padding: var(--pl-space-2) var(--pl-space-4);
3469
+ border-block-start: 1px solid color-mix(in oklab,
3470
+ var(--pl-color-border),
3471
+ transparent 40%);
3472
+ font-size: var(--pl-text-xs);
3473
+ color: var(--pl-color-text-muted);
3474
+ display: flex;
3475
+ }
3476
+ }
3477
+
3478
+ :where(.c-command)::backdrop {
3479
+ background: var(--pl-color-scrim);
3480
+ backdrop-filter: blur(var(--pl-backdrop-blur-scrim)) saturate(var(--pl-backdrop-saturate-scrim));
3481
+ }
3482
+
3483
+ @media (forced-colors: active) {
3484
+ :where(.c-command) {
3485
+ background: canvas;
3486
+ border-color: buttonborder;
3487
+ }
3488
+
3489
+ :where(.c-command__item[data-selected]) {
3490
+ color: highlight;
3491
+ box-shadow: inset 2px 0 highlight;
3492
+ }
3493
+ }
3494
+
3495
+ @scope (.c-nav) {
3496
+ :scope {
3497
+ --c-nav-gap: var(--pl-space-1);
3498
+ --c-nav-pad: var(--pl-space-2);
3499
+ gap: var(--c-nav-gap);
3500
+ padding: var(--c-nav-pad);
3501
+ flex-direction: column;
3502
+ display: flex;
3503
+ }
3504
+
3505
+ .c-nav__item {
3506
+ align-items: center;
3507
+ gap: var(--pl-space-3);
3508
+ padding: var(--pl-space-2) var(--pl-space-3);
3509
+ border-radius: var(--pl-radius-md);
3510
+ color: var(--pl-color-text-muted);
3511
+ font-size: var(--pl-text-sm);
3512
+ font-weight: var(--pl-font-weight-medium);
3513
+ cursor: pointer;
3514
+ transition: background-color var(--pl-duration-1) var(--pl-ease-standard),
3515
+ color var(--pl-duration-1) var(--pl-ease-standard),
3516
+ box-shadow var(--pl-duration-1) var(--pl-ease-standard);
3517
+ text-decoration: none;
3518
+ display: flex;
3519
+ }
3520
+
3521
+ .c-nav__item:hover {
3522
+ background: var(--pl-color-surface-2);
3523
+ color: var(--pl-color-text);
3524
+ }
3525
+
3526
+ .c-nav__item:focus-visible {
3527
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
3528
+ outline-offset: var(--pl-focus-offset);
3529
+ }
3530
+
3531
+ .c-nav__item[aria-current="page"], .c-nav__item[aria-current="true"] {
3532
+ background: color-mix(in oklab, var(--pl-color-accent), transparent 90%);
3533
+ color: var(--pl-color-accent);
3534
+ font-weight: var(--pl-font-weight-semibold);
3535
+ border-radius: 0 var(--pl-radius-md) var(--pl-radius-md) 0;
3536
+ box-shadow: inset var(--pl-accent-bar-width) 0 0 var(--pl-color-accent);
3537
+ }
3538
+
3539
+ .c-nav__item--child {
3540
+ font-size: var(--pl-text-sm);
3541
+ padding-inline-start: calc(var(--pl-space-3) + 1.25rem + var(--pl-space-3));
3542
+ }
3543
+
3544
+ .c-nav__icon {
3545
+ block-size: 1.25rem;
3546
+ inline-size: 1.25rem;
3547
+ color: inherit;
3548
+ flex-shrink: 0;
3549
+ }
3550
+
3551
+ .c-nav__label {
3552
+ text-overflow: ellipsis;
3553
+ white-space: nowrap;
3554
+ flex: 1;
3555
+ min-inline-size: 0;
3556
+ overflow: hidden;
3557
+ }
3558
+
3559
+ .c-nav__badge {
3560
+ margin-inline-start: auto;
3561
+ }
3562
+
3563
+ .c-nav__section {
3564
+ gap: var(--pl-space-1);
3565
+ flex-direction: column;
3566
+ display: flex;
3567
+ }
3568
+
3569
+ .c-nav__section-trigger {
3570
+ align-items: center;
3571
+ gap: var(--pl-space-3);
3572
+ padding: var(--pl-space-2) var(--pl-space-3);
3573
+ border-radius: var(--pl-radius-md);
3574
+ color: var(--pl-color-text-muted);
3575
+ font-size: var(--pl-text-sm);
3576
+ font-weight: var(--pl-font-weight-medium);
3577
+ cursor: pointer;
3578
+ user-select: none;
3579
+ transition: all var(--pl-duration-1) var(--pl-ease-standard);
3580
+ list-style: none;
3581
+ display: flex;
3582
+
3583
+ &::-webkit-details-marker {
3584
+ display: none;
3585
+ }
3586
+
3587
+ &::marker {
3588
+ content: "";
3589
+ }
3590
+ }
3591
+
3592
+ .c-nav__section-trigger:hover {
3593
+ background: var(--pl-color-surface-2);
3594
+ color: var(--pl-color-text);
3595
+ }
3596
+
3597
+ .c-nav__section-trigger:focus-visible {
3598
+ outline: var(--pl-focus-size) solid var(--pl-focus-color);
3599
+ outline-offset: var(--pl-focus-offset);
3600
+ }
3601
+
3602
+ .c-nav__chevron {
3603
+ block-size: 1rem;
3604
+ inline-size: 1rem;
3605
+ color: var(--pl-color-text-muted);
3606
+ transition: rotate var(--pl-duration-2) var(--pl-ease-standard);
3607
+ flex-shrink: 0;
3608
+ margin-inline-start: auto;
3609
+ }
3610
+
3611
+ .c-nav__section[open] .c-nav__chevron {
3612
+ rotate: 90deg;
3613
+ }
3614
+
3615
+ :scope[data-variant="icons"] .c-nav__label, :scope[data-variant="icons"] .c-nav__chevron, :scope[data-variant="icons"] .c-nav__badge {
3616
+ display: none;
3617
+ }
3618
+
3619
+ :scope[data-variant="icons"] .c-nav__item, :scope[data-variant="icons"] .c-nav__section-trigger {
3620
+ padding: var(--pl-space-2);
3621
+ justify-content: center;
3622
+ }
3623
+ }
3624
+
3625
+ @media (forced-colors: active) {
3626
+ :where(.c-nav__item[aria-current="page"]) {
3627
+ color: highlighttext;
3628
+ background: highlight;
3629
+ }
3630
+
3631
+ :where(.c-nav__item:focus-visible) {
3632
+ outline-color: highlight;
3633
+ }
3634
+ }
3635
+ }
3636
+
3637
+ @layer porchlight.utilities {
3638
+ :where(.u-visually-hidden) {
3639
+ clip-path: inset(50%) !important;
3640
+ white-space: nowrap !important;
3641
+ border: 0 !important;
3642
+ block-size: 1px !important;
3643
+ inline-size: 1px !important;
3644
+ margin: -1px !important;
3645
+ padding: 0 !important;
3646
+ position: absolute !important;
3647
+ overflow: hidden !important;
3648
+ }
3649
+
3650
+ :where(.u-visually-hidden:focus, .u-visually-hidden:active) {
3651
+ clip-path: none !important;
3652
+ white-space: normal !important;
3653
+ block-size: auto !important;
3654
+ inline-size: auto !important;
3655
+ margin: 0 !important;
3656
+ position: static !important;
3657
+ }
3658
+
3659
+ :where(.u-truncate) {
3660
+ text-overflow: ellipsis;
3661
+ white-space: nowrap;
3662
+ overflow: hidden;
3663
+ }
3664
+
3665
+ :where(.u-flow) > * + * {
3666
+ margin-block-start: var(--u-flow-space, var(--pl-space-4));
3667
+ }
3668
+
3669
+ :where(.u-surface) {
3670
+ background: var(--pl-color-surface);
3671
+ color: var(--pl-color-text);
3672
+ border: 1px solid var(--pl-color-border);
3673
+ border-radius: var(--pl-radius-lg);
3674
+ }
3675
+
3676
+ :where(.u-muted) {
3677
+ color: var(--pl-color-text-muted);
3678
+ }
3679
+
3680
+ :where(.u-full-bleed) {
3681
+ inline-size: 100vi;
3682
+ margin-inline: calc(50% - 50vi);
3683
+ }
3684
+ }
3685
+
3686
+ @layer porchlight.enhancements {
3687
+ @supports (interpolate-size: allow-keywords) {
3688
+ :root {
3689
+ interpolate-size: allow-keywords;
3690
+ }
3691
+ }
3692
+
3693
+ @supports (container-type: scroll-state) {
3694
+ .c-sticky-shell {
3695
+ container-type: scroll-state;
3696
+ }
3697
+
3698
+ .c-sticky-shell__bar {
3699
+ z-index: var(--pl-z-sticky);
3700
+ background: var(--pl-color-surface);
3701
+ transition: box-shadow var(--pl-duration-2) var(--pl-ease-standard),
3702
+ background-color var(--pl-duration-2) var(--pl-ease-standard);
3703
+ position: sticky;
3704
+ inset-block-start: 0;
3705
+ }
3706
+
3707
+ @container scroll-state(stuck: top) {
3708
+ .c-sticky-shell__bar {
3709
+ box-shadow: var(--pl-shadow-2);
3710
+ background: color-mix(in oklab,
3711
+ var(--pl-color-surface),
3712
+ transparent 18%);
3713
+ -webkit-backdrop-filter: blur(16px) saturate(180%);
3714
+ border-block-end: 1px solid color-mix(in oklab,
3715
+ var(--pl-color-border),
3716
+ transparent 55%);
3717
+ }
3718
+ }
3719
+ }
3720
+
3721
+ @supports (text-box: trim-both cap alphabetic) {
3722
+ :where(.c-button, .c-badge, .c-dialog__close) {
3723
+ text-box: trim-both cap alphabetic;
3724
+ }
3725
+ }
3726
+
3727
+ @supports (rule: 1px solid CanvasText) {
3728
+ :where(.l-grid[data-dividers="true"]) {
3729
+ rule: 1px solid var(--pl-color-border);
3730
+ rule-visibility-items: between;
3731
+ }
3732
+ }
3733
+
3734
+ @supports (background: attr(data-color type(<color>))) {
3735
+ .c-swatch {
3736
+ background: attr(data-color type(<color>), var(--pl-color-border));
3737
+ }
3738
+ }
3739
+
3740
+ @supports (view-transition-name: root) {
3741
+ @view-transition {
3742
+ navigation: auto;
3743
+ }
3744
+
3745
+ ::view-transition-old(root) {
3746
+ animation: var(--pl-duration-exit) var(--pl-ease-accelerate) both pl-fade-out;
3747
+ }
3748
+
3749
+ ::view-transition-new(root) {
3750
+ animation: var(--pl-duration-enter) var(--pl-ease-decelerate) both pl-fade-in;
3751
+ }
3752
+
3753
+ @keyframes pl-fade-out {
3754
+ to {
3755
+ opacity: 0;
3756
+ }
3757
+ }
3758
+
3759
+ @keyframes pl-fade-in {
3760
+ from {
3761
+ opacity: 0;
3762
+ }
3763
+ }
3764
+ }
3765
+ }