opui-css 2.3.0 → 3.0.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 (82) hide show
  1. package/LICENSE +21 -21
  2. package/dist/op.css +1 -14
  3. package/dist/theme-one.css +4378 -4256
  4. package/dist/theme-two.css +4097 -3975
  5. package/package.json +8 -8
  6. package/src/core/normalize.css +196 -196
  7. package/src/core/utils.css +60 -60
  8. package/src/open-props.css +1 -1
  9. package/src/themes/theme-one/components/accordion.css +172 -172
  10. package/src/themes/theme-one/components/alert.css +85 -85
  11. package/src/themes/theme-one/components/avatar.css +68 -68
  12. package/src/themes/theme-one/components/badge.css +101 -101
  13. package/src/themes/theme-one/components/button-group.css +69 -69
  14. package/src/themes/theme-one/components/button.css +267 -267
  15. package/src/themes/theme-one/components/card.css +82 -82
  16. package/src/themes/theme-one/components/checkbox-radio.css +123 -123
  17. package/src/themes/theme-one/components/chip.css +135 -135
  18. package/src/themes/theme-one/components/definition-list.css +65 -65
  19. package/src/themes/theme-one/components/dialog.css +59 -59
  20. package/src/themes/theme-one/components/divider.css +7 -7
  21. package/src/themes/theme-one/components/field-group.css +83 -83
  22. package/src/themes/theme-one/components/field.css +494 -494
  23. package/src/themes/theme-one/components/icon-button.css +40 -40
  24. package/src/themes/theme-one/components/link.css +21 -21
  25. package/src/themes/theme-one/components/list.css +317 -317
  26. package/src/themes/theme-one/components/progress.css +83 -83
  27. package/src/themes/theme-one/components/range.css +121 -121
  28. package/src/themes/theme-one/components/rich-text.css +210 -210
  29. package/src/themes/theme-one/components/select.css +163 -163
  30. package/src/themes/theme-one/components/snackbar.css +148 -148
  31. package/src/themes/theme-one/components/spinner.css +38 -38
  32. package/src/themes/theme-one/components/switch.css +189 -189
  33. package/src/themes/theme-one/components/tab-buttons.css +120 -120
  34. package/src/themes/theme-one/components/table.css +100 -100
  35. package/src/themes/theme-one/components/text-field.css +57 -57
  36. package/src/themes/theme-one/components/textarea.css +25 -25
  37. package/src/themes/theme-one/components/toggle-button-group.css +135 -135
  38. package/src/themes/theme-one/components/tooltip.css +94 -94
  39. package/src/themes/theme-one/components/typography.css +209 -209
  40. package/src/themes/theme-one/components.css +37 -37
  41. package/src/themes/theme-one/imports.css +16 -0
  42. package/src/themes/theme-one/theme.css +163 -13
  43. package/src/themes/theme-two/components/accordion.css +172 -172
  44. package/src/themes/theme-two/components/alert.css +85 -85
  45. package/src/themes/theme-two/components/avatar.css +68 -68
  46. package/src/themes/theme-two/components/badge.css +101 -101
  47. package/src/themes/theme-two/components/button-group.css +50 -50
  48. package/src/themes/theme-two/components/button.css +217 -217
  49. package/src/themes/theme-two/components/card.css +82 -82
  50. package/src/themes/theme-two/components/checkbox-radio.css +123 -123
  51. package/src/themes/theme-two/components/chip.css +135 -135
  52. package/src/themes/theme-two/components/definition-list.css +65 -65
  53. package/src/themes/theme-two/components/dialog.css +59 -59
  54. package/src/themes/theme-two/components/divider.css +7 -7
  55. package/src/themes/theme-two/components/field-group.css +83 -83
  56. package/src/themes/theme-two/components/field.css +281 -281
  57. package/src/themes/theme-two/components/icon-button.css +40 -40
  58. package/src/themes/theme-two/components/link.css +21 -21
  59. package/src/themes/theme-two/components/list.css +317 -317
  60. package/src/themes/theme-two/components/progress.css +83 -83
  61. package/src/themes/theme-two/components/range.css +121 -121
  62. package/src/themes/theme-two/components/rich-text.css +210 -210
  63. package/src/themes/theme-two/components/select.css +162 -162
  64. package/src/themes/theme-two/components/snackbar.css +148 -148
  65. package/src/themes/theme-two/components/spinner.css +38 -38
  66. package/src/themes/theme-two/components/switch.css +189 -189
  67. package/src/themes/theme-two/components/tab-buttons.css +120 -120
  68. package/src/themes/theme-two/components/table.css +107 -107
  69. package/src/themes/theme-two/components/text-field.css +57 -57
  70. package/src/themes/theme-two/components/textarea.css +25 -25
  71. package/src/themes/theme-two/components/toggle-button-group.css +135 -135
  72. package/src/themes/theme-two/components/tooltip.css +94 -94
  73. package/src/themes/theme-two/components/typography.css +209 -209
  74. package/src/themes/theme-two/components.css +37 -37
  75. package/src/themes/theme-two/imports.css +16 -0
  76. package/src/themes/theme-two/theme.css +158 -13
  77. package/dist/theme-one+op.css +0 -4302
  78. package/dist/theme-two+op.css +0 -4021
  79. package/src/themes/theme-one/setup.css +0 -163
  80. package/src/themes/theme-one/theme+op.css +0 -5
  81. package/src/themes/theme-two/setup.css +0 -158
  82. package/src/themes/theme-two/theme+op.css +0 -5
