ogm-viewer 0.3.0 → 0.5.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 (215) hide show
  1. package/dist/cjs/{index-CVTUnaNg.js → index-mu9UK_Fb.js} +66 -3
  2. package/dist/cjs/{lerc-TQEssgMv.js → lerc-Df0hDWkS.js} +7 -7
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/{ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-settings.ogm-sidebar.ogm-viewer-ifPxRNEo.js → ogm-alerts.ogm-attributes.ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-preview.ogm-previews.ogm-settings.ogm-sidebar.ogm-viewer-DMEfXquS.js} +13843 -6976
  5. package/dist/cjs/ogm-alerts_11.cjs.entry.js +18 -0
  6. package/dist/cjs/ogm-viewer.cjs.js +2 -2
  7. package/dist/collection/assets/icons/exclamation-triangle-fill.svg +3 -0
  8. package/dist/collection/assets/webawesome/styles/color/palettes/base.css +44 -0
  9. package/dist/collection/assets/webawesome/styles/color/palettes/bright.css +145 -0
  10. package/dist/collection/assets/webawesome/styles/color/palettes/default.css +146 -0
  11. package/dist/collection/assets/webawesome/styles/color/palettes/shoelace.css +146 -0
  12. package/dist/collection/assets/webawesome/styles/color/variants/brand.css +162 -0
  13. package/dist/collection/assets/webawesome/styles/color/variants/danger.css +162 -0
  14. package/dist/collection/assets/webawesome/styles/color/variants/neutral.css +162 -0
  15. package/dist/collection/assets/webawesome/styles/color/variants/success.css +162 -0
  16. package/dist/collection/assets/webawesome/styles/color/variants/warning.css +162 -0
  17. package/dist/collection/assets/webawesome/styles/color/variants.css +5 -0
  18. package/dist/collection/assets/webawesome/styles/component/form-control.styles.d.ts +2 -0
  19. package/dist/collection/assets/webawesome/styles/component/form-control.styles.ts +43 -0
  20. package/dist/collection/assets/webawesome/styles/component/host.styles.d.ts +2 -0
  21. package/dist/collection/assets/webawesome/styles/component/host.styles.ts +18 -0
  22. package/dist/collection/assets/webawesome/styles/component/segmented-field.styles.d.ts +19 -0
  23. package/dist/collection/assets/webawesome/styles/component/segmented-field.styles.ts +92 -0
  24. package/dist/collection/assets/webawesome/styles/component/size.styles.d.ts +2 -0
  25. package/dist/collection/assets/webawesome/styles/component/size.styles.ts +26 -0
  26. package/dist/collection/assets/webawesome/styles/component/variants.styles.d.ts +2 -0
  27. package/dist/collection/assets/webawesome/styles/component/variants.styles.ts +69 -0
  28. package/dist/collection/assets/webawesome/styles/component/visually-hidden.styles.d.ts +2 -0
  29. package/dist/collection/assets/webawesome/styles/component/visually-hidden.styles.ts +19 -0
  30. package/dist/collection/assets/webawesome/styles/layers.css +21 -0
  31. package/dist/collection/assets/webawesome/styles/native.css +1439 -0
  32. package/dist/collection/assets/webawesome/styles/themes/awesome.css +614 -0
  33. package/dist/collection/assets/webawesome/styles/themes/default.css +373 -0
  34. package/dist/collection/assets/webawesome/styles/themes/shoelace.css +648 -0
  35. package/dist/collection/assets/webawesome/styles/utilities/align-items.css +44 -0
  36. package/dist/collection/assets/webawesome/styles/utilities/border-radius.css +20 -0
  37. package/dist/collection/assets/webawesome/styles/utilities/flex-wrap.css +16 -0
  38. package/dist/collection/assets/webawesome/styles/utilities/fouce.css +17 -0
  39. package/dist/collection/assets/webawesome/styles/utilities/gap.css +56 -0
  40. package/dist/collection/assets/webawesome/styles/utilities/justify-content.css +32 -0
  41. package/dist/collection/assets/webawesome/styles/utilities/layout.css +159 -0
  42. package/dist/collection/assets/webawesome/styles/utilities/placeholder.css +9 -0
  43. package/dist/collection/assets/webawesome/styles/utilities/prose.css +161 -0
  44. package/dist/collection/assets/webawesome/styles/utilities/scroll-lock.css +20 -0
  45. package/dist/collection/assets/webawesome/styles/utilities/size.css +21 -0
  46. package/dist/collection/assets/webawesome/styles/utilities/text.css +262 -0
  47. package/dist/collection/assets/webawesome/styles/utilities/variants.css +62 -0
  48. package/dist/collection/assets/webawesome/styles/utilities/visually-hidden.css +17 -0
  49. package/dist/collection/assets/webawesome/styles/utilities.css +17 -0
  50. package/dist/collection/assets/webawesome/styles/webawesome.css +11 -0
  51. package/dist/collection/collection-manifest.json +4 -0
  52. package/dist/collection/components/ogm-alerts/ogm-alerts.css +51 -0
  53. package/dist/collection/components/ogm-alerts/ogm-alerts.js +71 -0
  54. package/dist/collection/components/ogm-alerts/ogm-alerts.test.js +26 -0
  55. package/dist/collection/components/ogm-attributes/ogm-attributes.css +68 -0
  56. package/dist/collection/components/ogm-attributes/ogm-attributes.js +112 -0
  57. package/dist/collection/components/ogm-image/ogm-image.css +1 -1
  58. package/dist/collection/components/ogm-image/ogm-image.js +70 -20
  59. package/dist/collection/components/ogm-map/ogm-map.css +43 -44
  60. package/dist/collection/components/ogm-map/ogm-map.js +229 -91
  61. package/dist/collection/components/ogm-menubar/ogm-menubar.css +16 -14
  62. package/dist/collection/components/ogm-menubar/ogm-menubar.js +3 -5
  63. package/dist/collection/components/ogm-menubar/ogm-menubar.test.js +28 -3
  64. package/dist/collection/components/ogm-metadata/ogm-metadata.css +6 -492
  65. package/dist/collection/components/ogm-metadata/ogm-metadata.js +3 -5
  66. package/dist/collection/components/ogm-metadata/ogm-metadata.test.js +1 -1
  67. package/dist/collection/components/ogm-preview/ogm-preview.css +16 -0
  68. package/dist/collection/components/ogm-preview/ogm-preview.js +144 -0
  69. package/dist/collection/components/ogm-preview/ogm-preview.test.js +37 -0
  70. package/dist/collection/components/ogm-previews/ogm-previews.css +45 -0
  71. package/dist/collection/components/ogm-previews/ogm-previews.js +162 -0
  72. package/dist/collection/components/ogm-previews/ogm-previews.test.js +83 -0
  73. package/dist/collection/components/ogm-settings/ogm-settings.js +7 -9
  74. package/dist/collection/components/ogm-sidebar/ogm-sidebar.css +50 -503
  75. package/dist/collection/components/ogm-sidebar/ogm-sidebar.js +8 -12
  76. package/dist/collection/components/ogm-viewer/ogm-viewer.css +4 -974
  77. package/dist/collection/components/ogm-viewer/ogm-viewer.js +69 -32
  78. package/dist/collection/lib/errors.js +137 -0
  79. package/dist/collection/lib/errors.test.js +96 -0
  80. package/dist/collection/lib/previewers/cog-deck.js +14 -9
  81. package/dist/collection/lib/previewers/cog.js +3 -3
  82. package/dist/collection/lib/previewers/geojson.js +3 -2
  83. package/dist/collection/lib/previewers/maplibre.js +9 -15
  84. package/dist/collection/lib/previewers/pmtiles-raster.js +1 -1
  85. package/dist/collection/lib/previewers/pmtiles-vector.js +7 -1
  86. package/dist/collection/lib/previewers/raster.js +1 -1
  87. package/dist/collection/lib/previewers/vector.js +65 -30
  88. package/dist/collection/lib/previewers/wms.js +1 -1
  89. package/dist/collection/lib/record.js +1 -1
  90. package/dist/collection/lib/record.test.js +1 -1
  91. package/dist/collection/lib/references.js +0 -65
  92. package/dist/collection/lib/references.test.js +0 -150
  93. package/dist/collection/lib/sources/cog.js +5 -2
  94. package/dist/collection/lib/sources/geojson.js +9 -2
  95. package/dist/collection/lib/sources/iiif-manifest.js +54 -0
  96. package/dist/collection/lib/sources/iiif-manifest.test.js +110 -0
  97. package/dist/collection/lib/sources/iiif.js +11 -0
  98. package/dist/collection/lib/sources/maplibre.js +8 -0
  99. package/dist/collection/lib/sources/openindexmap.js +3 -0
  100. package/dist/collection/lib/sources/pmtiles.js +10 -4
  101. package/dist/collection/lib/sources/raster.js +3 -3
  102. package/dist/collection/lib/sources/source.js +26 -7
  103. package/dist/collection/lib/sources/tilejson.js +7 -1
  104. package/dist/collection/lib/sources/tms.js +3 -0
  105. package/dist/collection/lib/sources/vector.js +3 -3
  106. package/dist/collection/lib/sources/wms.js +6 -11
  107. package/dist/collection/lib/sources/xyz.js +3 -0
  108. package/dist/collection/lib/themes/maplibre.js +46 -0
  109. package/dist/collection/lib/themes/theme.js +23 -0
  110. package/dist/esm/{index-BdFT_kJa.js → index-DTLAlWKQ.js} +66 -3
  111. package/dist/esm/{lerc-DFDScDrO.js → lerc-CB_Jcu33.js} +2 -2
  112. package/dist/esm/loader.js +3 -3
  113. package/dist/esm/{ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-settings.ogm-sidebar.ogm-viewer-r5w_49n3.js → ogm-alerts.ogm-attributes.ogm-image.ogm-map.ogm-menubar.ogm-metadata.ogm-preview.ogm-previews.ogm-settings.ogm-sidebar.ogm-viewer-Dlc6USWB.js} +13840 -6977
  114. package/dist/esm/ogm-alerts_11.entry.js +2 -0
  115. package/dist/esm/ogm-viewer.js +3 -3
  116. package/dist/ogm-viewer/assets/icons/exclamation-triangle-fill.svg +3 -0
  117. package/dist/ogm-viewer/assets/webawesome/styles/color/palettes/base.css +44 -0
  118. package/dist/ogm-viewer/assets/webawesome/styles/color/palettes/bright.css +145 -0
  119. package/dist/ogm-viewer/assets/webawesome/styles/color/palettes/default.css +146 -0
  120. package/dist/ogm-viewer/assets/webawesome/styles/color/palettes/shoelace.css +146 -0
  121. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/brand.css +162 -0
  122. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/danger.css +162 -0
  123. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/neutral.css +162 -0
  124. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/success.css +162 -0
  125. package/dist/ogm-viewer/assets/webawesome/styles/color/variants/warning.css +162 -0
  126. package/dist/ogm-viewer/assets/webawesome/styles/color/variants.css +5 -0
  127. package/dist/ogm-viewer/assets/webawesome/styles/component/form-control.styles.d.ts +2 -0
  128. package/dist/ogm-viewer/assets/webawesome/styles/component/form-control.styles.ts +43 -0
  129. package/dist/ogm-viewer/assets/webawesome/styles/component/host.styles.d.ts +2 -0
  130. package/dist/ogm-viewer/assets/webawesome/styles/component/host.styles.ts +18 -0
  131. package/dist/ogm-viewer/assets/webawesome/styles/component/segmented-field.styles.d.ts +19 -0
  132. package/dist/ogm-viewer/assets/webawesome/styles/component/segmented-field.styles.ts +92 -0
  133. package/dist/ogm-viewer/assets/webawesome/styles/component/size.styles.d.ts +2 -0
  134. package/dist/ogm-viewer/assets/webawesome/styles/component/size.styles.ts +26 -0
  135. package/dist/ogm-viewer/assets/webawesome/styles/component/variants.styles.d.ts +2 -0
  136. package/dist/ogm-viewer/assets/webawesome/styles/component/variants.styles.ts +69 -0
  137. package/dist/ogm-viewer/assets/webawesome/styles/component/visually-hidden.styles.d.ts +2 -0
  138. package/dist/ogm-viewer/assets/webawesome/styles/component/visually-hidden.styles.ts +19 -0
  139. package/dist/ogm-viewer/assets/webawesome/styles/layers.css +21 -0
  140. package/dist/ogm-viewer/assets/webawesome/styles/native.css +1439 -0
  141. package/dist/ogm-viewer/assets/webawesome/styles/themes/awesome.css +614 -0
  142. package/dist/ogm-viewer/assets/webawesome/styles/themes/default.css +373 -0
  143. package/dist/ogm-viewer/assets/webawesome/styles/themes/shoelace.css +648 -0
  144. package/dist/ogm-viewer/assets/webawesome/styles/utilities/align-items.css +44 -0
  145. package/dist/ogm-viewer/assets/webawesome/styles/utilities/border-radius.css +20 -0
  146. package/dist/ogm-viewer/assets/webawesome/styles/utilities/flex-wrap.css +16 -0
  147. package/dist/ogm-viewer/assets/webawesome/styles/utilities/fouce.css +17 -0
  148. package/dist/ogm-viewer/assets/webawesome/styles/utilities/gap.css +56 -0
  149. package/dist/ogm-viewer/assets/webawesome/styles/utilities/justify-content.css +32 -0
  150. package/dist/ogm-viewer/assets/webawesome/styles/utilities/layout.css +159 -0
  151. package/dist/ogm-viewer/assets/webawesome/styles/utilities/placeholder.css +9 -0
  152. package/dist/ogm-viewer/assets/webawesome/styles/utilities/prose.css +161 -0
  153. package/dist/ogm-viewer/assets/webawesome/styles/utilities/scroll-lock.css +20 -0
  154. package/dist/ogm-viewer/assets/webawesome/styles/utilities/size.css +21 -0
  155. package/dist/ogm-viewer/assets/webawesome/styles/utilities/text.css +262 -0
  156. package/dist/ogm-viewer/assets/webawesome/styles/utilities/variants.css +62 -0
  157. package/dist/ogm-viewer/assets/webawesome/styles/utilities/visually-hidden.css +17 -0
  158. package/dist/ogm-viewer/assets/webawesome/styles/utilities.css +17 -0
  159. package/dist/ogm-viewer/assets/webawesome/styles/webawesome.css +11 -0
  160. package/dist/ogm-viewer/ogm-viewer.esm.js +1 -1
  161. package/dist/ogm-viewer/p-7936ccc9.entry.js +1 -0
  162. package/dist/ogm-viewer/p-CWtUrqsM.js +2822 -0
  163. package/dist/ogm-viewer/p-DTLAlWKQ.js +2 -0
  164. package/dist/ogm-viewer/{p-BeA3REDA.js → p-DqRDI3AC.js} +1 -1
  165. package/dist/types/components/ogm-alerts/ogm-alerts.d.ts +6 -0
  166. package/dist/types/components/ogm-alerts/ogm-alerts.test.d.ts +1 -0
  167. package/dist/types/components/ogm-attributes/ogm-attributes.d.ts +10 -0
  168. package/dist/types/components/ogm-image/ogm-image.d.ts +8 -3
  169. package/dist/types/components/ogm-map/ogm-map.d.ts +38 -14
  170. package/dist/types/components/ogm-menubar/ogm-menubar.d.ts +1 -1
  171. package/dist/types/components/ogm-metadata/ogm-metadata.d.ts +1 -1
  172. package/dist/types/components/ogm-preview/ogm-preview.d.ts +13 -0
  173. package/dist/types/components/ogm-preview/ogm-preview.test.d.ts +1 -0
  174. package/dist/types/components/ogm-previews/ogm-previews.d.ts +12 -0
  175. package/dist/types/components/ogm-previews/ogm-previews.test.d.ts +1 -0
  176. package/dist/types/components/ogm-settings/ogm-settings.d.ts +2 -2
  177. package/dist/types/components/ogm-sidebar/ogm-sidebar.d.ts +1 -1
  178. package/dist/types/components/ogm-viewer/ogm-viewer.d.ts +17 -14
  179. package/dist/types/components.d.ts +122 -18
  180. package/dist/types/lib/errors.d.ts +13 -0
  181. package/dist/types/lib/errors.test.d.ts +1 -0
  182. package/dist/types/lib/previewers/cog-deck.d.ts +7 -3
  183. package/dist/types/lib/previewers/cog.d.ts +2 -2
  184. package/dist/types/lib/previewers/maplibre.d.ts +7 -9
  185. package/dist/types/lib/previewers/pmtiles-vector.d.ts +1 -0
  186. package/dist/types/lib/previewers/vector.d.ts +3 -15
  187. package/dist/types/lib/record.d.ts +1 -1
  188. package/dist/types/lib/references.d.ts +0 -8
  189. package/dist/types/lib/sources/cog.d.ts +3 -2
  190. package/dist/types/lib/sources/geojson.d.ts +3 -2
  191. package/dist/types/lib/sources/iiif-manifest.d.ts +12 -0
  192. package/dist/types/lib/sources/iiif-manifest.test.d.ts +1 -0
  193. package/dist/types/lib/sources/iiif.d.ts +5 -0
  194. package/dist/types/lib/sources/maplibre.d.ts +7 -0
  195. package/dist/types/lib/sources/openindexmap.d.ts +1 -0
  196. package/dist/types/lib/sources/pmtiles.d.ts +6 -4
  197. package/dist/types/lib/sources/raster.d.ts +3 -3
  198. package/dist/types/lib/sources/source.d.ts +7 -7
  199. package/dist/types/lib/sources/tilejson.d.ts +3 -2
  200. package/dist/types/lib/sources/tms.d.ts +1 -0
  201. package/dist/types/lib/sources/vector.d.ts +4 -5
  202. package/dist/types/lib/sources/wms.d.ts +4 -3
  203. package/dist/types/lib/sources/xyz.d.ts +1 -0
  204. package/dist/types/lib/themes/maplibre.d.ts +27 -0
  205. package/dist/types/lib/themes/theme.d.ts +7 -0
  206. package/package.json +3 -2
  207. package/dist/cjs/ogm-image_7.cjs.entry.js +0 -14
  208. package/dist/collection/lib/previewers/index.js +0 -36
  209. package/dist/collection/lib/sources/index.js +0 -29
  210. package/dist/esm/ogm-image_7.entry.js +0 -2
  211. package/dist/ogm-viewer/p-0b81e024.entry.js +0 -1
  212. package/dist/ogm-viewer/p-33R3d9fV.js +0 -1950
  213. package/dist/ogm-viewer/p-BdFT_kJa.js +0 -2
  214. package/dist/types/lib/previewers/index.d.ts +0 -3
  215. package/dist/types/lib/sources/index.d.ts +0 -3
