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,4302 +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
- &.elevated {
550
- --_bg-color: light-dark(
551
- color-mix(in oklch, var(--gray-2) 97%, var(--color-16)),
552
- color-mix(in oklch, var(--gray-13) 97%, var(--color-1))
553
- );
554
- --_ripple-color: light-dark(
555
- color-mix(in oklch, var(--gray-2) 80%, var(--color-8)),
556
- color-mix(in oklch, var(--gray-13) 80%, var(--color-8))
557
- );
558
- --_text-color: var(--color-8);
559
-
560
- box-shadow: 0px 3px 1px -2px oklch(0 0 0 / 20%),
561
- 0px 2px 2px 0px oklch(0 0 0 / 14%), 0px 1px 5px 0px oklch(0 0 0 / 12%);
562
-
563
- &:where(:not([disabled])) {
564
- &:where(:not(:active):hover) {
565
- --ripple: radial-gradient(
566
- circle,
567
- transparent 1%,
568
- var(--_ripple-color) 1%
569
- )
570
- center/15000%;
571
-
572
- --_bg-color: light-dark(
573
- color-mix(in oklch, var(--gray-2) 93%, var(--color-8)),
574
- color-mix(in oklch, var(--gray-13) 93%, var(--color-8))
575
- );
576
- }
577
-
578
- &:where(:hover:active) {
579
- --_bg-color: light-dark(
580
- color-mix(in oklch, var(--gray-2) 91%, var(--color-8)),
581
- color-mix(in oklch, var(--gray-13) 91%, var(--color-8))
582
- );
583
- }
584
- }
585
-
586
- &:where([disabled]) {
587
- --_bg-color: color-mix(
588
- in oklch,
589
- var(--text-color-2) 8%,
590
- var(--surface-elevated)
591
- );
592
- --_text-color: color-mix(
593
- in oklch,
594
- var(--text-color-2) 70%,
595
- var(--surface-elevated)
596
- );
597
- }
598
- }
599
- }
600
-
601
- /* file input */
602
- :where(input[type="file"]) {
603
- align-self: flex-start;
604
- border-radius: var(--radius-2);
605
- border: var(--border-size-1) solid var(--surface-filled);
606
- box-shadow: var(--inner-shadow-4);
607
- color: var(--text-color-2-contrast);
608
- cursor: initial;
609
- max-inline-size: 100%;
610
- padding: 0;
611
- }
612
-
613
- :where(input[type="file"])::-webkit-file-upload-button,
614
- :where(input[type="file"])::file-selector-button {
615
- cursor: pointer;
616
- margin-inline-end: var(--size-relative-6);
617
- }
618
- }
619
- @layer components.root {
620
- :where(.icon-button) {
621
- --_text-color: inherit;
622
-
623
- align-items: center;
624
- aspect-ratio: 1;
625
- background-color: transparent;
626
- border: 0;
627
- border-radius: var(--radius-round);
628
- display: inline-flex;
629
- inline-size: var(--size-6);
630
- justify-content: center;
631
- padding: 0;
632
- transform-style: preserve-3d;
633
-
634
- &:where([disabled]) {
635
- color: light-dark(rgb(0, 0, 0/0.3), rgb(255, 255, 255/0.26));
636
- cursor: not-allowed;
637
- opacity: 0.64;
638
- }
639
-
640
- svg {
641
- max-inline-size: var(--size-5);
642
- pointer-events: none;
643
- }
644
-
645
- /* Ripple effect, utils.css */
646
- &::before {
647
- --highlight-size: 130%;
648
- }
649
-
650
- /* Size */
651
- &.small {
652
- inline-size: var(--size-4);
653
- svg {
654
- max-inline-size: var(--size-4);
655
- }
656
- }
657
- }
658
- }
659
- @layer components.root {
660
- :where(nav.tabs) {
661
- --_bg-color: transparent;
662
-
663
- & > [role="tablist"] {
664
- button {
665
- outline-color: transparent;
666
- outline-offset: -4px;
667
-
668
- &[aria-selected="true"] {
669
- &:focus-visible {
670
- outline: 2px solid var(--text-color-1);
671
- }
672
- }
673
- }
674
- }
675
-
676
- /* Underlined */
677
- &.underlined {
678
- /* Tab list */
679
- & > [role="tablist"] {
680
- border-bottom: 1px solid var(--border-color);
681
-
682
- button {
683
- --_ripple-color: light-dark(
684
- color-mix(in oklch, var(--gray-2) 80%, var(--color-8)),
685
- color-mix(in oklch, var(--gray-13) 80%, var(--color-8))
686
- );
687
-
688
- background: var(--_bg-color) var(--ripple, none);
689
- font-weight: 500;
690
- line-height: var(--font-lineheight-4);
691
- padding: var(--size-2) var(--size-3);
692
-
693
- &:focus-visible {
694
- border-radius: 0;
695
- }
696
-
697
- &[aria-selected="true"] {
698
- border-block-end: 2px solid var(--primary);
699
- color: var(--primary);
700
- }
701
-
702
- @media (prefers-reduced-motion: no-preference) {
703
- transition: background-color 0.2s var(--ease-out-3),
704
- border-color 0.2s var(--ease-out-3), color 0.2s var(--ease-out-3),
705
- outline-offset 0.05s var(--ease-1);
706
-
707
- /*** Ripple effect */
708
- background-position: center;
709
- transition: background var(--button-ripple-duration);
710
- &:where(:not(:active):hover) {
711
- --ripple: radial-gradient(
712
- circle,
713
- transparent 1%,
714
- var(--_ripple-color) 1%
715
- )
716
- center/15000%;
717
- }
718
-
719
- &:where(:hover:active) {
720
- background-size: var(--button-ripple-size);
721
- transition: background 0s;
722
- }
723
-
724
- &:hover {
725
- background-color: light-dark(
726
- oklch(from var(--primary) calc(l * 0.75) none h / 5%),
727
- oklch(from var(--primary) calc(l * 1.25) none h / 5%)
728
- );
729
- }
730
- }
731
- }
732
- }
733
- }
734
-
735
- /* Filled */
736
- &.filled {
737
- --_bg-color: var(--surface-default);
738
- --_radius: var(--border-radius);
739
- --_selected-bg: var(--surface-filled);
740
-
741
- & > [role="tablist"] {
742
- background-color: var(--_bg-color);
743
- border: var(--border-width) solid var(--border-color);
744
- border-radius: var(--_radius);
745
- overflow: hidden;
746
- padding: 0.792ex;
747
- width: fit-content;
748
-
749
- button {
750
- background-color: var(--_bg-color);
751
- border-radius: var(--_radius);
752
- line-height: var(--font-lineheight-4);
753
- padding-inline: var(--size-3);
754
-
755
- &:hover {
756
- background-color: oklch(from var(--_bg-color) calc(l * 1.25) c h);
757
- }
758
-
759
- &[aria-selected="true"] {
760
- background-color: var(--_selected-bg);
761
-
762
- &:hover {
763
- background-color: oklch(
764
- from var(--_selected-bg) calc(l * 1.25) c h
765
- );
766
- }
767
- }
768
-
769
- @media (prefers-reduced-motion: no-preference) {
770
- transition: background-color 0.2s var(--ease-out-3),
771
- border-color 0.2s var(--ease-out-3), color 0.2s var(--ease-out-3),
772
- outline-offset 0.05s var(--ease-1);
773
- }
774
- }
775
- }
776
- }
777
- }
778
- }
779
- @layer components.root {
780
- :where([role="group"].toggle-button-group) {
781
- --_border-radius: var(--radius-round);
782
- --_button-padding-inline: clamp(var(--size-2), 3cqi, var(--size-4));
783
- --_max-width: auto;
784
- --_icon-size: var(--size-4);
785
-
786
- background-color: var(--surface-default);
787
- border: 1px solid var(--border-color);
788
- border-radius: var(--_border-radius);
789
- display: flex;
790
- grid-auto-columns: 1fr;
791
- grid-auto-flow: column;
792
- max-inline-size: var(--_max-width);
793
- min-inline-size: max-content;
794
- overflow: clip;
795
-
796
- /* Size */
797
- &.small {
798
- button {
799
- min-block-size: 2.1875rem; /* 35px */
800
- }
801
- }
802
-
803
- &.x-small {
804
- button {
805
- min-block-size: var(--size-6); /* 30px */
806
- }
807
- }
808
-
809
- &.fullwidth {
810
- inline-size: 100%;
811
- }
812
-
813
- /* Button */
814
- button {
815
- --_bg-color: transparent;
816
-
817
- align-items: center;
818
- background: var(--_bg-color) var(--ripple, none);
819
- border-radius: 0;
820
- border-inline: 1px solid var(--border-color);
821
- border-inline-start-width: 0;
822
- color: var(--text-color-1);
823
- display: inline-flex;
824
- flex: auto;
825
- gap: 1ex;
826
- justify-content: center;
827
- min-block-size: 2.5rem; /* 40px */
828
- min-inline-size: 5ex;
829
- outline-offset: calc(-1 * var(--size-2));
830
- padding: 0 var(--_button-padding-inline);
831
- position: relative;
832
- user-select: none;
833
-
834
- @media (prefers-reduced-motion: no-preference) {
835
- transition: background-color 0.2s var(--ease-out-3),
836
- box-shadow 0.2s var(--ease-out-3), border-color 0.2s var(--ease-out-3),
837
- color 0.2s var(--ease-out-3), outline-offset 0.05s var(--ease-1);
838
- }
839
-
840
- /* Element states */
841
- &:hover {
842
- --_bg-color: light-dark(oklch(0% 0 0 / 0.04), oklch(100% 0 0 / 0.08));
843
- }
844
-
845
- &:focus-visible {
846
- outline-offset: -6px;
847
- }
848
-
849
- /* Disabled */
850
- &[disabled] {
851
- border-color: color-mix(in oklch, var(--border-color) 50%, transparent);
852
- cursor: not-allowed;
853
- color: color-mix(in oklch, var(--text-color-1) 30%, transparent);
854
- }
855
-
856
- &[disabled] + &:not([disabled]):not(:last-of-type) {
857
- border-inline-end-width: 1px;
858
- }
859
-
860
- /* Assign border radius for outline */
861
- &:first-of-type {
862
- border-bottom-left-radius: var(--_border-radius);
863
- border-top-left-radius: var(--_border-radius);
864
- }
865
- &:last-of-type {
866
- border-bottom-right-radius: var(--_border-radius);
867
- border-top-right-radius: var(--_border-radius);
868
- }
869
-
870
- &:last-of-type {
871
- border-inline-end-width: 0;
872
- }
873
-
874
- /* Ripple effect */
875
- background-position: center;
876
-
877
- &:where(:not([disabled])) {
878
- &:where(:not(:active):hover) {
879
- --ripple: radial-gradient(circle, transparent 1%, var(--_bg-color) 1%)
880
- center/15000%;
881
-
882
- transition: background var(--button-ripple-duration);
883
- }
884
-
885
- &:where(:hover:active) {
886
- background-size: var(--button-ripple-size);
887
- transition: background 0s;
888
- }
889
- }
890
-
891
- /* Icons */
892
- svg {
893
- inline-size: var(--_icon-size);
894
- inset-inline-start: calc(var(--_button-padding-inline));
895
-
896
- & + svg {
897
- max-block-size: var(--size-5);
898
- max-inline-size: var(--size-7);
899
- }
900
- }
901
-
902
- /* Selected */
903
- &.selected {
904
- --_bg-color: oklch(from var(--primary) l c h / 25%);
905
-
906
- /* Checkmark */
907
- svg:first-of-type {
908
- margin-block-end: -3px;
909
- }
910
- }
911
- }
912
- }
913
- }
914
- @layer components.root {
915
- :where(.avatar) {
916
- --_bg-color: var(--color-8);
917
- --_color: var(--text-color-1);
918
- --_width: 40px;
919
-
920
- align-items: center;
921
- background-color: var(--_bg-color);
922
- color: var(--_color);
923
- aspect-ratio: 1;
924
- border-radius: 100vmax;
925
- display: inline-flex;
926
- inline-size: var(--_width);
927
- justify-content: center;
928
- overflow: clip;
929
- position: relative;
930
- text-align: center;
931
- text-decoration: none;
932
-
933
- &:has(img) {
934
- background-color: transparent;
935
- }
936
-
937
- svg {
938
- max-inline-size: var(--size-5);
939
- }
940
-
941
- img {
942
- block-size: 100%;
943
- inline-size: 100%;
944
- inset: 0;
945
- object-fit: cover;
946
- position: absolute;
947
- }
948
-
949
- &.squared {
950
- border-radius: 0;
951
- }
952
-
953
- &.rounded {
954
- border-radius: var(--border-size-3);
955
- }
956
- }
957
-
958
- /*
959
- TODO: implement reading-order if that becomes a thing.
960
- https://developer.chrome.com/blog/reading-order/
961
- */
962
- :where(.avatar-group) {
963
- --_margin: var(--size-1);
964
-
965
- display: flex;
966
- flex-direction: row-reverse;
967
-
968
- &.gap-small {
969
- --_margin: var(--size-2);
970
- }
971
-
972
- &.gap-x-small {
973
- --_margin: var(--size-3);
974
- }
975
-
976
- .avatar {
977
- margin-inline-end: calc(-1 * var(--_margin));
978
- outline: 2px solid var(--surface-default);
979
- }
980
- }
981
- }
982
- @layer components.root {
983
- :where(.badge) {
984
- --_bg-color: var(--primary);
985
- --_border-color: var(--primary);
986
- --_color: var(--gray-1);
987
- --_inset-offset: 16px;
988
- --_inset: auto auto calc(100% - var(--_inset-offset))
989
- calc(100% - var(--_inset-offset));
990
- --_translate: 0;
991
-
992
- display: inline-flex;
993
- position: relative;
994
-
995
- &::after {
996
- background-color: var(--_bg-color);
997
- border: 2px solid var(--_border-color);
998
- border-radius: 100vmax;
999
- color: var(--_color);
1000
- content: attr(aria-label);
1001
- font-size: 12px;
1002
- font-weight: 500;
1003
- block-size: var(--size-4);
1004
- line-height: normal;
1005
- min-inline-size: var(--size-4, 1.125rem);
1006
- padding-inline: var(--size-1);
1007
- inset: var(--_inset);
1008
- position: absolute;
1009
- text-align: center;
1010
- translate: var(--_translate);
1011
- transition: opacity 0.2s var(--ease-out-1);
1012
- inline-size: max-content;
1013
- }
1014
-
1015
- /* Alignment */
1016
- &.start-start {
1017
- --_inset: auto calc(100% - var(--_inset-offset))
1018
- calc(100% - var(--_inset-offset)) auto;
1019
- }
1020
- &.start-end {
1021
- --_inset: auto auto calc(100% - var(--_inset-offset))
1022
- calc(100% - var(--_inset-offset));
1023
- }
1024
- &.end-start {
1025
- --_inset: calc(100% - var(--_inset-offset))
1026
- calc(100% - var(--_inset-offset)) auto auto;
1027
- }
1028
- &.end-end {
1029
- --_inset: calc(100% - var(--_inset-offset)) auto auto
1030
- calc(100% - var(--_inset-offset));
1031
- }
1032
-
1033
- /* Dot */
1034
- &.dot {
1035
- --_inset: 0 -1px auto auto;
1036
- &::after {
1037
- content: "";
1038
- min-inline-size: var(--size-2);
1039
- block-size: var(--size-2);
1040
- inline-size: var(--size-2);
1041
- padding: 0;
1042
- }
1043
- }
1044
-
1045
- /* Visibility */
1046
- &.invisible {
1047
- &::after {
1048
- opacity: 0;
1049
- pointer-events: none;
1050
- }
1051
- }
1052
-
1053
- /* Colors */
1054
- &.error,
1055
- &.good,
1056
- &.ok,
1057
- &.warning {
1058
- --_bg-color: var(--color-8);
1059
- --_border-color: var(--color-8);
1060
- }
1061
- }
1062
-
1063
- [dir="rtl"] {
1064
- :where(.badge) {
1065
- --_inset: auto calc(100% - 16px) calc(100% - 16px) auto;
1066
-
1067
- /* Alignment */
1068
- &.start-start {
1069
- --_inset: auto auto calc(100% - 16px) calc(100% - 16px);
1070
- }
1071
- &.start-end {
1072
- --_inset: auto calc(100% - 16px) calc(100% - 16px) auto;
1073
- }
1074
- &.end-start {
1075
- --_inset: calc(100% - 16px) auto auto calc(100% - 16px);
1076
- }
1077
- &.end-end {
1078
- --_inset: calc(100% - 16px) calc(100% - 16px) auto auto;
1079
- }
1080
- }
1081
- }
1082
- }
1083
- @layer components.root {
1084
- :where(.card) {
1085
- --_bg-color: transparent;
1086
- --_border-color: transparent;
1087
- --_border-width: 0;
1088
- --_shadow: none;
1089
-
1090
- background-color: var(--_bg-color);
1091
- border-color: var(--_border-color);
1092
- border-radius: var(--border-radius, 0.25rem);
1093
- border-style: solid;
1094
- border-width: var(--_border-width);
1095
- box-shadow: var(--_shadow);
1096
- display: flex;
1097
- flex-direction: column;
1098
- gap: var(--size-3);
1099
- overflow: hidden;
1100
- padding-inline: 0;
1101
-
1102
- /* Variants */
1103
- &.text {
1104
- --_bg-color: transparent;
1105
- --_border-color: transparent;
1106
- --_border-width: 0;
1107
- --_shadow: none;
1108
- padding-inline: 0;
1109
- }
1110
-
1111
- &.tonal {
1112
- --_bg-color: var(--surface-tonal);
1113
- --_border-width: 1px;
1114
- }
1115
-
1116
- &.elevated {
1117
- --_bg-color: var(--surface-elevated);
1118
- --_border-color: transparent;
1119
- --_border-width: 0;
1120
- --_shadow: var(--shadow-3);
1121
-
1122
- /* Adjust shadow in dark mode */
1123
- @container style(--color-scheme: dark) {
1124
- --_shadow: var(--shadow-4);
1125
- }
1126
- }
1127
-
1128
- &.outlined {
1129
- --_bg-color: var(--surface-default);
1130
- --_border-color: var(--border-color);
1131
- --_border-width: 1px;
1132
- }
1133
-
1134
- & > :where(hgroup, .content) {
1135
- padding-inline: var(--size-3);
1136
- }
1137
-
1138
- & > hgroup {
1139
- padding-block: var(--size-3) 0;
1140
-
1141
- /* Top paragraph */
1142
- & > p:first-of-type:first-child {
1143
- line-height: 1.3;
1144
- }
1145
-
1146
- /* Bottom paragraph */
1147
- & > p:last-of-type:last-child:not(:first-child) {
1148
- font-size: var(--font-size-1, 1rem);
1149
- }
1150
- }
1151
-
1152
- & > .content:where(:only-child, :first-child) {
1153
- padding-block: var(--size-3) var(--size-4);
1154
- }
1155
-
1156
- & > .actions {
1157
- display: flex;
1158
- gap: var(--size-1);
1159
- margin-block: var(--size-2) 0;
1160
- padding-block-end: var(--size-1);
1161
- padding-inline: var(--size-1) var(--size-3);
1162
- }
1163
- }
1164
- }
1165
- @layer components.root {
1166
- :where(.chip) {
1167
- --_bg-color: var(--surface-tonal);
1168
- --_border-color: var(--border-color);
1169
- --_color: var(--text-color-1);
1170
-
1171
- align-items: center;
1172
- background: var(--_bg-color) var(--ripple, none);
1173
- border: 1px solid var(--_border-color);
1174
- border-radius: var(--radius-2, 0.5rem);
1175
- color: var(--_color);
1176
- display: inline-flex;
1177
- font-size: var(--font-size-0, 0.75rem);
1178
- gap: var(--size-1);
1179
- block-size: var(--size-7, 2rem);
1180
- padding-inline: var(--size-2);
1181
- text-decoration: none;
1182
-
1183
- /* Variants */
1184
- &.tonal {
1185
- --_bg-color: var(--surface-tonal);
1186
- --_color: var(--text-color-1);
1187
- }
1188
-
1189
- &.outlined {
1190
- --_bg-color: var(--surface-default);
1191
- --_color: var(--text-color-1);
1192
- }
1193
-
1194
- /* TODO: should this be out of the box? */
1195
- /* Colors */
1196
- /* &:hover {
1197
- --_bg-color: var(--color-11);
1198
- --_border-color: var(--color-11);
1199
- --_color: var(--text-color-1);
1200
- } */
1201
- /* &.red,
1202
- &.blue,
1203
- &.green,
1204
- &.orange,
1205
- &.primary {
1206
- --_bg-color: var(--color-5);
1207
- --_border-color: var(--color-7);
1208
- --_color: var(--text-color-1-contrast);
1209
-
1210
- &:hover {
1211
- --_bg-color: var(--color-7);
1212
- --_border-color: var(--color-7);
1213
- --_color: var(--text-color-1-contrast);
1214
-
1215
- &:active {
1216
- --_bg-color: var(--color-8);
1217
- --_border-color: var(--color-8);
1218
- }
1219
- }
1220
-
1221
- &.outlined {
1222
- --_bg-color: var(--surface-tonal);
1223
- --_color: var(--text-color-1);
1224
- --_border-color: var(--color-9);
1225
-
1226
- &:hover {
1227
- --_bg-color: var(--color-9);
1228
- --_border-color: var(--color-9);
1229
- --_color: var(--text-color-1);
1230
-
1231
- &:active {
1232
- --_bg-color: var(--color-11);
1233
- --_border-color: var(--color-11);
1234
- }
1235
- }
1236
- }
1237
- } */
1238
-
1239
- &:where(button, a):where(:not([disabled])) {
1240
- &:where(:not(:active)):hover {
1241
- --_bg-color: light-dark(
1242
- oklch(from var(--surface-tonal) calc(l * 0.98) c h),
1243
- oklch(from var(--surface-tonal) calc(l * 1.1) c h)
1244
- );
1245
- }
1246
- }
1247
-
1248
- /* Icon */
1249
- &:has(svg:first-child) {
1250
- padding-inline: var(--size-1) var(--size-2);
1251
- }
1252
- &:has(svg:last-child) {
1253
- padding-inline: var(--size-2) var(--size-1);
1254
- }
1255
-
1256
- &:has(svg) {
1257
- svg {
1258
- flex-shrink: 0;
1259
- inline-size: var(--size-3);
1260
- }
1261
- }
1262
-
1263
- /* Sizes */
1264
- &.small {
1265
- block-size: var(--size-5);
1266
- }
1267
- &.multiline {
1268
- block-size: auto;
1269
- }
1270
-
1271
- /* Ripple effect */
1272
- background-position: center;
1273
-
1274
- &:where(:not([disabled])) {
1275
- &:where(:not(:active):hover) {
1276
- --ripple: radial-gradient(circle, transparent 1%, var(--_bg-color) 1%)
1277
- center/15000%;
1278
-
1279
- transition: background var(--button-ripple-duration);
1280
- }
1281
-
1282
- &:where(:hover:active) {
1283
- background-size: var(--button-ripple-size);
1284
- transition: background 0s;
1285
- }
1286
- }
1287
-
1288
- /* Disabled */
1289
- &:where([disabled]) {
1290
- opacity: 0.64;
1291
- --_text-color: color-mix(
1292
- in oklch,
1293
- var(--text-color-2) 50%,
1294
- var(--surface-default)
1295
- );
1296
- cursor: not-allowed;
1297
- }
1298
- }
1299
- }
1300
- @layer components.root {
1301
- :where(.definition-list) {
1302
- --_border-style: solid;
1303
- --_border-width: 1px;
1304
-
1305
- display: grid;
1306
- gap: var(--size-3);
1307
- padding: 0;
1308
-
1309
- &.dotted {
1310
- --_border-style: dotted;
1311
- --_border-width: 2px;
1312
- }
1313
-
1314
- li {
1315
- display: grid;
1316
- margin: 0;
1317
- padding: 0;
1318
-
1319
- .term {
1320
- display: block;
1321
- font-weight: 700;
1322
- overflow: hidden;
1323
- position: relative;
1324
- }
1325
-
1326
- hr {
1327
- display: none;
1328
- margin: 0;
1329
- }
1330
- }
1331
-
1332
- @container (width > 45ch) {
1333
- gap: var(--size-1);
1334
-
1335
- li {
1336
- align-items: baseline;
1337
- display: grid;
1338
- gap: var(--size-1);
1339
- grid-template-columns: 1fr auto;
1340
-
1341
- &:has(hr) {
1342
- grid-template-columns: auto 1fr auto;
1343
- }
1344
-
1345
- hr {
1346
- background-color: transparent;
1347
- border-block-end: var(--_border-width) var(--_border-style)
1348
- var(--border-color);
1349
- block-size: 2px;
1350
- display: block;
1351
- }
1352
-
1353
- .term {
1354
- &::after {
1355
- display: inline-block;
1356
- }
1357
- }
1358
- .description {
1359
- color: var(--text-color-2);
1360
- }
1361
- }
1362
- }
1363
- }
1364
- }
1365
- @layer components.root {
1366
- :where(hr) {
1367
- background-color: var(--border-color);
1368
- block-size: var(--border-size-1);
1369
- margin-block: var(--size-fluid-3);
1370
- }
1371
- }
1372
- @layer components.root {
1373
- :where(.link) {
1374
- color: var(--primary);
1375
- cursor: pointer;
1376
- font-weight: 700;
1377
- text-decoration: underline;
1378
- text-decoration-color: var(--primary);
1379
- text-underline-offset: 2px;
1380
-
1381
- &[href] {
1382
- &:hover,
1383
- &:focus-visible {
1384
- color: var(--primary-light);
1385
- }
1386
- }
1387
-
1388
- @supports (-moz-appearance: none) {
1389
- text-underline-offset: 2px;
1390
- }
1391
- }
1392
- }
1393
- @layer components.root {
1394
- :where(table) {
1395
- border-collapse: collapse;
1396
- display: block;
1397
- margin: var(--size-3) 0;
1398
- max-inline-size: 100%;
1399
- position: relative;
1400
-
1401
- /* Rows */
1402
- tr {
1403
- background-color: var(--surface-default);
1404
- border-top: 1px solid var(--border-color);
1405
-
1406
- &:hover {
1407
- background-color: oklch(from var(--surface-filled) l c h / 75%);
1408
- }
1409
- }
1410
-
1411
- /* Cells */
1412
- th,
1413
- td {
1414
- border: 1px solid var(--border-color);
1415
- padding: var(--size-1) var(--size-2);
1416
- }
1417
-
1418
- th {
1419
- background-color: var(--surface-filled);
1420
- color: var(--text-color-1);
1421
- font-size: var(--font-size-sm, 0.75rem);
1422
- font-weight: 600;
1423
- text-align: start;
1424
- }
1425
-
1426
- td {
1427
- font-size: var(--font-size-sm, 0.75rem);
1428
- }
1429
-
1430
- /* Caption */
1431
- caption {
1432
- caption-side: bottom;
1433
- color: var(--text-color-2);
1434
- font-size: var(--font-size-sm, 0.75rem);
1435
- padding: var(--size-2) 0;
1436
- text-align: start;
1437
- }
1438
-
1439
- /* Footer */
1440
- tfoot {
1441
- border-top: 2px solid var(--border-color);
1442
-
1443
- tr {
1444
- background-color: var(--surface-filled);
1445
- }
1446
-
1447
- td {
1448
- color: var(--text-color-1);
1449
- font-weight: 600;
1450
- }
1451
- }
1452
-
1453
- /* Column group */
1454
- colgroup col {
1455
- border: none;
1456
- }
1457
-
1458
- @container (width < 60ch) {
1459
- th,
1460
- td {
1461
- padding: var(--size-1) 0.875rem;
1462
- }
1463
- }
1464
-
1465
- /* Sticky header */
1466
- &.sticky-header thead {
1467
- background-color: var(--surface-filled);
1468
- position: sticky;
1469
- inset-block-start: 0;
1470
- z-index: 1;
1471
- }
1472
-
1473
- /* Dense */
1474
- &.dense {
1475
- th,
1476
- td {
1477
- padding: var(--size-1) var(--size-2);
1478
- }
1479
-
1480
- caption {
1481
- padding: var(--size-1) 0;
1482
- }
1483
-
1484
- @container (width < 60ch) {
1485
- th,
1486
- td {
1487
- padding: var(--size-1) var(--size-2);
1488
- }
1489
- }
1490
- }
1491
- }
1492
- }
1493
- @layer components.root {
1494
- :where(progress) {
1495
- --_accent-color: var(--primary);
1496
- --_bg-color: var(--surface-tonal);
1497
-
1498
- appearance: none;
1499
- background-color: var(--_bg-color);
1500
- border-radius: var(--border-radius, 0.25rem);
1501
- border: 0;
1502
- display: inline-block;
1503
- block-size: var(--size-1);
1504
- overflow: hidden;
1505
- position: relative;
1506
- vertical-align: baseline;
1507
- inline-size: 100%;
1508
-
1509
- &::-webkit-progress-bar {
1510
- border-radius: var(--border-radius, 0.25rem);
1511
- background: none;
1512
- }
1513
-
1514
- &[value]::-webkit-progress-value {
1515
- background-color: var(--_accent-color);
1516
-
1517
- @media (prefers-reduced-motion: no-preference) {
1518
- transition: inline-size 0.2s
1519
- var(--ease-out-4, cubic-bezier(0, 0, 0.1, 1));
1520
- }
1521
- }
1522
-
1523
- &::-moz-progress-bar {
1524
- background-color: var(--_accent-color);
1525
- }
1526
- }
1527
-
1528
- @media (prefers-reduced-motion: no-preference) {
1529
- progress:indeterminate {
1530
- background-color: var(--_bg-color);
1531
-
1532
- &::after {
1533
- animation: indeterminate 2s linear infinite;
1534
- background-color: var(--_accent-color);
1535
- content: "";
1536
- inset: 0 auto 0 0;
1537
- position: absolute;
1538
- will-change: inset-inline-start, inset-inline-end;
1539
- }
1540
-
1541
- &[value]::-webkit-progress-value {
1542
- background-color: transparent;
1543
- }
1544
-
1545
- &::-moz-progress-bar {
1546
- background-color: transparent;
1547
- }
1548
- }
1549
-
1550
- [dir="rtl"] {
1551
- :where(progress):indeterminate {
1552
- animation-direction: reverse;
1553
-
1554
- &::after {
1555
- animation-direction: reverse;
1556
- }
1557
- }
1558
- }
1559
- }
1560
-
1561
- @keyframes indeterminate {
1562
- 0% {
1563
- left: -200%;
1564
- right: 100%;
1565
- }
1566
- 60% {
1567
- left: 107%;
1568
- right: -8%;
1569
- }
1570
- 100% {
1571
- left: 107%;
1572
- right: -8%;
1573
- }
1574
- }
1575
- }
1576
- @layer components.root {
1577
- [aria-busy="true"]:not(
1578
- input,
1579
- select,
1580
- textarea,
1581
- html,
1582
- progress,
1583
- [aria-describedby]
1584
- ) {
1585
- position: relative;
1586
-
1587
- &::before {
1588
- animation: spin 0.7s linear infinite;
1589
- border-color: transparent currentColor currentColor;
1590
- border-radius: 50%;
1591
- border-style: solid;
1592
- border-width: 3px;
1593
- content: "";
1594
- display: inline-block;
1595
- block-size: 1em;
1596
- opacity: 0.5;
1597
- vertical-align: -0.14em;
1598
- inline-size: 1em;
1599
- }
1600
-
1601
- &:not(button.button):not(:empty) {
1602
- &::before {
1603
- margin-inline-end: 0.5em;
1604
- }
1605
- }
1606
- }
1607
-
1608
- @keyframes spin {
1609
- to {
1610
- transform: rotate(1turn);
1611
- }
1612
- }
1613
- }
1614
- @layer components.root {
1615
- label:where(.checkbox, .radio) {
1616
- align-items: center;
1617
- color: var(--text-color-1);
1618
- cursor: pointer;
1619
- display: inline-grid;
1620
- gap: 0 var(--size-2);
1621
- grid-auto-columns: auto;
1622
- grid-auto-flow: column;
1623
- inline-size: fit-content;
1624
- line-height: 1.5;
1625
- transform: translateZ(0);
1626
- user-select: none;
1627
-
1628
- /* Disabled */
1629
- &:has([disabled]) {
1630
- cursor: not-allowed;
1631
- opacity: 0.64;
1632
- user-select: none;
1633
-
1634
- input {
1635
- cursor: not-allowed;
1636
- }
1637
- }
1638
-
1639
- /* Required dot */
1640
- &:has([required]:not([type="checkbox"]:checked)) {
1641
- .label:after {
1642
- color: var(--red);
1643
- content: "*";
1644
- inset: 0 -0.25ex auto auto;
1645
- position: absolute;
1646
- }
1647
- }
1648
-
1649
- /* Label */
1650
- .label {
1651
- grid-column: 2;
1652
- grid-row: 1;
1653
- position: relative;
1654
- padding-inline: 0 1ex;
1655
- }
1656
-
1657
- /* Supporting text */
1658
- .supporting-text {
1659
- color: var(--text-color-2);
1660
- font-size: var(--font-size-xs);
1661
- grid-column: 2;
1662
- grid-row: 2;
1663
- line-height: 1.5;
1664
- z-index: 1;
1665
- }
1666
-
1667
- /* Stacked layout */
1668
- &.stack {
1669
- justify-items: center;
1670
- grid-auto-columns: unset;
1671
-
1672
- .label {
1673
- grid-column: 1/-1;
1674
- grid-row: 2;
1675
- margin-block-start: var(--size-1);
1676
- padding-inline: 1ex;
1677
-
1678
- /* Required dot */
1679
- &::after {
1680
- inset: 0 -0.25ex auto auto;
1681
- }
1682
- }
1683
-
1684
- .supporting-text {
1685
- grid-column: 1/-1;
1686
- grid-row: 3;
1687
- }
1688
- }
1689
-
1690
- /* Input */
1691
- input {
1692
- aspect-ratio: 1;
1693
- block-size: 1.125rem;
1694
- cursor: pointer;
1695
- inline-size: 1.125rem;
1696
-
1697
- &::before {
1698
- --highlight-size: 175%;
1699
- }
1700
- }
1701
-
1702
- /* Sizes */
1703
- &.small {
1704
- input {
1705
- block-size: var(--size-3);
1706
- inline-size: var(--size-3);
1707
- }
1708
- }
1709
-
1710
- &.large {
1711
- input {
1712
- block-size: var(--size-4);
1713
- inline-size: var(--size-4);
1714
- }
1715
- }
1716
-
1717
- /* Validation */
1718
- &.error {
1719
- input[type="checkbox"] {
1720
- accent-color: var(--color-9);
1721
-
1722
- & ~ :where(.label, .supporting-text) {
1723
- color: var(--color-9);
1724
- }
1725
- }
1726
- }
1727
-
1728
- /* Touch devices */
1729
- @media (pointer: coarse) {
1730
- input {
1731
- block-size: var(--size-4);
1732
- inline-size: var(--size-4);
1733
- }
1734
- }
1735
- }
1736
- }
1737
- @layer components.root {
1738
- :where(.switch) {
1739
- --_accent-color: var(--primary);
1740
- --_accent-contrast: var(--primary-contrast);
1741
-
1742
- --_dot-bg-color: light-dark(var(--gray-11), var(--gray-14));
1743
- --_dot-inset: var(--size-1) auto auto var(--size-1);
1744
- --_dot-outline-size: 0;
1745
- --_dot-size: var(--size-3);
1746
-
1747
- --_track-bg-color: light-dark(var(--gray-3), var(--gray-8));
1748
- --_track-height: var(--size-5);
1749
- --_track-width: var(--size-8);
1750
- --_transition-tf: var(--ease-4);
1751
- --_transition-time: 0.2s;
1752
-
1753
- align-items: center;
1754
- color: var(--text-color-1);
1755
- display: inline-grid;
1756
- gap: 0 var(--size-2);
1757
- grid-auto-columns: auto;
1758
- grid-auto-flow: column;
1759
- inline-size: fit-content;
1760
-
1761
- input[type="checkbox"][role="switch"] {
1762
- appearance: none;
1763
- block-size: var(--_track-height);
1764
- cursor: pointer;
1765
- inline-size: var(--_track-width);
1766
- margin: 0;
1767
- position: relative;
1768
-
1769
- /* Track */
1770
- &::before {
1771
- background-color: var(--_track-bg-color);
1772
- block-size: var(--_track-height);
1773
- border: 1px solid var(--_dot-bg-color);
1774
- border-radius: 100vmax;
1775
- content: "";
1776
- inline-size: var(--_track-width);
1777
- inset: 0;
1778
- position: absolute;
1779
- }
1780
-
1781
- &:focus-visible {
1782
- outline-offset: 2px;
1783
- outline: 2px solid currentColor;
1784
- }
1785
-
1786
- /* Dot */
1787
- &::after {
1788
- background-color: var(--_dot-bg-color);
1789
- block-size: var(--_dot-size);
1790
- border-radius: 100vmax;
1791
- content: "";
1792
- inline-size: var(--_dot-size);
1793
- inset: var(--_dot-inset);
1794
- outline-offset: -1px;
1795
- outline: var(--_dot-outline-size) solid var(--_dot-bg-color);
1796
- position: absolute;
1797
- }
1798
-
1799
- /* Checked */
1800
- &:checked {
1801
- &::before {
1802
- background-color: var(--_accent-color);
1803
- border-color: var(--_accent-color);
1804
- transition: background-color var(--_transition-time)
1805
- var(--_transition-tf),
1806
- border-color var(--_transition-time) var(--_transition-tf);
1807
- }
1808
-
1809
- /* Dot */
1810
- &::after {
1811
- --_dot-bg-color: var(--_accent-contrast);
1812
- --_dot-outline-size: calc(var(--size-1) - 1px);
1813
-
1814
- inset-inline-start: calc(
1815
- var(--_track-width) - var(--_dot-size) - var(--size-1)
1816
- );
1817
- }
1818
- }
1819
-
1820
- /* Animation */
1821
- @media (prefers-reduced-motion: no-preference) {
1822
- /* Track */
1823
- &::before {
1824
- transition: background-color var(--_transition-time)
1825
- var(--_transition-tf),
1826
- border-color var(--_transition-time) var(--_transition-tf);
1827
- }
1828
-
1829
- /* Dot */
1830
- &::after {
1831
- transition: all var(--_transition-time) var(--_transition-tf);
1832
- }
1833
-
1834
- &:active:after {
1835
- --_dot-outline-size: calc(var(--size-1) + 1px);
1836
- }
1837
-
1838
- &:checked {
1839
- &:active:after {
1840
- --_dot-outline-size: calc(var(--size-1) + 1px);
1841
- }
1842
- }
1843
- }
1844
- }
1845
-
1846
- /* Required dot */
1847
- &:has([required]:not(:checked)) {
1848
- .label:after {
1849
- color: var(--red);
1850
- content: "*";
1851
- inset: 0 -0.25ex auto auto;
1852
- position: absolute;
1853
- }
1854
- }
1855
-
1856
- /* Disabled */
1857
- &:has([disabled]) {
1858
- cursor: not-allowed;
1859
- opacity: 0.64;
1860
- user-select: none;
1861
-
1862
- input {
1863
- cursor: not-allowed;
1864
- }
1865
- }
1866
-
1867
- /* Label */
1868
- .label {
1869
- grid-column: 2;
1870
- grid-row: 1;
1871
- min-width: 0;
1872
- padding-inline: 0 1ex;
1873
- position: relative;
1874
- user-select: none;
1875
- }
1876
-
1877
- /* Supporting text */
1878
- .supporting-text {
1879
- color: var(--text-color-2);
1880
- font-size: var(--font-size-xs);
1881
- grid-column: 2;
1882
- grid-row: 2;
1883
- line-height: 1.5;
1884
- z-index: 1;
1885
- }
1886
-
1887
- /* Size */
1888
- &.small {
1889
- --_dot-size: 0.75rem;
1890
- --_track-height: var(--size-4);
1891
- --_track-width: 2.5rem;
1892
- }
1893
-
1894
- /* Stacked layout */
1895
- &.stack {
1896
- justify-items: center;
1897
- grid-auto-columns: unset;
1898
-
1899
- .label {
1900
- grid-column: 1/-1;
1901
- grid-row: 2;
1902
- margin-block-start: var(--size-1);
1903
- padding-inline: 1ex;
1904
- }
1905
-
1906
- .supporting-text {
1907
- grid-column: 1/-1;
1908
- grid-row: 3;
1909
- }
1910
- }
1911
-
1912
- /* Validation */
1913
- &.error {
1914
- input {
1915
- outline: 2px solid var(--color-9);
1916
- border-radius: var(--radius-round);
1917
- }
1918
-
1919
- .label,
1920
- .supporting-text {
1921
- color: var(--color-9);
1922
- }
1923
- }
1924
- }
1925
- }
1926
- @layer components.root {
1927
- :where(.range > input[type="range"]) {
1928
- --thumb-bg: var(--primary);
1929
- --thumb-highlight-color: oklch(from var(--primary) 70% 100% h / 20%);
1930
- --thumb-highlight-size: 0px;
1931
- --thumb-offset: -1ex;
1932
- --thumb-size: 3ex;
1933
- --track-color: var(--field-border-color);
1934
- --track-fill: 0%;
1935
- --track-height: 1ex;
1936
-
1937
- appearance: none;
1938
- background: transparent;
1939
- display: block;
1940
- inline-size: 100%;
1941
- margin: 1ex 0 3ex;
1942
- outline-offset: 1ex;
1943
-
1944
- @media (hover: none) {
1945
- --thumb-offset: -14px;
1946
- --thumb-size: 30px;
1947
- }
1948
-
1949
- /* Track */
1950
- &::-webkit-slider-runnable-track {
1951
- appearance: none;
1952
- background: linear-gradient(
1953
- to right,
1954
- transparent var(--track-fill),
1955
- var(--track-color) 0%
1956
- ),
1957
- var(--primary);
1958
- block-size: var(--track-height);
1959
- border-radius: 5ex;
1960
- box-shadow: var(--inner-shadow-1);
1961
- }
1962
-
1963
- &::-moz-range-track {
1964
- appearance: none;
1965
- background: linear-gradient(
1966
- to right,
1967
- transparent var(--track-fill),
1968
- var(--track-color) 0%
1969
- ),
1970
- var(--primary);
1971
- block-size: var(--track-height);
1972
- border-radius: 5ex;
1973
- box-shadow: var(--inner-shadow-2);
1974
- }
1975
-
1976
- /* Ring */
1977
- &::-webkit-slider-thumb {
1978
- appearance: none;
1979
- background: var(--thumb-bg);
1980
- block-size: var(--thumb-size);
1981
- border-radius: 50%;
1982
- border: 3px solid var(--surface-default);
1983
- box-shadow: 0 0 0 var(--thumb-highlight-size) var(--thumb-highlight-color);
1984
- cursor: ew-resize;
1985
- inline-size: var(--thumb-size);
1986
- margin-block-start: var(--thumb-offset);
1987
-
1988
- @media (prefers-reduced-motion: no-preference) {
1989
- transition: box-shadow 0.1s ease;
1990
- }
1991
-
1992
- .fieldset-item:focus-within & {
1993
- border-color: var(--gray-14);
1994
- }
1995
- }
1996
-
1997
- &::-moz-range-thumb {
1998
- appearance: none;
1999
- background: var(--thumb-bg);
2000
- block-size: var(--thumb-size);
2001
- border-radius: 50%;
2002
- border: 3px solid var(--primary);
2003
- box-shadow: 0 0 0 var(--thumb-highlight-size) var(--thumb-highlight-color);
2004
- cursor: ew-resize;
2005
- inline-size: var(--thumb-size);
2006
- margin-block-start: var(--thumb-offset);
2007
-
2008
- @media (prefers-reduced-motion: no-preference) {
2009
- transition: box-shadow 0.1s ease;
2010
- }
2011
-
2012
- .fieldset-item:focus-within & {
2013
- border-color: var(--gray-14);
2014
- }
2015
- }
2016
-
2017
- /* Element state */
2018
- &:not([disabled]) {
2019
- &:hover {
2020
- --thumb-highlight-size: var(--size-1);
2021
- }
2022
-
2023
- &:active {
2024
- --thumb-highlight-size: var(--size-2);
2025
- --track-color: light-dark(
2026
- oklch(from var(--field-border-color) calc(l * 0.9) c h),
2027
- oklch(from var(--field-border-color) calc(l * 1.1) c h)
2028
- );
2029
- }
2030
- }
2031
-
2032
- &[disabled] {
2033
- --thumb-bg: oklch(from var(--text-color-1) l c h / 50%);
2034
- --track-color: var(--field-border-color);
2035
-
2036
- cursor: not-allowed;
2037
-
2038
- &::-webkit-slider-thumb {
2039
- cursor: not-allowed;
2040
- }
2041
- &::-moz-range-thumb {
2042
- cursor: not-allowed;
2043
- }
2044
- }
2045
- }
2046
- }
2047
- @layer components.root {
2048
- /* Base typography */
2049
- :where(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) {
2050
- color: var(--text-color-1);
2051
- font-weight: 700;
2052
- text-wrap: pretty;
2053
- }
2054
-
2055
- :where(h1, .h1) {
2056
- font-size: var(--font-size-h1, var(--font-size-7));
2057
- letter-spacing: -0.02em;
2058
- line-height: 1.15;
2059
- }
2060
-
2061
- :where(h2, .h2) {
2062
- font-size: var(--font-size-h2, var(--font-size-5, 2rem));
2063
- letter-spacing: -0.02em;
2064
- line-height: 1.2;
2065
- }
2066
-
2067
- :where(h3, .h3) {
2068
- font-size: var(--font-size-h3, var(--font-size-4, 1.5rem));
2069
- letter-spacing: -0.01em;
2070
- line-height: 1.167;
2071
- }
2072
-
2073
- :where(h4, .h4) {
2074
- font-size: var(--font-size-h4, var(--font-size-3, 1.25rem));
2075
- letter-spacing: -0.01em;
2076
- line-height: 1.235;
2077
- }
2078
-
2079
- :where(h5, .h5) {
2080
- font-size: var(--font-size-h5, var(--font-size-2, 1.1rem));
2081
- line-height: 1.334;
2082
- }
2083
-
2084
- :where(h6, .h6) {
2085
- font-size: var(--font-size-h6, var(--font-size-1, 1rem));
2086
- line-height: 1;
2087
- }
2088
-
2089
- :where(hgroup) {
2090
- & > :where(p, .p) {
2091
- margin: 0;
2092
- }
2093
-
2094
- & > :where(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) {
2095
- margin-block-end: 0.4em;
2096
- }
2097
-
2098
- /* The second p element */
2099
- & > :where(p, .p):last-of-type:last-child:not(:first-child) {
2100
- color: oklch(from currentColor l c h / 75%);
2101
- font-size: var(--font-size-lg);
2102
- line-height: 1.6;
2103
- }
2104
- }
2105
-
2106
- /** Overline */
2107
- :where(.overline, hgroup > :where(p, .p):first-of-type:first-child) {
2108
- color: light-dark(
2109
- oklch(from var(--text-color-2) calc(l * 1.25) c h),
2110
- oklch(from var(--text-color-2) calc(l * 0.75) c h)
2111
- );
2112
- font-size: var(--font-size-xs);
2113
- font-weight: 500;
2114
- letter-spacing: 0.06em;
2115
- line-height: 2.5;
2116
- text-transform: uppercase;
2117
- }
2118
-
2119
- :where(p, .p) {
2120
- text-wrap: pretty;
2121
-
2122
- &.small {
2123
- font-size: var(--font-size-md);
2124
- }
2125
- &.large {
2126
- font-size: var(--font-size-lg);
2127
- }
2128
- }
2129
-
2130
- /* Inline text elements */
2131
- :where(ins, u, abbr, dfn) {
2132
- text-decoration: underline;
2133
- text-underline-offset: 1px;
2134
-
2135
- @supports (-moz-appearance: none) {
2136
- text-underline-offset: 2px;
2137
- }
2138
- }
2139
-
2140
- :where(abbr, dfn) {
2141
- font-style: normal;
2142
- text-decoration: var(--color-9) underline dotted;
2143
-
2144
- &[title] {
2145
- cursor: help;
2146
- text-underline-offset: 1px;
2147
- }
2148
-
2149
- @supports (-moz-appearance: none) {
2150
- text-underline-offset: 2px;
2151
- }
2152
- }
2153
-
2154
- :where(sup) {
2155
- font-size: 0.5em;
2156
- }
2157
-
2158
- :where(del, ins) {
2159
- color: var(--color-9);
2160
- }
2161
-
2162
- :where(small) {
2163
- font-size: max(0.5em, var(--font-size-0, 0.75rem));
2164
- max-inline-size: var(--size-content-1);
2165
- }
2166
-
2167
- :where(cite) {
2168
- font-style: italic;
2169
- }
2170
-
2171
- /* Blockquote */
2172
- :where(blockquote) {
2173
- border-inline-start-width: var(--border-size-3);
2174
- display: grid;
2175
- gap: var(--size-3);
2176
- padding-block: var(--size-3);
2177
- padding-inline: var(--size-4);
2178
-
2179
- :first-child {
2180
- margin-block-start: 0;
2181
- }
2182
-
2183
- :last-child {
2184
- margin-block-end: 0;
2185
- }
2186
-
2187
- footer {
2188
- color: var(--text-color-2);
2189
- }
2190
- }
2191
-
2192
- /* Code */
2193
- :where(pre) {
2194
- border-radius: 0.375rem;
2195
- direction: ltr;
2196
- font-size: 0.875rem;
2197
- line-height: 1.7142857;
2198
- margin-block: 1.7142857em;
2199
- max-inline-size: max-content;
2200
- min-inline-size: 0;
2201
- padding-block: 0.8571429em;
2202
- padding-inline: 1.1428571em;
2203
- white-space: pre;
2204
- writing-mode: lr;
2205
- }
2206
-
2207
- :where(code, kbd, samp, pre) {
2208
- font-family: var(--font-mono);
2209
- }
2210
-
2211
- :where(code) {
2212
- background-color: oklch(00 0 0 /18%);
2213
- border-radius: var(--border-size-3);
2214
- font-size: 0.9em;
2215
- padding: 0.2ex 0.5ex;
2216
- }
2217
-
2218
- :where(kbd, var) {
2219
- background-color: var(--text-color-2);
2220
- border-color: var(--text-color-2);
2221
- border-radius: var(--border-radius, var(--radius-2));
2222
- border-width: var(--border-size-1);
2223
- color: var(--text-color-2-contrast);
2224
- padding: calc(var(--size-1) / 2) var(--size-1);
2225
- }
2226
-
2227
- :where(:not(pre) code, kbd) {
2228
- word-break: break-word;
2229
- }
2230
-
2231
- :where(:not(pre) code) {
2232
- border-radius: var(--border-radius, var(--radius-2));
2233
- padding: var(--size-1) var(--size-2);
2234
- writing-mode: lr;
2235
- }
2236
-
2237
- :where(mark) {
2238
- border-radius: var(--border-radius, 0);
2239
- box-decoration-break: clone;
2240
- padding: calc(var(--size-1) / 2) var(--size-1);
2241
- vertical-align: baseline;
2242
- }
2243
-
2244
- /* Misc */
2245
- :where(dt) {
2246
- font-weight: 700;
2247
- }
2248
-
2249
- :where(figure) {
2250
- & > :where(figcaption) {
2251
- font-size: var(--font-size-1, 1rem);
2252
- text-wrap: balance;
2253
- }
2254
- }
2255
- }
2256
- /*** Extended components (has dependencies) */
2257
- @layer components.extended {
2258
- :where([role="group"].button-group) {
2259
- --_border-radius: var(--button-border-radius);
2260
-
2261
- border-radius: var(--_border-radius);
2262
- display: inline-flex;
2263
- min-width: max-content;
2264
-
2265
- button {
2266
- border-radius: 0;
2267
-
2268
- svg {
2269
- max-inline-size: 0.7lh;
2270
- }
2271
-
2272
- &:focus-visible {
2273
- outline-offset: -4px;
2274
- }
2275
-
2276
- & + & {
2277
- border-inline-width: 1px;
2278
- margin-inline-start: -1px;
2279
- }
2280
-
2281
- &:first-of-type {
2282
- border-bottom-left-radius: var(--_border-radius);
2283
- border-top-left-radius: var(--_border-radius);
2284
- }
2285
- &:last-of-type {
2286
- border-bottom-right-radius: var(--_border-radius);
2287
- border-top-right-radius: var(--_border-radius);
2288
- }
2289
-
2290
- /* Variants */
2291
- /*** Text & Elevated */
2292
- &:not(:where(.tonal, .filled, .outlined)) {
2293
- & + button {
2294
- border-inline-start: 1px solid var(--border-color);
2295
- }
2296
- }
2297
-
2298
- &:where(.tonal, .filled) {
2299
- & + button {
2300
- border-inline-start-color: var(--color-7);
2301
- }
2302
- }
2303
-
2304
- &:where(.tonal, .filled, .elevated) {
2305
- & + &[disabled] {
2306
- border-inline-start-color: color-mix(
2307
- in oklch,
2308
- var(--border-color) 90%,
2309
- white
2310
- );
2311
- }
2312
- }
2313
-
2314
- &:where(.elevated) {
2315
- box-shadow: var(--shadow-1);
2316
-
2317
- button {
2318
- &:not(:hover) {
2319
- box-shadow: none;
2320
- }
2321
- }
2322
- }
2323
- }
2324
- }
2325
- }
2326
- @layer components.extended {
2327
- :where(details) {
2328
- --_accordion-transition-time: 0.2s;
2329
- --_bg-color: transparent;
2330
- --_margin-inline: var(--size-1);
2331
- --_shadow: none;
2332
-
2333
- background-color: var(--_bg-color);
2334
- box-shadow: var(--_shadow);
2335
- border-radius: var(--border-radius, 4px);
2336
- display: block;
2337
- margin-inline: var(--_margin-inline);
2338
- transition: all var(--_accordion-transition-time) ease-out;
2339
-
2340
- /* Accordion animation */
2341
- /* https://nerdy.dev/open-and-close-transitions-for-the-details-element */
2342
- @media (prefers-reduced-motion: no-preference) {
2343
- interpolate-size: allow-keywords;
2344
- }
2345
-
2346
- &::details-content {
2347
- block-size: 0;
2348
- opacity: 0;
2349
- overflow-y: clip;
2350
- transition: content-visibility var(--_accordion-transition-time)
2351
- allow-discrete,
2352
- opacity var(--_accordion-transition-time),
2353
- block-size var(--_accordion-transition-time);
2354
- }
2355
-
2356
- &[open]::details-content {
2357
- block-size: auto;
2358
- opacity: 1;
2359
- }
2360
- /***/
2361
-
2362
- & > summary {
2363
- background-color: inherit;
2364
- cursor: pointer;
2365
- font-weight: 700;
2366
- padding-block: var(--size-3);
2367
- user-select: none;
2368
- }
2369
-
2370
- /* Custom arrow */
2371
- /* summary {
2372
- align-items: center;
2373
- background-color: inherit;
2374
- cursor: pointer;
2375
- display: flex;
2376
- justify-content: space-between;
2377
- list-style: none;
2378
- padding-block: var(--size-3);
2379
- user-select: none;
2380
-
2381
- &::marker,
2382
- &::-webkit-details-marker {
2383
- display: none;
2384
- }
2385
-
2386
- svg {
2387
- transition: rotate 0.2s ease-out;
2388
- }
2389
- }
2390
-
2391
- &[open] > summary svg {
2392
- rotate: 180deg;
2393
- } */
2394
-
2395
- & > .content {
2396
- margin-block-start: 0;
2397
- padding-block: var(--size-2) var(--size-3);
2398
- }
2399
-
2400
- & > .actions {
2401
- display: flex;
2402
- gap: var(--size-1);
2403
- justify-content: end;
2404
- margin-block-start: var(--size-3);
2405
- padding-block-end: var(--size-1);
2406
- padding-inline: var(--size-3) var(--size-1);
2407
- }
2408
-
2409
- /* Variants */
2410
- &.card,
2411
- &.text {
2412
- --_bg-color: transparent;
2413
- --_margin-inline: var(--size-1);
2414
- }
2415
-
2416
- &.elevated {
2417
- --_bg-color: var(--surface-elevated);
2418
- --_margin-inline: 0;
2419
- --_shadow: var(--shadow-2);
2420
- }
2421
-
2422
- &.outlined {
2423
- --_bg-color: var(--surface-default);
2424
- --_margin-inline: 0;
2425
- border: 1px solid var(--border-color);
2426
- }
2427
-
2428
- &.tonal {
2429
- --_bg-color: var(--surface-tonal);
2430
- --_margin-inline: 0;
2431
- }
2432
-
2433
- &:where(.elevated, .outlined, .tonal) > * {
2434
- padding-inline: var(--size-3);
2435
- }
2436
- }
2437
-
2438
- /* Accordion group */
2439
- :where(.card:has(details)) {
2440
- --_gutter-color: var(--border-color);
2441
-
2442
- display: block;
2443
-
2444
- & > .content {
2445
- margin-block: 0;
2446
- padding: 0;
2447
- }
2448
-
2449
- &.card,
2450
- &.text {
2451
- &:not(.tonal, .outlined, .elevated) {
2452
- summary {
2453
- padding-inline: 0;
2454
- }
2455
- }
2456
- }
2457
-
2458
- details {
2459
- --_margin-inline: 0;
2460
-
2461
- border: 0;
2462
- box-shadow: none;
2463
-
2464
- & > * {
2465
- padding-inline: var(--size-3);
2466
- }
2467
-
2468
- /* Border between accordion items */
2469
- & + & {
2470
- summary {
2471
- border-radius: 0;
2472
- border-block-start: 1px solid var(--_gutter-color);
2473
- }
2474
- }
2475
-
2476
- /* First item */
2477
- &:first-of-type {
2478
- border-start-start-radius: var(--border-radius, 0.25rem);
2479
- border-start-end-radius: var(--border-radius, 0.25rem);
2480
- summary {
2481
- border-start-start-radius: var(--border-radius, 0.25rem);
2482
- border-start-end-radius: var(--border-radius, 0.25rem);
2483
- }
2484
- }
2485
-
2486
- /* Last item */
2487
- &:last-of-type {
2488
- border-end-start-radius: var(--border-radius, 0.25rem);
2489
- border-end-end-radius: var(--border-radius, 0.25rem);
2490
- summary {
2491
- border-end-start-radius: var(--border-radius, 0.25rem);
2492
- border-end-end-radius: var(--border-radius, 0.25rem);
2493
- }
2494
- }
2495
- }
2496
- }
2497
- }
2498
- @layer components.extended {
2499
- /*
2500
- Lists meant to be used stand-alone or as part of Select elements
2501
-
2502
- Intended use-case:
2503
- - ul.list > li
2504
- - .select > .list > option
2505
- */
2506
- :where(.list) {
2507
- --_bg-color: light-dark(var(--gray-1), var(--gray-15));
2508
-
2509
- background-color: var(--_bg-color);
2510
- list-style: none;
2511
- padding: var(--size-2) 0;
2512
-
2513
- @media (pointer: coarse) {
2514
- &,
2515
- * {
2516
- user-select: none;
2517
- }
2518
- }
2519
-
2520
- /* Borders on all list items */
2521
- &.bordered {
2522
- :where(li + li, option + option) {
2523
- margin-block-start: var(--size-3);
2524
- &::before {
2525
- block-size: 1px;
2526
- border-block-start: 1px solid var(--border-color);
2527
- content: "";
2528
- display: block;
2529
- inline-size: 100%;
2530
- inset: calc(-1 * var(--size-2)) 0 auto 0;
2531
- position: absolute;
2532
- visibility: visible; /* override select > option:before style */
2533
- }
2534
- }
2535
- }
2536
-
2537
- /* Dense - less gaps and spacing */
2538
- &.dense {
2539
- :where(li, option) {
2540
- gap: var(--size-2);
2541
- min-block-size: var(--size-7);
2542
- padding: var(--size-1) var(--size-2);
2543
-
2544
- &.border-top {
2545
- margin-block-start: var(--size-2);
2546
- &::before {
2547
- inset: calc(-1 * var(--size-1)) 0 auto 0;
2548
- }
2549
- }
2550
-
2551
- /* Clickable list item */
2552
- &:has(> a, > button, > label) {
2553
- min-block-size: auto;
2554
- padding: 0;
2555
- }
2556
-
2557
- & > :where(a, button, label) {
2558
- gap: var(--size-2);
2559
- min-block-size: var(--size-7);
2560
- padding: var(--size-1) var(--size-2);
2561
- }
2562
-
2563
- /* Checkbox / Radio */
2564
- & > label {
2565
- .end {
2566
- padding-inline-end: 0.125rem;
2567
- }
2568
- }
2569
-
2570
- /* Leading and trailing content */
2571
- .start,
2572
- .end {
2573
- .avatar {
2574
- max-inline-size: var(--size-6);
2575
- }
2576
-
2577
- .icon-button,
2578
- svg {
2579
- max-inline-size: var(--size-4);
2580
- }
2581
-
2582
- .checkbox,
2583
- .radio {
2584
- max-inline-size: var(--size-3);
2585
- }
2586
- }
2587
- }
2588
- }
2589
-
2590
- /* Gutterless */
2591
- &.gutterless {
2592
- :where(li, option) {
2593
- padding-inline: 0;
2594
-
2595
- & > :where(a, button, label) {
2596
- padding-inline: 0;
2597
- }
2598
- }
2599
- }
2600
-
2601
- /* List item */
2602
- :where(li, option, [role="group"] > label) {
2603
- align-items: center;
2604
- background: var(--_bg-color) var(--ripple, none);
2605
- display: flex;
2606
- font-size: var(--font-size-sm);
2607
- gap: var(--size-3);
2608
- isolation: isolate;
2609
- min-block-size: 40px;
2610
- padding: var(--size-2) var(--size-3);
2611
- position: relative;
2612
-
2613
- &::before {
2614
- display: none; /* removing checkmark from option */
2615
- }
2616
-
2617
- * {
2618
- font-size: inherit;
2619
- }
2620
-
2621
- /* Clickable list item */
2622
- &:has(> a, > button, > label) {
2623
- background: transparent;
2624
- display: block;
2625
- min-block-size: auto;
2626
- padding: 0;
2627
- }
2628
-
2629
- /* Select option */
2630
- &:where(option) {
2631
- align-items: center;
2632
- background-color: var(--_bg-color);
2633
- color: inherit;
2634
- cursor: pointer;
2635
- display: flex;
2636
- gap: var(--size-3);
2637
- inline-size: 100%;
2638
- margin: 0;
2639
- min-block-size: 40px;
2640
- padding: var(--size-2) var(--size-3);
2641
- text-align: start;
2642
- text-decoration: none;
2643
- z-index: 0;
2644
-
2645
- &:hover {
2646
- background-color: light-dark(var(--gray-2), var(--gray-14));
2647
- }
2648
-
2649
- &:checked {
2650
- background-color: oklch(from var(--primary) l c h / 30%);
2651
- }
2652
- }
2653
-
2654
- & > a,
2655
- & > button,
2656
- & > label {
2657
- align-items: center;
2658
- background: var(--_bg-color) var(--ripple, none);
2659
- color: inherit;
2660
- cursor: pointer;
2661
- display: flex;
2662
- gap: var(--size-3);
2663
- inline-size: 100%;
2664
- margin: 0;
2665
- min-block-size: 40px;
2666
- outline-offset: -3px;
2667
- padding: var(--size-2) var(--size-3);
2668
- text-align: start;
2669
- text-decoration: none;
2670
- z-index: 0;
2671
-
2672
- /*** Ripple effect */
2673
- background-position: center;
2674
- transition: background var(--button-ripple-duration);
2675
- &:where(:not(:active):hover) {
2676
- --ripple: radial-gradient(circle, transparent 1%, var(--_bg-color) 1%)
2677
- center/15000%;
2678
- }
2679
-
2680
- &:where(:hover:active) {
2681
- background-size: var(--button-ripple-size);
2682
- transition: background 0s;
2683
- }
2684
-
2685
- &:hover {
2686
- background-color: light-dark(var(--gray-2), var(--gray-14));
2687
- }
2688
-
2689
- /*** Remove ripple effect when trailing button is clicked */
2690
- &:has(.end:hover) {
2691
- &:where(:not(:active):hover) {
2692
- --ripple: none;
2693
- }
2694
- }
2695
- }
2696
-
2697
- /* Checkbox / Radio / Switch */
2698
- & > label {
2699
- .end {
2700
- padding-inline-end: var(--size-1);
2701
- }
2702
-
2703
- &:where(.checkbox, .radio) {
2704
- inline-size: 100%;
2705
- }
2706
-
2707
- &.switch {
2708
- --_dot-size: 0.75rem;
2709
- --_track-height: var(--size-4);
2710
- --_track-width: 2.5rem;
2711
- }
2712
- }
2713
-
2714
- /* Video */
2715
- &:has(video) {
2716
- padding: 0.75rem var(--size-3) 0.75rem 0;
2717
- }
2718
-
2719
- /* Border between list items */
2720
- &.border-top {
2721
- margin-block-start: var(--size-3);
2722
- &::before {
2723
- block-size: 1px;
2724
- border-block-start: 1px solid var(--border-color);
2725
- content: "";
2726
- display: block;
2727
- inline-size: 100%;
2728
- inset: calc(-1 * var(--size-2)) 0 auto 0;
2729
- position: absolute;
2730
- }
2731
- }
2732
-
2733
- /* Text */
2734
- .text {
2735
- flex: 1;
2736
- line-height: 1.6;
2737
-
2738
- :where(h1, h2, h3, h4, h5, h6, p, span) {
2739
- color: inherit;
2740
- font-weight: 400;
2741
- }
2742
-
2743
- p + p {
2744
- font-size: var(--font-size-xs);
2745
- }
2746
- }
2747
-
2748
- /* Leading content */
2749
- .start {
2750
- align-self: center;
2751
- align-items: center;
2752
- display: grid;
2753
- z-index: 1;
2754
-
2755
- &:has(svg) {
2756
- max-inline-size: var(--size-5);
2757
- }
2758
-
2759
- svg {
2760
- padding-block-start: 0.125rem;
2761
- }
2762
-
2763
- img {
2764
- aspect-ratio: 1;
2765
- inline-size: 56px;
2766
- object-fit: cover;
2767
- }
2768
-
2769
- video {
2770
- aspect-ratio: 16/9;
2771
- block-size: 64px;
2772
- object-fit: cover;
2773
- }
2774
- }
2775
-
2776
- /* Trailing content */
2777
- .end {
2778
- align-items: center;
2779
- display: flex;
2780
- font-size: var(--font-size-xs);
2781
- text-align: end;
2782
- z-index: 1;
2783
-
2784
- &:not(:has(a, button, input)) {
2785
- pointer-events: none;
2786
- }
2787
-
2788
- kbd {
2789
- background-color: transparent;
2790
- border: 0;
2791
- color: inherit;
2792
- opacity: 0.6;
2793
- }
2794
-
2795
- svg {
2796
- max-inline-size: var(--size-5);
2797
- inline-size: 100%;
2798
- }
2799
- }
2800
-
2801
- /* Inset */
2802
- &.inset {
2803
- .text {
2804
- padding-inline-start: calc(var(--size-5) + var(--size-3));
2805
- }
2806
-
2807
- /* Safety measure so it won't look bad if there for some reason should exist a leading element inside. */
2808
- .start {
2809
- display: none;
2810
- }
2811
- }
2812
- }
2813
- }
2814
- }
2815
- @layer components.extended {
2816
- :where(.alert) {
2817
- --_bg-color: var(--surface-tonal);
2818
- --_border-color: var(--surface-tonal);
2819
- --_color: var(--text-color-1);
2820
-
2821
- &.outlined {
2822
- --_bg-color: var(--surface-default);
2823
- --_border-color: var(--border-color);
2824
- --_color: var(--text-color-1);
2825
- }
2826
-
2827
- background-color: var(--_bg-color);
2828
- border: 1px solid var(--_border-color);
2829
- border-radius: var(--border-radius);
2830
- color: var(--_color);
2831
- padding: var(--size-3);
2832
-
2833
- & > .content {
2834
- display: grid;
2835
- gap: var(--size-2);
2836
- font-size: var(--font-size-sm);
2837
-
2838
- h1,
2839
- h2,
2840
- h3,
2841
- h4,
2842
- h5,
2843
- h6 {
2844
- color: inherit;
2845
- font-size: var(--font-size-md);
2846
- font-weight: 600;
2847
-
2848
- * {
2849
- font-size: inherit;
2850
- }
2851
- }
2852
- }
2853
-
2854
- /* Colors */
2855
- &.error,
2856
- &.ok,
2857
- &.warning {
2858
- --_bg-color: var(--color-4);
2859
- --_border-color: var(--color-9);
2860
- --_color: var(--color-15);
2861
-
2862
- &.outlined {
2863
- --_bg-color: var(--surface-default);
2864
- --_border-color: var(--color-9);
2865
- --_color: light-dark(var(--color-15), var(--color-1));
2866
- }
2867
-
2868
- svg {
2869
- margin-block-start: 0.15rem;
2870
- stroke: var(--color-9);
2871
- }
2872
- }
2873
-
2874
- /* Links
2875
- * Can't make sure contrast will be acceptable (yet) so we use the current text color instead.
2876
- */
2877
- &:not(.outlined) {
2878
- a[href] {
2879
- color: inherit;
2880
-
2881
- &:hover {
2882
- color: var(--primary);
2883
- }
2884
- }
2885
- }
2886
-
2887
- /* Icon */
2888
- &:has(svg) {
2889
- display: grid;
2890
- gap: var(--size-3);
2891
- grid-template-columns: var(--size-4) 1fr;
2892
-
2893
- svg {
2894
- margin-block-start: 0.15rem;
2895
- stroke: currentColor;
2896
- }
2897
- }
2898
- }
2899
- }
2900
- @layer components.extended {
2901
- :where(dialog) {
2902
- margin-block-start: 15%; /* vertical alignment */
2903
- padding-block: 0;
2904
- pointer-events: none;
2905
-
2906
- &::backdrop {
2907
- background-color: rgba(0, 0, 0, 0.5);
2908
- backdrop-filter: blur(5px);
2909
-
2910
- @media (prefers-reduced-motion: reduce) {
2911
- backdrop-filter: none;
2912
- }
2913
- }
2914
-
2915
- &:not([open]) {
2916
- display: none;
2917
- }
2918
-
2919
- &[open] {
2920
- pointer-events: all;
2921
- }
2922
-
2923
- .actions {
2924
- justify-content: end;
2925
- padding-inline: var(--size-3) var(--size-1);
2926
- }
2927
-
2928
- /* Animation */
2929
- /* There's no close animation, intentionally */
2930
- opacity: 0;
2931
-
2932
- &[open] {
2933
- opacity: 1;
2934
- transition: display 0.2s allow-discrete,
2935
- margin-block-start 0.3s var(--ease-1), overlay 0.2s allow-discrete,
2936
- opacity 0.2s var(--ease-out-1);
2937
-
2938
- @starting-style {
2939
- opacity: 0;
2940
- }
2941
- }
2942
-
2943
- @media (prefers-reduced-motion: no-preference) {
2944
- margin-block-start: 17%;
2945
- &[open] {
2946
- margin-block-start: 15%;
2947
-
2948
- @starting-style {
2949
- margin-block-start: 17%;
2950
- }
2951
- }
2952
- }
2953
- }
2954
-
2955
- :where(html:has(dialog[open])) {
2956
- overflow: hidden;
2957
- }
2958
- }
2959
- @layer components.extended {
2960
- :where(.snackbar) {
2961
- align-items: center;
2962
- /* Inverse surface-filled */
2963
- background-color: light-dark(var(--gray-15), var(--gray-2));
2964
- border-radius: var(--border-radius);
2965
- box-shadow: var(--shadow-2);
2966
- color: var(--text-color-1-contrast);
2967
- display: flex;
2968
- font-size: var(--font-size-sm);
2969
- gap: var(--size-3);
2970
- inset-block: auto var(--size-3);
2971
- inset-inline: var(--size-3) auto;
2972
- justify-content: space-between;
2973
- min-inline-size: min(100%, 37ch);
2974
- padding: var(--size-2) var(--size-3);
2975
- position: fixed;
2976
- inline-size: calc(100% - var(--size-6, 1.75rem));
2977
- z-index: 100;
2978
-
2979
- &::backdrop {
2980
- display: none;
2981
- }
2982
-
2983
- * {
2984
- word-break: break-word;
2985
- }
2986
-
2987
- /* Global positioning (in relation to the window) */
2988
- /*** Default (end-start) */
2989
- inset-block: auto var(--size-3);
2990
- inset-inline: 50% 0;
2991
- translate: -50% 0;
2992
-
2993
- &.start-start,
2994
- &.start-center,
2995
- &.start-end {
2996
- inset-block: var(--size-3) auto;
2997
- }
2998
-
2999
- /* TODO use @custom-media instead? */
3000
- @container (width > 480px) {
3001
- /* Default (end-start) */
3002
- inset-block: auto var(--size-7, 2rem);
3003
- inset-inline: var(--size-7, 2rem) auto;
3004
- translate: revert;
3005
- inline-size: fit-content;
3006
-
3007
- &.end-start,
3008
- &.end-end,
3009
- &.start-start,
3010
- &.start-end {
3011
- translate: revert;
3012
- }
3013
-
3014
- &.start-start {
3015
- inset-block: var(--size-7, 2rem) auto;
3016
- inset-inline: var(--size-7, 2rem) auto;
3017
- }
3018
- &.start-center {
3019
- inset-block: var(--size-7, 2rem) auto;
3020
- inset-inline: 50% 0;
3021
- translate: -50% 0;
3022
- }
3023
- &.start-end {
3024
- inset-block: var(--size-7, 2rem) auto;
3025
- inset-inline: auto var(--size-7, 2rem);
3026
- }
3027
- &.end-start {
3028
- inset-block-end: var(--size-7, 2rem);
3029
- inset-inline: var(--size-7, 2rem) auto;
3030
- }
3031
- &.end-center {
3032
- inset-block: auto var(--size-7, 2rem);
3033
- inset-inline: 50% 0;
3034
- translate: -50% 0;
3035
- }
3036
- &.end-end {
3037
- inset-block: auto var(--size-7, 2rem);
3038
- inset-inline: auto var(--size-7, 2rem);
3039
- }
3040
- }
3041
-
3042
- /* Absolute positioning */
3043
- &.absolute {
3044
- position: absolute;
3045
- }
3046
-
3047
- /* Actions */
3048
- .actions {
3049
- align-items: center;
3050
- display: flex;
3051
- flex-shrink: 0;
3052
- gap: var(--size-3);
3053
- padding-inline: 0;
3054
-
3055
- button {
3056
- /* Inverse hover and active backgrounds */
3057
- &:where(:not([disabled])) {
3058
- &:where(:not(:active):hover) {
3059
- --_bg-color: light-dark(
3060
- color-mix(in oklch, white 40%, black),
3061
- color-mix(in oklch, white 85%, black)
3062
- );
3063
- }
3064
-
3065
- &:where(:hover:active) {
3066
- --_bg-color: light-dark(
3067
- color-mix(in oklch, white 45%, black),
3068
- color-mix(in oklch, white 80%, black)
3069
- );
3070
- }
3071
- }
3072
- }
3073
-
3074
- button:not(:has(svg)) {
3075
- border-radius: var(--border-radius);
3076
- font-size: inherit;
3077
- max-block-size: var(--size-6, 1.5rem);
3078
- padding: 1ex;
3079
- }
3080
-
3081
- button:has(svg) {
3082
- color: inherit;
3083
- max-inline-size: var(--size-6, 1.75rem);
3084
- margin: var(--size-00);
3085
- padding: var(--size-1);
3086
- }
3087
- }
3088
-
3089
- /* Animations */
3090
- opacity: 0;
3091
- transition: display 0.075s allow-discrete, overlay 0.075s allow-discrete,
3092
- opacity 0.075s var(--ease-out-1);
3093
-
3094
- &:popover-open,
3095
- &:popover-open::backdrop,
3096
- &.visible {
3097
- opacity: 1;
3098
- transition: display 0.25s allow-discrete, overlay 0.25s allow-discrete,
3099
- opacity 0.25s var(--ease-out-1);
3100
-
3101
- @starting-style {
3102
- opacity: 0;
3103
- }
3104
- }
3105
- }
3106
- }
3107
- @layer components.extended {
3108
- /* Common styling for checkbox, radio and switch groups */
3109
- :where(fieldset.field-group) {
3110
- border: 0;
3111
- border-radius: 0;
3112
- gap: 0;
3113
- padding: 0;
3114
- z-index: 1;
3115
-
3116
- legend {
3117
- color: var(--text-color-2);
3118
- padding: 0 1ex 0 0;
3119
- }
3120
-
3121
- /* Disabled */
3122
- &[disabled] {
3123
- cursor: not-allowed;
3124
- opacity: 0.64;
3125
- user-select: none;
3126
-
3127
- input {
3128
- cursor: not-allowed;
3129
- }
3130
- }
3131
-
3132
- /* Validation */
3133
- &.error {
3134
- legend,
3135
- .supporting-text {
3136
- color: var(--color-9);
3137
- }
3138
- }
3139
-
3140
- /* Required */
3141
- &:has([required]) {
3142
- &:not(:has(input:where([type="radio"], [type="checkbox"]):checked)) {
3143
- legend {
3144
- position: relative;
3145
-
3146
- &::after {
3147
- color: var(--red);
3148
- content: "*";
3149
- inset: 0 -0.25ex auto auto;
3150
- position: absolute;
3151
- }
3152
- }
3153
- }
3154
- }
3155
- :where(.radio, .checkbox, .switch) .label:after {
3156
- display: none;
3157
- }
3158
-
3159
- /* Supporting text */
3160
- .supporting-text {
3161
- color: var(--text-color-2);
3162
- font-size: var(--font-size-xs);
3163
- line-height: 1.5;
3164
- z-index: 1;
3165
- }
3166
-
3167
- /* Fields */
3168
- .fields {
3169
- display: flex;
3170
- flex-direction: column;
3171
- gap: var(--size-2);
3172
-
3173
- * ~ & {
3174
- padding: var(--size-2) 0;
3175
- }
3176
- }
3177
-
3178
- :last-child {
3179
- padding-block-end: 0;
3180
- }
3181
-
3182
- /* Directions */
3183
- &.row {
3184
- .fields {
3185
- flex-direction: row;
3186
- }
3187
- }
3188
- }
3189
- }
3190
- @layer components.extended {
3191
- /*
3192
- - Common styling for input, textarea and select
3193
- - Form related styles such as: label, supporting text, error handling
3194
- */
3195
- :where(.field) {
3196
- --_accent-color: var(--primary);
3197
- --_bg-color: var(--surface-default);
3198
- --_border-color: var(--field-border-color);
3199
- --_field-padding-block: 0.75rem;
3200
- --_field-padding-inline: var(--size-2);
3201
- --_filled-border-color: var(--text-color-1);
3202
- --_height: var(--field-size);
3203
- --_label-color: var(--text-color-2);
3204
- --_supporting-text-color: var(--text-color-2);
3205
-
3206
- contain: layout;
3207
- display: inline-grid;
3208
- position: relative;
3209
-
3210
- /* Input/Select base */
3211
- & input,
3212
- & textarea,
3213
- & select {
3214
- background-color: var(--_bg-color);
3215
- block-size: var(--_height);
3216
- border-radius: var(--field-border-radius);
3217
- border: var(--field-border-width) solid var(--_border-color);
3218
- color: var(--text-color-1);
3219
- font-family: var(--font-sans);
3220
- font-size: var(--font-size-1);
3221
- grid-column: 1/-1;
3222
- grid-row: 1;
3223
- inline-size: 100%;
3224
- line-height: var(--font-lineheight-1);
3225
- min-inline-size: 0;
3226
- padding: var(--_field-padding-block) var(--_field-padding-inline);
3227
-
3228
- @media (prefers-reduced-motion: no-preference) {
3229
- transition: border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
3230
- padding-block 0.2s var(--ease-3);
3231
- }
3232
- }
3233
-
3234
- /* Required/Invalid */
3235
- &:has(
3236
- :not(:placeholder-shown):invalid,
3237
- :where(
3238
- :placeholder-shown,
3239
- option[value=""]:not(:checked),
3240
- option:checked:not([value=""])
3241
- ):required
3242
- ) {
3243
- .label:after {
3244
- color: var(--red);
3245
- content: "*";
3246
- margin: -0.25em auto auto 0.25em;
3247
- }
3248
- }
3249
-
3250
- /* File */
3251
- &:has(input[type="file"]) {
3252
- cursor: pointer;
3253
-
3254
- input {
3255
- align-self: flex-start;
3256
- block-size: var(--_height);
3257
- box-shadow: none;
3258
- color: var(--text-color-1);
3259
- cursor: inherit;
3260
- max-inline-size: 100%;
3261
- padding: 0;
3262
- transition: font-size 0.2s var(--ease-3);
3263
-
3264
- &::-webkit-file-upload-button,
3265
- &::file-selector-button {
3266
- background-color: var(--surface-tonal);
3267
- border: none;
3268
- block-size: calc(100% - var(--size-2) * 2);
3269
- border-radius: var(--field-border-radius);
3270
- cursor: pointer;
3271
- margin-inline-end: 1ex;
3272
- margin-block-start: var(--size-2);
3273
- margin-inline-start: var(--size-2);
3274
- }
3275
- }
3276
-
3277
- /* Variants */
3278
- &.filled {
3279
- input {
3280
- &::-webkit-file-upload-button,
3281
- &::file-selector-button {
3282
- background-color: var(--surface-default);
3283
- block-size: calc(100% - var(--size-2) * 2);
3284
- border-radius: var(--field-border-radius);
3285
- cursor: pointer;
3286
- margin-block-start: var(--size-2);
3287
- }
3288
- }
3289
- }
3290
-
3291
- /* Sizes */
3292
- &.small {
3293
- input {
3294
- font-size: var(--font-size-sm);
3295
- &::-webkit-file-upload-button,
3296
- &::file-selector-button {
3297
- block-size: calc(100% - var(--size-2));
3298
- margin-block-start: var(--size-1);
3299
- }
3300
- }
3301
- }
3302
- }
3303
-
3304
- /* Autosuggest */
3305
- &:has(input[list]) {
3306
- .label {
3307
- /* Make sure chevron is visible */
3308
- inline-size: calc(100% - var(--size-6));
3309
- }
3310
- }
3311
-
3312
- /* Select */
3313
- &:has(select) {
3314
- .label {
3315
- /* Make sure chevron is visible */
3316
- inline-size: calc(100% - var(--size-6));
3317
- }
3318
- }
3319
-
3320
- /* Experimental Select */
3321
- &:has(select button) {
3322
- select {
3323
- padding: 0;
3324
-
3325
- button {
3326
- outline: 0;
3327
- padding: var(--_field-padding-block) var(--size-8)
3328
- var(--_field-padding-block) var(--_field-padding-inline);
3329
- }
3330
- }
3331
- }
3332
-
3333
- /* Non-experimental Select */
3334
- &:has(select):not(:has(button)) {
3335
- select {
3336
- padding: var(--_field-padding-block) var(--size-8)
3337
- var(--_field-padding-block) var(--_field-padding-inline);
3338
- }
3339
- }
3340
-
3341
- /* Input - color */
3342
- &:has(input[type="color"]) {
3343
- input {
3344
- appearance: none;
3345
- background: none;
3346
- block-size: var(--_height);
3347
- overflow: hidden;
3348
- padding: 0;
3349
-
3350
- &::-webkit-color-swatch {
3351
- border: none;
3352
- }
3353
-
3354
- &::-webkit-color-swatch-wrapper {
3355
- padding: 0;
3356
- }
3357
- }
3358
-
3359
- .label {
3360
- border: 1px solid var(--field-border-color);
3361
- inline-size: fit-content;
3362
- margin-inline-start: var(--size-2);
3363
- }
3364
- }
3365
-
3366
- /* Textarea */
3367
- &:has(textarea) {
3368
- .label {
3369
- align-self: start;
3370
- margin-block-start: var(--_field-padding-block);
3371
- }
3372
- }
3373
-
3374
- /*
3375
- * Variant: Outlined
3376
- */
3377
- &:not(.filled) {
3378
- /* Element states */
3379
- &:hover {
3380
- &:not(.error) {
3381
- :where(input, textarea, select) {
3382
- --_border-color: var(--text-color-1);
3383
- }
3384
- }
3385
- }
3386
- }
3387
-
3388
- &:not(.filled):focus-within {
3389
- & input,
3390
- & textarea,
3391
- & select {
3392
- border-color: var(--_accent-color);
3393
- outline-offset: -2px;
3394
- outline: 2px solid var(--_accent-color);
3395
- }
3396
- }
3397
-
3398
- /* Label */
3399
- .label {
3400
- align-self: center;
3401
- background-color: var(--_bg-color);
3402
- border-radius: var(--field-border-radius);
3403
- color: var(--_label-color);
3404
- border-radius: var(--radius-1);
3405
- display: inline-flex;
3406
- font-size: var(--font-size-md);
3407
- grid-column: 1/-1;
3408
- grid-row: 1;
3409
- inline-size: calc(100% - (var(--field-border-width) * 2));
3410
- margin-inline-start: var(--field-border-width);
3411
- padding-inline: var(--_field-padding-inline);
3412
- pointer-events: none;
3413
- z-index: 1;
3414
-
3415
- @media (prefers-reduced-motion: no-preference) {
3416
- transition: border-color 0.2s var(--ease-3),
3417
- font-size 0.2s var(--ease-3), inline-size 0.05s var(--ease-3),
3418
- margin 0.2s var(--ease-3), padding-inline 0.2s var(--ease-3);
3419
- }
3420
- }
3421
-
3422
- /*
3423
- * Label transitions
3424
- * Triggered by:
3425
- * - focus
3426
- * - filled form fields (except color inputs)
3427
- * - non-empty select options
3428
- */
3429
- &:focus-within,
3430
- &:has(:where(input:not([type="color"]), textarea):not(:placeholder-shown)),
3431
- &:has(option[value=""]:not(:checked)),
3432
- &:has(option:checked:not([value=""])) {
3433
- .label {
3434
- border-color: transparent;
3435
- color: var(--_accent-color);
3436
- font-size: 0.75rem;
3437
- inline-size: max-content;
3438
- letter-spacing: 0.15px;
3439
- line-height: 1.15;
3440
- margin-block-start: -2.7rem;
3441
- margin-inline-start: var(--_field-padding-inline);
3442
- padding-inline: 0.125rem;
3443
- }
3444
-
3445
- /* Neutral label color reset */
3446
- &:not(:focus-within):not(.error) {
3447
- .label {
3448
- color: var(--text-color-2);
3449
- }
3450
- }
3451
-
3452
- &:has(textarea) {
3453
- .label {
3454
- margin-block-start: -0.35rem;
3455
- }
3456
-
3457
- &.small {
3458
- .label {
3459
- align-self: start;
3460
- margin-block-start: var(--_field-padding-block);
3461
- }
3462
- }
3463
- }
3464
- }
3465
-
3466
- /* Supporting text */
3467
- .supporting-text {
3468
- color: var(--_supporting-text-color);
3469
- font-size: var(--font-size-xs);
3470
- grid-row: 3;
3471
- line-height: 1.5;
3472
- margin-inline-start: var(--field-border-width);
3473
- padding-inline: var(--_field-padding-inline);
3474
- z-index: 1;
3475
- }
3476
-
3477
- /* Auto-fit */
3478
- &.auto-fit {
3479
- inline-size: auto;
3480
- :where(& input, & textarea) {
3481
- field-sizing: content;
3482
- }
3483
- }
3484
-
3485
- /* Validation */
3486
- &.error {
3487
- --_accent-color: var(--color-9);
3488
- --_border-color: var(--color-9);
3489
- --_filled-border-color: var(--color-9);
3490
- --_label-color: var(--color-9);
3491
- --_supporting-text-color: var(--color-9);
3492
- }
3493
-
3494
- /*
3495
- * Variant: Filled
3496
- */
3497
- &.filled {
3498
- --_bg-color: var(--surface-tonal);
3499
- *:focus-visible {
3500
- outline: 0;
3501
- }
3502
-
3503
- /* Base style */
3504
- & input,
3505
- & textarea,
3506
- & select {
3507
- border-block-end-color: var(--_filled-border-color);
3508
- border-block-start-color: transparent;
3509
- border-inline-color: transparent;
3510
- border-radius: 0;
3511
- }
3512
-
3513
- & input[type="color"] {
3514
- border-inline: none;
3515
- }
3516
-
3517
- /* Bottom line */
3518
- &::before {
3519
- background-color: var(--_filled-border-color);
3520
- block-size: calc(var(--field-border-width) + 1px);
3521
- content: "";
3522
- inline-size: 100%;
3523
- margin-block-end: calc(-1 * (var(--field-border-width) * 2));
3524
- transform: scaleX(0);
3525
- translate: 0 calc(-1 * (var(--field-border-width) * 2));
3526
- z-index: 1;
3527
-
3528
- @media (prefers-reduced-motion: no-preference) {
3529
- transition: transform 0.3s var(--ease-3), translate 0.2s var(--ease-3);
3530
- }
3531
- }
3532
-
3533
- /* Label */
3534
- .label {
3535
- background-color: var(--_bg-color);
3536
- }
3537
-
3538
- &:not(:has([disabled], :has(input[type="color"]))) {
3539
- /* Hover */
3540
- &:hover {
3541
- --_bg-color: light-dark(
3542
- oklch(from var(--surface-tonal) calc(l * 0.93) c h),
3543
- oklch(from var(--surface-tonal) calc(l * 1.1) c h)
3544
- );
3545
- }
3546
- }
3547
-
3548
- /*
3549
- * Label transitions
3550
- * Triggered by:
3551
- * - focus
3552
- * - filled form fields (except color inputs)
3553
- * - non-empty select options
3554
- */
3555
- &:has(.label) {
3556
- &:focus-within,
3557
- &:has(
3558
- :where(input:not(:where([type="color"])), textarea):not(
3559
- :placeholder-shown
3560
- )
3561
- ),
3562
- &:has(option[value=""]:not(:checked)),
3563
- &:has(option:checked:not([value=""])) {
3564
- :where(input, textarea) {
3565
- padding-block: calc(var(--_field-padding-block) * 1.7)
3566
- calc(var(--_field-padding-block) * 0.3);
3567
- }
3568
-
3569
- select > button,
3570
- select:not(:has(button)) {
3571
- padding-block: calc(var(--_field-padding-block) * 1.7)
3572
- calc(var(--_field-padding-block) * 0.3);
3573
- }
3574
-
3575
- .label {
3576
- margin-block-start: calc(-1 * var(--size-5));
3577
- margin-inline-start: calc(var(--_field-padding-inline) / 2);
3578
- padding-inline: calc(var(--_field-padding-inline) / 2);
3579
- }
3580
-
3581
- &:has(textarea) {
3582
- .label {
3583
- margin-block-start: var(--size-1);
3584
- }
3585
- }
3586
- }
3587
- }
3588
-
3589
- /* Element states */
3590
- &:hover {
3591
- &::before {
3592
- transform: scaleX(1);
3593
- }
3594
- }
3595
- &:focus-within {
3596
- & input,
3597
- & textarea,
3598
- & select {
3599
- border-block-end-color: var(--_accent-color);
3600
- }
3601
-
3602
- &::before {
3603
- background-color: var(--_accent-color);
3604
- transform: scaleX(1) translateX(0px);
3605
- }
3606
- }
3607
- }
3608
-
3609
- /* Disabled */
3610
- &:where(:has([disabled])) {
3611
- &::before {
3612
- display: none;
3613
- }
3614
- :where(input, textarea, select) {
3615
- cursor: not-allowed;
3616
- opacity: 0.7;
3617
-
3618
- * {
3619
- pointer-events: none;
3620
- }
3621
- }
3622
- }
3623
-
3624
- /* Read-only */
3625
- &:where(:has([readonly])) {
3626
- &::before {
3627
- display: none;
3628
- }
3629
- :where(input, textarea, select) {
3630
- cursor: not-allowed;
3631
-
3632
- * {
3633
- pointer-events: none;
3634
- }
3635
- }
3636
- }
3637
-
3638
- /* Sizes */
3639
- &.small {
3640
- --_field-padding-block: var(--size-2);
3641
- --_height: var(--field-size-small);
3642
-
3643
- &:has(input[type="color"]) {
3644
- .label {
3645
- line-height: 1.5;
3646
- }
3647
- }
3648
-
3649
- &:has(textarea) {
3650
- .label {
3651
- align-self: center;
3652
- margin-block-start: unset;
3653
- }
3654
- }
3655
-
3656
- /*
3657
- * Label transitions
3658
- * Triggered by:
3659
- * - focus
3660
- * - filled form fields (except color inputs)
3661
- * - non-empty select options
3662
- */
3663
- &:focus-within,
3664
- &:has(
3665
- :where(input:not([type="color"]), textarea):not(:placeholder-shown)
3666
- ),
3667
- &:has(option[value=""]:not(:checked)),
3668
- &:has(option:checked:not([value=""])) {
3669
- .label {
3670
- margin-block-start: -2.2rem;
3671
- margin-inline-start: var(--size-1);
3672
- padding-inline: var(--size-1);
3673
- }
3674
-
3675
- &:not(.filled):has(textarea) {
3676
- .label {
3677
- margin-block-start: -0.35rem;
3678
- }
3679
- }
3680
- }
3681
- }
3682
- }
3683
- }
3684
- @layer components.extended {
3685
- :where(.field > select) {
3686
- position: relative;
3687
-
3688
- /* Default arrow */
3689
- &::picker-icon {
3690
- block-size: 0;
3691
- border-block-start: 5px solid;
3692
- border-inline: 5px solid transparent;
3693
- color: currentColor;
3694
- content: "";
3695
- inline-size: 0;
3696
- inset: 50% var(--size-3) auto auto;
3697
- pointer-events: none;
3698
- position: absolute;
3699
- translate: 0 -50%;
3700
- }
3701
-
3702
- &:open {
3703
- &::picker-icon {
3704
- rotate: 180deg;
3705
- }
3706
- }
3707
-
3708
- /* Select popover */
3709
- &::picker(select) {
3710
- /* Animation on-stage styles */
3711
- border: 0;
3712
- box-shadow: var(--shadow-2);
3713
- opacity: 1;
3714
- padding: 0;
3715
- scale: 1;
3716
-
3717
- /* Animation starting styles */
3718
- @starting-style {
3719
- opacity: 0;
3720
- transform: scale(0.9);
3721
- }
3722
-
3723
- @media (prefers-reduced-motion: no-preference) {
3724
- transition: display 0.2s allow-discrete, opacity 0.2s var(--ease-3),
3725
- overlay 0.2s allow-discrete, scale 0.2s var(--ease-3);
3726
- }
3727
- }
3728
-
3729
- /* Animation off-stage styles */
3730
- &:not(:open)::picker(select) {
3731
- opacity: 0;
3732
- scale: 0.9;
3733
- }
3734
-
3735
- button {
3736
- background-color: transparent;
3737
- display: flex;
3738
- inline-size: 100%;
3739
- margin: 0;
3740
- position: relative;
3741
-
3742
- selectedcontent {
3743
- overflow: hidden;
3744
- text-overflow: ellipsis;
3745
- white-space: nowrap;
3746
- }
3747
- }
3748
-
3749
- .list {
3750
- /* Groups */
3751
- [role="group"] {
3752
- label {
3753
- background-color: light-dark(var(--gray-3), var(--gray-13));
3754
- color: light-dark(
3755
- oklch(from var(--text-color-1) calc(l * 0.75) c h),
3756
- oklch(from var(--text-color-1) calc(l * 1.25) c h)
3757
- );
3758
- font-weight: 500;
3759
- overflow: hidden;
3760
- padding-inline: var(--size-2);
3761
- text-overflow: ellipsis;
3762
- white-space: nowrap;
3763
- }
3764
-
3765
- &:not(:first-child),
3766
- option:first-of-type {
3767
- margin-block-start: var(--size-2);
3768
- }
3769
-
3770
- option:last-of-type,
3771
- &:last-child {
3772
- option:last-of-type {
3773
- margin-block-end: 0;
3774
- }
3775
- }
3776
- }
3777
-
3778
- /* Option */
3779
- option {
3780
- /* Checkmark */
3781
- /* TODO - checkmark should be the final version of the checkmark API. Follow the development of this and remove redundant psuedo stuff. */
3782
- &::check {
3783
- display: none;
3784
- }
3785
- &::checkmark {
3786
- display: none;
3787
- }
3788
- &::before {
3789
- display: none;
3790
- }
3791
-
3792
- &:focus-visible {
3793
- outline-offset: -1px;
3794
- }
3795
- }
3796
- }
3797
- }
3798
-
3799
- :where(.field:has(> select)) {
3800
- /* Size */
3801
- &.small {
3802
- button {
3803
- padding-block: var(--size-1);
3804
- padding-inline: var(--size-2) var(--size-7);
3805
-
3806
- &::after {
3807
- inset-inline-end: var(--size-2);
3808
- }
3809
- }
3810
- }
3811
-
3812
- /*
3813
- * Non-experimental Select
3814
- *
3815
- * 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`.
3816
- */
3817
- &:not(:has(button)) {
3818
- select {
3819
- appearance: none;
3820
- }
3821
-
3822
- /* Arrow */
3823
- &::after {
3824
- align-self: center;
3825
- block-size: 0;
3826
- border-block-start: 5px solid;
3827
- border-inline: 5px solid transparent;
3828
- content: "";
3829
- display: inline-block;
3830
- flex-shrink: 0;
3831
- grid-column: 1/-1;
3832
- grid-row: 1;
3833
- inline-size: 0;
3834
- inset-inline-end: var(--size-3);
3835
- justify-self: end;
3836
- pointer-events: none;
3837
- position: relative;
3838
- }
3839
- }
3840
- }
3841
-
3842
- select:has(button),
3843
- ::picker(select) {
3844
- appearance: base-select;
3845
- }
3846
- }
3847
- @layer components.extended {
3848
- :where(
3849
- .field:has(
3850
- :where(
3851
- input[type="date"],
3852
- input[type="datetime-local"],
3853
- input[type="email"],
3854
- input[type="month"],
3855
- input[type="number"],
3856
- input[type="password"],
3857
- input[type="search"],
3858
- input[type="tel"],
3859
- input[type="text"],
3860
- input[type="time"],
3861
- input[type="url"],
3862
- input[type="week"]
3863
- )
3864
- )
3865
- ) {
3866
- /* Sizes */
3867
- &.small {
3868
- input {
3869
- padding-inline: var(--size-2);
3870
- }
3871
- }
3872
- }
3873
-
3874
- /* Autosuggest */
3875
- :where(.field:has(input[list])) {
3876
- /* Hide native arrow */
3877
- input::-webkit-calendar-picker-indicator {
3878
- opacity: 0;
3879
- position: absolute;
3880
- cursor: pointer;
3881
- pointer-events: none;
3882
- }
3883
- }
3884
- :where(
3885
- .field:has(input[list]:placeholder-shown),
3886
- .field:has(input[list]):where(:focus-within, :hover)
3887
- ) {
3888
- /* Arrow */
3889
- &::after {
3890
- block-size: 0;
3891
- border-block-start: 5px solid;
3892
- border-inline: 5px solid transparent;
3893
- content: "";
3894
- display: inline-block;
3895
- flex-shrink: 0;
3896
- inline-size: 0;
3897
- inset: 50% var(--size-3) auto auto;
3898
- pointer-events: none;
3899
- position: absolute;
3900
- translate: 0 -50%;
3901
- }
3902
- }
3903
- }
3904
- @layer components.extended {
3905
- :where(.field:has(textarea)) {
3906
- textarea {
3907
- block-size: auto;
3908
- field-sizing: content;
3909
- min-block-size: 5rem;
3910
- resize: vertical;
3911
- }
3912
-
3913
- /* Size */
3914
- &.small {
3915
- textarea {
3916
- min-block-size: var(--_height);
3917
- }
3918
- }
3919
-
3920
- /* Auto-fit */
3921
- &.auto-fit {
3922
- textarea {
3923
- min-block-size: var(--_height);
3924
- resize: both;
3925
- }
3926
- }
3927
- }
3928
- }
3929
- @layer components.extended {
3930
- @scope (.rich-text) to (.not-rich-text) {
3931
- a {
3932
- color: var(--primary);
3933
- cursor: pointer;
3934
- font-size: inherit;
3935
- font-weight: 700;
3936
- line-height: inherit;
3937
- text-decoration: underline;
3938
- text-decoration-color: var(--primary);
3939
- text-underline-offset: 2px;
3940
-
3941
- &[href] {
3942
- &:hover,
3943
- &:focus-visible {
3944
- color: var(--primary-light);
3945
- }
3946
- }
3947
- }
3948
-
3949
- /* Blockquote */
3950
- blockquote {
3951
- font-size: inherit;
3952
- line-height: inherit;
3953
- :first-child {
3954
- margin-block-start: 0;
3955
- }
3956
-
3957
- :last-child {
3958
- margin-block-end: 0;
3959
- }
3960
- }
3961
-
3962
- /* Text */
3963
- p {
3964
- font-size: inherit;
3965
- line-height: inherit;
3966
- margin-block: 1.25em;
3967
- }
3968
-
3969
- :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) {
3970
- color: var(--text-color-1);
3971
-
3972
- & + *:not(&) {
3973
- margin-block-start: 0;
3974
- }
3975
- }
3976
-
3977
- h1,
3978
- .h1 {
3979
- font-size: var(--font-size-h1, var(--font-size-7));
3980
- letter-spacing: -0.02em;
3981
- line-height: 1.1111111;
3982
- margin-block: 0 0.8888889em;
3983
- }
3984
-
3985
- h2,
3986
- .h2 {
3987
- font-size: var(--font-size-h2, var(--font-size-5, 2rem));
3988
- letter-spacing: -0.02em;
3989
- line-height: 1.3333333;
3990
- margin-block: 2em 1em;
3991
- }
3992
-
3993
- h3,
3994
- .h3 {
3995
- font-size: var(--font-size-h3, var(--font-size-4, 1.5rem));
3996
- letter-spacing: -0.01em;
3997
- line-height: 1.6;
3998
- margin-block: 1.6em 0.6em;
3999
- }
4000
-
4001
- h4,
4002
- .h4 {
4003
- font-size: var(--font-size-h4, var(--font-size-3, 1.25rem));
4004
- letter-spacing: -0.01em;
4005
- line-height: 1.5;
4006
- margin-block: 1.5em 0.5em;
4007
- }
4008
-
4009
- h5,
4010
- .h5 {
4011
- font-size: var(--font-size-h5, var(--font-size-2, 1.1rem));
4012
- line-height: 1;
4013
- margin-block: 0 var(--size-1);
4014
- }
4015
-
4016
- h6,
4017
- .h6 {
4018
- font-size: var(--font-size-h6, var(--font-size-1, 1rem));
4019
- line-height: 1;
4020
- margin-block: 0 var(--size-1);
4021
- }
4022
-
4023
- /** Overline */
4024
- :where(.overline, hgroup > :where(p, .p):first-of-type:first-child) {
4025
- color: light-dark(
4026
- oklch(from var(--text-color-2) calc(l * 1.25) c h),
4027
- oklch(from var(--text-color-2) calc(l * 0.75) c h)
4028
- );
4029
- font-size: var(--font-size-xs);
4030
- font-weight: 500;
4031
- letter-spacing: 0.06em;
4032
- line-height: 2.5;
4033
- text-transform: uppercase;
4034
- }
4035
-
4036
- hgroup {
4037
- & > p {
4038
- margin: 0;
4039
- }
4040
-
4041
- & > :where(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) {
4042
- margin-block-end: 0.4em;
4043
- }
4044
-
4045
- & + * {
4046
- margin-block-start: 3em;
4047
- }
4048
-
4049
- /* The second p element */
4050
- & > :where(p, .p):last-of-type:last-child:not(:first-child) {
4051
- color: oklch(from currentColor l c h / 75%);
4052
- font-size: var(--font-size-lg);
4053
- line-height: 1.6;
4054
- }
4055
- }
4056
-
4057
- /* Lists */
4058
- ul:not([class]) {
4059
- list-style-type: disc;
4060
- }
4061
-
4062
- ol:not([class]) {
4063
- list-style-type: decimal;
4064
- }
4065
-
4066
- :where(ul, ol):not([class]) {
4067
- display: grid;
4068
- font-size: inherit;
4069
- gap: 0.5em;
4070
- line-height: inherit;
4071
- margin-block-start: 1.25em;
4072
- margin-block-end: 1.25em;
4073
- padding-inline-start: 1.625em;
4074
-
4075
- li {
4076
- padding-inline-start: 0.375em;
4077
- }
4078
- }
4079
-
4080
- /* Nested lists */
4081
- :where(ul ul),
4082
- :where(ul ol),
4083
- :where(ol ul),
4084
- :where(ol ol) {
4085
- margin-block-start: 0.75em;
4086
- margin-block-end: 0.75em;
4087
- }
4088
-
4089
- /* Description lists */
4090
- :where(dl) {
4091
- font-size: inherit;
4092
- line-height: inherit;
4093
- margin-block-start: 1.25em;
4094
- margin-block-end: 1.25em;
4095
-
4096
- dt {
4097
- margin-block-start: 1.25em;
4098
- }
4099
-
4100
- dd {
4101
- margin-block-start: 0.5em;
4102
- padding-inline-start: 1.625em;
4103
- }
4104
- }
4105
-
4106
- /* Figures */
4107
- figure {
4108
- margin-block: 2em;
4109
-
4110
- & > * {
4111
- margin-block: 0;
4112
- }
4113
-
4114
- & figcaption {
4115
- font-size: 0.875em;
4116
- line-height: 1.4285714;
4117
- margin-block-start: 0.8571429em;
4118
- }
4119
- }
4120
-
4121
- /* Remove top margin from first child */
4122
- & > :first-child {
4123
- margin-block-start: 0;
4124
- }
4125
-
4126
- /* Remove bottom margin from last child */
4127
- & > :last-child {
4128
- margin-block-end: 0;
4129
- }
4130
-
4131
- /* Horizontal rules */
4132
- hr {
4133
- & + * {
4134
- margin-block-start: 0;
4135
- }
4136
- }
4137
- }
4138
- }
4139
- /* Setup */
4140
- /*
4141
- theme one theme setup
4142
- */
4143
- @layer theme {
4144
- .light {
4145
- --color-scheme: light;
4146
- }
4147
- .dark {
4148
- --color-scheme: dark;
4149
- }
4150
-
4151
- :where(html) {
4152
- color-scheme: var(--color-scheme, light dark);
4153
-
4154
- --palette-hue: var(--oklch-teal);
4155
- --palette-hue-rotate-by: 5;
4156
- --palette-chroma: 0.89;
4157
-
4158
- /* Primary */
4159
- --primary: var(--color-8);
4160
- --primary-light: oklch(from var(--primary) calc(l * 1.25) c h);
4161
- --primary-dark: oklch(from var(--primary) calc(l * 0.75) c h);
4162
- --primary-contrast: var(--gray-1);
4163
-
4164
- /* Text */
4165
- --text-color-1: light-dark(var(--gray-15), var(--gray-1));
4166
- --text-color-1-contrast: light-dark(var(--gray-2), var(--gray-15));
4167
- --text-color-2: light-dark(var(--gray-13), var(--gray-4));
4168
- --text-color-2-contrast: light-dark(var(--gray-4), var(--gray-13));
4169
-
4170
- /* Surface */
4171
- --surface-default: light-dark(var(--gray-1), var(--gray-13));
4172
- --surface-filled: light-dark(var(--gray-3), var(--gray-15));
4173
- --surface-tonal: light-dark(var(--gray-3), var(--gray-12));
4174
- --surface-elevated: light-dark(var(--gray-1), var(--gray-12));
4175
-
4176
- /* Shadows */
4177
- --shadow-color: light-dark(220 3% 15%, 220 40% 2%);
4178
- --shadow-strength: light-dark(1%, 10%);
4179
- --inner-shadow-highlight: light-dark(
4180
- inset 0 -0.5px 0 0 #fff,
4181
- inset 0 0.5px 0 0 #0001,
4182
- inset 0 -0.5px 0 0 #fff1,
4183
- inset 0 0.5px 0 0 #0007
4184
- );
4185
-
4186
- /* Typography */
4187
- --font-size-h1: var(--font-size-fluid-3, 3.5rem);
4188
- --font-size-h2: var(--font-size-fluid-2, 2rem);
4189
- --font-size-h3: var(--font-size-fluid-1, 1.5rem);
4190
- --font-size-h4: var(--font-size-3, 1.25rem);
4191
- --font-size-h5: var(--font-size-2, 1.1rem);
4192
- --font-size-h6: var(--font-size-fluid-0, 1rem);
4193
- --font-size-lg: var(--font-size-3, 1.25rem);
4194
- --font-size-md: var(--font-size-fluid-0, 1rem);
4195
- --font-size-sm: 0.875rem;
4196
- --font-size-xs: var(--font-size-0, 0.75rem);
4197
-
4198
- /* Borders */
4199
- --border-color: light-dark(var(--gray-4), var(--gray-12));
4200
- --border-radius: var(--size-1);
4201
- --border-width: 1px;
4202
-
4203
- /* Input Field */
4204
- --field-border-color: var(--border-color);
4205
- --field-border-radius: var(--size-1);
4206
- --field-border-width: 1px;
4207
- --field-size: 2.3lh;
4208
- --field-size-small: 1.9lh;
4209
-
4210
- /* Button */
4211
- --button-border-radius: var(--radius-round);
4212
- /* Ripple effect */
4213
- @media (prefers-reduced-motion: no-preference) {
4214
- --button-ripple-size: 100%;
4215
- --button-ripple-duration: 0.5s;
4216
- }
4217
- }
4218
-
4219
- /* Highlight colors */
4220
- :where(.red, .error, del) {
4221
- --palette-hue: var(--oklch-red, 25);
4222
- --palette-chroma: 1;
4223
- --palette-hue-rotate-by: 1;
4224
- }
4225
- :where(.blue, .ok, abbr, dfn) {
4226
- --palette-hue: var(--oklch-blue, 210);
4227
- --palette-chroma: 1;
4228
- --palette-hue-rotate-by: 1;
4229
- }
4230
- :where(.green, .good, ins) {
4231
- --palette-hue: var(--oklch-green, 145);
4232
- --palette-chroma: 1;
4233
- --palette-hue-rotate-by: 1;
4234
- }
4235
- :where(.orange, .warning) {
4236
- --palette-hue: var(--oklch-orange, 75);
4237
- --palette-chroma: 1;
4238
- --palette-hue-rotate-by: 1;
4239
- }
4240
-
4241
- :where(html) {
4242
- --red: oklch(from var(--color-9) l 0.2 25);
4243
- --blue: oklch(from var(--color-9) l 0.2 210);
4244
- --green: oklch(from var(--color-9) l 0.2 145);
4245
- --orange: oklch(from var(--color-7) l 0.2 75);
4246
- }
4247
-
4248
- /* Gray palette */
4249
- :where(html) {
4250
- --gray-chroma: 0.01;
4251
- --gray-lightness: 255;
4252
-
4253
- --gray-1: oklch(
4254
- from var(--color-1) l var(--gray-chroma) var(--gray-lightness)
4255
- );
4256
- --gray-2: oklch(
4257
- from var(--color-2) l var(--gray-chroma) var(--gray-lightness)
4258
- );
4259
- --gray-3: oklch(
4260
- from var(--color-3) l var(--gray-chroma) var(--gray-lightness)
4261
- );
4262
- --gray-4: oklch(
4263
- from var(--color-4) l var(--gray-chroma) var(--gray-lightness)
4264
- );
4265
- --gray-5: oklch(
4266
- from var(--color-5) l var(--gray-chroma) var(--gray-lightness)
4267
- );
4268
- --gray-6: oklch(
4269
- from var(--color-6) l var(--gray-chroma) var(--gray-lightness)
4270
- );
4271
- --gray-7: oklch(
4272
- from var(--color-7) l var(--gray-chroma) var(--gray-lightness)
4273
- );
4274
- --gray-8: oklch(
4275
- from var(--color-8) l var(--gray-chroma) var(--gray-lightness)
4276
- );
4277
- --gray-9: oklch(
4278
- from var(--color-9) l var(--gray-chroma) var(--gray-lightness)
4279
- );
4280
- --gray-10: oklch(
4281
- from var(--color-10) l var(--gray-chroma) var(--gray-lightness)
4282
- );
4283
- --gray-11: oklch(
4284
- from var(--color-11) l var(--gray-chroma) var(--gray-lightness)
4285
- );
4286
- --gray-12: oklch(
4287
- from var(--color-12) l var(--gray-chroma) var(--gray-lightness)
4288
- );
4289
- --gray-13: oklch(
4290
- from var(--color-13) l var(--gray-chroma) var(--gray-lightness)
4291
- );
4292
- --gray-14: oklch(
4293
- from var(--color-14) l var(--gray-chroma) var(--gray-lightness)
4294
- );
4295
- --gray-15: oklch(
4296
- from var(--color-15) l var(--gray-chroma) var(--gray-lightness)
4297
- );
4298
- --gray-16: oklch(
4299
- from var(--color-16) l var(--gray-chroma) var(--gray-lightness)
4300
- );
4301
- }
4302
- }