@@ -1,4021 +0,0 @@
1
- @layer openprops, normalize, utils, theme, components.root, components.extended;
2
- /* Open Props */
3
- /*
4
- * Open Props
5
- * Import as many props as you need here.
6
- * https://unpkg.com/browse/open-props@2.0.0-beta.5/css
7
- */
8
- @custom-media --motionOK (prefers-reduced-motion: no-preference);
9
- @custom-media --motionNotOK (prefers-reduced-motion: reduce);
10
- @custom-media --opacityOK (prefers-reduced-transparency: no-preference);
11
- @custom-media --opacityNotOK (prefers-reduced-transparency: reduce);
12
- @custom-media --useDataOK (prefers-reduced-data: no-preference);
13
- @custom-media --useDataNotOK (prefers-reduced-data: reduce);
14
- @custom-media --OSdark (prefers-color-scheme: dark);
15
- @custom-media --OSlight (prefers-color-scheme: light);
16
- @custom-media --highContrast (prefers-contrast: more);
17
- @custom-media --lowContrast (prefers-contrast: less);
18
- @custom-media --portrait (orientation: portrait);
19
- @custom-media --landscape (orientation: landscape);
20
- @custom-media --HDcolor (dynamic-range: high);
21
- @custom-media --touch (hover: none) and (pointer: coarse);
22
- @custom-media --stylus (hover: none) and (pointer: fine);
23
- @custom-media --pointer (hover) and (pointer: coarse);
24
- @custom-media --mouse (hover) and (pointer: fine);
25
- @custom-media --xxs-only (0px <= width <= 240px);
26
- @custom-media --xxs-n-above (width >= 240px);
27
- @custom-media --xxs-n-below (width < 240px);
28
- @custom-media --xxs-phone (--xxs-only) and (--portrait);
29
- @custom-media --xs-only (240px <= width <= 360px);
30
- @custom-media --xs-n-above (width >= 360px);
31
- @custom-media --xs-n-below (width < 360px);
32
- @custom-media --xs-phone (--xs-only) and (--portrait);
33
- @custom-media --sm-only (360px <= width <= 480px);
34
- @custom-media --sm-n-above (width >= 480px);
35
- @custom-media --sm-n-below (width < 480px);
36
- @custom-media --sm-phone (--sm-only) and (--portrait);
37
- @custom-media --md-only (480px <= width <= 768px);
38
- @custom-media --md-n-above (width >= 768px);
39
- @custom-media --md-n-below (width < 768px);
40
- @custom-media --md-phone (--md-only) and (--portrait);
41
- @custom-media --lg-only (768px <= width <= 1024px);
42
- @custom-media --lg-n-above (width >= 1024px);
43
- @custom-media --lg-n-below (width < 1024px);
44
- @custom-media --lg-phone (--lg-only) and (--portrait);
45
- @custom-media --xl-only (1024px <= width <= 1440px);
46
- @custom-media --xl-n-above (width >= 1440px);
47
- @custom-media --xl-n-below (width < 1440px);
48
- @custom-media --xxl-only (1440px <= width <= 1920px);
49
- @custom-media --xxl-n-above (width >= 1920px);
50
- @custom-media --xxl-n-below (width < 1920px);
51
- @layer openprops{
52
- :where(:root){--font-sans:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;--font-serif:ui-serif,serif;--font-mono:Dank Mono,Operator Mono,Inconsolata,Fira Mono,ui-monospace,SF Mono,Monaco,Droid Sans Mono,Source Code Pro,monospace;--font-weight-1:100;--font-weight-2:200;--font-weight-3:300;--font-weight-4:400;--font-weight-5:500;--font-weight-6:600;--font-weight-7:700;--font-weight-8:800;--font-weight-9:900;--font-size-00:.5rem;--font-size-0:.75rem;--font-size-1:1rem;--font-size-2:1.1rem;--font-size-3:1.25rem;--font-size-4:1.5rem;--font-size-5:2rem;--font-size-6:2.5rem;--font-size-7:3rem;--font-size-8:3.5rem;--font-size-fluid-0:clamp(.75rem,2vw,1rem);--font-size-fluid-1:clamp(1rem,4vw,1.5rem);--font-size-fluid-2:clamp(1.5rem,6vw,2.5rem);--font-size-fluid-3:clamp(2rem,9vw,3.5rem);--size-000:-.5rem;--size-00:-.25rem;--size-1:.25rem;--size-2:.5rem;--size-3:1rem;--size-4:1.25rem;--size-5:1.5rem;--size-6:1.75rem;--size-7:2rem;--size-8:3rem;--size-9:4rem;--size-10:5rem;--size-11:7.5rem;--size-12:10rem;--size-13:15rem;--size-14:20rem;--size-15:30rem;--size-fluid-1:clamp(.5rem,1vw,1rem);--size-fluid-2:clamp(1rem,2vw,1.5rem);--size-fluid-3:clamp(1.5rem,3vw,2rem);--size-fluid-4:clamp(2rem,4vw,3rem);--size-fluid-5:clamp(4rem,5vw,5rem);--size-fluid-6:clamp(5rem,7vw,7.5rem);--size-fluid-7:clamp(7.5rem,10vw,10rem);--size-fluid-8:clamp(10rem,20vw,15rem);--size-fluid-9:clamp(15rem,30vw,20rem);--size-fluid-10:clamp(20rem,40vw,30rem);--size-header-1:20ch;--size-header-2:25ch;--size-header-3:35ch;--size-content-1:20ch;--size-content-2:45ch;--size-content-3:60ch;--ratio-square:1;--ratio-landscape:4/3;--ratio-portrait:3/4;--ratio-widescreen:16/9;--ratio-ultrawide:18/5;--ratio-golden:1.618/1;--layer-1:1;--layer-2:2;--layer-3:3;--layer-4:4;--layer-5:5;--layer-bottom:var(--layer-1);--layer-top:var(--layer-5);--layer-important:2147480000;--border-size-1:1px;--border-size-2:2px;--border-size-3:5px;--border-size-4:10px;--border-size-5:25px;--radius-1:2px;--radius-2:5px;--radius-3:1rem;--radius-4:2rem;--radius-5:4rem;--radius-6:8rem;--radius-round:100000px;--radius-blob-1:30% 70% 70% 30%/53% 30% 70% 47%;--radius-blob-2:53% 47% 34% 66%/63% 46% 54% 37%;--radius-blob-3:37% 63% 56% 44%/49% 56% 44% 51%;--radius-blob-4:63% 37% 37% 63%/43% 37% 63% 57%;--radius-blob-5:49% 51% 48% 52%/57% 44% 56% 43%;--radius-conditional-1:clamp(0px,calc(100vw - 100%)*100000,var(--radius-1));--radius-conditional-2:clamp(0px,calc(100vw - 100%)*100000,var(--radius-2));--radius-conditional-3:clamp(0px,calc(100vw - 100%)*100000,var(--radius-3));--radius-conditional-4:clamp(0px,calc(100vw - 100%)*100000,var(--radius-4));--radius-conditional-5:clamp(0px,calc(100vw - 100%)*100000,var(--radius-5));--radius-conditional-6:clamp(0px,calc(100vw - 100%)*100000,var(--radius-6))}*{--shadow-strength:1%;--shadow-chroma:3%;--shadow-hue:var(--shadow-tint,var(--palette-hue));--shadow-color:15% var(--shadow-chroma)var(--shadow-hue);--inner-shadow-highlight:inset 0 -.5px 0 0 #fff,inset 0 .5px 0 0 #0001;--shadow-1:0 1px 2px -1px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--shadow-2:0 3px 5px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 14px -5px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 5%));--shadow-3:0 -1px 3px 0 oklch(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 2px -5px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 5px -5px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 4px 12px -5px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 12px 15px -5px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-4:0 -2px 5px 0 oklch(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 1px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 2px 2px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 9px 9px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 16px 16px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 6%));--shadow-5:0 -1px 2px 0 oklch(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 1px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 10px 10px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 20px 20px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 40px 40px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-6:0 -1px 2px 0 oklch(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 3px 2px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 5px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 12px 10px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 22px 18px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 41px 33px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 6%)),0 100px 80px -2px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--inner-shadow-0:inset 0 0 0 1px oklch(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--inner-shadow-1:inset 0 1px 2px 0 oklch(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-2:inset 0 1px 4px 0 oklch(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-3:inset 0 2px 8px 0 oklch(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-4:inset 0 2px 14px 0 oklch(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight)}@media (prefers-color-scheme:dark){*{--shadow-strength:25%;--shadow-chroma:10%;--shadow-hue:var(--shadow-tint,var(--palette-hue));--shadow-color:15% var(--shadow-chroma)var(--shadow-hue);--inner-shadow-highlight:inset 0 -.5px 0 0 #fff1,inset 0 .5px 0 0 #0007}}:where(:root){--ease-1:cubic-bezier(.25,0,.5,1);--ease-2:cubic-bezier(.25,0,.4,1);--ease-3:cubic-bezier(.25,0,.3,1);--ease-4:cubic-bezier(.25,0,.2,1);--ease-5:cubic-bezier(.25,0,.1,1);--ease-in-1:cubic-bezier(.25,0,1,1);--ease-in-2:cubic-bezier(.5,0,1,1);--ease-in-3:cubic-bezier(.7,0,1,1);--ease-in-4:cubic-bezier(.9,0,1,1);--ease-in-5:cubic-bezier(1,0,1,1);--ease-out-1:cubic-bezier(0,0,.75,1);--ease-out-2:cubic-bezier(0,0,.5,1);--ease-out-3:cubic-bezier(0,0,.3,1);--ease-out-4:cubic-bezier(0,0,.1,1);--ease-out-5:cubic-bezier(0,0,0,1);--ease-in-out-1:cubic-bezier(.1,0,.9,1);--ease-in-out-2:cubic-bezier(.3,0,.7,1);--ease-in-out-3:cubic-bezier(.5,0,.5,1);--ease-in-out-4:cubic-bezier(.7,0,.3,1);--ease-in-out-5:cubic-bezier(.9,0,.1,1);--ease-elastic-out-1:cubic-bezier(.5,.75,.75,1.25);--ease-elastic-out-2:cubic-bezier(.5,1,.75,1.25);--ease-elastic-out-3:cubic-bezier(.5,1.25,.75,1.25);--ease-elastic-out-4:cubic-bezier(.5,1.5,.75,1.25);--ease-elastic-out-5:cubic-bezier(.5,1.75,.75,1.25);--ease-elastic-in-1:cubic-bezier(.5,-.25,.75,1);--ease-elastic-in-2:cubic-bezier(.5,-.5,.75,1);--ease-elastic-in-3:cubic-bezier(.5,-.75,.75,1);--ease-elastic-in-4:cubic-bezier(.5,-1,.75,1);--ease-elastic-in-5:cubic-bezier(.5,-1.25,.75,1);--ease-elastic-in-out-1:cubic-bezier(.5,-.1,.1,1.5);--ease-elastic-in-out-2:cubic-bezier(.5,-.3,.1,1.5);--ease-elastic-in-out-3:cubic-bezier(.5,-.5,.1,1.5);--ease-elastic-in-out-4:cubic-bezier(.5,-.7,.1,1.5);--ease-elastic-in-out-5:cubic-bezier(.5,-.9,.1,1.5);--ease-step-1:steps(2);--ease-step-2:steps(3);--ease-step-3:steps(4);--ease-step-4:steps(7);--ease-step-5:steps(10);--ease-spring-1:linear(0,.006,.025 2.8%,.101 6.1%,.539 18.9%,.721 25.3%,.849 31.5%,.937 38.1%,.968 41.8%,.991 45.7%,1.006 50.1%,1.015 55%,1.017 63.9%,1.001);--ease-spring-2:linear(0,.007,.029 2.2%,.118 4.7%,.625 14.4%,.826 19%,.902,.962,1.008 26.1%,1.041 28.7%,1.064 32.1%,1.07 36%,1.061 40.5%,1.015 53.4%,.999 61.6%,.995 71.2%,1);--ease-spring-3:linear(0,.009,.035 2.1%,.141 4.4%,.723 12.9%,.938 16.7%,1.017,1.077,1.121,1.149 24.3%,1.159,1.163,1.161,1.154 29.9%,1.129 32.8%,1.051 39.6%,1.017 43.1%,.991,.977 51%,.974 53.8%,.975 57.1%,.997 69.8%,1.003 76.9%,1);--ease-spring-4:linear(0,.009,.037 1.7%,.153 3.6%,.776 10.3%,1.001,1.142 16%,1.185,1.209 19%,1.215 19.9% 20.8%,1.199,1.165 25%,1.056 30.3%,1.008 33%,.973,.955 39.2%,.953 41.1%,.957 43.3%,.998 53.3%,1.009 59.1% 63.7%,.998 78.9%,1);--ease-spring-5:linear(0,.01,.04 1.6%,.161 3.3%,.816 9.4%,1.046,1.189 14.4%,1.231,1.254 17%,1.259,1.257 18.6%,1.236,1.194 22.3%,1.057 27%,.999 29.4%,.955 32.1%,.942,.935 34.9%,.933,.939 38.4%,1 47.3%,1.011,1.017 52.6%,1.016 56.4%,1 65.2%,.996 70.2%,1.001 87.2%,1);--ease-bounce-1:linear(0,.004,.016,.035,.063,.098,.141,.191,.25,.316,.391 36.8%,.563,.766,1 58.8%,.946,.908 69.1%,.895,.885,.879,.878,.879,.885,.895,.908 89.7%,.946,1);--ease-bounce-2:linear(0,.004,.016,.035,.063,.098,.141 15.1%,.25,.391,.562,.765,1,.892 45.2%,.849,.815,.788,.769,.757,.753,.757,.769,.788,.815,.85,.892 75.2%,1 80.2%,.973,.954,.943,.939,.943,.954,.973,1);--ease-bounce-3:linear(0,.004,.016,.035,.062,.098,.141 11.4%,.25,.39,.562,.764,1 30.3%,.847 34.8%,.787,.737,.699,.672,.655,.65,.656,.672,.699,.738,.787,.847 61.7%,1 66.2%,.946,.908,.885 74.2%,.879,.878,.879,.885 79.5%,.908,.946,1 87.4%,.981,.968,.96,.957,.96,.968,.981,1);--ease-bounce-4:linear(0,.004,.016 3%,.062,.141,.25,.391,.562 18.2%,1 24.3%,.81,.676 32.3%,.629,.595,.575,.568,.575,.595,.629,.676 48.2%,.811,1 56.2%,.918,.86,.825,.814,.825,.86,.918,1 77.2%,.94 80.6%,.925,.92,.925,.94 87.5%,1 90.9%,.974,.965,.974,1);--ease-bounce-5:linear(0,.004,.016 2.5%,.063,.141,.25 10.1%,.562,1 20.2%,.783,.627,.534 30.9%,.511,.503,.511,.534 38%,.627,.782,1 48.7%,.892,.815,.769 56.3%,.757,.753,.757,.769 61.3%,.815,.892,1 68.8%,.908 72.4%,.885,.878,.885,.908 79.4%,1 83%,.954 85.5%,.943,.939,.943,.954 90.5%,1 93%,.977,.97,.977,1)}:where(:root){--palette-hue:250;--palette-hue-rotate-by:0;--palette-chroma:.15}*{--color-1:oklch(98% calc(.03*var(--palette-chroma,1))calc(var(--palette-hue) + (0*var(--palette-hue-rotate-by))));--color-2:oklch(97% calc(.06*var(--palette-chroma,1))calc(var(--palette-hue) + (1*var(--palette-hue-rotate-by))));--color-3:oklch(93% calc(.1*var(--palette-chroma,1))calc(var(--palette-hue) + (2*var(--palette-hue-rotate-by))));--color-4:oklch(84% calc(.12*var(--palette-chroma,1))calc(var(--palette-hue) + (3*var(--palette-hue-rotate-by))));--color-5:oklch(80% calc(.16*var(--palette-chroma,1))calc(var(--palette-hue) + (4*var(--palette-hue-rotate-by))));--color-6:oklch(71% calc(.19*var(--palette-chroma,1))calc(var(--palette-hue) + (5*var(--palette-hue-rotate-by))));--color-7:oklch(66% calc(.2*var(--palette-chroma,1))calc(var(--palette-hue) + (6*var(--palette-hue-rotate-by))));--color-8:oklch(58% calc(.21*var(--palette-chroma,1))calc(var(--palette-hue) + (7*var(--palette-hue-rotate-by))));--color-9:oklch(53% calc(.2*var(--palette-chroma,1))calc(var(--palette-hue) + (8*var(--palette-hue-rotate-by))));--color-10:oklch(49% calc(.19*var(--palette-chroma,1))calc(var(--palette-hue) + (9*var(--palette-hue-rotate-by))));--color-11:oklch(42% calc(.17*var(--palette-chroma,1))calc(var(--palette-hue) + (10*var(--palette-hue-rotate-by))));--color-12:oklch(35% calc(.15*var(--palette-chroma,1))calc(var(--palette-hue) + (11*var(--palette-hue-rotate-by))));--color-13:oklch(27% calc(.12*var(--palette-chroma,1))calc(var(--palette-hue) + (12*var(--palette-hue-rotate-by))));--color-14:oklch(20% calc(.09*var(--palette-chroma,1))calc(var(--palette-hue) + (13*var(--palette-hue-rotate-by))));--color-15:oklch(16% calc(.07*var(--palette-chroma,1))calc(var(--palette-hue) + (14*var(--palette-hue-rotate-by))));--color-16:oklch(10% calc(.05*var(--palette-chroma,1))calc(var(--palette-hue) + (15*var(--palette-hue-rotate-by))))}}
53
- @layer openprops{
54
- :where(:root) {
55
- --size-xxs: 240px;
56
- --size-xs: 360px;
57
- --size-sm: 480px;
58
- --size-md: 768px;
59
- --size-lg: 1024px;
60
- --size-xl: 1440px;
61
- --size-xxl: 1920px;
62
- }}
63
- @layer openprops{
64
- :where(:root) {
65
- --font-lineheight-00: 0.95;
66
- --font-lineheight-0: 1.1;
67
- --font-lineheight-1: 1.25;
68
- --font-lineheight-2: 1.375;
69
- --font-lineheight-3: 1.5;
70
- --font-lineheight-4: 1.75;
71
- --font-lineheight-5: 2;
72
- }}
73
- @layer openprops{
74
- :where(:root) {
75
- --oklch-red: 25;
76
- --oklch-pink: 350;
77
- --oklch-purple: 310;
78
- --oklch-violet: 290;
79
- --oklch-indigo: 270;
80
- --oklch-blue: 240;
81
- --oklch-cyan: 210;
82
- --oklch-teal: 185;
83
- --oklch-green: 145;
84
- --oklch-lime: 125;
85
- --oklch-yellow: 100;
86
- --oklch-orange: 75;
87
- }}
88
- /* theme one theme */
89
- /* Normalize */
90
- @layer normalize {
91
- *,
92
- ::before,
93
- ::after {
94
- /* Set box sizing instead of inheriting */
95
- /* https://www.oddbird.net/2025/09/04/box-model/ */
96
- box-sizing: border-box;
97
- }
98
-
99
- * {
100
- scrollbar-width: thin;
101
- }
102
-
103
- :where(html) {
104
- --_page-bg-color: var(--surface-default);
105
-
106
- accent-color: var(--primary);
107
- background-color: var(--_page-bg-color);
108
- block-size: 100%;
109
- caret-color: var(--primary);
110
- color: var(--text-color-2);
111
- font-family: var(--font-sans);
112
- interpolate-size: allow-keywords;
113
- line-height: var(--font-lineheight-4);
114
-
115
- /* https://kilianvalkhof.com/2022/css-html/your-css-reset-needs-text-size-adjust-probably/ */
116
- -moz-text-size-adjust: none;
117
- -webkit-text-size-adjust: none;
118
- text-size-adjust: none;
119
-
120
- @media (--motionOK) {
121
- scroll-behavior: smooth;
122
- }
123
- }
124
-
125
- :where(body) {
126
- -moz-osx-font-smoothing: grayscale;
127
- -webkit-font-smoothing: antialiased;
128
- container-type: inline-size;
129
- font-size: 16px;
130
- font-synthesis: style;
131
- font-weight: 400;
132
- inline-size: 100%;
133
- margin: 0;
134
- min-block-size: 100%;
135
- min-inline-size: 320px;
136
- position: relative;
137
- text-rendering: optimizeLegibility;
138
- }
139
-
140
- /* TODO */
141
- :where(:not(dialog, popover)) {
142
- margin: 0;
143
- }
144
-
145
- :where(:not(fieldset, progress, meter)) {
146
- background-origin: border-box;
147
- background-repeat: no-repeat;
148
- border-style: solid;
149
- border-width: 0;
150
- }
151
-
152
- :where(fieldset) {
153
- border: var(--field-border-width) solid var(--field-border-color);
154
- border-radius: var(--field-border-radius);
155
- padding: var(--size-3);
156
- display: grid;
157
- gap: var(--size-3);
158
- }
159
-
160
- :where(input, button, textarea),
161
- :where(input[type="file"])::-webkit-file-upload-button {
162
- color: inherit;
163
- font-size: inherit;
164
- font: inherit;
165
- letter-spacing: inherit;
166
- }
167
-
168
- :where(input):-webkit-autofill,
169
- :where(input):-webkit-autofill:hover,
170
- :where(input):-webkit-autofill:focus,
171
- :where(textarea):-webkit-autofill,
172
- :where(textarea):-webkit-autofill:hover,
173
- :where(textarea):-webkit-autofill:focus,
174
- :where(select):-webkit-autofill,
175
- :where(select):-webkit-autofill:hover,
176
- :where(select):-webkit-autofill:focus,
177
- :where(input):autofill,
178
- :where(input):autofill:hover,
179
- :where(input):autofill:focus,
180
- :where(textarea):autofill,
181
- :where(textarea):autofill:hover,
182
- :where(textarea):autofill:focus,
183
- :where(select):autofill,
184
- :where(select):autofill:hover,
185
- :where(select):autofill:focus {
186
- -webkit-text-fill-color: var(--text-color-2);
187
- -webkit-box-shadow: 0 0 0px 1e5px var(--well-1) inset;
188
- transition: background-color 5000s ease-in-out 0s;
189
- }
190
-
191
- ::placeholder {
192
- color: var(--text-color-2);
193
- }
194
-
195
- ::-moz-placeholder {
196
- opacity: 1;
197
- }
198
-
199
- :focus-visible {
200
- /* Inverts the --_page-bg-color */
201
- --_focus-visible-color: rgb(
202
- from var(--_page-bg-color) calc(255 - r) calc(255 - g) calc(255 - b)
203
- );
204
-
205
- border-radius: var(--border-radius, 0px);
206
- outline: 2px solid var(--_focus-visible-color);
207
- outline-offset: 2px;
208
- }
209
-
210
- @media (--motionOK) {
211
- :where(:focus-visible) {
212
- transition: outline-offset 145ms var(--ease-2);
213
- }
214
- :where(:not(:active):focus-visible) {
215
- transition-duration: 0.15s;
216
- }
217
- }
218
-
219
- :where(:not(:active):focus-visible) {
220
- outline-offset: var(--outline-offset, 0px);
221
- }
222
-
223
- :where(
224
- a[href],
225
- area,
226
- button,
227
- input:not(
228
- [type="text"],
229
- [type="email"],
230
- [type="number"],
231
- [type="password"],
232
- [type=""],
233
- [type="tel"],
234
- [type="url"]
235
- ),
236
- label[for],
237
- select,
238
- summary
239
- ) {
240
- cursor: pointer;
241
- }
242
-
243
- :where(
244
- a[href],
245
- area,
246
- button,
247
- [role="button"],
248
- input,
249
- label[for],
250
- select,
251
- summary,
252
- textarea,
253
- [tabindex]:not([tabindex*="-"])
254
- ) {
255
- -webkit-tap-highlight-color: transparent;
256
- touch-action: manipulation;
257
- }
258
-
259
- :where(img, svg, video, canvas, audio, iframe, embed, object) {
260
- display: block;
261
- }
262
-
263
- :where(img, svg, video) {
264
- block-size: auto;
265
- max-inline-size: 100%;
266
- }
267
-
268
- :where(svg:not([width])) {
269
- inline-size: var(--size-7);
270
- }
271
-
272
- :where(dt:not(:first-of-type)) {
273
- margin-block-start: var(--size-5);
274
- }
275
-
276
- :where(figure) {
277
- display: grid;
278
- gap: var(--size-2);
279
- place-items: center;
280
- }
281
-
282
- :target {
283
- scroll-margin-block-start: 2rem;
284
- }
285
- }
286
- /* Utils */
287
- @layer utils {
288
- /*
289
- Screen-reader only
290
- When you visibly want to hide an element but make it accessible for screen readers.
291
- */
292
- .sr-only {
293
- block-size: 1px;
294
- clip-path: inset(50%);
295
- inline-size: 1px;
296
- overflow: hidden;
297
- position: absolute;
298
- white-space: nowrap;
299
- }
300
-
301
- /* Hover and active effect for checkbox, radio and icon buttons */
302
- :where(.checkbox input, .radio input, .icon-button) {
303
- --isLTR: 1;
304
- --isRTL: -1;
305
-
306
- position: relative;
307
- transform-style: preserve-3d;
308
-
309
- &:dir(rtl) {
310
- --isLTR: -1;
311
- --isRTL: 1;
312
- }
313
-
314
- &:where(:not([disabled])) {
315
- &:hover:before {
316
- --thumb-scale: 1;
317
- }
318
-
319
- &:active:before {
320
- --thumb-scale: 1.1;
321
- }
322
-
323
- &::before {
324
- --thumb-scale: 0.01;
325
- --highlight-size: 150%;
326
-
327
- background-color: oklch(0.6 0 0 / 0.2);
328
- block-size: var(--highlight-size);
329
- clip-path: circle(50%);
330
- content: "";
331
- inline-size: var(--highlight-size);
332
- inset-block-start: 50%;
333
- inset-inline-start: 50%;
334
- position: absolute;
335
- transform-origin: center center;
336
- transform: translateX(calc(var(--isRTL) * 50%)) translateY(-50%)
337
- translateZ(-1px) scale(var(--thumb-scale));
338
- will-change: transform;
339
-
340
- @media (prefers-reduced-motion: no-preference) {
341
- transition: transform 0.2s ease;
342
- }
343
- }
344
- }
345
- }
346
- }
347
- /* Components */
348
- /*
349
- * Components are divided into two categories - if they are stand-alone (root) or if they are built on top of others (extended).
350
- */
351
- /*** Root components (no dependencies) */
352
- @layer components.root {
353
- :where(.button) {
354
- --_bg-color: transparent;
355
- --_border-color: transparent;
356
- --_border-radius: var(--button-border-radius);
357
- --_font-size: initial;
358
- --_min-height: 2.375rem;
359
- --_text-color: var(--primary);
360
-
361
- -webkit-tap-highlight-color: transparent;
362
- -webkit-touch-callout: none;
363
- align-items: center;
364
- background: var(--_bg-color) var(--ripple, none);
365
- border-radius: var(--_border-radius);
366
- border: var(--border-size-1) solid var(--_border-color);
367
- color: var(--_text-color);
368
- display: inline-flex;
369
- font-size: var(--_font-size);
370
- font-weight: 700;
371
- gap: var(--size-2);
372
- justify-content: center;
373
- min-block-size: var(--_min-height);
374
- padding-block: 0.5ex;
375
- padding-inline: 1.5ex;
376
- text-align: center;
377
- text-decoration: none;
378
-
379
- user-select: none;
380
-
381
- &:where([disabled]) {
382
- cursor: not-allowed;
383
- opacity: 0.64;
384
- }
385
-
386
- @media (prefers-reduced-motion: no-preference) {
387
- transition: background-color 0.2s var(--ease-out-3),
388
- box-shadow 0.2s var(--ease-out-3), border-color 0.2s var(--ease-out-3),
389
- color 0.2s var(--ease-out-3), outline-offset 0.05s var(--ease-1);
390
-
391
- /* Ripple effect */
392
- background-position: center;
393
-
394
- &:where(:not([disabled])) {
395
- &:where(:not(:active):hover) {
396
- --ripple: radial-gradient(circle, transparent 1%, var(--_bg-color) 1%)
397
- center/15000%;
398
-
399
- transition: background var(--button-ripple-duration);
400
- }
401
-
402
- &:where(:hover:active) {
403
- background-size: var(--button-ripple-size);
404
- transition: background 0s;
405
- }
406
- }
407
- }
408
-
409
- /* Element states */
410
- &:where(:not([disabled])) {
411
- &:where(:not(:active):hover) {
412
- --_bg-color: light-dark(
413
- oklch(from var(--primary) l 0.01 h / 20%),
414
- oklch(from var(--primary) l 0.01 h / 40%)
415
- );
416
- }
417
-
418
- &:where(:hover:active) {
419
- --_bg-color: light-dark(
420
- oklch(from var(--primary) l 0.06 h / 30%),
421
- oklch(from var(--primary) l 0.06 h / 40%)
422
- );
423
- }
424
- }
425
-
426
- /* Disabled */
427
- &:where([disabled]) {
428
- --_text-color: color-mix(
429
- in oklch,
430
- var(--text-color-2) 50%,
431
- var(--surface-default)
432
- );
433
- }
434
-
435
- /* Icon */
436
- &:where(:has(svg), &.icon-only) {
437
- gap: 1ex;
438
-
439
- svg {
440
- max-block-size: 0.7lh;
441
- color: currentColor;
442
- }
443
- }
444
-
445
- /* Sizes */
446
- &.small {
447
- --_min-height: 1.875rem;
448
- padding-block: 0;
449
- padding-inline: 1ex;
450
- }
451
-
452
- &.large {
453
- --_min-height: 2.875rem;
454
- padding-inline: 4ex;
455
- }
456
-
457
- /* Variants */
458
- &.outlined {
459
- --_bg-color: var(--surface-default);
460
- --_border-color: var(--color-8);
461
- --_text-color: var(--color-8);
462
-
463
- &:where(:not([disabled])) {
464
- &:where(:not(:active):hover) {
465
- --_bg-color: var(--color-10);
466
- --_border-color: var(--color-10);
467
- --_text-color: var(--color-1);
468
- }
469
-
470
- &:where(:active) {
471
- --_bg-color: var(--color-9);
472
- --_border-color: var(--color-9);
473
- --_text-color: var(--color-1);
474
- }
475
- }
476
-
477
- &:where([disabled]) {
478
- --_bg-color: var(--surface-default);
479
- --_border-color: color-mix(
480
- in oklch,
481
- var(--text-color-2) 20%,
482
- var(--surface-default)
483
- );
484
- --_text-color: color-mix(
485
- in oklch,
486
- var(--text-color-2) 40%,
487
- var(--surface-default)
488
- );
489
- }
490
- }
491
- &.tonal {
492
- --_bg-color: var(--color-6);
493
- --_text-color: var(--color-16);
494
-
495
- &:where(:not([disabled])) {
496
- &:where(:not(:active):hover) {
497
- --_bg-color: var(--color-9);
498
- --_border-color: var(--color-9);
499
- }
500
-
501
- &:where(:active) {
502
- --_bg-color: var(--color-7);
503
- --_border-color: var(--color-7);
504
- }
505
- }
506
-
507
- &:where([disabled]) {
508
- --_bg-color: color-mix(
509
- in oklch,
510
- var(--text-color-2) 8%,
511
- var(--surface-default)
512
- );
513
- --_text-color: color-mix(
514
- in oklch,
515
- var(--text-color-2) 70%,
516
- var(--surface-default)
517
- );
518
- }
519
- }
520
- &.filled {
521
- --_bg-color: var(--color-8);
522
- --_text-color: var(--color-1);
523
-
524
- &:where(:not([disabled])) {
525
- &:where(:not(:active):hover) {
526
- --_bg-color: var(--color-10);
527
- --_border-color: var(--color-10);
528
- }
529
-
530
- &:where(:active) {
531
- --_bg-color: var(--color-9);
532
- --_border-color: var(--color-9);
533
- }
534
- }
535
-
536
- &:where([disabled]) {
537
- --_bg-color: color-mix(
538
- in oklch,
539
- var(--text-color-2) 20%,
540
- var(--surface-default)
541
- );
542
- --_text-color: color-mix(
543
- in oklch,
544
- var(--text-color-2) 70%,
545
- var(--surface-default)
546
- );
547
- }
548
- }
549
- }
550
-
551
- /* file input */
552
- :where(input[type="file"]) {
553
- align-self: flex-start;
554
- border-radius: var(--radius-2);
555
- border: var(--border-size-1) solid var(--surface-filled);
556
- box-shadow: var(--inner-shadow-4);
557
- color: var(--text-color-2-contrast);
558
- cursor: initial;
559
- max-inline-size: 100%;
560
- padding: 0;
561
- }
562
-
563
- :where(input[type="file"])::-webkit-file-upload-button,
564
- :where(input[type="file"])::file-selector-button {
565
- cursor: pointer;
566
- margin-inline-end: var(--size-relative-6);
567
- }
568
- }
569
- @layer components.root {
570
- :where(.icon-button) {
571
- --_text-color: inherit;
572
-
573
- align-items: center;
574
- aspect-ratio: 1;
575
- background-color: transparent;
576
- border: 0;
577
- border-radius: var(--radius-round);
578
- display: inline-flex;
579
- inline-size: var(--size-6);
580
- justify-content: center;
581
- padding: 0;
582
- transform-style: preserve-3d;
583
-
584
- &:where([disabled]) {
585
- color: light-dark(rgb(0, 0, 0/0.3), rgb(255, 255, 255/0.26));
586
- cursor: not-allowed;
587
- opacity: 0.64;
588
- }
589
-
590
- svg {
591
- max-inline-size: var(--size-5);
592
- pointer-events: none;
593
- }
594
-
595
- /* Ripple effect, utils.css */
596
- &::before {
597
- --highlight-size: 130%;
598
- }
599
-
600
- /* Size */
601
- &.small {
602
- inline-size: var(--size-4);
603
- svg {
604
- max-inline-size: var(--size-4);
605
- }
606
- }
607
- }
608
- }
609
- @layer components.root {
610
- :where(nav.tabs) {
611
- --_bg-color: transparent;
612
-
613
- & > [role="tablist"] {
614
- button {
615
- outline-color: transparent;
616
- outline-offset: -4px;
617
-
618
- &[aria-selected="true"] {
619
- &:focus-visible {
620
- outline: 2px solid var(--text-color-1);
621
- }
622
- }
623
- }
624
- }
625
-
626
- /* Underlined */
627
- &.underlined {
628
- /* Tab list */
629
- & > [role="tablist"] {
630
- border-bottom: 1px solid var(--border-color);
631
-
632
- button {
633
- --_ripple-color: light-dark(
634
- color-mix(in oklch, var(--gray-2) 80%, var(--color-8)),
635
- color-mix(in oklch, var(--gray-13) 80%, var(--color-8))
636
- );
637
-
638
- background: var(--_bg-color) var(--ripple, none);
639
- font-weight: 500;
640
- line-height: var(--font-lineheight-4);
641
- padding: var(--size-2) var(--size-3);
642
-
643
- &:focus-visible {
644
- border-radius: 0;
645
- }
646
-
647
- &[aria-selected="true"] {
648
- border-block-end: 2px solid var(--primary);
649
- color: var(--primary);
650
- }
651
-
652
- @media (prefers-reduced-motion: no-preference) {
653
- transition: background-color 0.2s var(--ease-out-3),
654
- border-color 0.2s var(--ease-out-3), color 0.2s var(--ease-out-3),
655
- outline-offset 0.05s var(--ease-1);
656
-
657
- /*** Ripple effect */
658
- background-position: center;
659
- transition: background var(--button-ripple-duration);
660
- &:where(:not(:active):hover) {
661
- --ripple: radial-gradient(
662
- circle,
663
- transparent 1%,
664
- var(--_ripple-color) 1%
665
- )
666
- center/15000%;
667
- }
668
-
669
- &:where(:hover:active) {
670
- background-size: var(--button-ripple-size);
671
- transition: background 0s;
672
- }
673
-
674
- &:hover {
675
- background-color: light-dark(
676
- oklch(from var(--primary) calc(l * 0.75) none h / 5%),
677
- oklch(from var(--primary) calc(l * 1.25) none h / 5%)
678
- );
679
- }
680
- }
681
- }
682
- }
683
- }
684
-
685
- /* Filled */
686
- &.filled {
687
- --_bg-color: var(--surface-default);
688
- --_radius: var(--border-radius);
689
- --_selected-bg: var(--surface-filled);
690
-
691
- & > [role="tablist"] {
692
- background-color: var(--_bg-color);
693
- border: var(--border-width) solid var(--border-color);
694
- border-radius: var(--_radius);
695
- overflow: hidden;
696
- padding: 0.792ex;
697
- width: fit-content;
698
-
699
- button {
700
- background-color: var(--_bg-color);
701
- border-radius: var(--_radius);
702
- line-height: var(--font-lineheight-4);
703
- padding-inline: var(--size-3);
704
-
705
- &:hover {
706
- background-color: oklch(from var(--_bg-color) calc(l * 1.25) c h);
707
- }
708
-
709
- &[aria-selected="true"] {
710
- background-color: var(--_selected-bg);
711
-
712
- &:hover {
713
- background-color: oklch(
714
- from var(--_selected-bg) calc(l * 1.25) c h
715
- );
716
- }
717
- }
718
-
719
- @media (prefers-reduced-motion: no-preference) {
720
- transition: background-color 0.2s var(--ease-out-3),
721
- border-color 0.2s var(--ease-out-3), color 0.2s var(--ease-out-3),
722
- outline-offset 0.05s var(--ease-1);
723
- }
724
- }
725
- }
726
- }
727
- }
728
- }
729
- @layer components.root {
730
- :where([role="group"].toggle-button-group) {
731
- --_border-radius: var(--button-border-radius);
732
- --_button-padding-inline: clamp(var(--size-2), 3cqi, var(--size-4));
733
- --_max-width: auto;
734
- --_icon-size: var(--size-4);
735
-
736
- background-color: var(--surface-default);
737
- border: 1px solid var(--border-color);
738
- border-radius: var(--_border-radius);
739
- display: flex;
740
- grid-auto-columns: 1fr;
741
- grid-auto-flow: column;
742
- max-inline-size: var(--_max-width);
743
- min-inline-size: max-content;
744
- overflow: clip;
745
-
746
- /* Size */
747
- &.small {
748
- button {
749
- min-block-size: 2.1875rem; /* 35px */
750
- }
751
- }
752
-
753
- &.x-small {
754
- button {
755
- min-block-size: var(--size-6); /* 30px */
756
- }
757
- }
758
-
759
- &.fullwidth {
760
- inline-size: 100%;
761
- }
762
-
763
- /* Button */
764
- button {
765
- --_bg-color: transparent;
766
-
767
- align-items: center;
768
- background: var(--_bg-color) var(--ripple, none);
769
- border-radius: 0;
770
- border-inline: 1px solid var(--border-color);
771
- border-inline-start-width: 0;
772
- color: var(--text-color-1);
773
- display: inline-flex;
774
- flex: auto;
775
- gap: 1ex;
776
- justify-content: center;
777
- min-block-size: 2.5rem; /* 40px */
778
- min-inline-size: 5ex;
779
- outline-offset: calc(-1 * var(--size-2));
780
- padding: 0 var(--_button-padding-inline);
781
- position: relative;
782
- user-select: none;
783
-
784
- @media (prefers-reduced-motion: no-preference) {
785
- transition: background-color 0.2s var(--ease-out-3),
786
- box-shadow 0.2s var(--ease-out-3), border-color 0.2s var(--ease-out-3),
787
- color 0.2s var(--ease-out-3), outline-offset 0.05s var(--ease-1);
788
- }
789
-
790
- /* Element states */
791
- &:hover {
792
- --_bg-color: light-dark(oklch(0% 0 0 / 0.04), oklch(100% 0 0 / 0.08));
793
- }
794
-
795
- &:focus-visible {
796
- outline-offset: -6px;
797
- }
798
-
799
- /* Disabled */
800
- &[disabled] {
801
- border-color: color-mix(in oklch, var(--border-color) 50%, transparent);
802
- cursor: not-allowed;
803
- color: color-mix(in oklch, var(--text-color-1) 30%, transparent);
804
- }
805
-
806
- &[disabled] + &:not([disabled]):not(:last-of-type) {
807
- border-inline-end-width: 1px;
808
- }
809
-
810
- /* Assign border radius for outline */
811
- &:first-of-type {
812
- border-bottom-left-radius: var(--_border-radius);
813
- border-top-left-radius: var(--_border-radius);
814
- }
815
- &:last-of-type {
816
- border-bottom-right-radius: var(--_border-radius);
817
- border-top-right-radius: var(--_border-radius);
818
- }
819
-
820
- &:last-of-type {
821
- border-inline-end-width: 0;
822
- }
823
-
824
- /* Ripple effect */
825
- background-position: center;
826
-
827
- &:where(:not([disabled])) {
828
- &:where(:not(:active):hover) {
829
- --ripple: radial-gradient(circle, transparent 1%, var(--_bg-color) 1%)
830
- center/15000%;
831
-
832
- transition: background var(--button-ripple-duration);
833
- }
834
-
835
- &:where(:hover:active) {
836
- background-size: var(--button-ripple-size);
837
- transition: background 0s;
838
- }
839
- }
840
-
841
- /* Icons */
842
- svg {
843
- inline-size: var(--_icon-size);
844
- inset-inline-start: calc(var(--_button-padding-inline));
845
-
846
- & + svg {
847
- max-block-size: var(--size-5);
848
- max-inline-size: var(--size-7);
849
- }
850
- }
851
-
852
- /* Selected */
853
- &.selected {
854
- --_bg-color: oklch(from var(--primary) l c h / 25%);
855
-
856
- /* Checkmark */
857
- svg:first-of-type {
858
- margin-block-end: -3px;
859
- }
860
- }
861
- }
862
- }
863
- }
864
- @layer components.root {
865
- :where(.avatar) {
866
- --_bg-color: var(--color-8);
867
- --_color: var(--text-color-1);
868
- --_width: 40px;
869
-
870
- align-items: center;
871
- background-color: var(--_bg-color);
872
- color: var(--_color);
873
- aspect-ratio: 1;
874
- border-radius: 100vmax;
875
- display: inline-flex;
876
- inline-size: var(--_width);
877
- justify-content: center;
878
- overflow: clip;
879
- position: relative;
880
- text-align: center;
881
- text-decoration: none;
882
-
883
- &:has(img) {
884
- background-color: transparent;
885
- }
886
-
887
- svg {
888
- max-inline-size: var(--size-5);
889
- }
890
-
891
- img {
892
- block-size: 100%;
893
- inline-size: 100%;
894
- inset: 0;
895
- object-fit: cover;
896
- position: absolute;
897
- }
898
-
899
- &.squared {
900
- border-radius: 0;
901
- }
902
-
903
- &.rounded {
904
- border-radius: var(--border-size-3);
905
- }
906
- }
907
-
908
- /*
909
- TODO: implement reading-order if that becomes a thing.
910
- https://developer.chrome.com/blog/reading-order/
911
- */
912
- :where(.avatar-group) {
913
- --_margin: var(--size-1);
914
-
915
- display: flex;
916
- flex-direction: row-reverse;
917
-
918
- &.gap-small {
919
- --_margin: var(--size-2);
920
- }
921
-
922
- &.gap-x-small {
923
- --_margin: var(--size-3);
924
- }
925
-
926
- .avatar {
927
- margin-inline-end: calc(-1 * var(--_margin));
928
- outline: 2px solid var(--surface-default);
929
- }
930
- }
931
- }
932
- @layer components.root {
933
- :where(.badge) {
934
- --_bg-color: var(--primary);
935
- --_border-color: var(--primary);
936
- --_color: var(--gray-1);
937
- --_inset-offset: 16px;
938
- --_inset: auto auto calc(100% - var(--_inset-offset))
939
- calc(100% - var(--_inset-offset));
940
- --_translate: 0;
941
-
942
- display: inline-flex;
943
- position: relative;
944
-
945
- &::after {
946
- background-color: var(--_bg-color);
947
- border: 2px solid var(--_border-color);
948
- border-radius: 100vmax;
949
- color: var(--_color);
950
- content: attr(aria-label);
951
- font-size: 12px;
952
- font-weight: 500;
953
- block-size: var(--size-4);
954
- line-height: normal;
955
- min-inline-size: var(--size-4, 1.125rem);
956
- padding-inline: var(--size-1);
957
- inset: var(--_inset);
958
- position: absolute;
959
- text-align: center;
960
- translate: var(--_translate);
961
- transition: opacity 0.2s var(--ease-out-1);
962
- inline-size: max-content;
963
- }
964
-
965
- /* Alignment */
966
- &.start-start {
967
- --_inset: auto calc(100% - var(--_inset-offset))
968
- calc(100% - var(--_inset-offset)) auto;
969
- }
970
- &.start-end {
971
- --_inset: auto auto calc(100% - var(--_inset-offset))
972
- calc(100% - var(--_inset-offset));
973
- }
974
- &.end-start {
975
- --_inset: calc(100% - var(--_inset-offset))
976
- calc(100% - var(--_inset-offset)) auto auto;
977
- }
978
- &.end-end {
979
- --_inset: calc(100% - var(--_inset-offset)) auto auto
980
- calc(100% - var(--_inset-offset));
981
- }
982
-
983
- /* Dot */
984
- &.dot {
985
- --_inset: 0 -1px auto auto;
986
- &::after {
987
- content: "";
988
- min-inline-size: var(--size-2);
989
- block-size: var(--size-2);
990
- inline-size: var(--size-2);
991
- padding: 0;
992
- }
993
- }
994
-
995
- /* Visibility */
996
- &.invisible {
997
- &::after {
998
- opacity: 0;
999
- pointer-events: none;
1000
- }
1001
- }
1002
-
1003
- /* Colors */
1004
- &.error,
1005
- &.good,
1006
- &.ok,
1007
- &.warning {
1008
- --_bg-color: var(--color-8);
1009
- --_border-color: var(--color-8);
1010
- }
1011
- }
1012
-
1013
- [dir="rtl"] {
1014
- :where(.badge) {
1015
- --_inset: auto calc(100% - 16px) calc(100% - 16px) auto;
1016
-
1017
- /* Alignment */
1018
- &.start-start {
1019
- --_inset: auto auto calc(100% - 16px) calc(100% - 16px);
1020
- }
1021
- &.start-end {
1022
- --_inset: auto calc(100% - 16px) calc(100% - 16px) auto;
1023
- }
1024
- &.end-start {
1025
- --_inset: calc(100% - 16px) auto auto calc(100% - 16px);
1026
- }
1027
- &.end-end {
1028
- --_inset: calc(100% - 16px) calc(100% - 16px) auto auto;
1029
- }
1030
- }
1031
- }
1032
- }
1033
- @layer components.root {
1034
- :where(.card) {
1035
- --_bg-color: transparent;
1036
- --_border-color: transparent;
1037
- --_border-width: 0;
1038
- --_shadow: none;
1039
-
1040
- background-color: var(--_bg-color);
1041
- border-color: var(--_border-color);
1042
- border-radius: var(--border-radius, 0.25rem);
1043
- border-style: solid;
1044
- border-width: var(--_border-width);
1045
- box-shadow: var(--_shadow);
1046
- display: flex;
1047
- flex-direction: column;
1048
- gap: var(--size-3);
1049
- overflow: hidden;
1050
- padding-inline: 0;
1051
-
1052
- /* Variants */
1053
- &.text {
1054
- --_bg-color: transparent;
1055
- --_border-color: transparent;
1056
- --_border-width: 0;
1057
- --_shadow: none;
1058
- padding-inline: 0;
1059
- }
1060
-
1061
- &.tonal {
1062
- --_bg-color: var(--surface-tonal);
1063
- --_border-width: 1px;
1064
- }
1065
-
1066
- &.elevated {
1067
- --_bg-color: var(--surface-elevated);
1068
- --_border-color: transparent;
1069
- --_border-width: 0;
1070
- --_shadow: var(--shadow-3);
1071
-
1072
- /* Adjust shadow in dark mode */
1073
- @container style(--color-scheme: dark) {
1074
- --_shadow: var(--shadow-4);
1075
- }
1076
- }
1077
-
1078
- &.outlined {
1079
- --_bg-color: var(--surface-default);
1080
- --_border-color: var(--border-color);
1081
- --_border-width: 1px;
1082
- }
1083
-
1084
- & > :where(hgroup, .content) {
1085
- padding-inline: var(--size-3);
1086
- }
1087
-
1088
- & > hgroup {
1089
- padding-block: var(--size-3) 0;
1090
-
1091
- /* Top paragraph */
1092
- & > p:first-of-type:first-child {
1093
- line-height: 1.3;
1094
- }
1095
-
1096
- /* Bottom paragraph */
1097
- & > p:last-of-type:last-child:not(:first-child) {
1098
- font-size: var(--font-size-1, 1rem);
1099
- }
1100
- }
1101
-
1102
- & > .content:where(:only-child, :first-child) {
1103
- padding-block: var(--size-3) var(--size-4);
1104
- }
1105
-
1106
- & > .actions {
1107
- display: flex;
1108
- gap: var(--size-1);
1109
- margin-block: var(--size-2) 0;
1110
- padding-block-end: var(--size-1);
1111
- padding-inline: var(--size-1) var(--size-3);
1112
- }
1113
- }
1114
- }
1115
- @layer components.root {
1116
- :where(.chip) {
1117
- --_bg-color: var(--surface-tonal);
1118
- --_border-color: var(--border-color);
1119
- --_color: var(--text-color-1);
1120
-
1121
- align-items: center;
1122
- background: var(--_bg-color) var(--ripple, none);
1123
- border: 1px solid var(--_border-color);
1124
- border-radius: var(--radius-2, 0.5rem);
1125
- color: var(--_color);
1126
- display: inline-flex;
1127
- font-size: var(--font-size-0, 0.75rem);
1128
- gap: var(--size-1);
1129
- block-size: var(--size-7, 2rem);
1130
- padding-inline: var(--size-2);
1131
- text-decoration: none;
1132
-
1133
- /* Variants */
1134
- &.tonal {
1135
- --_bg-color: var(--surface-tonal);
1136
- --_color: var(--text-color-1);
1137
- }
1138
-
1139
- &.outlined {
1140
- --_bg-color: var(--surface-default);
1141
- --_color: var(--text-color-1);
1142
- }
1143
-
1144
- /* TODO: should this be out of the box? */
1145
- /* Colors */
1146
- /* &:hover {
1147
- --_bg-color: var(--color-11);
1148
- --_border-color: var(--color-11);
1149
- --_color: var(--text-color-1);
1150
- } */
1151
- /* &.red,
1152
- &.blue,
1153
- &.green,
1154
- &.orange,
1155
- &.primary {
1156
- --_bg-color: var(--color-5);
1157
- --_border-color: var(--color-7);
1158
- --_color: var(--text-color-1-contrast);
1159
-
1160
- &:hover {
1161
- --_bg-color: var(--color-7);
1162
- --_border-color: var(--color-7);
1163
- --_color: var(--text-color-1-contrast);
1164
-
1165
- &:active {
1166
- --_bg-color: var(--color-8);
1167
- --_border-color: var(--color-8);
1168
- }
1169
- }
1170
-
1171
- &.outlined {
1172
- --_bg-color: var(--surface-tonal);
1173
- --_color: var(--text-color-1);
1174
- --_border-color: var(--color-9);
1175
-
1176
- &:hover {
1177
- --_bg-color: var(--color-9);
1178
- --_border-color: var(--color-9);
1179
- --_color: var(--text-color-1);
1180
-
1181
- &:active {
1182
- --_bg-color: var(--color-11);
1183
- --_border-color: var(--color-11);
1184
- }
1185
- }
1186
- }
1187
- } */
1188
-
1189
- &:where(button, a):where(:not([disabled])) {
1190
- &:where(:not(:active)):hover {
1191
- --_bg-color: light-dark(
1192
- oklch(from var(--surface-tonal) calc(l * 0.98) c h),
1193
- oklch(from var(--surface-tonal) calc(l * 1.1) c h)
1194
- );
1195
- }
1196
- }
1197
-
1198
- /* Icon */
1199
- &:has(svg:first-child) {
1200
- padding-inline: var(--size-1) var(--size-2);
1201
- }
1202
- &:has(svg:last-child) {
1203
- padding-inline: var(--size-2) var(--size-1);
1204
- }
1205
-
1206
- &:has(svg) {
1207
- svg {
1208
- flex-shrink: 0;
1209
- inline-size: var(--size-3);
1210
- }
1211
- }
1212
-
1213
- /* Sizes */
1214
- &.small {
1215
- block-size: var(--size-5);
1216
- }
1217
- &.multiline {
1218
- block-size: auto;
1219
- }
1220
-
1221
- /* Ripple effect */
1222
- background-position: center;
1223
-
1224
- &:where(:not([disabled])) {
1225
- &:where(:not(:active):hover) {
1226
- --ripple: radial-gradient(circle, transparent 1%, var(--_bg-color) 1%)
1227
- center/15000%;
1228
-
1229
- transition: background var(--button-ripple-duration);
1230
- }
1231
-
1232
- &:where(:hover:active) {
1233
- background-size: var(--button-ripple-size);
1234
- transition: background 0s;
1235
- }
1236
- }
1237
-
1238
- /* Disabled */
1239
- &:where([disabled]) {
1240
- opacity: 0.64;
1241
- --_text-color: color-mix(
1242
- in oklch,
1243
- var(--text-color-2) 50%,
1244
- var(--surface-default)
1245
- );
1246
- cursor: not-allowed;
1247
- }
1248
- }
1249
- }
1250
- @layer components.root {
1251
- :where(.definition-list) {
1252
- --_border-style: solid;
1253
- --_border-width: 1px;
1254
-
1255
- display: grid;
1256
- gap: var(--size-3);
1257
- padding: 0;
1258
-
1259
- &.dotted {
1260
- --_border-style: dotted;
1261
- --_border-width: 2px;
1262
- }
1263
-
1264
- li {
1265
- display: grid;
1266
- margin: 0;
1267
- padding: 0;
1268
-
1269
- .term {
1270
- display: block;
1271
- font-weight: 700;
1272
- overflow: hidden;
1273
- position: relative;
1274
- }
1275
-
1276
- hr {
1277
- display: none;
1278
- margin: 0;
1279
- }
1280
- }
1281
-
1282
- @container (width > 45ch) {
1283
- gap: var(--size-1);
1284
-
1285
- li {
1286
- align-items: baseline;
1287
- display: grid;
1288
- gap: var(--size-1);
1289
- grid-template-columns: 1fr auto;
1290
-
1291
- &:has(hr) {
1292
- grid-template-columns: auto 1fr auto;
1293
- }
1294
-
1295
- hr {
1296
- background-color: transparent;
1297
- border-block-end: var(--_border-width) var(--_border-style)
1298
- var(--border-color);
1299
- block-size: 2px;
1300
- display: block;
1301
- }
1302
-
1303
- .term {
1304
- &::after {
1305
- display: inline-block;
1306
- }
1307
- }
1308
- .description {
1309
- color: var(--text-color-2);
1310
- }
1311
- }
1312
- }
1313
- }
1314
- }
1315
- @layer components.root {
1316
- :where(hr) {
1317
- background-color: var(--border-color);
1318
- block-size: var(--border-size-1);
1319
- margin-block: var(--size-fluid-3);
1320
- }
1321
- }
1322
- @layer components.root {
1323
- :where(.link) {
1324
- color: var(--primary);
1325
- cursor: pointer;
1326
- font-weight: 700;
1327
- text-decoration: underline;
1328
- text-decoration-color: var(--primary);
1329
- text-underline-offset: 2px;
1330
-
1331
- &[href] {
1332
- &:hover,
1333
- &:focus-visible {
1334
- color: var(--primary-light);
1335
- }
1336
- }
1337
-
1338
- @supports (-moz-appearance: none) {
1339
- text-underline-offset: 2px;
1340
- }
1341
- }
1342
- }
1343
- @layer components.root {
1344
- :where(table) {
1345
- border-collapse: collapse;
1346
- display: block;
1347
- margin: var(--size-3) 0;
1348
- max-inline-size: 100%;
1349
- position: relative;
1350
-
1351
- /* Rows */
1352
- tr {
1353
- background-color: var(--surface-default);
1354
- border-top: 1px solid var(--border-color);
1355
-
1356
- &:hover {
1357
- background-color: oklch(from var(--surface-filled) l c h / 75%);
1358
- }
1359
- }
1360
-
1361
- /* Cells */
1362
- th,
1363
- td {
1364
- border: 1px solid var(--border-color);
1365
- padding: var(--size-1) var(--size-2);
1366
- }
1367
-
1368
- th {
1369
- background-color: var(--surface-filled);
1370
- color: var(--text-color-1);
1371
- font-size: var(--font-size-sm, 0.75rem);
1372
- font-weight: 600;
1373
- text-align: start;
1374
- }
1375
-
1376
- td {
1377
- font-size: var(--font-size-sm, 0.75rem);
1378
- }
1379
-
1380
- /* Caption */
1381
- caption {
1382
- caption-side: bottom;
1383
- color: var(--text-color-2);
1384
- font-size: var(--font-size-sm, 0.75rem);
1385
- padding: var(--size-2) 0;
1386
- text-align: start;
1387
- }
1388
-
1389
- /* Header */
1390
- thead {
1391
- position: sticky;
1392
- top: 0;
1393
- z-index: 1;
1394
- }
1395
-
1396
- /* Footer */
1397
- tfoot {
1398
- border-top: 2px solid var(--border-color);
1399
-
1400
- tr {
1401
- background-color: var(--surface-filled);
1402
- }
1403
-
1404
- td {
1405
- color: var(--text-color-1);
1406
- font-weight: 600;
1407
- }
1408
- }
1409
-
1410
- /* Column group */
1411
- colgroup col {
1412
- border: none;
1413
- }
1414
-
1415
- @container (width < 60ch) {
1416
- th,
1417
- td {
1418
- padding: var(--size-1) 0.875rem;
1419
- }
1420
- }
1421
-
1422
- /* Sticky header */
1423
- &.sticky-header thead {
1424
- background-color: var(--surface-filled);
1425
- position: sticky;
1426
- inset-block-start: 0;
1427
- z-index: 1;
1428
- }
1429
-
1430
- /* Dense */
1431
- &.dense {
1432
- th,
1433
- td {
1434
- padding: var(--size-1) var(--size-2);
1435
- }
1436
-
1437
- caption {
1438
- padding: var(--size-1) 0;
1439
- }
1440
-
1441
- @container (width < 60ch) {
1442
- th,
1443
- td {
1444
- padding: var(--size-1) var(--size-2);
1445
- }
1446
- }
1447
- }
1448
- }
1449
- }
1450
- @layer components.root {
1451
- :where(progress) {
1452
- --_accent-color: var(--primary);
1453
- --_bg-color: var(--surface-tonal);
1454
-
1455
- appearance: none;
1456
- background-color: var(--_bg-color);
1457
- border-radius: var(--border-radius, 0.25rem);
1458
- border: 0;
1459
- display: inline-block;
1460
- block-size: var(--size-1);
1461
- overflow: hidden;
1462
- position: relative;
1463
- vertical-align: baseline;
1464
- inline-size: 100%;
1465
-
1466
- &::-webkit-progress-bar {
1467
- border-radius: var(--border-radius, 0.25rem);
1468
- background: none;
1469
- }
1470
-
1471
- &[value]::-webkit-progress-value {
1472
- background-color: var(--_accent-color);
1473
-
1474
- @media (prefers-reduced-motion: no-preference) {
1475
- transition: inline-size 0.2s
1476
- var(--ease-out-4, cubic-bezier(0, 0, 0.1, 1));
1477
- }
1478
- }
1479
-
1480
- &::-moz-progress-bar {
1481
- background-color: var(--_accent-color);
1482
- }
1483
- }
1484
-
1485
- @media (prefers-reduced-motion: no-preference) {
1486
- progress:indeterminate {
1487
- background-color: var(--_bg-color);
1488
-
1489
- &::after {
1490
- animation: indeterminate 2s linear infinite;
1491
- background-color: var(--_accent-color);
1492
- content: "";
1493
- inset: 0 auto 0 0;
1494
- position: absolute;
1495
- will-change: inset-inline-start, inset-inline-end;
1496
- }
1497
-
1498
- &[value]::-webkit-progress-value {
1499
- background-color: transparent;
1500
- }
1501
-
1502
- &::-moz-progress-bar {
1503
- background-color: transparent;
1504
- }
1505
- }
1506
-
1507
- [dir="rtl"] {
1508
- :where(progress):indeterminate {
1509
- animation-direction: reverse;
1510
-
1511
- &::after {
1512
- animation-direction: reverse;
1513
- }
1514
- }
1515
- }
1516
- }
1517
-
1518
- @keyframes indeterminate {
1519
- 0% {
1520
- left: -200%;
1521
- right: 100%;
1522
- }
1523
- 60% {
1524
- left: 107%;
1525
- right: -8%;
1526
- }
1527
- 100% {
1528
- left: 107%;
1529
- right: -8%;
1530
- }
1531
- }
1532
- }
1533
- @layer components.root {
1534
- [aria-busy="true"]:not(
1535
- input,
1536
- select,
1537
- textarea,
1538
- html,
1539
- progress,
1540
- [aria-describedby]
1541
- ) {
1542
- position: relative;
1543
-
1544
- &::before {
1545
- animation: spin 0.7s linear infinite;
1546
- border-color: transparent currentColor currentColor;
1547
- border-radius: 50%;
1548
- border-style: solid;
1549
- border-width: 3px;
1550
- content: "";
1551
- display: inline-block;
1552
- block-size: 1em;
1553
- opacity: 0.5;
1554
- vertical-align: -0.14em;
1555
- inline-size: 1em;
1556
- }
1557
-
1558
- &:not(button.button):not(:empty) {
1559
- &::before {
1560
- margin-inline-end: 0.5em;
1561
- }
1562
- }
1563
- }
1564
-
1565
- @keyframes spin {
1566
- to {
1567
- transform: rotate(1turn);
1568
- }
1569
- }
1570
- }
1571
- @layer components.root {
1572
- label:where(.checkbox, .radio) {
1573
- align-items: center;
1574
- color: var(--text-color-1);
1575
- cursor: pointer;
1576
- display: inline-grid;
1577
- gap: 0 var(--size-2);
1578
- grid-auto-columns: auto;
1579
- grid-auto-flow: column;
1580
- inline-size: fit-content;
1581
- line-height: 1.5;
1582
- transform: translateZ(0);
1583
- user-select: none;
1584
-
1585
- /* Disabled */
1586
- &:has([disabled]) {
1587
- cursor: not-allowed;
1588
- opacity: 0.64;
1589
- user-select: none;
1590
-
1591
- input {
1592
- cursor: not-allowed;
1593
- }
1594
- }
1595
-
1596
- /* Required dot */
1597
- &:has([required]:not([type="checkbox"]:checked)) {
1598
- .label:after {
1599
- color: var(--red);
1600
- content: "*";
1601
- inset: 0 -0.25ex auto auto;
1602
- position: absolute;
1603
- }
1604
- }
1605
-
1606
- /* Label */
1607
- .label {
1608
- grid-column: 2;
1609
- grid-row: 1;
1610
- position: relative;
1611
- padding-inline: 0 1ex;
1612
- }
1613
-
1614
- /* Supporting text */
1615
- .supporting-text {
1616
- color: var(--text-color-2);
1617
- font-size: var(--font-size-xs);
1618
- grid-column: 2;
1619
- grid-row: 2;
1620
- line-height: 1.5;
1621
- z-index: 1;
1622
- }
1623
-
1624
- /* Stacked layout */
1625
- &.stack {
1626
- justify-items: center;
1627
- grid-auto-columns: unset;
1628
-
1629
- .label {
1630
- grid-column: 1/-1;
1631
- grid-row: 2;
1632
- margin-block-start: var(--size-1);
1633
- padding-inline: 1ex;
1634
-
1635
- /* Required dot */
1636
- &::after {
1637
- inset: 0 -0.25ex auto auto;
1638
- }
1639
- }
1640
-
1641
- .supporting-text {
1642
- grid-column: 1/-1;
1643
- grid-row: 3;
1644
- }
1645
- }
1646
-
1647
- /* Input */
1648
- input {
1649
- aspect-ratio: 1;
1650
- block-size: 1.125rem;
1651
- cursor: pointer;
1652
- inline-size: 1.125rem;
1653
-
1654
- &::before {
1655
- --highlight-size: 175%;
1656
- }
1657
- }
1658
-
1659
- /* Sizes */
1660
- &.small {
1661
- input {
1662
- block-size: var(--size-3);
1663
- inline-size: var(--size-3);
1664
- }
1665
- }
1666
-
1667
- &.large {
1668
- input {
1669
- block-size: var(--size-4);
1670
- inline-size: var(--size-4);
1671
- }
1672
- }
1673
-
1674
- /* Validation */
1675
- &.error {
1676
- input[type="checkbox"] {
1677
- accent-color: var(--color-9);
1678
-
1679
- & ~ :where(.label, .supporting-text) {
1680
- color: var(--color-9);
1681
- }
1682
- }
1683
- }
1684
-
1685
- /* Touch devices */
1686
- @media (pointer: coarse) {
1687
- input {
1688
- block-size: var(--size-4);
1689
- inline-size: var(--size-4);
1690
- }
1691
- }
1692
- }
1693
- }
1694
- @layer components.root {
1695
- :where(.switch) {
1696
- --_accent-color: var(--primary);
1697
- --_accent-contrast: var(--primary-contrast);
1698
-
1699
- --_dot-bg-color: light-dark(var(--gray-11), var(--gray-14));
1700
- --_dot-inset: var(--size-1) auto auto var(--size-1);
1701
- --_dot-outline-size: 0;
1702
- --_dot-size: var(--size-3);
1703
-
1704
- --_track-bg-color: light-dark(var(--gray-3), var(--gray-8));
1705
- --_track-height: var(--size-5);
1706
- --_track-width: var(--size-8);
1707
- --_transition-tf: var(--ease-4);
1708
- --_transition-time: 0.2s;
1709
-
1710
- align-items: center;
1711
- color: var(--text-color-1);
1712
- display: inline-grid;
1713
- gap: 0 var(--size-2);
1714
- grid-auto-columns: auto;
1715
- grid-auto-flow: column;
1716
- inline-size: fit-content;
1717
-
1718
- input[type="checkbox"][role="switch"] {
1719
- appearance: none;
1720
- block-size: var(--_track-height);
1721
- cursor: pointer;
1722
- inline-size: var(--_track-width);
1723
- margin: 0;
1724
- position: relative;
1725
-
1726
- /* Track */
1727
- &::before {
1728
- background-color: var(--_track-bg-color);
1729
- block-size: var(--_track-height);
1730
- border: 1px solid var(--_dot-bg-color);
1731
- border-radius: 100vmax;
1732
- content: "";
1733
- inline-size: var(--_track-width);
1734
- inset: 0;
1735
- position: absolute;
1736
- }
1737
-
1738
- &:focus-visible {
1739
- outline-offset: 2px;
1740
- outline: 2px solid currentColor;
1741
- }
1742
-
1743
- /* Dot */
1744
- &::after {
1745
- background-color: var(--_dot-bg-color);
1746
- block-size: var(--_dot-size);
1747
- border-radius: 100vmax;
1748
- content: "";
1749
- inline-size: var(--_dot-size);
1750
- inset: var(--_dot-inset);
1751
- outline-offset: -1px;
1752
- outline: var(--_dot-outline-size) solid var(--_dot-bg-color);
1753
- position: absolute;
1754
- }
1755
-
1756
- /* Checked */
1757
- &:checked {
1758
- &::before {
1759
- background-color: var(--_accent-color);
1760
- border-color: var(--_accent-color);
1761
- transition: background-color var(--_transition-time)
1762
- var(--_transition-tf),
1763
- border-color var(--_transition-time) var(--_transition-tf);
1764
- }
1765
-
1766
- /* Dot */
1767
- &::after {
1768
- --_dot-bg-color: var(--_accent-contrast);
1769
- --_dot-outline-size: calc(var(--size-1) - 1px);
1770
-
1771
- inset-inline-start: calc(
1772
- var(--_track-width) - var(--_dot-size) - var(--size-1)
1773
- );
1774
- }
1775
- }
1776
-
1777
- /* Animation */
1778
- @media (prefers-reduced-motion: no-preference) {
1779
- /* Track */
1780
- &::before {
1781
- transition: background-color var(--_transition-time)
1782
- var(--_transition-tf),
1783
- border-color var(--_transition-time) var(--_transition-tf);
1784
- }
1785
-
1786
- /* Dot */
1787
- &::after {
1788
- transition: all var(--_transition-time) var(--_transition-tf);
1789
- }
1790
-
1791
- &:active:after {
1792
- --_dot-outline-size: calc(var(--size-1) + 1px);
1793
- }
1794
-
1795
- &:checked {
1796
- &:active:after {
1797
- --_dot-outline-size: calc(var(--size-1) + 1px);
1798
- }
1799
- }
1800
- }
1801
- }
1802
-
1803
- /* Required dot */
1804
- &:has([required]:not(:checked)) {
1805
- .label:after {
1806
- color: var(--red);
1807
- content: "*";
1808
- inset: 0 -0.25ex auto auto;
1809
- position: absolute;
1810
- }
1811
- }
1812
-
1813
- /* Disabled */
1814
- &:has([disabled]) {
1815
- cursor: not-allowed;
1816
- opacity: 0.64;
1817
- user-select: none;
1818
-
1819
- input {
1820
- cursor: not-allowed;
1821
- }
1822
- }
1823
-
1824
- /* Label */
1825
- .label {
1826
- grid-column: 2;
1827
- grid-row: 1;
1828
- min-width: 0;
1829
- padding-inline: 0 1ex;
1830
- position: relative;
1831
- user-select: none;
1832
- }
1833
-
1834
- /* Supporting text */
1835
- .supporting-text {
1836
- color: var(--text-color-2);
1837
- font-size: var(--font-size-xs);
1838
- grid-column: 2;
1839
- grid-row: 2;
1840
- line-height: 1.5;
1841
- z-index: 1;
1842
- }
1843
-
1844
- /* Size */
1845
- &.small {
1846
- --_dot-size: 0.75rem;
1847
- --_track-height: var(--size-4);
1848
- --_track-width: 2.5rem;
1849
- }
1850
-
1851
- /* Stacked layout */
1852
- &.stack {
1853
- justify-items: center;
1854
- grid-auto-columns: unset;
1855
-
1856
- .label {
1857
- grid-column: 1/-1;
1858
- grid-row: 2;
1859
- margin-block-start: var(--size-1);
1860
- padding-inline: 1ex;
1861
- }
1862
-
1863
- .supporting-text {
1864
- grid-column: 1/-1;
1865
- grid-row: 3;
1866
- }
1867
- }
1868
-
1869
- /* Validation */
1870
- &.error {
1871
- input {
1872
- outline: 2px solid var(--color-9);
1873
- border-radius: var(--radius-round);
1874
- }
1875
-
1876
- .label,
1877
- .supporting-text {
1878
- color: var(--color-9);
1879
- }
1880
- }
1881
- }
1882
- }
1883
- @layer components.root {
1884
- :where(.range > input[type="range"]) {
1885
- --thumb-bg: var(--primary);
1886
- --thumb-highlight-color: oklch(from var(--primary) 70% 100% h / 20%);
1887
- --thumb-highlight-size: 0px;
1888
- --thumb-offset: -1ex;
1889
- --thumb-size: 3ex;
1890
- --track-color: var(--field-border-color);
1891
- --track-fill: 0%;
1892
- --track-height: 1ex;
1893
-
1894
- appearance: none;
1895
- background: transparent;
1896
- display: block;
1897
- inline-size: 100%;
1898
- margin: 1ex 0 3ex;
1899
- outline-offset: 1ex;
1900
-
1901
- @media (hover: none) {
1902
- --thumb-offset: -14px;
1903
- --thumb-size: 30px;
1904
- }
1905
-
1906
- /* Track */
1907
- &::-webkit-slider-runnable-track {
1908
- appearance: none;
1909
- background: linear-gradient(
1910
- to right,
1911
- transparent var(--track-fill),
1912
- var(--track-color) 0%
1913
- ),
1914
- var(--primary);
1915
- block-size: var(--track-height);
1916
- border-radius: 5ex;
1917
- box-shadow: var(--inner-shadow-1);
1918
- }
1919
-
1920
- &::-moz-range-track {
1921
- appearance: none;
1922
- background: linear-gradient(
1923
- to right,
1924
- transparent var(--track-fill),
1925
- var(--track-color) 0%
1926
- ),
1927
- var(--primary);
1928
- block-size: var(--track-height);
1929
- border-radius: 5ex;
1930
- box-shadow: var(--inner-shadow-2);
1931
- }
1932
-
1933
- /* Ring */
1934
- &::-webkit-slider-thumb {
1935
- appearance: none;
1936
- background: var(--thumb-bg);
1937
- block-size: var(--thumb-size);
1938
- border-radius: 50%;
1939
- border: 3px solid var(--surface-default);
1940
- box-shadow: 0 0 0 var(--thumb-highlight-size) var(--thumb-highlight-color);
1941
- cursor: ew-resize;
1942
- inline-size: var(--thumb-size);
1943
- margin-block-start: var(--thumb-offset);
1944
-
1945
- @media (prefers-reduced-motion: no-preference) {
1946
- transition: box-shadow 0.1s ease;
1947
- }
1948
-
1949
- .fieldset-item:focus-within & {
1950
- border-color: var(--gray-14);
1951
- }
1952
- }
1953
-
1954
- &::-moz-range-thumb {
1955
- appearance: none;
1956
- background: var(--thumb-bg);
1957
- block-size: var(--thumb-size);
1958
- border-radius: 50%;
1959
- border: 3px solid var(--primary);
1960
- box-shadow: 0 0 0 var(--thumb-highlight-size) var(--thumb-highlight-color);
1961
- cursor: ew-resize;
1962
- inline-size: var(--thumb-size);
1963
- margin-block-start: var(--thumb-offset);
1964
-
1965
- @media (prefers-reduced-motion: no-preference) {
1966
- transition: box-shadow 0.1s ease;
1967
- }
1968
-
1969
- .fieldset-item:focus-within & {
1970
- border-color: var(--gray-14);
1971
- }
1972
- }
1973
-
1974
- /* Element state */
1975
- &:not([disabled]) {
1976
- &:hover {
1977
- --thumb-highlight-size: var(--size-1);
1978
- }
1979
-
1980
- &:active {
1981
- --thumb-highlight-size: var(--size-2);
1982
- --track-color: light-dark(
1983
- oklch(from var(--field-border-color) calc(l * 0.9) c h),
1984
- oklch(from var(--field-border-color) calc(l * 1.1) c h)
1985
- );
1986
- }
1987
- }
1988
-
1989
- &[disabled] {
1990
- --thumb-bg: oklch(from var(--text-color-1) l c h / 50%);
1991
- --track-color: var(--field-border-color);
1992
-
1993
- cursor: not-allowed;
1994
-
1995
- &::-webkit-slider-thumb {
1996
- cursor: not-allowed;
1997
- }
1998
- &::-moz-range-thumb {
1999
- cursor: not-allowed;
2000
- }
2001
- }
2002
- }
2003
- }
2004
- @layer components.root {
2005
- /* Base typography */
2006
- :where(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) {
2007
- color: var(--text-color-1);
2008
- font-weight: 700;
2009
- text-wrap: pretty;
2010
- }
2011
-
2012
- :where(h1, .h1) {
2013
- font-size: var(--font-size-h1, var(--font-size-7));
2014
- letter-spacing: -0.02em;
2015
- line-height: 1.15;
2016
- }
2017
-
2018
- :where(h2, .h2) {
2019
- font-size: var(--font-size-h2, var(--font-size-5, 2rem));
2020
- letter-spacing: -0.02em;
2021
- line-height: 1.2;
2022
- }
2023
-
2024
- :where(h3, .h3) {
2025
- font-size: var(--font-size-h3, var(--font-size-4, 1.5rem));
2026
- letter-spacing: -0.01em;
2027
- line-height: 1.167;
2028
- }
2029
-
2030
- :where(h4, .h4) {
2031
- font-size: var(--font-size-h4, var(--font-size-3, 1.25rem));
2032
- letter-spacing: -0.01em;
2033
- line-height: 1.235;
2034
- }
2035
-
2036
- :where(h5, .h5) {
2037
- font-size: var(--font-size-h5, var(--font-size-2, 1.1rem));
2038
- line-height: 1.334;
2039
- }
2040
-
2041
- :where(h6, .h6) {
2042
- font-size: var(--font-size-h6, var(--font-size-1, 1rem));
2043
- line-height: 1;
2044
- }
2045
-
2046
- :where(hgroup) {
2047
- & > :where(p, .p) {
2048
- margin: 0;
2049
- }
2050
-
2051
- & > :where(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) {
2052
- margin-block-end: 0.4em;
2053
- }
2054
-
2055
- /* The second p element */
2056
- & > :where(p, .p):last-of-type:last-child:not(:first-child) {
2057
- color: oklch(from currentColor l c h / 75%);
2058
- font-size: var(--font-size-lg);
2059
- line-height: 1.6;
2060
- }
2061
- }
2062
-
2063
- /** Overline */
2064
- :where(.overline, hgroup > :where(p, .p):first-of-type:first-child) {
2065
- color: light-dark(
2066
- oklch(from var(--text-color-2) calc(l * 1.25) c h),
2067
- oklch(from var(--text-color-2) calc(l * 0.75) c h)
2068
- );
2069
- font-size: var(--font-size-xs);
2070
- font-weight: 500;
2071
- letter-spacing: 0.06em;
2072
- line-height: 2.5;
2073
- text-transform: uppercase;
2074
- }
2075
-
2076
- :where(p, .p) {
2077
- text-wrap: pretty;
2078
-
2079
- &.small {
2080
- font-size: var(--font-size-md);
2081
- }
2082
- &.large {
2083
- font-size: var(--font-size-lg);
2084
- }
2085
- }
2086
-
2087
- /* Inline text elements */
2088
- :where(ins, u, abbr, dfn) {
2089
- text-decoration: underline;
2090
- text-underline-offset: 1px;
2091
-
2092
- @supports (-moz-appearance: none) {
2093
- text-underline-offset: 2px;
2094
- }
2095
- }
2096
-
2097
- :where(abbr, dfn) {
2098
- font-style: normal;
2099
- text-decoration: var(--color-9) underline dotted;
2100
-
2101
- &[title] {
2102
- cursor: help;
2103
- text-underline-offset: 1px;
2104
- }
2105
-
2106
- @supports (-moz-appearance: none) {
2107
- text-underline-offset: 2px;
2108
- }
2109
- }
2110
-
2111
- :where(sup) {
2112
- font-size: 0.5em;
2113
- }
2114
-
2115
- :where(del, ins) {
2116
- color: var(--color-9);
2117
- }
2118
-
2119
- :where(small) {
2120
- font-size: max(0.5em, var(--font-size-0, 0.75rem));
2121
- max-inline-size: var(--size-content-1);
2122
- }
2123
-
2124
- :where(cite) {
2125
- font-style: italic;
2126
- }
2127
-
2128
- /* Blockquote */
2129
- :where(blockquote) {
2130
- border-inline-start-width: var(--border-size-3);
2131
- display: grid;
2132
- gap: var(--size-3);
2133
- padding-block: var(--size-3);
2134
- padding-inline: var(--size-4);
2135
-
2136
- :first-child {
2137
- margin-block-start: 0;
2138
- }
2139
-
2140
- :last-child {
2141
- margin-block-end: 0;
2142
- }
2143
-
2144
- footer {
2145
- color: var(--text-color-2);
2146
- }
2147
- }
2148
-
2149
- /* Code */
2150
- :where(pre) {
2151
- border-radius: 0.375rem;
2152
- direction: ltr;
2153
- font-size: 0.875rem;
2154
- line-height: 1.7142857;
2155
- margin-block: 1.7142857em;
2156
- max-inline-size: max-content;
2157
- min-inline-size: 0;
2158
- padding-block: 0.8571429em;
2159
- padding-inline: 1.1428571em;
2160
- white-space: pre;
2161
- writing-mode: lr;
2162
- }
2163
-
2164
- :where(code, kbd, samp, pre) {
2165
- font-family: var(--font-mono);
2166
- }
2167
-
2168
- :where(code) {
2169
- background-color: oklch(00 0 0 /18%);
2170
- border-radius: var(--border-size-3);
2171
- font-size: 0.9em;
2172
- padding: 0.2ex 0.5ex;
2173
- }
2174
-
2175
- :where(kbd, var) {
2176
- background-color: var(--text-color-2);
2177
- border-color: var(--text-color-2);
2178
- border-radius: var(--border-radius, var(--radius-2));
2179
- border-width: var(--border-size-1);
2180
- color: var(--text-color-2-contrast);
2181
- padding: calc(var(--size-1) / 2) var(--size-1);
2182
- }
2183
-
2184
- :where(:not(pre) code, kbd) {
2185
- word-break: break-word;
2186
- }
2187
-
2188
- :where(:not(pre) code) {
2189
- border-radius: var(--border-radius, var(--radius-2));
2190
- padding: var(--size-1) var(--size-2);
2191
- writing-mode: lr;
2192
- }
2193
-
2194
- :where(mark) {
2195
- border-radius: var(--border-radius, 0);
2196
- box-decoration-break: clone;
2197
- padding: calc(var(--size-1) / 2) var(--size-1);
2198
- vertical-align: baseline;
2199
- }
2200
-
2201
- /* Misc */
2202
- :where(dt) {
2203
- font-weight: 700;
2204
- }
2205
-
2206
- :where(figure) {
2207
- & > :where(figcaption) {
2208
- font-size: var(--font-size-1, 1rem);
2209
- text-wrap: balance;
2210
- }
2211
- }
2212
- }
2213
- /*** Extended components (has dependencies) */
2214
- @layer components.extended {
2215
- :where([role="group"].button-group) {
2216
- --_border-radius: var(--button-border-radius);
2217
-
2218
- border-radius: var(--_border-radius);
2219
- display: inline-flex;
2220
- min-width: max-content;
2221
-
2222
- button {
2223
- border-radius: 0;
2224
-
2225
- svg {
2226
- max-inline-size: 0.7lh;
2227
- }
2228
-
2229
- &:focus-visible {
2230
- outline-offset: -4px;
2231
- }
2232
-
2233
- & + & {
2234
- border-inline-width: 1px;
2235
- margin-inline-start: -1px;
2236
- }
2237
-
2238
- &:first-of-type {
2239
- border-bottom-left-radius: var(--_border-radius);
2240
- border-top-left-radius: var(--_border-radius);
2241
- }
2242
- &:last-of-type {
2243
- border-bottom-right-radius: var(--_border-radius);
2244
- border-top-right-radius: var(--_border-radius);
2245
- }
2246
-
2247
- /* Variants */
2248
- &:where(.tonal, .filled) {
2249
- & + button {
2250
- border-inline-start-color: var(--color-7);
2251
- }
2252
-
2253
- & + &[disabled] {
2254
- border-inline-start-color: color-mix(
2255
- in oklch,
2256
- var(--border-color) 90%,
2257
- white
2258
- );
2259
- }
2260
- }
2261
- }
2262
- }
2263
- }
2264
- @layer components.extended {
2265
- :where(details) {
2266
- --_accordion-transition-time: 0.2s;
2267
- --_bg-color: transparent;
2268
- --_margin-inline: var(--size-1);
2269
- --_shadow: none;
2270
-
2271
- background-color: var(--_bg-color);
2272
- box-shadow: var(--_shadow);
2273
- border-radius: var(--border-radius, 4px);
2274
- display: block;
2275
- margin-inline: var(--_margin-inline);
2276
- transition: all var(--_accordion-transition-time) ease-out;
2277
-
2278
- /* Accordion animation */
2279
- /* https://nerdy.dev/open-and-close-transitions-for-the-details-element */
2280
- @media (prefers-reduced-motion: no-preference) {
2281
- interpolate-size: allow-keywords;
2282
- }
2283
-
2284
- &::details-content {
2285
- block-size: 0;
2286
- opacity: 0;
2287
- overflow-y: clip;
2288
- transition: content-visibility var(--_accordion-transition-time)
2289
- allow-discrete,
2290
- opacity var(--_accordion-transition-time),
2291
- block-size var(--_accordion-transition-time);
2292
- }
2293
-
2294
- &[open]::details-content {
2295
- block-size: auto;
2296
- opacity: 1;
2297
- }
2298
- /***/
2299
-
2300
- & > summary {
2301
- background-color: inherit;
2302
- cursor: pointer;
2303
- font-weight: 700;
2304
- padding-block: var(--size-3);
2305
- user-select: none;
2306
- }
2307
-
2308
- /* Custom arrow */
2309
- /* summary {
2310
- align-items: center;
2311
- background-color: inherit;
2312
- cursor: pointer;
2313
- display: flex;
2314
- justify-content: space-between;
2315
- list-style: none;
2316
- padding-block: var(--size-3);
2317
- user-select: none;
2318
-
2319
- &::marker,
2320
- &::-webkit-details-marker {
2321
- display: none;
2322
- }
2323
-
2324
- svg {
2325
- transition: rotate 0.2s ease-out;
2326
- }
2327
- }
2328
-
2329
- &[open] > summary svg {
2330
- rotate: 180deg;
2331
- } */
2332
-
2333
- & > .content {
2334
- margin-block-start: 0;
2335
- padding-block: var(--size-2) var(--size-3);
2336
- }
2337
-
2338
- & > .actions {
2339
- display: flex;
2340
- gap: var(--size-1);
2341
- justify-content: end;
2342
- margin-block-start: var(--size-3);
2343
- padding-block-end: var(--size-1);
2344
- padding-inline: var(--size-3) var(--size-1);
2345
- }
2346
-
2347
- /* Variants */
2348
- &.card,
2349
- &.text {
2350
- --_bg-color: transparent;
2351
- --_margin-inline: var(--size-1);
2352
- }
2353
-
2354
- &.elevated {
2355
- --_bg-color: var(--surface-elevated);
2356
- --_margin-inline: 0;
2357
- --_shadow: var(--shadow-2);
2358
- }
2359
-
2360
- &.outlined {
2361
- --_bg-color: var(--surface-default);
2362
- --_margin-inline: 0;
2363
- border: 1px solid var(--border-color);
2364
- }
2365
-
2366
- &.tonal {
2367
- --_bg-color: var(--surface-tonal);
2368
- --_margin-inline: 0;
2369
- }
2370
-
2371
- &:where(.elevated, .outlined, .tonal) > * {
2372
- padding-inline: var(--size-3);
2373
- }
2374
- }
2375
-
2376
- /* Accordion group */
2377
- :where(.card:has(details)) {
2378
- --_gutter-color: var(--border-color);
2379
-
2380
- display: block;
2381
-
2382
- & > .content {
2383
- margin-block: 0;
2384
- padding: 0;
2385
- }
2386
-
2387
- &.card,
2388
- &.text {
2389
- &:not(.tonal, .outlined, .elevated) {
2390
- summary {
2391
- padding-inline: 0;
2392
- }
2393
- }
2394
- }
2395
-
2396
- details {
2397
- --_margin-inline: 0;
2398
-
2399
- border: 0;
2400
- box-shadow: none;
2401
-
2402
- & > * {
2403
- padding-inline: var(--size-3);
2404
- }
2405
-
2406
- /* Border between accordion items */
2407
- & + & {
2408
- summary {
2409
- border-radius: 0;
2410
- border-block-start: 1px solid var(--_gutter-color);
2411
- }
2412
- }
2413
-
2414
- /* First item */
2415
- &:first-of-type {
2416
- border-start-start-radius: var(--border-radius, 0.25rem);
2417
- border-start-end-radius: var(--border-radius, 0.25rem);
2418
- summary {
2419
- border-start-start-radius: var(--border-radius, 0.25rem);
2420
- border-start-end-radius: var(--border-radius, 0.25rem);
2421
- }
2422
- }
2423
-
2424
- /* Last item */
2425
- &:last-of-type {
2426
- border-end-start-radius: var(--border-radius, 0.25rem);
2427
- border-end-end-radius: var(--border-radius, 0.25rem);
2428
- summary {
2429
- border-end-start-radius: var(--border-radius, 0.25rem);
2430
- border-end-end-radius: var(--border-radius, 0.25rem);
2431
- }
2432
- }
2433
- }
2434
- }
2435
- }
2436
- @layer components.extended {
2437
- /*
2438
- Lists meant to be used stand-alone or as part of Select elements
2439
-
2440
- Intended use-case:
2441
- - ul.list > li
2442
- - .select > .list > option
2443
- */
2444
- :where(.list) {
2445
- --_bg-color: light-dark(var(--gray-1), var(--gray-15));
2446
-
2447
- background-color: var(--_bg-color);
2448
- list-style: none;
2449
- padding: var(--size-2) 0;
2450
-
2451
- @media (pointer: coarse) {
2452
- &,
2453
- * {
2454
- user-select: none;
2455
- }
2456
- }
2457
-
2458
- /* Borders on all list items */
2459
- &.bordered {
2460
- :where(li + li, option + option) {
2461
- margin-block-start: var(--size-3);
2462
- &::before {
2463
- block-size: 1px;
2464
- border-block-start: 1px solid var(--border-color);
2465
- content: "";
2466
- display: block;
2467
- inline-size: 100%;
2468
- inset: calc(-1 * var(--size-2)) 0 auto 0;
2469
- position: absolute;
2470
- visibility: visible; /* override select > option:before style */
2471
- }
2472
- }
2473
- }
2474
-
2475
- /* Dense - less gaps and spacing */
2476
- &.dense {
2477
- :where(li, option) {
2478
- gap: var(--size-2);
2479
- min-block-size: var(--size-7);
2480
- padding: var(--size-1) var(--size-2);
2481
-
2482
- &.border-top {
2483
- margin-block-start: var(--size-2);
2484
- &::before {
2485
- inset: calc(-1 * var(--size-1)) 0 auto 0;
2486
- }
2487
- }
2488
-
2489
- /* Clickable list item */
2490
- &:has(> a, > button, > label) {
2491
- min-block-size: auto;
2492
- padding: 0;
2493
- }
2494
-
2495
- & > :where(a, button, label) {
2496
- gap: var(--size-2);
2497
- min-block-size: var(--size-7);
2498
- padding: var(--size-1) var(--size-2);
2499
- }
2500
-
2501
- /* Checkbox / Radio */
2502
- & > label {
2503
- .end {
2504
- padding-inline-end: 0.125rem;
2505
- }
2506
- }
2507
-
2508
- /* Leading and trailing content */
2509
- .start,
2510
- .end {
2511
- .avatar {
2512
- max-inline-size: var(--size-6);
2513
- }
2514
-
2515
- .icon-button,
2516
- svg {
2517
- max-inline-size: var(--size-4);
2518
- }
2519
-
2520
- .checkbox,
2521
- .radio {
2522
- max-inline-size: var(--size-3);
2523
- }
2524
- }
2525
- }
2526
- }
2527
-
2528
- /* Gutterless */
2529
- &.gutterless {
2530
- :where(li, option) {
2531
- padding-inline: 0;
2532
-
2533
- & > :where(a, button, label) {
2534
- padding-inline: 0;
2535
- }
2536
- }
2537
- }
2538
-
2539
- /* List item */
2540
- :where(li, option, [role="group"] > label) {
2541
- align-items: center;
2542
- background: var(--_bg-color) var(--ripple, none);
2543
- display: flex;
2544
- font-size: var(--font-size-sm);
2545
- gap: var(--size-3);
2546
- isolation: isolate;
2547
- min-block-size: 40px;
2548
- padding: var(--size-2) var(--size-3);
2549
- position: relative;
2550
-
2551
- &::before {
2552
- display: none; /* removing checkmark from option */
2553
- }
2554
-
2555
- * {
2556
- font-size: inherit;
2557
- }
2558
-
2559
- /* Clickable list item */
2560
- &:has(> a, > button, > label) {
2561
- background: transparent;
2562
- display: block;
2563
- min-block-size: auto;
2564
- padding: 0;
2565
- }
2566
-
2567
- /* Select option */
2568
- &:where(option) {
2569
- align-items: center;
2570
- background-color: var(--_bg-color);
2571
- color: inherit;
2572
- cursor: pointer;
2573
- display: flex;
2574
- gap: var(--size-3);
2575
- inline-size: 100%;
2576
- margin: 0;
2577
- min-block-size: 40px;
2578
- padding: var(--size-2) var(--size-3);
2579
- text-align: start;
2580
- text-decoration: none;
2581
- z-index: 0;
2582
-
2583
- &:hover {
2584
- background-color: light-dark(var(--gray-2), var(--gray-14));
2585
- }
2586
-
2587
- &:checked {
2588
- background-color: oklch(from var(--primary) l c h / 30%);
2589
- }
2590
- }
2591
-
2592
- & > a,
2593
- & > button,
2594
- & > label {
2595
- align-items: center;
2596
- background: var(--_bg-color) var(--ripple, none);
2597
- color: inherit;
2598
- cursor: pointer;
2599
- display: flex;
2600
- gap: var(--size-3);
2601
- inline-size: 100%;
2602
- margin: 0;
2603
- min-block-size: 40px;
2604
- outline-offset: -3px;
2605
- padding: var(--size-2) var(--size-3);
2606
- text-align: start;
2607
- text-decoration: none;
2608
- z-index: 0;
2609
-
2610
- /*** Ripple effect */
2611
- background-position: center;
2612
- transition: background var(--button-ripple-duration);
2613
- &:where(:not(:active):hover) {
2614
- --ripple: radial-gradient(circle, transparent 1%, var(--_bg-color) 1%)
2615
- center/15000%;
2616
- }
2617
-
2618
- &:where(:hover:active) {
2619
- background-size: var(--button-ripple-size);
2620
- transition: background 0s;
2621
- }
2622
-
2623
- &:hover {
2624
- background-color: light-dark(var(--gray-2), var(--gray-14));
2625
- }
2626
-
2627
- /*** Remove ripple effect when trailing button is clicked */
2628
- &:has(.end:hover) {
2629
- &:where(:not(:active):hover) {
2630
- --ripple: none;
2631
- }
2632
- }
2633
- }
2634
-
2635
- /* Checkbox / Radio / Switch */
2636
- & > label {
2637
- .end {
2638
- padding-inline-end: var(--size-1);
2639
- }
2640
-
2641
- &:where(.checkbox, .radio) {
2642
- inline-size: 100%;
2643
- }
2644
-
2645
- &.switch {
2646
- --_dot-size: 0.75rem;
2647
- --_track-height: var(--size-4);
2648
- --_track-width: 2.5rem;
2649
- }
2650
- }
2651
-
2652
- /* Video */
2653
- &:has(video) {
2654
- padding: 0.75rem var(--size-3) 0.75rem 0;
2655
- }
2656
-
2657
- /* Border between list items */
2658
- &.border-top {
2659
- margin-block-start: var(--size-3);
2660
- &::before {
2661
- block-size: 1px;
2662
- border-block-start: 1px solid var(--border-color);
2663
- content: "";
2664
- display: block;
2665
- inline-size: 100%;
2666
- inset: calc(-1 * var(--size-2)) 0 auto 0;
2667
- position: absolute;
2668
- }
2669
- }
2670
-
2671
- /* Text */
2672
- .text {
2673
- flex: 1;
2674
- line-height: 1.6;
2675
-
2676
- :where(h1, h2, h3, h4, h5, h6, p, span) {
2677
- color: inherit;
2678
- font-weight: 400;
2679
- }
2680
-
2681
- p + p {
2682
- font-size: var(--font-size-xs);
2683
- }
2684
- }
2685
-
2686
- /* Leading content */
2687
- .start {
2688
- align-self: center;
2689
- align-items: center;
2690
- display: grid;
2691
- z-index: 1;
2692
-
2693
- &:has(svg) {
2694
- max-inline-size: var(--size-5);
2695
- }
2696
-
2697
- svg {
2698
- padding-block-start: 0.125rem;
2699
- }
2700
-
2701
- img {
2702
- aspect-ratio: 1;
2703
- inline-size: 56px;
2704
- object-fit: cover;
2705
- }
2706
-
2707
- video {
2708
- aspect-ratio: 16/9;
2709
- block-size: 64px;
2710
- object-fit: cover;
2711
- }
2712
- }
2713
-
2714
- /* Trailing content */
2715
- .end {
2716
- align-items: center;
2717
- display: flex;
2718
- font-size: var(--font-size-xs);
2719
- text-align: end;
2720
- z-index: 1;
2721
-
2722
- &:not(:has(a, button, input)) {
2723
- pointer-events: none;
2724
- }
2725
-
2726
- kbd {
2727
- background-color: transparent;
2728
- border: 0;
2729
- color: inherit;
2730
- opacity: 0.6;
2731
- }
2732
-
2733
- svg {
2734
- max-inline-size: var(--size-5);
2735
- inline-size: 100%;
2736
- }
2737
- }
2738
-
2739
- /* Inset */
2740
- &.inset {
2741
- .text {
2742
- padding-inline-start: calc(var(--size-5) + var(--size-3));
2743
- }
2744
-
2745
- /* Safety measure so it won't look bad if there for some reason should exist a leading element inside. */
2746
- .start {
2747
- display: none;
2748
- }
2749
- }
2750
- }
2751
- }
2752
- }
2753
- @layer components.extended {
2754
- :where(.alert) {
2755
- --_bg-color: var(--surface-tonal);
2756
- --_border-color: var(--surface-tonal);
2757
- --_color: var(--text-color-1);
2758
-
2759
- &.outlined {
2760
- --_bg-color: var(--surface-default);
2761
- --_border-color: var(--border-color);
2762
- --_color: var(--text-color-1);
2763
- }
2764
-
2765
- background-color: var(--_bg-color);
2766
- border: 1px solid var(--_border-color);
2767
- border-radius: var(--border-radius);
2768
- color: var(--_color);
2769
- padding: var(--size-3);
2770
-
2771
- & > .content {
2772
- display: grid;
2773
- gap: var(--size-2);
2774
- font-size: var(--font-size-sm);
2775
-
2776
- h1,
2777
- h2,
2778
- h3,
2779
- h4,
2780
- h5,
2781
- h6 {
2782
- color: inherit;
2783
- font-size: var(--font-size-md);
2784
- font-weight: 600;
2785
-
2786
- * {
2787
- font-size: inherit;
2788
- }
2789
- }
2790
- }
2791
-
2792
- /* Colors */
2793
- &.error,
2794
- &.ok,
2795
- &.warning {
2796
- --_bg-color: var(--color-4);
2797
- --_border-color: var(--color-9);
2798
- --_color: var(--color-15);
2799
-
2800
- &.outlined {
2801
- --_bg-color: var(--surface-default);
2802
- --_border-color: var(--color-9);
2803
- --_color: light-dark(var(--color-15), var(--color-1));
2804
- }
2805
-
2806
- svg {
2807
- margin-block-start: 0.15rem;
2808
- stroke: var(--color-9);
2809
- }
2810
- }
2811
-
2812
- /* Links
2813
- * Can't make sure contrast will be acceptable (yet) so we use the current text color instead.
2814
- */
2815
- &:not(.outlined) {
2816
- a[href] {
2817
- color: inherit;
2818
-
2819
- &:hover {
2820
- color: var(--primary);
2821
- }
2822
- }
2823
- }
2824
-
2825
- /* Icon */
2826
- &:has(svg) {
2827
- display: grid;
2828
- gap: var(--size-3);
2829
- grid-template-columns: var(--size-4) 1fr;
2830
-
2831
- svg {
2832
- margin-block-start: 0.15rem;
2833
- stroke: currentColor;
2834
- }
2835
- }
2836
- }
2837
- }
2838
- @layer components.extended {
2839
- :where(dialog) {
2840
- margin-block-start: 15%; /* vertical alignment */
2841
- padding-block: 0;
2842
- pointer-events: none;
2843
-
2844
- &::backdrop {
2845
- background-color: rgba(0, 0, 0, 0.5);
2846
- backdrop-filter: blur(5px);
2847
-
2848
- @media (prefers-reduced-motion: reduce) {
2849
- backdrop-filter: none;
2850
- }
2851
- }
2852
-
2853
- &:not([open]) {
2854
- display: none;
2855
- }
2856
-
2857
- &[open] {
2858
- pointer-events: all;
2859
- }
2860
-
2861
- .actions {
2862
- justify-content: end;
2863
- padding-inline: var(--size-3) var(--size-1);
2864
- }
2865
-
2866
- /* Animation */
2867
- /* There's no close animation, intentionally */
2868
- opacity: 0;
2869
-
2870
- &[open] {
2871
- opacity: 1;
2872
- transition: display 0.2s allow-discrete,
2873
- margin-block-start 0.3s var(--ease-1), overlay 0.2s allow-discrete,
2874
- opacity 0.2s var(--ease-out-1);
2875
-
2876
- @starting-style {
2877
- opacity: 0;
2878
- }
2879
- }
2880
-
2881
- @media (prefers-reduced-motion: no-preference) {
2882
- margin-block-start: 17%;
2883
- &[open] {
2884
- margin-block-start: 15%;
2885
-
2886
- @starting-style {
2887
- margin-block-start: 17%;
2888
- }
2889
- }
2890
- }
2891
- }
2892
-
2893
- :where(html:has(dialog[open])) {
2894
- overflow: hidden;
2895
- }
2896
- }
2897
- @layer components.extended {
2898
- :where(.snackbar) {
2899
- align-items: center;
2900
- /* Inverse surface-filled */
2901
- background-color: light-dark(var(--gray-15), var(--gray-2));
2902
- border-radius: var(--border-radius);
2903
- box-shadow: var(--shadow-2);
2904
- color: var(--text-color-1-contrast);
2905
- display: flex;
2906
- font-size: var(--font-size-sm);
2907
- gap: var(--size-3);
2908
- inset-block: auto var(--size-3);
2909
- inset-inline: var(--size-3) auto;
2910
- justify-content: space-between;
2911
- min-inline-size: min(100%, 37ch);
2912
- padding: var(--size-2) var(--size-3);
2913
- position: fixed;
2914
- inline-size: calc(100% - var(--size-6, 1.75rem));
2915
- z-index: 100;
2916
-
2917
- &::backdrop {
2918
- display: none;
2919
- }
2920
-
2921
- * {
2922
- word-break: break-word;
2923
- }
2924
-
2925
- /* Global positioning (in relation to the window) */
2926
- /*** Default (end-start) */
2927
- inset-block: auto var(--size-3);
2928
- inset-inline: 50% 0;
2929
- translate: -50% 0;
2930
-
2931
- &.start-start,
2932
- &.start-center,
2933
- &.start-end {
2934
- inset-block: var(--size-3) auto;
2935
- }
2936
-
2937
- /* TODO use @custom-media instead? */
2938
- @container (width > 480px) {
2939
- /* Default (end-start) */
2940
- inset-block: auto var(--size-7, 2rem);
2941
- inset-inline: var(--size-7, 2rem) auto;
2942
- translate: revert;
2943
- inline-size: fit-content;
2944
-
2945
- &.end-start,
2946
- &.end-end,
2947
- &.start-start,
2948
- &.start-end {
2949
- translate: revert;
2950
- }
2951
-
2952
- &.start-start {
2953
- inset-block: var(--size-7, 2rem) auto;
2954
- inset-inline: var(--size-7, 2rem) auto;
2955
- }
2956
- &.start-center {
2957
- inset-block: var(--size-7, 2rem) auto;
2958
- inset-inline: 50% 0;
2959
- translate: -50% 0;
2960
- }
2961
- &.start-end {
2962
- inset-block: var(--size-7, 2rem) auto;
2963
- inset-inline: auto var(--size-7, 2rem);
2964
- }
2965
- &.end-start {
2966
- inset-block-end: var(--size-7, 2rem);
2967
- inset-inline: var(--size-7, 2rem) auto;
2968
- }
2969
- &.end-center {
2970
- inset-block: auto var(--size-7, 2rem);
2971
- inset-inline: 50% 0;
2972
- translate: -50% 0;
2973
- }
2974
- &.end-end {
2975
- inset-block: auto var(--size-7, 2rem);
2976
- inset-inline: auto var(--size-7, 2rem);
2977
- }
2978
- }
2979
-
2980
- /* Absolute positioning */
2981
- &.absolute {
2982
- position: absolute;
2983
- }
2984
-
2985
- /* Actions */
2986
- .actions {
2987
- align-items: center;
2988
- display: flex;
2989
- flex-shrink: 0;
2990
- gap: var(--size-3);
2991
- padding-inline: 0;
2992
-
2993
- button {
2994
- /* Inverse hover and active backgrounds */
2995
- &:where(:not([disabled])) {
2996
- &:where(:not(:active):hover) {
2997
- --_bg-color: light-dark(
2998
- color-mix(in oklch, white 40%, black),
2999
- color-mix(in oklch, white 85%, black)
3000
- );
3001
- }
3002
-
3003
- &:where(:hover:active) {
3004
- --_bg-color: light-dark(
3005
- color-mix(in oklch, white 45%, black),
3006
- color-mix(in oklch, white 80%, black)
3007
- );
3008
- }
3009
- }
3010
- }
3011
-
3012
- button:not(:has(svg)) {
3013
- border-radius: var(--border-radius);
3014
- font-size: inherit;
3015
- max-block-size: var(--size-6, 1.5rem);
3016
- padding: 1ex;
3017
- }
3018
-
3019
- button:has(svg) {
3020
- color: inherit;
3021
- max-inline-size: var(--size-6, 1.75rem);
3022
- margin: var(--size-00);
3023
- padding: var(--size-1);
3024
- }
3025
- }
3026
-
3027
- /* Animations */
3028
- opacity: 0;
3029
- transition: display 0.075s allow-discrete, overlay 0.075s allow-discrete,
3030
- opacity 0.075s var(--ease-out-1);
3031
-
3032
- &:popover-open,
3033
- &:popover-open::backdrop,
3034
- &.visible {
3035
- opacity: 1;
3036
- transition: display 0.25s allow-discrete, overlay 0.25s allow-discrete,
3037
- opacity 0.25s var(--ease-out-1);
3038
-
3039
- @starting-style {
3040
- opacity: 0;
3041
- }
3042
- }
3043
- }
3044
- }
3045
- @layer components.extended {
3046
- /* Common styling for checkbox, radio and switch groups */
3047
- :where(fieldset.field-group) {
3048
- border: 0;
3049
- border-radius: 0;
3050
- gap: 0;
3051
- padding: 0;
3052
- z-index: 1;
3053
-
3054
- legend {
3055
- color: var(--text-color-2);
3056
- padding: 0 1ex 0 0;
3057
- }
3058
-
3059
- /* Disabled */
3060
- &[disabled] {
3061
- cursor: not-allowed;
3062
- opacity: 0.64;
3063
- user-select: none;
3064
-
3065
- input {
3066
- cursor: not-allowed;
3067
- }
3068
- }
3069
-
3070
- /* Validation */
3071
- &.error {
3072
- legend,
3073
- .supporting-text {
3074
- color: var(--color-9);
3075
- }
3076
- }
3077
-
3078
- /* Required */
3079
- &:has([required]) {
3080
- &:not(:has(input:where([type="radio"], [type="checkbox"]):checked)) {
3081
- legend {
3082
- position: relative;
3083
-
3084
- &::after {
3085
- color: var(--red);
3086
- content: "*";
3087
- inset: 0 -0.25ex auto auto;
3088
- position: absolute;
3089
- }
3090
- }
3091
- }
3092
- }
3093
- :where(.radio, .checkbox, .switch) .label:after {
3094
- display: none;
3095
- }
3096
-
3097
- /* Supporting text */
3098
- .supporting-text {
3099
- color: var(--text-color-2);
3100
- font-size: var(--font-size-xs);
3101
- line-height: 1.5;
3102
- z-index: 1;
3103
- }
3104
-
3105
- /* Fields */
3106
- .fields {
3107
- display: flex;
3108
- flex-direction: column;
3109
- gap: var(--size-2);
3110
-
3111
- * ~ & {
3112
- padding: var(--size-2) 0;
3113
- }
3114
- }
3115
-
3116
- :last-child {
3117
- padding-block-end: 0;
3118
- }
3119
-
3120
- /* Directions */
3121
- &.row {
3122
- .fields {
3123
- flex-direction: row;
3124
- }
3125
- }
3126
- }
3127
- }
3128
- @layer components.extended {
3129
- /*
3130
- - Common styling for input, textarea and select
3131
- - Form related styles such as: label, supporting text, error handling
3132
- */
3133
- :where(.field) {
3134
- --_accent-color: var(--primary);
3135
- --_bg-color: var(--surface-default);
3136
- --_border-color: var(--field-border-color);
3137
- --_field-padding-block: 0.75rem;
3138
- --_field-padding-inline: var(--size-2);
3139
- --_filled-border-color: var(--text-color-1);
3140
- --_height: var(--field-size);
3141
- --_label-color: var(--text-color-2);
3142
- --_supporting-text-color: var(--text-color-2);
3143
-
3144
- display: grid;
3145
- position: relative;
3146
-
3147
- /* Input/Select base */
3148
- :where(& input, & textarea, & select) {
3149
- background-color: var(--_bg-color);
3150
- block-size: var(--_height);
3151
- border-radius: var(--field-border-radius);
3152
- border: var(--field-border-width) solid var(--_border-color);
3153
- color: var(--text-color-1);
3154
- font-family: var(--font-sans);
3155
- font-size: var(--font-size-1);
3156
- grid-column: 1/-1;
3157
- grid-row: 2;
3158
- inline-size: 100%;
3159
- line-height: var(--font-lineheight-1);
3160
- min-inline-size: 0;
3161
- padding: var(--_field-padding-block) var(--_field-padding-inline);
3162
-
3163
- @media (prefers-reduced-motion: no-preference) {
3164
- transition: border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
3165
- padding-block 0.2s var(--ease-3);
3166
- }
3167
- }
3168
-
3169
- /* Required/Invalid */
3170
- &:has(
3171
- :not(:placeholder-shown):invalid,
3172
- :where(
3173
- :placeholder-shown,
3174
- option[value=""]:not(:checked),
3175
- option:checked:not([value=""])
3176
- ):required
3177
- ) {
3178
- .label:after {
3179
- color: var(--red);
3180
- content: "*";
3181
- margin: -0.25em auto auto 0.25em;
3182
- }
3183
- }
3184
-
3185
- /* File */
3186
- &:has(input[type="file"]) {
3187
- cursor: pointer;
3188
-
3189
- input {
3190
- align-self: flex-start;
3191
- block-size: var(--_height);
3192
- box-shadow: none;
3193
- color: var(--text-color-1);
3194
- cursor: inherit;
3195
- max-inline-size: 100%;
3196
- padding: 0;
3197
- transition: font-size 0.2s var(--ease-3);
3198
-
3199
- &::-webkit-file-upload-button,
3200
- &::file-selector-button {
3201
- background-color: var(--surface-tonal);
3202
- border: none;
3203
- block-size: calc(100% - var(--size-2) * 2);
3204
- border-radius: var(--field-border-radius);
3205
- cursor: pointer;
3206
- margin-inline-end: 1ex;
3207
- margin-block-start: var(--size-2);
3208
- margin-inline-start: var(--size-2);
3209
- }
3210
- }
3211
-
3212
- /* Variants */
3213
- &.filled {
3214
- input {
3215
- &::-webkit-file-upload-button,
3216
- &::file-selector-button {
3217
- background-color: var(--surface-default);
3218
- block-size: calc(100% - var(--size-2) * 2);
3219
- border-radius: var(--field-border-radius);
3220
- cursor: pointer;
3221
- margin-block-start: var(--size-2);
3222
- }
3223
- }
3224
- }
3225
-
3226
- /* Sizes */
3227
- &.small {
3228
- input {
3229
- font-size: var(--font-size-sm);
3230
- &::-webkit-file-upload-button,
3231
- &::file-selector-button {
3232
- block-size: calc(100% - var(--size-2));
3233
- margin-block-start: var(--size-1);
3234
- }
3235
- }
3236
- }
3237
- }
3238
-
3239
- /* Autosuggest */
3240
- &:has(input[list]) {
3241
- .label {
3242
- /* Make sure chevron is visible */
3243
- inline-size: calc(100% - var(--size-6));
3244
- }
3245
- }
3246
-
3247
- /* Select */
3248
- &:has(select) {
3249
- .label {
3250
- /* Make sure chevron is visible */
3251
- inline-size: calc(100% - var(--size-6));
3252
- }
3253
- }
3254
-
3255
- /* Experimental Select */
3256
- &:has(select button) {
3257
- select {
3258
- padding: 0;
3259
-
3260
- button {
3261
- outline: 0;
3262
- padding: var(--_field-padding-block) var(--size-8)
3263
- var(--_field-padding-block) var(--_field-padding-inline);
3264
- }
3265
- }
3266
- }
3267
-
3268
- /* Non-experimental Select */
3269
- &:has(select):not(:has(button)) {
3270
- select {
3271
- padding: var(--_field-padding-block) var(--size-8)
3272
- var(--_field-padding-block) var(--_field-padding-inline);
3273
- }
3274
- }
3275
-
3276
- /* Input - color */
3277
- &:has(input[type="color"]) {
3278
- input {
3279
- appearance: none;
3280
- background: none;
3281
- block-size: var(--_height);
3282
- inline-size: var(--_height);
3283
- overflow: hidden;
3284
- padding: 0;
3285
-
3286
- &::-webkit-color-swatch {
3287
- border: none;
3288
- }
3289
-
3290
- &::-webkit-color-swatch-wrapper {
3291
- padding: 0;
3292
- }
3293
- }
3294
- }
3295
-
3296
- /* Element states */
3297
- &:hover {
3298
- &:not(.error) {
3299
- :where(input, textarea, select) {
3300
- --_border-color: var(--text-color-1);
3301
- }
3302
- }
3303
- }
3304
-
3305
- &:focus-within {
3306
- & input,
3307
- & textarea,
3308
- & select {
3309
- border-color: var(--_accent-color);
3310
- outline-offset: -2px;
3311
- outline: 2px solid var(--_accent-color);
3312
- }
3313
- }
3314
-
3315
- /* Label */
3316
- .label {
3317
- font-size: var(--font-size-sm);
3318
- grid-column: 1/-1;
3319
- grid-row: 1;
3320
- }
3321
-
3322
- /* Supporting text */
3323
- .supporting-text {
3324
- color: var(--_supporting-text-color);
3325
- font-size: var(--font-size-xs);
3326
- grid-column: 1/-1;
3327
- grid-row: 3;
3328
- line-height: 1.5;
3329
- }
3330
-
3331
- /* Auto-fit */
3332
- &.auto-fit {
3333
- inline-size: auto;
3334
-
3335
- :where(& input, & textarea) {
3336
- field-sizing: content;
3337
- inline-size: auto;
3338
- }
3339
- }
3340
-
3341
- /* Validation */
3342
- &.error {
3343
- --_accent-color: var(--color-9);
3344
- --_border-color: var(--color-9);
3345
- --_filled-border-color: var(--color-9);
3346
- --_label-color: var(--color-9);
3347
- --_supporting-text-color: var(--color-9);
3348
- }
3349
-
3350
- /*
3351
- * Variant: Filled
3352
- */
3353
- &.filled {
3354
- --_bg-color: var(--surface-tonal);
3355
-
3356
- &:not(:has([disabled], :has(input[type="color"]))) {
3357
- /* Hover */
3358
- &:hover {
3359
- --_bg-color: light-dark(
3360
- oklch(from var(--surface-tonal) calc(l * 0.93) c h),
3361
- oklch(from var(--surface-tonal) calc(l * 1.1) c h)
3362
- );
3363
- }
3364
- }
3365
- }
3366
-
3367
- /* Disabled */
3368
- &:where(:has([disabled])) {
3369
- &::before {
3370
- display: none;
3371
- }
3372
- :where(input, textarea, select) {
3373
- cursor: not-allowed;
3374
- opacity: 0.7;
3375
-
3376
- * {
3377
- pointer-events: none;
3378
- }
3379
- }
3380
- }
3381
-
3382
- /* Read-only */
3383
- &:where(:has([readonly])) {
3384
- &::before {
3385
- display: none;
3386
- }
3387
- :where(input, textarea, select) {
3388
- cursor: not-allowed;
3389
-
3390
- * {
3391
- pointer-events: none;
3392
- }
3393
- }
3394
- }
3395
-
3396
- /* Sizes */
3397
- &.small {
3398
- --_field-padding-block: var(--size-2);
3399
- --_height: var(--field-size-small);
3400
-
3401
- &:has(input[type="color"]) {
3402
- .label {
3403
- line-height: 1.5;
3404
- }
3405
- }
3406
- }
3407
- }
3408
- }
3409
- @layer components.extended {
3410
- :where(.field > select) {
3411
- position: relative;
3412
-
3413
- /* Default arrow */
3414
- &::picker-icon {
3415
- block-size: 0;
3416
- border-block-start: 5px solid;
3417
- border-inline: 5px solid transparent;
3418
- color: currentColor;
3419
- content: "";
3420
- inline-size: 0;
3421
- inset: 50% var(--size-3) auto auto;
3422
- pointer-events: none;
3423
- position: absolute;
3424
- translate: 0 -50%;
3425
- }
3426
-
3427
- &:open {
3428
- &::picker-icon {
3429
- rotate: 180deg;
3430
- }
3431
- }
3432
-
3433
- /* Select popover */
3434
- &::picker(select) {
3435
- /* Animation on-stage styles */
3436
- border: 0;
3437
- box-shadow: var(--shadow-2);
3438
- opacity: 1;
3439
- padding: 0;
3440
- scale: 1;
3441
-
3442
- /* Animation starting styles */
3443
- @starting-style {
3444
- opacity: 0;
3445
- transform: scale(0.9);
3446
- }
3447
-
3448
- @media (prefers-reduced-motion: no-preference) {
3449
- transition: display 0.2s allow-discrete, opacity 0.2s var(--ease-3),
3450
- overlay 0.2s allow-discrete, scale 0.2s var(--ease-3);
3451
- }
3452
- }
3453
-
3454
- /* Animation off-stage styles */
3455
- &:not(:open)::picker(select) {
3456
- opacity: 0;
3457
- scale: 0.9;
3458
- }
3459
-
3460
- button {
3461
- background-color: transparent;
3462
- display: flex;
3463
- inline-size: 100%;
3464
- margin: 0;
3465
- position: relative;
3466
-
3467
- selectedcontent {
3468
- overflow: hidden;
3469
- text-overflow: ellipsis;
3470
- white-space: nowrap;
3471
- }
3472
- }
3473
-
3474
- .list {
3475
- /* Groups */
3476
- [role="group"] {
3477
- label {
3478
- background-color: light-dark(var(--gray-3), var(--gray-13));
3479
- color: light-dark(
3480
- oklch(from var(--text-color-1) calc(l * 0.75) c h),
3481
- oklch(from var(--text-color-1) calc(l * 1.25) c h)
3482
- );
3483
- font-weight: 500;
3484
- overflow: hidden;
3485
- padding-inline: var(--size-2);
3486
- text-overflow: ellipsis;
3487
- white-space: nowrap;
3488
- }
3489
-
3490
- &:not(:first-child),
3491
- option:first-of-type {
3492
- margin-block-start: var(--size-2);
3493
- }
3494
-
3495
- option:last-of-type,
3496
- &:last-child {
3497
- option:last-of-type {
3498
- margin-block-end: 0;
3499
- }
3500
- }
3501
- }
3502
-
3503
- /* Option */
3504
- option {
3505
- /* Checkmark */
3506
- /* TODO - checkmark should be the final version of the checkmark API. Follow the development of this and remove redundant psuedo stuff. */
3507
- &::check {
3508
- display: none;
3509
- }
3510
- &::checkmark {
3511
- display: none;
3512
- }
3513
- &::before {
3514
- display: none;
3515
- }
3516
-
3517
- &:focus-visible {
3518
- outline-offset: -1px;
3519
- }
3520
- }
3521
- }
3522
- }
3523
-
3524
- :where(.field:has(> select)) {
3525
- /* Size */
3526
- &.small {
3527
- button {
3528
- padding-inline: var(--size-2) var(--size-7);
3529
-
3530
- &::after {
3531
- inset-inline-end: var(--size-2);
3532
- }
3533
- }
3534
- }
3535
-
3536
- /*
3537
- * Non-experimental Select
3538
- *
3539
- * Hack to get the arrow working. Pseudo elements aren't allowed on the `<select>` element, so need to add it on the `.field` class instead. Noting this down if an `:after` element would be needed on a `.field`.
3540
- */
3541
- &:not(:has(button)) {
3542
- select {
3543
- appearance: none;
3544
- }
3545
-
3546
- /* Arrow */
3547
- &::after {
3548
- align-self: center;
3549
- block-size: 0;
3550
- border-block-start: 5px solid;
3551
- border-inline: 5px solid transparent;
3552
- content: "";
3553
- display: inline-block;
3554
- flex-shrink: 0;
3555
- grid-column: 1/-1;
3556
- grid-row: 2;
3557
- inline-size: 0;
3558
- inset-inline-end: var(--size-3);
3559
- justify-self: end;
3560
- pointer-events: none;
3561
- position: relative;
3562
- }
3563
- }
3564
- }
3565
-
3566
- select:has(button),
3567
- ::picker(select) {
3568
- appearance: base-select;
3569
- }
3570
- }
3571
- @layer components.extended {
3572
- :where(
3573
- .field:has(
3574
- :where(
3575
- input[type="date"],
3576
- input[type="datetime-local"],
3577
- input[type="email"],
3578
- input[type="month"],
3579
- input[type="number"],
3580
- input[type="password"],
3581
- input[type="search"],
3582
- input[type="tel"],
3583
- input[type="text"],
3584
- input[type="time"],
3585
- input[type="url"],
3586
- input[type="week"]
3587
- )
3588
- )
3589
- ) {
3590
- /* Sizes */
3591
- &.small {
3592
- input {
3593
- padding-inline: var(--size-2);
3594
- }
3595
- }
3596
- }
3597
-
3598
- /* Autosuggest */
3599
- :where(.field:has(input[list])) {
3600
- /* Hide native arrow */
3601
- input::-webkit-calendar-picker-indicator {
3602
- opacity: 0;
3603
- position: absolute;
3604
- cursor: pointer;
3605
- pointer-events: none;
3606
- }
3607
- }
3608
- :where(
3609
- .field:has(input[list]:placeholder-shown),
3610
- .field:has(input[list]):where(:focus-within, :hover)
3611
- ) {
3612
- /* Arrow */
3613
- &::after {
3614
- block-size: 0;
3615
- border-block-start: 5px solid;
3616
- border-inline: 5px solid transparent;
3617
- content: "";
3618
- display: inline-block;
3619
- flex-shrink: 0;
3620
- inline-size: 0;
3621
- inset: 50% var(--size-3) auto auto;
3622
- pointer-events: none;
3623
- position: absolute;
3624
- translate: 0 -50%;
3625
- }
3626
- }
3627
- }
3628
- @layer components.extended {
3629
- :where(.field:has(textarea)) {
3630
- textarea {
3631
- block-size: auto;
3632
- field-sizing: content;
3633
- min-block-size: 5rem;
3634
- resize: vertical;
3635
- }
3636
-
3637
- /* Size */
3638
- &.small {
3639
- textarea {
3640
- min-block-size: var(--_height);
3641
- }
3642
- }
3643
-
3644
- /* Auto-fit */
3645
- &.auto-fit {
3646
- textarea {
3647
- min-block-size: var(--_height);
3648
- resize: both;
3649
- }
3650
- }
3651
- }
3652
- }
3653
- @layer components.extended {
3654
- @scope (.rich-text) to (.not-rich-text) {
3655
- a {
3656
- color: var(--primary);
3657
- cursor: pointer;
3658
- font-size: inherit;
3659
- font-weight: 700;
3660
- line-height: inherit;
3661
- text-decoration: underline;
3662
- text-decoration-color: var(--primary);
3663
- text-underline-offset: 2px;
3664
-
3665
- &[href] {
3666
- &:hover,
3667
- &:focus-visible {
3668
- color: var(--primary-light);
3669
- }
3670
- }
3671
- }
3672
-
3673
- /* Blockquote */
3674
- blockquote {
3675
- font-size: inherit;
3676
- line-height: inherit;
3677
- :first-child {
3678
- margin-block-start: 0;
3679
- }
3680
-
3681
- :last-child {
3682
- margin-block-end: 0;
3683
- }
3684
- }
3685
-
3686
- /* Text */
3687
- p {
3688
- font-size: inherit;
3689
- line-height: inherit;
3690
- margin-block: 1.25em;
3691
- }
3692
-
3693
- :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) {
3694
- color: var(--text-color-1);
3695
-
3696
- & + *:not(&) {
3697
- margin-block-start: 0;
3698
- }
3699
- }
3700
-
3701
- h1,
3702
- .h1 {
3703
- font-size: var(--font-size-h1, var(--font-size-7));
3704
- letter-spacing: -0.02em;
3705
- line-height: 1.1111111;
3706
- margin-block: 0 0.8888889em;
3707
- }
3708
-
3709
- h2,
3710
- .h2 {
3711
- font-size: var(--font-size-h2, var(--font-size-5, 2rem));
3712
- letter-spacing: -0.02em;
3713
- line-height: 1.3333333;
3714
- margin-block: 2em 1em;
3715
- }
3716
-
3717
- h3,
3718
- .h3 {
3719
- font-size: var(--font-size-h3, var(--font-size-4, 1.5rem));
3720
- letter-spacing: -0.01em;
3721
- line-height: 1.6;
3722
- margin-block: 1.6em 0.6em;
3723
- }
3724
-
3725
- h4,
3726
- .h4 {
3727
- font-size: var(--font-size-h4, var(--font-size-3, 1.25rem));
3728
- letter-spacing: -0.01em;
3729
- line-height: 1.5;
3730
- margin-block: 1.5em 0.5em;
3731
- }
3732
-
3733
- h5,
3734
- .h5 {
3735
- font-size: var(--font-size-h5, var(--font-size-2, 1.1rem));
3736
- line-height: 1;
3737
- margin-block: 0 var(--size-1);
3738
- }
3739
-
3740
- h6,
3741
- .h6 {
3742
- font-size: var(--font-size-h6, var(--font-size-1, 1rem));
3743
- line-height: 1;
3744
- margin-block: 0 var(--size-1);
3745
- }
3746
-
3747
- /** Overline */
3748
- :where(.overline, hgroup > :where(p, .p):first-of-type:first-child) {
3749
- color: light-dark(
3750
- oklch(from var(--text-color-2) calc(l * 1.25) c h),
3751
- oklch(from var(--text-color-2) calc(l * 0.75) c h)
3752
- );
3753
- font-size: var(--font-size-xs);
3754
- font-weight: 500;
3755
- letter-spacing: 0.06em;
3756
- line-height: 2.5;
3757
- text-transform: uppercase;
3758
- }
3759
-
3760
- hgroup {
3761
- & > p {
3762
- margin: 0;
3763
- }
3764
-
3765
- & > :where(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) {
3766
- margin-block-end: 0.4em;
3767
- }
3768
-
3769
- & + * {
3770
- margin-block-start: 3em;
3771
- }
3772
-
3773
- /* The second p element */
3774
- & > :where(p, .p):last-of-type:last-child:not(:first-child) {
3775
- color: oklch(from currentColor l c h / 75%);
3776
- font-size: var(--font-size-lg);
3777
- line-height: 1.6;
3778
- }
3779
- }
3780
-
3781
- /* Lists */
3782
- ul:not([class]) {
3783
- list-style-type: disc;
3784
- }
3785
-
3786
- ol:not([class]) {
3787
- list-style-type: decimal;
3788
- }
3789
-
3790
- :where(ul, ol):not([class]) {
3791
- display: grid;
3792
- font-size: inherit;
3793
- gap: 0.5em;
3794
- line-height: inherit;
3795
- margin-block-start: 1.25em;
3796
- margin-block-end: 1.25em;
3797
- padding-inline-start: 1.625em;
3798
-
3799
- li {
3800
- padding-inline-start: 0.375em;
3801
- }
3802
- }
3803
-
3804
- /* Nested lists */
3805
- :where(ul ul),
3806
- :where(ul ol),
3807
- :where(ol ul),
3808
- :where(ol ol) {
3809
- margin-block-start: 0.75em;
3810
- margin-block-end: 0.75em;
3811
- }
3812
-
3813
- /* Description lists */
3814
- :where(dl) {
3815
- font-size: inherit;
3816
- line-height: inherit;
3817
- margin-block-start: 1.25em;
3818
- margin-block-end: 1.25em;
3819
-
3820
- dt {
3821
- margin-block-start: 1.25em;
3822
- }
3823
-
3824
- dd {
3825
- margin-block-start: 0.5em;
3826
- padding-inline-start: 1.625em;
3827
- }
3828
- }
3829
-
3830
- /* Figures */
3831
- figure {
3832
- margin-block: 2em;
3833
-
3834
- & > * {
3835
- margin-block: 0;
3836
- }
3837
-
3838
- & figcaption {
3839
- font-size: 0.875em;
3840
- line-height: 1.4285714;
3841
- margin-block-start: 0.8571429em;
3842
- }
3843
- }
3844
-
3845
- /* Remove top margin from first child */
3846
- & > :first-child {
3847
- margin-block-start: 0;
3848
- }
3849
-
3850
- /* Remove bottom margin from last child */
3851
- & > :last-child {
3852
- margin-block-end: 0;
3853
- }
3854
-
3855
- /* Horizontal rules */
3856
- hr {
3857
- & + * {
3858
- margin-block-start: 0;
3859
- }
3860
- }
3861
- }
3862
- }
3863
- /* Setup */
3864
- /*
3865
- theme two theme setup
3866
- */
3867
- @layer theme {
3868
- .light {
3869
- --color-scheme: light;
3870
- }
3871
- .dark {
3872
- --color-scheme: dark;
3873
- }
3874
-
3875
- :where(html) {
3876
- color-scheme: var(--color-scheme, light dark);
3877
-
3878
- --palette-hue: var(--oklch-orange);
3879
- --palette-hue-rotate-by: 0;
3880
- --palette-chroma: 0.89;
3881
-
3882
- /* Primary */
3883
- --primary: var(--color-8);
3884
- --primary-light: oklch(from var(--primary) calc(l * 1.25) c h);
3885
- --primary-dark: oklch(from var(--primary) calc(l * 0.75) c h);
3886
- --primary-contrast: var(--gray-1);
3887
-
3888
- /* Text */
3889
- --text-color-1: light-dark(var(--gray-15), var(--gray-1));
3890
- --text-color-1-contrast: light-dark(var(--gray-2), var(--gray-15));
3891
- --text-color-2: light-dark(var(--gray-13), var(--gray-4));
3892
- --text-color-2-contrast: light-dark(var(--gray-4), var(--gray-13));
3893
-
3894
- /* Surface */
3895
- --surface-default: light-dark(var(--gray-1), var(--gray-13));
3896
- --surface-filled: light-dark(var(--gray-3), var(--gray-15));
3897
- --surface-tonal: light-dark(var(--gray-3), var(--gray-12));
3898
- --surface-elevated: light-dark(var(--gray-1), var(--gray-12));
3899
-
3900
- /* Shadows */
3901
- --shadow-color: light-dark(220 3% 15%, 220 40% 2%);
3902
- --shadow-strength: light-dark(1%, 10%);
3903
- --inner-shadow-highlight: light-dark(
3904
- inset 0 -0.5px 0 0 #fff,
3905
- inset 0 0.5px 0 0 #0001,
3906
- inset 0 -0.5px 0 0 #fff1,
3907
- inset 0 0.5px 0 0 #0007
3908
- );
3909
-
3910
- /* Typography */
3911
- --font-size-h1: var(--font-size-fluid-3, 3.5rem);
3912
- --font-size-h2: var(--font-size-fluid-2, 2rem);
3913
- --font-size-h3: var(--font-size-fluid-1, 1.5rem);
3914
- --font-size-h4: var(--font-size-3, 1.25rem);
3915
- --font-size-h5: var(--font-size-2, 1.1rem);
3916
- --font-size-h6: var(--font-size-fluid-0, 1rem);
3917
- --font-size-lg: var(--font-size-3, 1.25rem);
3918
- --font-size-md: var(--font-size-fluid-0, 1rem);
3919
- --font-size-sm: 0.875rem;
3920
- --font-size-xs: var(--font-size-0, 0.75rem);
3921
-
3922
- /* Borders */
3923
- --border-color: light-dark(var(--gray-4), var(--gray-12));
3924
- --border-radius: var(--size-2);
3925
- --border-width: 1px;
3926
-
3927
- /* Input Field */
3928
- --field-border-color: var(--border-color);
3929
- --field-border-radius: var(--size-2);
3930
- --field-border-width: 1px;
3931
- --field-size: 2.3lh;
3932
- --field-size-small: 1.9lh;
3933
-
3934
- /* Button */
3935
- --button-border-radius: var(--size-2);
3936
- }
3937
-
3938
- /* Highlight colors */
3939
- :where(.red, .error, del) {
3940
- --palette-hue: var(--oklch-red, 25);
3941
- --palette-chroma: 1;
3942
- --palette-hue-rotate-by: 1;
3943
- }
3944
- :where(.blue, .ok, abbr, dfn) {
3945
- --palette-hue: var(--oklch-blue, 210);
3946
- --palette-chroma: 1;
3947
- --palette-hue-rotate-by: 1;
3948
- }
3949
- :where(.green, .good, ins) {
3950
- --palette-hue: var(--oklch-green, 145);
3951
- --palette-chroma: 1;
3952
- --palette-hue-rotate-by: 1;
3953
- }
3954
- :where(.orange, .warning) {
3955
- --palette-hue: var(--oklch-orange, 75);
3956
- --palette-chroma: 1;
3957
- --palette-hue-rotate-by: 1;
3958
- }
3959
-
3960
- :where(html) {
3961
- --red: oklch(from var(--color-9) l 0.2 25);
3962
- --blue: oklch(from var(--color-9) l 0.2 210);
3963
- --green: oklch(from var(--color-9) l 0.2 145);
3964
- --orange: oklch(from var(--color-7) l 0.2 75);
3965
- }
3966
-
3967
- /* Gray palette */
3968
- :where(html) {
3969
- --gray-chroma: 0.01;
3970
- --gray-lightness: 255;
3971
-
3972
- --gray-1: oklch(
3973
- from var(--color-1) l var(--gray-chroma) var(--gray-lightness)
3974
- );
3975
- --gray-2: oklch(
3976
- from var(--color-2) l var(--gray-chroma) var(--gray-lightness)
3977
- );
3978
- --gray-3: oklch(
3979
- from var(--color-3) l var(--gray-chroma) var(--gray-lightness)
3980
- );
3981
- --gray-4: oklch(
3982
- from var(--color-4) l var(--gray-chroma) var(--gray-lightness)
3983
- );
3984
- --gray-5: oklch(
3985
- from var(--color-5) l var(--gray-chroma) var(--gray-lightness)
3986
- );
3987
- --gray-6: oklch(
3988
- from var(--color-6) l var(--gray-chroma) var(--gray-lightness)
3989
- );
3990
- --gray-7: oklch(
3991
- from var(--color-7) l var(--gray-chroma) var(--gray-lightness)
3992
- );
3993
- --gray-8: oklch(
3994
- from var(--color-8) l var(--gray-chroma) var(--gray-lightness)
3995
- );
3996
- --gray-9: oklch(
3997
- from var(--color-9) l var(--gray-chroma) var(--gray-lightness)
3998
- );
3999
- --gray-10: oklch(
4000
- from var(--color-10) l var(--gray-chroma) var(--gray-lightness)
4001
- );
4002
- --gray-11: oklch(
4003
- from var(--color-11) l var(--gray-chroma) var(--gray-lightness)
4004
- );
4005
- --gray-12: oklch(
4006
- from var(--color-12) l var(--gray-chroma) var(--gray-lightness)
4007
- );
4008
- --gray-13: oklch(
4009
- from var(--color-13) l var(--gray-chroma) var(--gray-lightness)
4010
- );
4011
- --gray-14: oklch(
4012
- from var(--color-14) l var(--gray-chroma) var(--gray-lightness)
4013
- );
4014
- --gray-15: oklch(
4015
- from var(--color-15) l var(--gray-chroma) var(--gray-lightness)
4016
- );
4017
- --gray-16: oklch(
4018
- from var(--color-16) l var(--gray-chroma) var(--gray-lightness)
4019
- );
4020
- }
4021
- }