@@ -0,0 +1,1439 @@
1
+ @import url('layers.css');
2
+
3
+ /* Required utilities */
4
+ @import url('utilities/size.css');
5
+ @import url('utilities/variants.css');
6
+
7
+ @layer wa-native {
8
+ /* #region General ~~~~~~~~~~~~~~~~~~~~~~~~~ */
9
+ html {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ padding: 0;
13
+
14
+ tab-size: 4;
15
+
16
+ background-color: var(--wa-color-surface-default);
17
+ }
18
+
19
+ *,
20
+ *::before,
21
+ *::after {
22
+ box-sizing: inherit;
23
+ }
24
+
25
+ body {
26
+ min-height: 100vh;
27
+ margin: 0;
28
+ padding: 0;
29
+
30
+ color: var(--wa-color-text-normal);
31
+ font-family: var(--wa-font-family-body);
32
+ font-size: var(--wa-font-size-m);
33
+ font-weight: var(--wa-font-weight-body);
34
+ line-height: var(--wa-line-height-normal);
35
+ -moz-osx-font-smoothing: grayscale;
36
+ -webkit-font-smoothing: antialiased;
37
+ text-size-adjust: none;
38
+ -moz-text-size-adjust: none;
39
+ -webkit-text-size-adjust: none;
40
+ }
41
+ /* #endregion */
42
+
43
+ /* #region Content Flow ~~~~~~~~~~~~~~~~~~~~ */
44
+ address,
45
+ audio,
46
+ blockquote,
47
+ dd,
48
+ details,
49
+ dl,
50
+ fieldset,
51
+ figure,
52
+ h1,
53
+ h2,
54
+ h3,
55
+ h4,
56
+ h5,
57
+ h6,
58
+ hr,
59
+ iframe,
60
+ ol,
61
+ p,
62
+ pre,
63
+ table,
64
+ ul,
65
+ video {
66
+ margin: 0;
67
+
68
+ &:has(+ *) {
69
+ margin-block-end: var(--wa-content-spacing);
70
+ }
71
+ }
72
+ /* #endregion */
73
+
74
+ /* #region Block Text ~~~~~~~~~~~~~~~~~~~~~~ */
75
+ h1,
76
+ h2,
77
+ h3,
78
+ h4,
79
+ h5,
80
+ h6 {
81
+ font-family: var(--wa-font-family-heading);
82
+ font-weight: var(--wa-font-weight-heading);
83
+ line-height: var(--wa-line-height-condensed);
84
+ text-wrap: balance;
85
+ }
86
+
87
+ h1 {
88
+ font-size: var(--wa-font-size-3xl);
89
+ }
90
+
91
+ h2 {
92
+ font-size: var(--wa-font-size-2xl);
93
+ }
94
+
95
+ h3 {
96
+ font-size: var(--wa-font-size-xl);
97
+ }
98
+
99
+ h4 {
100
+ font-size: var(--wa-font-size-l);
101
+ }
102
+
103
+ h5 {
104
+ font-size: var(--wa-font-size-m);
105
+ }
106
+
107
+ h6 {
108
+ font-size: var(--wa-font-size-xs);
109
+ }
110
+
111
+ p {
112
+ text-wrap: wrap;
113
+ }
114
+ @supports (text-wrap: pretty) {
115
+ p {
116
+ text-wrap: pretty;
117
+ }
118
+ }
119
+ blockquote {
120
+ padding: var(--wa-space-xl);
121
+
122
+ color: var(--wa-color-text-quiet);
123
+ font-family: var(--wa-font-family-longform);
124
+ font-size: var(--wa-font-size-larger);
125
+
126
+ border-inline-start: var(--wa-border-style) var(--wa-border-width-l) var(--wa-color-neutral-border-quiet);
127
+ }
128
+
129
+ hr {
130
+ margin: var(--wa-content-spacing) 0;
131
+
132
+ border: none;
133
+ border-bottom: solid var(--wa-border-width-s) var(--wa-color-surface-border);
134
+ }
135
+
136
+ figcaption {
137
+ margin-block-start: var(--wa-space-xs);
138
+
139
+ color: var(--wa-color-text-quiet);
140
+ font-size: var(--wa-font-size-smaller);
141
+ line-height: var(--wa-line-height-condensed);
142
+ }
143
+ /* #endregion */
144
+
145
+ /* #region Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
146
+ ul,
147
+ ol {
148
+ padding: 0;
149
+ }
150
+
151
+ li > ul,
152
+ li > ol {
153
+ margin-inline-start: 0.25em;
154
+ }
155
+
156
+ ul {
157
+ list-style: disc;
158
+ }
159
+
160
+ li {
161
+ margin-inline-start: 1.125em;
162
+ padding: 0;
163
+ }
164
+
165
+ /* `ul` markers are graphical (3:1 contrast threshold); `ol` markers are text
166
+ (4.5:1). Numerals also wear transparency more than discs, so they keep more
167
+ contrast. `currentColor` lets markers ride along when text color changes. */
168
+ ul > li::marker {
169
+ color: color-mix(in oklch, currentColor 40%, transparent);
170
+ }
171
+
172
+ ol > li::marker {
173
+ color: color-mix(in oklch, currentColor 60%, transparent);
174
+ }
175
+
176
+ dt {
177
+ font-weight: var(--wa-font-weight-bold);
178
+ }
179
+
180
+ menu {
181
+ list-style: none;
182
+ margin: 0;
183
+ padding: 0;
184
+
185
+ & > li {
186
+ margin: 0;
187
+ }
188
+ }
189
+ /* #endregion */
190
+
191
+ /* #region Inline Text ~~~~~~~~~~~~~~~~~~~~~ */
192
+ strong,
193
+ b {
194
+ font-weight: var(--wa-font-weight-bold);
195
+ }
196
+
197
+ em,
198
+ i {
199
+ font-style: italic;
200
+ }
201
+
202
+ u {
203
+ text-decoration-line: underline;
204
+ text-decoration-thickness: 0.09375em;
205
+ text-underline-offset: 0.125em;
206
+ }
207
+
208
+ s {
209
+ text-decoration-line: line-through;
210
+ text-decoration-thickness: 0.09375em;
211
+ }
212
+
213
+ ins {
214
+ text-decoration-color: var(--wa-color-success-on-quiet);
215
+ text-decoration-line: underline;
216
+ text-decoration-thickness: 0.09375em;
217
+ text-underline-offset: 0.125em;
218
+ }
219
+
220
+ del {
221
+ color: color-mix(in oklab, currentColor, transparent 10%);
222
+ text-decoration-color: var(--wa-color-danger-on-quiet);
223
+ text-decoration-line: line-through;
224
+ text-decoration-thickness: 0.09375em;
225
+ }
226
+
227
+ mark {
228
+ padding: 0.125em 0.25em;
229
+
230
+ color: var(--wa-color-warning-on-quiet);
231
+
232
+ background-color: var(--wa-color-warning-fill-quiet);
233
+ border-radius: var(--wa-border-radius-s);
234
+ }
235
+
236
+ small {
237
+ font-size: var(--wa-font-size-smaller);
238
+ }
239
+
240
+ sub,
241
+ sup {
242
+ font-size: var(--wa-font-size-smaller);
243
+ line-height: 0;
244
+ }
245
+
246
+ sub {
247
+ vertical-align: sub;
248
+ }
249
+
250
+ sup {
251
+ vertical-align: super;
252
+ }
253
+
254
+ abbr[title] {
255
+ text-decoration-line: underline;
256
+ text-decoration-style: dotted;
257
+ text-decoration-thickness: 0.09375em;
258
+ text-underline-offset: 0.125em;
259
+
260
+ cursor: help;
261
+ }
262
+
263
+ kbd {
264
+ padding: 0.125em 0.25em;
265
+
266
+ font-family: var(--wa-font-family-code);
267
+ font-size: var(--wa-font-size-smaller);
268
+ font-weight: var(--wa-font-weight-code);
269
+
270
+ border: solid var(--wa-border-width-s) color-mix(in oklab, currentColor, transparent 50%);
271
+ border-radius: var(--wa-border-radius-s);
272
+ box-shadow: 0 0.125em 0 0 color-mix(in oklab, currentColor, transparent 50%);
273
+
274
+ wa-icon {
275
+ vertical-align: -2px;
276
+ }
277
+ }
278
+ /* #endregion */
279
+
280
+ /* #region Links ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
281
+ a {
282
+ color: var(--wa-color-text-link);
283
+ text-decoration: var(--wa-link-decoration-default);
284
+ -webkit-text-decoration: var(--wa-link-decoration-default);
285
+ text-decoration-thickness: 0.09375em;
286
+ text-underline-offset: 0.125em;
287
+ }
288
+
289
+ *:is([appearance~='accent'], .wa-accent) {
290
+ a,
291
+ a:hover {
292
+ color: currentColor;
293
+ }
294
+ }
295
+
296
+ a:hover {
297
+ color: color-mix(in oklab, var(--wa-color-text-link), var(--wa-color-mix-hover));
298
+ text-decoration: var(--wa-link-decoration-hover);
299
+ -webkit-text-decoration: var(--wa-link-decoration-hover);
300
+ }
301
+
302
+ a:focus,
303
+ button:focus {
304
+ outline: none;
305
+ }
306
+
307
+ a:focus-visible,
308
+ button:focus-visible {
309
+ outline: var(--wa-focus-ring);
310
+ outline-offset: var(--wa-focus-ring-offset);
311
+ }
312
+ /* #endregion */
313
+
314
+ /* #region Code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
315
+ code,
316
+ samp,
317
+ var {
318
+ padding: 0.125em 0.25em;
319
+
320
+ font-family: var(--wa-font-family-code);
321
+ font-size: var(--wa-font-size-smaller);
322
+ font-weight: var(--wa-font-weight-code);
323
+
324
+ background-color: var(--wa-color-overlay-inline);
325
+ border-radius: var(--wa-border-radius-s);
326
+ }
327
+
328
+ pre {
329
+ padding: var(--wa-space-m);
330
+
331
+ font-family: var(--wa-font-family-code);
332
+ font-size: var(--wa-font-size-smaller);
333
+ font-weight: var(--wa-font-weight-code);
334
+ white-space: pre;
335
+
336
+ background-color: var(--wa-color-overlay-inline);
337
+ border-radius: var(--wa-panel-border-radius);
338
+ overflow-x: auto;
339
+
340
+ /* Remove overlapping styles for child code elements */
341
+ & code,
342
+ & samp,
343
+ & var {
344
+ padding: 0;
345
+
346
+ font-size: 1em;
347
+
348
+ background-color: transparent;
349
+ }
350
+
351
+ /* Print styles */
352
+ @media print {
353
+ background: none;
354
+ border: solid var(--wa-border-width-s) var(--wa-color-surface-border);
355
+ }
356
+ }
357
+ /* #endregion */
358
+
359
+ /* #region Media ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
360
+ img,
361
+ svg,
362
+ picture,
363
+ video {
364
+ max-width: 100%;
365
+ height: auto;
366
+ }
367
+
368
+ img,
369
+ picture,
370
+ video {
371
+ border-radius: var(--wa-border-radius-m);
372
+ }
373
+
374
+ embed,
375
+ iframe,
376
+ object {
377
+ max-width: 100%;
378
+ }
379
+
380
+ iframe {
381
+ border: none;
382
+ }
383
+ /* #endregion */
384
+
385
+ /* #region Tables ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
386
+ table {
387
+ width: 100%;
388
+
389
+ font-variant-numeric: tabular-nums;
390
+
391
+ border: none;
392
+ border-collapse: collapse;
393
+ }
394
+
395
+ caption {
396
+ color: var(--wa-color-text-quiet);
397
+ font-size: var(--wa-font-size-smaller);
398
+
399
+ &:has(+ *) {
400
+ margin-block-end: 0.75em;
401
+ }
402
+ }
403
+
404
+ tbody {
405
+ tr {
406
+ border-block-start: var(--wa-border-style) var(--wa-border-width-s) var(--wa-color-border-quiet);
407
+
408
+ :where(table.wa-zebra-rows) &:nth-child(odd) {
409
+ background-color: color-mix(in oklab, var(--wa-color-fill-quiet) 60%, transparent);
410
+ }
411
+
412
+ :where(table.wa-hover-rows) & {
413
+ @media (hover: hover) {
414
+ &:hover {
415
+ background-color: var(--wa-color-fill-quiet);
416
+
417
+ &,
418
+ + tr {
419
+ border-block-start-color: var(--wa-color-border-normal);
420
+ }
421
+ }
422
+ }
423
+ }
424
+ }
425
+ }
426
+
427
+ td,
428
+ th {
429
+ padding: 0.75em;
430
+
431
+ text-align: start;
432
+ vertical-align: top;
433
+ }
434
+
435
+ th {
436
+ font-size: var(--wa-font-size-smaller);
437
+ font-weight: var(--wa-font-weight-bold);
438
+
439
+ /* Adds a stronger border below column headers only
440
+ * Row headers are avoided with [scope="row"]
441
+ * or when the next sibling is a non-header cell */
442
+ &:not([scope='row']):not(:has(+ td)) {
443
+ border-block-end: var(--wa-border-style) var(--wa-border-width-s) var(--wa-color-border-normal);
444
+ }
445
+ }
446
+ /* #endregion */
447
+
448
+ /* #region Details ~~~~~~~~~~~~~~~~~~~~~~~~~ */
449
+ details {
450
+ padding: 0;
451
+
452
+ background-color: var(--wa-color-surface-default);
453
+ border: var(--wa-panel-border-width) var(--wa-color-surface-border) var(--wa-panel-border-style);
454
+ border-radius: var(--wa-panel-border-radius);
455
+
456
+ overflow-anchor: none;
457
+
458
+ summary {
459
+ display: flex;
460
+ align-items: center;
461
+ justify-content: space-between;
462
+
463
+ padding: var(--wa-space-m);
464
+
465
+ border-radius: calc(var(--wa-panel-border-radius) - var(--wa-panel-border-width));
466
+
467
+ cursor: pointer;
468
+ user-select: none;
469
+ -webkit-user-select: none;
470
+
471
+ > * {
472
+ margin: 0;
473
+ }
474
+
475
+ &:focus {
476
+ outline: none;
477
+ }
478
+
479
+ &:focus-visible {
480
+ outline: var(--wa-focus-ring);
481
+ outline-offset: calc(var(--wa-panel-border-width) + var(--wa-focus-ring-offset));
482
+ }
483
+ }
484
+
485
+ &[open] {
486
+ padding: 0 var(--wa-space-m) var(--wa-space-m) var(--wa-space-m);
487
+
488
+ summary {
489
+ margin-inline: calc(-1 * var(--wa-space-m));
490
+
491
+ border-end-start-radius: 0;
492
+ border-end-end-radius: 0;
493
+ }
494
+ }
495
+
496
+ &::details-content {
497
+ box-sizing: border-box; /* Ensure contents don't overflow */
498
+ }
499
+
500
+ /* Print styles */
501
+ @media print {
502
+ background: none;
503
+ border: solid var(--wa-border-width-s) var(--wa-color-surface-border);
504
+
505
+ summary {
506
+ list-style: none;
507
+ }
508
+ }
509
+ }
510
+
511
+ /* Replace the summary marker */
512
+ details summary {
513
+ &::marker,
514
+ &::-webkit-details-marker {
515
+ display: none;
516
+ }
517
+
518
+ &::after {
519
+ content: '';
520
+ background-color: var(--wa-color-text-quiet);
521
+ mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M311.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L243.2 256 73.9 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"/></svg>')
522
+ center no-repeat;
523
+ width: 1rem;
524
+ height: 1rem;
525
+ rotate: 0deg;
526
+ }
527
+
528
+ &:dir(rtl)::after {
529
+ rotate: 180deg;
530
+ }
531
+ }
532
+
533
+ details[open] summary::after {
534
+ rotate: 90deg;
535
+ }
536
+ /* #endregion */
537
+
538
+ /* #region Dialogs ~~~~~~~~~~~~~~~~~~~~~~~~~ */
539
+ dialog {
540
+ flex-direction: column;
541
+ align-items: start;
542
+
543
+ width: 32rem;
544
+ max-width: calc(100% - var(--wa-space-l));
545
+ padding: var(--wa-space-l);
546
+
547
+ background-color: var(--wa-color-surface-raised);
548
+ border-radius: var(--wa-panel-border-radius);
549
+ border: none;
550
+ box-shadow: var(--wa-shadow-l);
551
+
552
+ transition: var(--wa-transition-slow, 200ms) var(--wa-transition-easing);
553
+
554
+ /* Center the dialog */
555
+ margin: auto;
556
+ inset: 0;
557
+
558
+ &[open] {
559
+ display: flex;
560
+ }
561
+
562
+ &:focus {
563
+ outline: none;
564
+ }
565
+ }
566
+
567
+ dialog::backdrop {
568
+ background-color: var(--wa-color-overlay-modal, rgb(0 0 0 / 0.25));
569
+ }
570
+ /* #endregion */
571
+
572
+ /* #region Form Labels ~~~~~~~~~~~~~~~~~~~~~ */
573
+ label {
574
+ display: inline-block;
575
+ position: relative;
576
+
577
+ color: var(--wa-form-control-label-color);
578
+ font-weight: var(--wa-form-control-label-font-weight);
579
+ line-height: var(--wa-form-control-label-line-height);
580
+
581
+ &:has(
582
+ input:not(
583
+ [type='button'],
584
+ [type='checkbox'],
585
+ [type='color'],
586
+ [type='file'],
587
+ [type='hidden'],
588
+ [type='image'],
589
+ [type='radio'],
590
+ [type='reset'],
591
+ [type='submit']
592
+ ),
593
+ textarea,
594
+ select
595
+ ) {
596
+ width: 100%;
597
+ }
598
+
599
+ & + :is(input:not([type='checkbox'], [type='radio']), textarea, select),
600
+ & > :is(input:not([type='checkbox'], [type='radio']), textarea, select) {
601
+ margin-block-start: 0.5em;
602
+ }
603
+ }
604
+ /* #endregion */
605
+
606
+ /* #region Fieldsets ~~~~~~~~~~~~~~~~~~~~~~~ */
607
+ fieldset {
608
+ padding: var(--wa-space-l);
609
+ padding-block-start: calc(var(--wa-space-l) - 0.5em);
610
+
611
+ border: solid 1px var(--wa-color-surface-border);
612
+ border-radius: var(--wa-border-radius-m);
613
+ }
614
+
615
+ legend {
616
+ padding: 0;
617
+ padding-inline: var(--wa-space-xs);
618
+
619
+ font-weight: var(--wa-form-control-label-font-weight);
620
+ }
621
+ /* #endregion */
622
+
623
+ /* #region Buttons ~~~~~~~~~~~~~~~~~~~~~~~~~ */
624
+ button,
625
+ input[type='button'],
626
+ input[type='reset'],
627
+ input[type='submit'],
628
+ input[type='file'],
629
+ a.wa-button {
630
+ /* We allow modifier classes on <input type="file">,
631
+ * but these selectors ensure the styles only apply to
632
+ * the file selector button in the user agent's shadow root */
633
+ &:not(input[type='file']),
634
+ &::file-selector-button {
635
+ display: inline-flex;
636
+ align-items: center;
637
+ justify-content: center;
638
+
639
+ height: var(--wa-form-control-height);
640
+ padding: 0 var(--wa-form-control-padding-inline);
641
+
642
+ font-family: inherit;
643
+ font-size: var(--wa-form-control-value-font-size);
644
+ font-weight: var(--wa-font-weight-action);
645
+ text-decoration: none;
646
+ vertical-align: middle;
647
+ white-space: nowrap;
648
+
649
+ border-style: var(--wa-border-style);
650
+ border-width: max(1px, var(--wa-form-control-border-width));
651
+
652
+ /* These read the button group's internal custom properties so native buttons can be grouped */
653
+ border-start-start-radius: var(--_button-start-start-radius, var(--wa-form-control-border-radius));
654
+ border-start-end-radius: var(--_button-start-end-radius, var(--wa-form-control-border-radius));
655
+ border-end-start-radius: var(--_button-end-start-radius, var(--wa-form-control-border-radius));
656
+ border-end-end-radius: var(--_button-end-end-radius, var(--wa-form-control-border-radius));
657
+
658
+ transition-property: background, border, box-shadow, color;
659
+ transition-duration: var(--wa-transition-fast);
660
+ transition-timing-function: var(--wa-transition-easing);
661
+
662
+ cursor: pointer;
663
+ user-select: none;
664
+ -webkit-user-select: none;
665
+
666
+ /* Collapse adjacent borders */
667
+ margin-inline-start: var(--_button-horizontal-indent);
668
+ margin-block-start: var(--_button-vertical-indent);
669
+ }
670
+
671
+ /* Outlined variants use a negative indent so adjacent borders overlap */
672
+ &.wa-outlined {
673
+ &:not(input[type='file']),
674
+ &::file-selector-button {
675
+ margin-inline-start: var(--_button-horizontal-indent-outlined);
676
+ margin-block-start: var(--_button-vertical-indent-outlined);
677
+ }
678
+ }
679
+
680
+ /* Default styles for standard buttons */
681
+ &:not(input[type='file']) {
682
+ color: var(--wa-color-on-loud, var(--wa-color-neutral-on-loud));
683
+ background-color: var(--wa-color-fill-loud, var(--wa-color-neutral-fill-loud));
684
+ border-color: transparent;
685
+
686
+ &:not(:disabled) {
687
+ @media (hover: hover) {
688
+ &:hover {
689
+ background-color: color-mix(
690
+ in oklab,
691
+ var(--wa-color-fill-loud, var(--wa-color-neutral-fill-loud)),
692
+ var(--wa-color-mix-hover)
693
+ );
694
+ transform: var(--wa-button-transform-hover);
695
+ }
696
+ }
697
+
698
+ &:active {
699
+ background-color: color-mix(
700
+ in oklab,
701
+ var(--wa-color-fill-loud, var(--wa-color-neutral-fill-loud)),
702
+ var(--wa-color-mix-active)
703
+ );
704
+ transform: var(--wa-button-transform-active);
705
+ }
706
+
707
+ @media (prefers-reduced-motion: reduce) {
708
+ &:hover,
709
+ &:active {
710
+ transform: none;
711
+ }
712
+ }
713
+ }
714
+ }
715
+
716
+ /* Default styles for file selector buttons */
717
+ &:is(input[type='file']) {
718
+ &::file-selector-button {
719
+ color: var(--wa-color-on-normal, var(--wa-color-neutral-on-normal));
720
+ background-color: var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal));
721
+ border-color: transparent;
722
+ }
723
+
724
+ &:not(:disabled) {
725
+ &::file-selector-button:hover {
726
+ background-color: color-mix(
727
+ in oklab,
728
+ var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal)),
729
+ var(--wa-color-mix-hover)
730
+ );
731
+ }
732
+
733
+ &::file-selector-button:active {
734
+ background-color: color-mix(
735
+ in oklab,
736
+ var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal)),
737
+ var(--wa-color-mix-active)
738
+ );
739
+ }
740
+ }
741
+ }
742
+
743
+ /* Modifier classes */
744
+ &.wa-plain {
745
+ &:not(input[type='file']),
746
+ &::file-selector-button {
747
+ color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
748
+ background-color: transparent;
749
+ border-color: transparent;
750
+ }
751
+
752
+ &:not(:disabled) {
753
+ &:not(input[type='file']):hover,
754
+ &::file-selector-button:hover {
755
+ color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
756
+ background-color: var(--wa-color-fill-quiet, var(--wa-color-neutral-fill-quiet));
757
+ }
758
+
759
+ &:not(input[type='file']):active,
760
+ &::file-selector-button:active {
761
+ color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
762
+ background-color: color-mix(
763
+ in oklab,
764
+ var(--wa-color-fill-quiet, var(--wa-color-neutral-fill-quiet)),
765
+ var(--wa-color-mix-active)
766
+ );
767
+ }
768
+ }
769
+ }
770
+
771
+ &.wa-outlined {
772
+ &:not(input[type='file']),
773
+ &::file-selector-button {
774
+ color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
775
+ background-color: transparent;
776
+ border-color: var(--wa-color-border-loud, var(--wa-color-neutral-border-loud));
777
+ }
778
+
779
+ &:not(:disabled) {
780
+ &:not(input[type='file']):hover,
781
+ &::file-selector-button:hover {
782
+ color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
783
+ background-color: var(--wa-color-fill-quiet, var(--wa-color-neutral-fill-quiet));
784
+ }
785
+
786
+ &:not(input[type='file']):active,
787
+ &::file-selector-button:active {
788
+ color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
789
+ background-color: color-mix(
790
+ in oklab,
791
+ var(--wa-color-fill-quiet, var(--wa-color-neutral-fill-quiet)),
792
+ var(--wa-color-mix-active)
793
+ );
794
+ }
795
+ }
796
+ }
797
+
798
+ &.wa-filled {
799
+ &:not(input[type='file']),
800
+ &::file-selector-button {
801
+ color: var(--wa-color-on-normal, var(--wa-color-neutral-on-normal));
802
+ background-color: var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal));
803
+ border-color: transparent;
804
+ }
805
+
806
+ &:not(:disabled) {
807
+ &:not(input[type='file']):hover,
808
+ &::file-selector-button:hover {
809
+ color: var(--wa-color-on-normal, var(--wa-color-neutral-on-normal));
810
+ background-color: color-mix(
811
+ in oklab,
812
+ var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal)),
813
+ var(--wa-color-mix-hover)
814
+ );
815
+ }
816
+
817
+ &:not(input[type='file']):active,
818
+ &::file-selector-button:active {
819
+ color: var(--wa-color-on-normal, var(--wa-color-neutral-on-normal));
820
+ background-color: color-mix(
821
+ in oklab,
822
+ var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal)),
823
+ var(--wa-color-mix-active)
824
+ );
825
+ }
826
+ }
827
+
828
+ &.wa-outlined {
829
+ &:not(input[type='file']),
830
+ &::file-selector-button {
831
+ border-color: var(--wa-color-border-normal, var(--wa-color-neutral-border-normal));
832
+ }
833
+ }
834
+ }
835
+
836
+ &.wa-accent {
837
+ &:not(input[type='file']),
838
+ &::file-selector-button {
839
+ color: var(--wa-color-on-loud, var(--wa-color-neutral-on-loud));
840
+ background-color: var(--wa-color-fill-loud, var(--wa-color-neutral-fill-loud));
841
+ border-color: transparent;
842
+ }
843
+
844
+ &:not(:disabled) {
845
+ &:not(input[type='file']):hover,
846
+ &::file-selector-button:hover {
847
+ background-color: color-mix(
848
+ in oklab,
849
+ var(--wa-color-fill-loud, var(--wa-color-neutral-fill-loud)),
850
+ var(--wa-color-mix-hover)
851
+ );
852
+ }
853
+
854
+ &:not(input[type='file']):active,
855
+ &::file-selector-button:active {
856
+ background-color: color-mix(
857
+ in oklab,
858
+ var(--wa-color-fill-loud, var(--wa-color-neutral-fill-loud)),
859
+ var(--wa-color-mix-active)
860
+ );
861
+ }
862
+ }
863
+ }
864
+
865
+ &.wa-pill {
866
+ &:not(input[type='file']),
867
+ &::file-selector-button {
868
+ border-start-start-radius: var(--_button-start-start-radius, var(--wa-border-radius-pill));
869
+ border-start-end-radius: var(--_button-start-end-radius, var(--wa-border-radius-pill));
870
+ border-end-start-radius: var(--_button-end-start-radius, var(--wa-border-radius-pill));
871
+ border-end-end-radius: var(--_button-end-end-radius, var(--wa-border-radius-pill));
872
+ }
873
+ }
874
+
875
+ &:focus {
876
+ outline: none;
877
+ }
878
+
879
+ &:focus-visible {
880
+ outline: var(--wa-focus-ring);
881
+ outline-offset: var(--wa-focus-ring-offset);
882
+ }
883
+
884
+ /* Wrap in :is() so that Safari doesn't stop parsing this block */
885
+ &:is(::-moz-focus-inner) {
886
+ border: 0;
887
+ }
888
+
889
+ &:disabled {
890
+ opacity: 0.5;
891
+ cursor: not-allowed;
892
+
893
+ /* When disabled, prevent mouse events from bubbling up from children */
894
+ * {
895
+ pointer-events: none;
896
+ }
897
+ }
898
+
899
+ /* Adds space between icons and adjacent elements
900
+ * Prefer sibling selectors over :first-child/:last-child to avoid extra space when an icon is used alone */
901
+ & > wa-icon:has(+ *) {
902
+ margin-inline-end: 0.75em;
903
+ }
904
+
905
+ & > * + wa-icon {
906
+ margin-inline-start: 0.75em;
907
+ }
908
+ }
909
+ /* #endregion */
910
+
911
+ /* #region File Inputs ~~~~~~~~~~~~~~~~~~~~~ */
912
+ input[type='file'] {
913
+ display: block;
914
+
915
+ max-inline-size: 100%;
916
+
917
+ color: var(--wa-form-control-value-color);
918
+ font-family: inherit;
919
+ font-size: var(--wa-form-control-value-font-size);
920
+ font-weight: var(--wa-form-control-value-font-weight);
921
+ line-height: var(--wa-form-control-value-line-height);
922
+ vertical-align: middle;
923
+
924
+ border-radius: var(--wa-border-radius-m);
925
+
926
+ cursor: pointer;
927
+ }
928
+ /* #endregion */
929
+
930
+ /* #region Checkboxes + Radios ~~~~~~~~~~~~~ */
931
+ input[type='checkbox'],
932
+ label:has(input[type='checkbox']),
933
+ input[type='radio'],
934
+ label:has(input[type='radio']) {
935
+ display: inline-flex;
936
+
937
+ width: fit-content;
938
+
939
+ color: var(--wa-form-control-value-color);
940
+ font-family: inherit;
941
+ font-size: var(--wa-form-control-value-font-size);
942
+ font-weight: var(--wa-form-control-value-font-weight);
943
+ line-height: var(--wa-form-control-value-line-height);
944
+
945
+ user-select: none;
946
+ -webkit-user-select: none;
947
+
948
+ &,
949
+ + label {
950
+ cursor: pointer;
951
+ }
952
+
953
+ &:disabled,
954
+ &:has(:disabled) {
955
+ opacity: 0.5;
956
+
957
+ cursor: not-allowed;
958
+ }
959
+ }
960
+
961
+ input[type='checkbox'],
962
+ input[type='radio'] {
963
+ appearance: none;
964
+
965
+ flex: 0 0 auto;
966
+ align-items: center;
967
+ justify-content: center;
968
+
969
+ width: var(--wa-form-control-toggle-size);
970
+ height: var(--wa-form-control-toggle-size);
971
+ margin: 0;
972
+ margin-inline-end: 0.5em;
973
+
974
+ background-color: var(--wa-form-control-background-color);
975
+ border-color: var(--wa-form-control-border-color);
976
+ border-style: var(--wa-border-style);
977
+ border-width: var(--wa-form-control-border-width);
978
+
979
+ transition:
980
+ background var(--wa-transition-normal),
981
+ border-color var(--wa-transition-fast),
982
+ box-shadow var(--wa-transition-fast),
983
+ color var(--wa-transition-fast);
984
+ transition-timing-function: var(--wa-transition-easing);
985
+
986
+ &:focus-visible {
987
+ outline: var(--wa-focus-ring);
988
+ outline-offset: var(--wa-focus-ring-offset);
989
+ }
990
+ }
991
+
992
+ /* Checkbox */
993
+ input[type='checkbox'] {
994
+ --checked-icon-color: var(--wa-color-brand-on-loud);
995
+ --checked-icon-scale: 0.8;
996
+
997
+ border-radius: min(
998
+ calc(var(--wa-form-control-toggle-size) * 0.375),
999
+ var(--wa-border-radius-s)
1000
+ ); /* min prevents entirely circular checkbox */
1001
+
1002
+ &:checked,
1003
+ &:indeterminate {
1004
+ color: var(--checked-icon-color);
1005
+
1006
+ background-color: var(--wa-form-control-activated-color);
1007
+ border-color: var(--wa-form-control-activated-color);
1008
+ }
1009
+
1010
+ &:checked::after,
1011
+ &:indeterminate::after {
1012
+ content: '';
1013
+
1014
+ width: var(--wa-form-control-toggle-size);
1015
+ height: var(--wa-form-control-toggle-size);
1016
+ scale: var(--checked-icon-scale);
1017
+
1018
+ background-color: currentColor;
1019
+ }
1020
+
1021
+ &:checked::after {
1022
+ mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z"/></svg>')
1023
+ center / 1em 1em no-repeat;
1024
+ }
1025
+
1026
+ &:indeterminate::after {
1027
+ mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="16" width="14" viewBox="0 0 448 512"><path d="M431 256c0 17.7-14.3 32-32 32H49c-17.7 0-32-14.3-32-32s14.3-32 32-32h350c17.7 0 32 14.3 32 32z"/></svg>')
1028
+ center no-repeat;
1029
+ }
1030
+ }
1031
+
1032
+ /* Radio */
1033
+ input[type='radio'] {
1034
+ --checked-icon-color: var(--wa-form-control-activated-color);
1035
+ --checked-icon-scale: 0.7;
1036
+
1037
+ color: transparent;
1038
+
1039
+ border-radius: 50%;
1040
+
1041
+ &:checked {
1042
+ color: var(--checked-icon-color);
1043
+
1044
+ border-color: var(--wa-form-control-activated-color);
1045
+ }
1046
+
1047
+ &:checked::after {
1048
+ content: '';
1049
+
1050
+ aspect-ratio: 1;
1051
+ width: 100%;
1052
+ scale: var(--checked-icon-scale);
1053
+
1054
+ background-color: currentColor;
1055
+ border-radius: 50%;
1056
+ }
1057
+ }
1058
+ /* #endregion */
1059
+
1060
+ /* #region Text Fields + Textareas + Selects */
1061
+ input:not(
1062
+ /* Exclude inputs that don't accept text */
1063
+ [type='button'],
1064
+ [type='checkbox'],
1065
+ [type='color'],
1066
+ [type='file'],
1067
+ [type='hidden'],
1068
+ [type='image'],
1069
+ [type='radio'],
1070
+ [type='range'],
1071
+ [type='reset'],
1072
+ [type='submit']
1073
+ ), textarea, select {
1074
+ width: 100%;
1075
+ height: var(--wa-form-control-height);
1076
+ padding: 0 var(--wa-form-control-padding-inline);
1077
+
1078
+ color: var(--wa-form-control-value-color);
1079
+ font-size: var(--wa-form-control-value-size);
1080
+ font-family: inherit;
1081
+ font-weight: var(--wa-form-control-value-font-weight);
1082
+ line-height: var(--wa-form-control-value-line-height);
1083
+ vertical-align: middle;
1084
+
1085
+ background-color: var(--wa-form-control-background-color);
1086
+ border-color: var(--wa-form-control-border-color);
1087
+ border-style: var(--wa-form-control-border-style);
1088
+ border-width: var(--wa-form-control-border-width);
1089
+ border-radius: var(--wa-form-control-border-radius);
1090
+
1091
+ transition:
1092
+ background-color var(--wa-transition-normal),
1093
+ border-color var(--wa-transition-normal),
1094
+ outline-color var(--wa-transition-fast);
1095
+ transition-timing-function: var(--wa-transition-easing);
1096
+ outline: var(--wa-focus-ring-style) var(--wa-focus-ring-width) transparent;
1097
+ outline-offset: var(--wa-focus-ring-offset);
1098
+
1099
+ cursor: text;
1100
+
1101
+ &::placeholder {
1102
+ color: var(--wa-form-control-placeholder-color);
1103
+
1104
+ user-select: none;
1105
+ -webkit-user-select: none;
1106
+ }
1107
+
1108
+ &:focus-visible {
1109
+ outline-color: var(--wa-color-focus);
1110
+ }
1111
+
1112
+ &:disabled {
1113
+ opacity: 0.5;
1114
+
1115
+ cursor: not-allowed;
1116
+ }
1117
+
1118
+ &.wa-outlined {
1119
+ background-color: var(--wa-form-control-background-color);
1120
+ border-color: var(--wa-form-control-border-color);
1121
+ }
1122
+
1123
+ &.wa-filled {
1124
+ background-color: var(--wa-color-neutral-fill-quiet);
1125
+ border-color: var(--wa-color-neutral-fill-quiet);
1126
+
1127
+ &.wa-outlined {
1128
+ border-color: var(--wa-form-control-border-color);
1129
+ }
1130
+ }
1131
+
1132
+ &.wa-pill {
1133
+ border-radius: var(--wa-border-radius-pill);
1134
+ }
1135
+ }
1136
+
1137
+ /* Textarea */
1138
+ textarea {
1139
+ height: auto;
1140
+ min-height: var(--wa-form-control-height);
1141
+ scroll-padding-block: var(--wa-form-control-padding-block);
1142
+ padding: calc(var(--wa-form-control-padding-block) - ((1lh - 1em) / 2)) var(--wa-form-control-padding-inline); /* accounts for the larger line height of textarea content */
1143
+
1144
+ line-height: var(--wa-line-height-normal);
1145
+
1146
+ resize: vertical;
1147
+ }
1148
+
1149
+ /* Select */
1150
+ select {
1151
+ --icon-caret: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="rgb(180 180 200)" d="M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>');
1152
+
1153
+ appearance: none;
1154
+
1155
+ position: relative;
1156
+
1157
+ min-width: 0;
1158
+ background-image: var(--icon-caret), var(--icon-caret);
1159
+ background-repeat: no-repeat;
1160
+ background-position: center right var(--wa-form-control-padding-inline);
1161
+ background-blend-mode: hue, difference;
1162
+ background-size: 1rem 1rem;
1163
+ text-overflow: ellipsis;
1164
+ padding-inline-end: calc(var(--wa-form-control-padding-inline) + 1rem + var(--wa-space-xs));
1165
+ overflow: hidden;
1166
+
1167
+ cursor: pointer;
1168
+
1169
+ &[multiple] {
1170
+ height: auto;
1171
+ background-image: none;
1172
+ padding-inline: var(--wa-form-control-padding-inline);
1173
+ }
1174
+ }
1175
+ /* #endregion */
1176
+
1177
+ /* #region Color Pickers ~~~~~~~~~~~~~~~~~~~ */
1178
+ input[type='color'] {
1179
+ display: block;
1180
+
1181
+ block-size: var(--wa-form-control-height);
1182
+ inline-size: var(--wa-form-control-height);
1183
+ padding: calc(var(--wa-form-control-border-width) * 2);
1184
+
1185
+ font-size: 1em;
1186
+
1187
+ background: transparent;
1188
+ border: var(--wa-form-control-border-width) var(--wa-border-style) var(--wa-form-control-border-color);
1189
+ border-radius: var(--wa-form-control-border-radius);
1190
+
1191
+ cursor: pointer;
1192
+ forced-color-adjust: none;
1193
+
1194
+ &::-webkit-color-swatch-wrapper {
1195
+ padding: 0;
1196
+ border-radius: inherit;
1197
+ }
1198
+
1199
+ &::-webkit-color-swatch {
1200
+ border: none;
1201
+ border-radius: calc(var(--wa-form-control-border-radius) - var(--wa-form-control-border-width) * 3);
1202
+ }
1203
+
1204
+ &::-moz-color-swatch {
1205
+ border: none;
1206
+ border-radius: calc(var(--wa-form-control-border-radius) - var(--wa-form-control-border-width) * 3);
1207
+ }
1208
+
1209
+ &:focus-visible {
1210
+ outline: var(--wa-focus-ring);
1211
+ outline-offset: var(--wa-focus-ring-offset);
1212
+ }
1213
+ }
1214
+ /* #endregion */
1215
+
1216
+ /* #region Sliders ~~~~~~~~~~~~~~~~~~~~~~~~~ */
1217
+ input[type='range'] {
1218
+ --thumb-width: 1.4em;
1219
+ --thumb-height: 1.4em;
1220
+ --track-size: 0.5em;
1221
+
1222
+ -webkit-appearance: none;
1223
+
1224
+ display: flex;
1225
+ flex-direction: column;
1226
+ position: relative;
1227
+
1228
+ width: 100%;
1229
+ height: var(--track-size);
1230
+ margin: 0;
1231
+
1232
+ font-size: inherit;
1233
+ line-height: var(--wa-form-control-height);
1234
+ vertical-align: middle;
1235
+
1236
+ background-color: var(--wa-color-neutral-fill-normal);
1237
+ border-radius: calc(var(--track-size) / 2);
1238
+
1239
+ &::-webkit-slider-runnable-track {
1240
+ width: 100%;
1241
+ height: var(--track-size);
1242
+
1243
+ border: none;
1244
+ border-radius: 999px;
1245
+ }
1246
+
1247
+ &::-webkit-slider-thumb {
1248
+ -webkit-appearance: none;
1249
+
1250
+ width: var(--thumb-width);
1251
+ height: var(--thumb-height);
1252
+ margin-top: calc(var(--thumb-height) / -2 + var(--track-size) / 2);
1253
+
1254
+ background-color: var(--wa-form-control-activated-color);
1255
+ border: solid 0.125em var(--wa-color-surface-default);
1256
+ border-radius: 50%;
1257
+
1258
+ transition-property: background-color, border-color, box-shadow, color;
1259
+ transition-duration: var(--wa-transition-normal);
1260
+ transition-timing-function: var(--wa-transition-easing);
1261
+ }
1262
+
1263
+ &:enabled {
1264
+ &:focus-visible::-webkit-slider-thumb {
1265
+ outline: var(--wa-focus-ring);
1266
+ outline-offset: var(--wa-focus-ring-offset);
1267
+ }
1268
+
1269
+ &::-webkit-slider-thumb {
1270
+ cursor: pointer;
1271
+ }
1272
+
1273
+ &::-webkit-slider-thumb:active {
1274
+ cursor: grabbing;
1275
+ }
1276
+ }
1277
+
1278
+ &::-moz-focus-outer {
1279
+ border: 0;
1280
+ }
1281
+
1282
+ &::-moz-range-progress {
1283
+ height: var(--track-size);
1284
+
1285
+ background-color: var(--wa-color-neutral-fill-normal);
1286
+ border-radius: 3px;
1287
+ }
1288
+
1289
+ &::-moz-range-track {
1290
+ width: 100%;
1291
+ height: var(--track-size);
1292
+
1293
+ background-color: var(--wa-color-neutral-fill-normal);
1294
+ border: none;
1295
+ border-radius: 999px;
1296
+ }
1297
+
1298
+ &::-moz-range-thumb {
1299
+ width: var(--thumb-width);
1300
+ height: var(--thumb-height);
1301
+
1302
+ background-color: var(--wa-form-control-activated-color);
1303
+ border: solid 0.125em var(--wa-color-surface-default);
1304
+ border-radius: 50%;
1305
+
1306
+ transition-property: background-color, border-color, box-shadow, color;
1307
+ transition-duration: var(--wa-transition-normal);
1308
+ transition-timing-function: var(--wa-transition-easing);
1309
+ }
1310
+
1311
+ &:enabled {
1312
+ &:focus-visible::-moz-range-thumb {
1313
+ outline: var(--wa-focus-ring);
1314
+ outline-offset: var(--wa-focus-ring-offset);
1315
+ }
1316
+
1317
+ &::-moz-range-thumb {
1318
+ cursor: pointer;
1319
+ }
1320
+
1321
+ &::-moz-range-thumb:active {
1322
+ cursor: grabbing;
1323
+ }
1324
+ }
1325
+ }
1326
+
1327
+ label > input[type='range'] {
1328
+ margin-block-start: 1em;
1329
+ }
1330
+
1331
+ input[type='range']:focus {
1332
+ outline: none;
1333
+ }
1334
+
1335
+ input[type='range']:disabled {
1336
+ opacity: 0.5;
1337
+
1338
+ cursor: not-allowed;
1339
+
1340
+ &::-webkit-slider-thumb {
1341
+ cursor: not-allowed;
1342
+ }
1343
+
1344
+ &::-moz-range-thumb {
1345
+ cursor: not-allowed;
1346
+ }
1347
+ }
1348
+ /* #endregion */
1349
+
1350
+ /* #region Progress ~~~~~~~~~~~~~~~~~~~~~~~~ */
1351
+ progress {
1352
+ --indicator-color: var(--wa-color-brand-fill-loud);
1353
+
1354
+ width: 100%;
1355
+ height: 1rem;
1356
+ overflow: hidden;
1357
+
1358
+ color: var(--wa-color-brand-on-loud);
1359
+
1360
+ background-color: var(--wa-color-neutral-fill-normal);
1361
+ border-radius: var(--wa-border-radius-pill);
1362
+
1363
+ &::-webkit-progress-bar {
1364
+ background: transparent;
1365
+ }
1366
+
1367
+ &[value]::-webkit-progress-value {
1368
+ background-color: var(--indicator-color);
1369
+ }
1370
+
1371
+ &::-moz-progress-bar {
1372
+ background-color: var(--indicator-color);
1373
+ }
1374
+ }
1375
+
1376
+ /* Indeterminate */
1377
+ progress:not([value]) {
1378
+ padding-left: var(--inset-inline-start);
1379
+
1380
+ animation: wa-progress-indeterminate 2.5s infinite cubic-bezier(0.37, 0, 0.63, 1);
1381
+
1382
+ &::-webkit-progress-bar {
1383
+ background-color: var(
1384
+ --indicator-color
1385
+ ); /* Chrome does not render a ::-webkit-progress-value for indeterminate progress */
1386
+ }
1387
+ }
1388
+
1389
+ @keyframes wa-fade-in {
1390
+ from {
1391
+ opacity: 0;
1392
+ }
1393
+ }
1394
+
1395
+ /* For some reason Chrome fiercely resists animations on this pseudo
1396
+ so we had to do it with padding on <progress> */
1397
+ @keyframes wa-progress-indeterminate {
1398
+ 0% {
1399
+ padding-inline-end: 100%;
1400
+ }
1401
+
1402
+ 25%,
1403
+ 100% {
1404
+ padding-inline-end: 0%;
1405
+ }
1406
+
1407
+ 75%,
1408
+ 100% {
1409
+ padding-inline-start: 100%;
1410
+ }
1411
+ }
1412
+ /* #endregion */
1413
+
1414
+ /* #region Validation ~~~~~~~~~~~~~~~~~~~~~~ */
1415
+ .wa-invalid {
1416
+ --wa-form-control-border-color: var(--wa-color-danger-border-loud);
1417
+ --wa-form-control-activated-color: var(--wa-color-danger-fill-loud);
1418
+ --wa-form-control-value-color: var(--wa-color-danger-on-quiet);
1419
+
1420
+ /* Focus ring */
1421
+ --wa-color-focus: var(--wa-color-danger-border-loud);
1422
+
1423
+ /* Help text */
1424
+ --wa-color-text-quiet: var(--wa-color-danger-on-quiet);
1425
+ }
1426
+
1427
+ .wa-valid {
1428
+ --wa-form-control-border-color: var(--wa-color-success-border-loud);
1429
+ --wa-form-control-activated-color: var(--wa-color-success-fill-loud);
1430
+ --wa-form-control-value-color: var(--wa-color-success-on-quiet);
1431
+
1432
+ /* Focus ring */
1433
+ --wa-color-focus: var(--wa-color-success-border-loud);
1434
+
1435
+ /* Help text */
1436
+ --wa-color-text-quiet: var(--wa-color-success-on-quiet);
1437
+ }
1438
+ /* #endregion */
1439
+ }