summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/_config.defaults.scss491
-rw-r--r--src/_config.scss28
-rw-r--r--src/_core.scss38
-rw-r--r--src/_core.vars.scss259
-rw-r--r--src/_functions.scss32
-rw-r--r--src/_props.scss34
-rw-r--r--src/_themes.scss38
-rw-r--r--src/_utils.scss236
-rw-r--r--src/layouts/_card-list.scss178
-rw-r--r--src/layouts/_card-list.vars.scss135
-rw-r--r--src/layouts/_container.scss26
-rw-r--r--src/layouts/_container.vars.scss39
-rw-r--r--src/layouts/_flex.scss10
-rw-r--r--src/layouts/_form.scss52
-rw-r--r--src/layouts/_form.vars.scss6
-rw-r--r--src/layouts/_hlist.scss71
-rw-r--r--src/layouts/_hlist.vars.scss18
-rw-r--r--src/layouts/_media.scss30
-rw-r--r--src/layouts/_media.vars.scss20
-rw-r--r--src/layouts/_overflow.scss10
-rw-r--r--src/layouts/_split-view.scss93
-rw-r--r--src/layouts/_split-view.vars.scss15
-rw-r--r--src/objects/_alert.scss49
-rw-r--r--src/objects/_alert.vars.scss52
-rw-r--r--src/objects/_avatar.scss171
-rw-r--r--src/objects/_avatar.vars.scss127
-rw-r--r--src/objects/_backdrop.scss32
-rw-r--r--src/objects/_backdrop.vars.scss14
-rw-r--r--src/objects/_button.scss279
-rw-r--r--src/objects/_button.vars.scss666
-rw-r--r--src/objects/_card.scss389
-rw-r--r--src/objects/_card.vars.scss151
-rw-r--r--src/objects/_checkbox.scss213
-rw-r--r--src/objects/_checkbox.vars.scss108
-rw-r--r--src/objects/_dialog.scss72
-rw-r--r--src/objects/_dialog.vars.scss20
-rw-r--r--src/objects/_divider.scss134
-rw-r--r--src/objects/_divider.vars.scss179
-rw-r--r--src/objects/_emoji.scss56
-rw-r--r--src/objects/_emoji.vars.scss32
-rw-r--r--src/objects/_field-label.scss68
-rw-r--r--src/objects/_field-label.vars.scss42
-rw-r--r--src/objects/_figure.scss30
-rw-r--r--src/objects/_figure.vars.scss20
-rw-r--r--src/objects/_heading.scss114
-rw-r--r--src/objects/_heading.vars.scss610
-rw-r--r--src/objects/_icon.scss30
-rw-r--r--src/objects/_icon.vars.scss6
-rw-r--r--src/objects/_lightbox.scss157
-rw-r--r--src/objects/_lightbox.vars.scss89
-rw-r--r--src/objects/_menu.scss101
-rw-r--r--src/objects/_menu.vars.scss83
-rw-r--r--src/objects/_navbar.scss247
-rw-r--r--src/objects/_navbar.vars.scss326
-rw-r--r--src/objects/_palette.scss52
-rw-r--r--src/objects/_placeholders.scss28
-rw-r--r--src/objects/_placeholders.vars.scss8
-rw-r--r--src/objects/_popover.scss54
-rw-r--r--src/objects/_popover.vars.scss35
-rw-r--r--src/objects/_radio.scss149
-rw-r--r--src/objects/_radio.vars.scss107
-rw-r--r--src/objects/_side-nav.scss83
-rw-r--r--src/objects/_side-nav.vars.scss84
-rw-r--r--src/objects/_status-indicator.scss28
-rw-r--r--src/objects/_status-indicator.vars.scss30
-rw-r--r--src/objects/_switch.scss154
-rw-r--r--src/objects/_switch.vars.scss119
-rw-r--r--src/objects/_tabbar.scss110
-rw-r--r--src/objects/_tabbar.vars.scss76
-rw-r--r--src/objects/_table.scss88
-rw-r--r--src/objects/_table.vars.scss68
-rw-r--r--src/objects/_text-field.scss147
-rw-r--r--src/objects/_text-field.vars.scss121
-rw-r--r--src/objects/_thumbnail.scss95
-rw-r--r--src/objects/_thumbnail.vars.scss100
-rw-r--r--src/scopes/_blockquotes.scss28
-rw-r--r--src/scopes/_blockquotes.vars.scss29
-rw-r--r--src/scopes/_body.scss26
-rw-r--r--src/scopes/_body.vars.scss31
-rw-r--r--src/scopes/_code.scss46
-rw-r--r--src/scopes/_code.vars.scss33
-rw-r--r--src/scopes/_figures.scss22
-rw-r--r--src/scopes/_headings.scss90
-rw-r--r--src/scopes/_implicit.scss105
-rw-r--r--src/scopes/_implicit.vars.scss83
-rw-r--r--src/scopes/_links.scss109
-rw-r--r--src/scopes/_links.vars.scss129
-rw-r--r--src/scopes/_lists.scss30
-rw-r--r--src/scopes/_lists.vars.scss13
-rw-r--r--src/scopes/_tables.scss48
-rw-r--r--src/scopes/_tables.vars.scss4
-rw-r--r--src_demo/components/_box.scss14
-rw-r--r--src_demo/components/_content.scss8
-rw-r--r--src_demo/components/_sidebar.scss10
-rw-r--r--src_demo/components/_view.scss12
95 files changed, 5543 insertions, 3589 deletions
diff --git a/src/_config.defaults.scss b/src/_config.defaults.scss
index 699cd8e..e9e978a 100644
--- a/src/_config.defaults.scss
+++ b/src/_config.defaults.scss
@@ -1,21 +1,20 @@
1@use 'sass:list'; 1@use "sass:list";
2@use 'sass:map'; 2@use "sass:map";
3@use 'sass:math'; 3@use "sass:math";
4@use 'pkg:iro-sass/src/easing' as easing; 4@use "pkg:iro-sass/easing" as easing;
5 5
6$static-colors: ( 6$static-colors: (
7 --base: hsl(0, 0%, 98%), 7 --base: hsl(0, 0%, 98%),
8
9 --levels: ( 8 --levels: (
10 --100: math.div(0, 12) * 110 - 10, 9 --100: math.div(0, 12) * 110 - 10,
11 --200: math.div(1, 12) * 110 - 10, 10 --200: math.div(1, 12) * 110 - 10,
12 --300: math.div(2, 12) * 110 - 10, 11 --300: math.div(2, 12) * 110 - 10,
13 --400: math.div(3, 12) * 110 - 10, 12 --400: math.div(3, 12) * 110 - 10,
14 --500: math.div(4, 12) * 110 - 10, 13 --500: math.div(4, 12) * 110 - 10,
15 --600: math.div(5, 12) * 110 - 10, 14 --600: math.div(5, 12) * 110 - 10,
16 --700: math.div(6, 12) * 110 - 10, 15 --700: math.div(6, 12) * 110 - 10,
17 --800: math.div(7, 12) * 110 - 10, 16 --800: math.div(7, 12) * 110 - 10,
18 --900: math.div(8, 12) * 110 - 10, 17 --900: math.div(8, 12) * 110 - 10,
19 --1000: math.div(9, 12) * 110 - 10, 18 --1000: math.div(9, 12) * 110 - 10,
20 --1100: math.div(10, 12) * 110 - 10, 19 --1100: math.div(10, 12) * 110 - 10,
21 --1200: math.div(11, 12) * 110 - 10, 20 --1200: math.div(11, 12) * 110 - 10,
@@ -23,175 +22,405 @@ $static-colors: (
23 ), 22 ),
24 23
25 --palettes: ( 24 --palettes: (
26 --blue: oklch(56% .14 275.25), 25 --blue: oklch(56% 0.14 275.25),
27 --purple: oklch(56% .14 305.58), 26 --purple: oklch(56% 0.14 305.58),
28 --red: oklch(56% .14 14.69), 27 --red: oklch(56% 0.14 14.69),
29 --green: oklch(56% .14 150.48), 28 --green: oklch(56% 0.14 150.48),
30 --yellow: oklch(56% .14 84.08), 29 --yellow: oklch(56% 0.14 84.08),
31 ), 30 ),
32 31
33 --transparents: ( 32 --transparents: (
34 --100: 0, 33 --100: 0,
35 --200: .1, 34 --200: 0.1,
36 --300: .25, 35 --300: 0.25,
37 --400: .4, 36 --400: 0.4,
38 --500: .55, 37 --500: 0.55,
39 --600: .7, 38 --600: 0.7,
40 --700: .8, 39 --700: 0.8,
41 --800: .9, 40 --800: 0.9,
42 --900: 1, 41 --900: 1,
43 ), 42 ),
44); 43);
45 44
46$semantic-colors-common: ( 45$semantic-colors-common: (
47 --accent: --blue, 46 --accent: --blue,
48 --accent-static: --blue-static, 47 --accent-static: --blue-static,
49 --positive: --green, 48 --positive: --green,
50 --positive-static: --green-static, 49 --positive-static: --green-static,
51 --negative: --red, 50 --negative: --red,
52 --negative-static: --red-static, 51 --negative-static: --red-static,
53 --warning: --yellow, 52 --warning: --yellow,
54 --warning-static: --yellow-static, 53 --warning-static: --yellow-static,
55
56 --focus-raw: --accent,
57 --focus-static: --accent-static,
58 54
59 --border-mute: --base --200, 55 --focus-raw: --accent,
60 --border: --base --300, 56 --focus-static: --accent-static,
61 --border-strong: --base --400,
62
63 --text-disabled: --base --500,
64 --text-mute-more: --base --600,
65 --text-mute: --base --700,
66 --text: --base --800,
67 --heading: --base --900,
68 57
58 --border-mute: --base --200,
59 --border: --base --300,
60 --border-strong: --base --400,
61 --text-disabled: --base --500,
62 --text-mute-more: --base --600,
63 --text-mute: --base --700,
64 --text: --base --800,
65 --heading: --base --900,
69 --focus: ( 66 --focus: (
70 --outline: --focus-raw --400, 67 --outline: --focus-raw --400,
71 --border-mute: --focus-raw --900, 68 --border-mute: --focus-raw --900,
72 --border: --focus-raw --1000, 69 --border: --focus-raw --1000,
73 --border-text: --focus-raw --1000-text, 70 --border-text: --focus-raw --1000-text,
74 --border-strong: --focus-raw --1100, 71 --border-strong: --focus-raw --1100,
75 --text: --focus-raw --1100, 72 --text: --focus-raw --1100,
76 ), 73 ),
77); 74);
78 75
79$theme-light: ( 76$theme-light: (
80 --levels: ( 77 --levels: (
81 --grays: ( 78 --grays: (
82 --50: (-8) (.2 + .8 * easing.ease(math.div(0, 12))), 79 --50: (
83 --75: (-4) (.2 + .8 * easing.ease(math.div(1, 12))), 80 -8,
84 --100: (0) (.2 + .8 * easing.ease(math.div(2, 12))), 81 )
82 (
83 0.2 + 0.8 * easing.ease(math.div(0, 12)),
84 ),
85 --75: (
86 -4,
87 )
88 (
89 0.2 + 0.8 * easing.ease(math.div(1, 12)),
90 ),
91 --100: (0)
92 (
93 0.2 + 0.8 * easing.ease(math.div(2, 12)),
94 ),
85 95
86 --200: (easing.cubic-bezier(.2, .1, .9, .9, math.div(1, 7)) * 98) (.2 + .8 * easing.ease(math.div(3, 12))), 96 --200: (
87 --300: (easing.cubic-bezier(.2, .1, .9, .9, math.div(2, 7)) * 98) (.2 + .8 * easing.ease(math.div(4, 12))), 97 easing.cubic-bezier(0.2, 0.1, 0.9, 0.9, math.div(1, 7)) * 98,
88 --400: (easing.cubic-bezier(.2, .1, .9, .9, math.div(3, 7)) * 98) (.2 + .8 * easing.ease(math.div(5, 12))), 98 )
99 (
100 0.2 + 0.8 * easing.ease(math.div(3, 12)),
101 ),
102 --300: (
103 easing.cubic-bezier(0.2, 0.1, 0.9, 0.9, math.div(2, 7)) * 98,
104 )
105 (
106 0.2 + 0.8 * easing.ease(math.div(4, 12)),
107 ),
108 --400: (
109 easing.cubic-bezier(0.2, 0.1, 0.9, 0.9, math.div(3, 7)) * 98,
110 )
111 (
112 0.2 + 0.8 * easing.ease(math.div(5, 12)),
113 ),
89 114
90 --500: (easing.cubic-bezier(.2, .1, .9, .9, math.div(4, 7)) * 98) (.2 + .8 * easing.ease(math.div(6, 12))), 115 --500: (
91 --600: (easing.cubic-bezier(.2, .1, .9, .9, math.div(5, 7)) * 98) (.2 + .8 * easing.ease(math.div(7, 12))), 116 easing.cubic-bezier(0.2, 0.1, 0.9, 0.9, math.div(4, 7)) * 98,
92 --700: (easing.cubic-bezier(.2, .1, .9, .9, math.div(6, 7)) * 98) (.2 + .8 * easing.ease(math.div(8, 12))), 117 )
93 --800: (easing.cubic-bezier(.2, .1, .9, .9, math.div(7, 7)) * 98) (.2 + .8 * easing.ease(math.div(9, 12))), 118 (
94 --900: (106) (.2 + .8 * easing.ease(math.div(10, 12))), 119 0.2 + 0.8 * easing.ease(math.div(6, 12)),
120 ),
121 --600: (
122 easing.cubic-bezier(0.2, 0.1, 0.9, 0.9, math.div(5, 7)) * 98,
123 )
124 (
125 0.2 + 0.8 * easing.ease(math.div(7, 12)),
126 ),
127 --700: (
128 easing.cubic-bezier(0.2, 0.1, 0.9, 0.9, math.div(6, 7)) * 98,
129 )
130 (
131 0.2 + 0.8 * easing.ease(math.div(8, 12)),
132 ),
133 --800: (
134 easing.cubic-bezier(0.2, 0.1, 0.9, 0.9, math.div(7, 7)) * 98,
135 )
136 (
137 0.2 + 0.8 * easing.ease(math.div(9, 12)),
138 ),
139 --900: (106)
140 (
141 0.2 + 0.8 * easing.ease(math.div(10, 12)),
142 ),
95 ), 143 ),
96 144
97 --colors: ( 145 --colors: (
98 --100: (math.div(0, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(0, 12))), 146 --100: (
99 --200: (math.div(1, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(1, 12))), 147 math.div(0, 12) * 94 + 7,
100 --300: (math.div(2, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(2, 12))), 148 )
101 --400: (math.div(3, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(3, 12))), 149 (
102 --500: (math.div(4, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(4, 12))), 150 0.2 + 0.8 * easing.ease(math.div(0, 12)),
103 --600: (math.div(5, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(5, 12))), 151 ),
104 --700: (math.div(6, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(6, 12))), 152 --200: (
105 --800: (math.div(7, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(7, 12))), 153 math.div(1, 12) * 94 + 7,
106 --900: (math.div(8, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(8, 12))), 154 )
107 --1000: (math.div(9, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(9, 12))), 155 (
108 --1100: (math.div(10, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(10, 12))), 156 0.2 + 0.8 * easing.ease(math.div(1, 12)),
109 --1200: (math.div(11, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(11, 12))), 157 ),
110 --1300: (math.div(12, 12) * 94 + 7) (.2 + .8 * easing.ease(math.div(12, 12))), 158 --300: (
159 math.div(2, 12) * 94 + 7,
160 )
161 (
162 0.2 + 0.8 * easing.ease(math.div(2, 12)),
163 ),
164 --400: (
165 math.div(3, 12) * 94 + 7,
166 )
167 (
168 0.2 + 0.8 * easing.ease(math.div(3, 12)),
169 ),
170 --500: (
171 math.div(4, 12) * 94 + 7,
172 )
173 (
174 0.2 + 0.8 * easing.ease(math.div(4, 12)),
175 ),
176 --600: (
177 math.div(5, 12) * 94 + 7,
178 )
179 (
180 0.2 + 0.8 * easing.ease(math.div(5, 12)),
181 ),
182 --700: (
183 math.div(6, 12) * 94 + 7,
184 )
185 (
186 0.2 + 0.8 * easing.ease(math.div(6, 12)),
187 ),
188 --800: (
189 math.div(7, 12) * 94 + 7,
190 )
191 (
192 0.2 + 0.8 * easing.ease(math.div(7, 12)),
193 ),
194 --900: (
195 math.div(8, 12) * 94 + 7,
196 )
197 (
198 0.2 + 0.8 * easing.ease(math.div(8, 12)),
199 ),
200 --1000: (
201 math.div(9, 12) * 94 + 7,
202 )
203 (
204 0.2 + 0.8 * easing.ease(math.div(9, 12)),
205 ),
206 --1100: (
207 math.div(10, 12) * 94 + 7,
208 )
209 (
210 0.2 + 0.8 * easing.ease(math.div(10, 12)),
211 ),
212 --1200: (
213 math.div(11, 12) * 94 + 7,
214 )
215 (
216 0.2 + 0.8 * easing.ease(math.div(11, 12)),
217 ),
218 --1300: (
219 math.div(12, 12) * 94 + 7,
220 )
221 (
222 0.2 + 0.8 * easing.ease(math.div(12, 12)),
223 ),
111 ), 224 ),
112 ), 225 ),
113 226
114 --palettes: ( 227 --palettes: (
115 --base: hsl(260, 70%, 98%) --grays, 228 --base: hsl(260, 70%, 98%) --grays,
116 --blue: oklch(56% .16 275.25) --colors, 229 --blue: oklch(56% 0.16 275.25) --colors,
117 --purple: oklch(56% .16 305.58) --colors, 230 --purple: oklch(56% 0.16 305.58) --colors,
118 --red: oklch(56% .16 14.69) --colors, 231 --red: oklch(56% 0.16 14.69) --colors,
119 --green: oklch(56% .16 150.48) --colors, 232 --green: oklch(56% 0.16 150.48) --colors,
120 --yellow: oklch(56% .16 84.08) --colors, 233 --yellow: oklch(56% 0.16 84.08) --colors,
121 ), 234 ),
122 235
123 --semantic: map.merge($semantic-colors-common, ( 236 --semantic: map.merge(
124 --bg-l2: --base --50, 237 $semantic-colors-common,
125 --bg-l1: --base --100, 238 (
126 --bg-base: --base --200, 239 --bg-l2: --base --50,
127 240 --bg-l1: --base --100,
128 --box: ( 241 --bg-base: --base --200,
129 --border: --base --200, 242 --box: (
130 --border-strong: --base --300, 243 --border: --base --200,
244 --border-strong: --base --300,
245 ),
246 )
131 ), 247 ),
132 )),
133
134 --constants: ( 248 --constants: (
135 --shadow: rgba(#000, .1), 249 --shadow: rgba(#000, 0.1),
136 ), 250 ),
137); 251);
138 252
139$theme-dark: ( 253$theme-dark: (
140 --levels: ( 254 --levels: (
141 --grays: ( 255 --grays: (
142 --50: (4.4) (.3 + .7 * easing.ease(math.div(10, 12))), 256 --50: (4.4)
143 --75: (2.5) (.3 + .7 * easing.ease(math.div(9, 12))), 257 (
144 --100: (0) (.3 + .7 * easing.ease(math.div(8, 12))), 258 0.3 + 0.7 * easing.ease(math.div(10, 12)),
259 ),
260 --75: (2.5)
261 (
262 0.3 + 0.7 * easing.ease(math.div(9, 12)),
263 ),
264 --100: (0)
265 (
266 0.3 + 0.7 * easing.ease(math.div(8, 12)),
267 ),
145 268
146 --200: (easing.cubic-bezier(.3, .1, .8, .8, math.div(1, 8)) * -108) (.3 + .7 * easing.ease(math.div(7, 12))), 269 --200: (
147 --300: (easing.cubic-bezier(.3, .1, .8, .8, math.div(2, 8)) * -108) (.3 + .7 * easing.ease(math.div(6, 12))), 270 easing.cubic-bezier(0.3, 0.1, 0.8, 0.8, math.div(1, 8)) * -108,
148 --400: (easing.cubic-bezier(.3, .1, .8, .8, math.div(3, 8)) * -108) (.3 + .7 * easing.ease(math.div(5, 12))), 271 )
272 (
273 0.3 + 0.7 * easing.ease(math.div(7, 12)),
274 ),
275 --300: (
276 easing.cubic-bezier(0.3, 0.1, 0.8, 0.8, math.div(2, 8)) * -108,
277 )
278 (
279 0.3 + 0.7 * easing.ease(math.div(6, 12)),
280 ),
281 --400: (
282 easing.cubic-bezier(0.3, 0.1, 0.8, 0.8, math.div(3, 8)) * -108,
283 )
284 (
285 0.3 + 0.7 * easing.ease(math.div(5, 12)),
286 ),
149 287
150 --500: (easing.cubic-bezier(.3, .1, .8, .8, math.div(4, 8)) * -108) (.3 + .7 * easing.ease(math.div(4, 12))), 288 --500: (
151 --600: (easing.cubic-bezier(.3, .1, .8, .8, math.div(5, 8)) * -108) (.3 + .7 * easing.ease(math.div(3, 12))), 289 easing.cubic-bezier(0.3, 0.1, 0.8, 0.8, math.div(4, 8)) * -108,
152 --700: (easing.cubic-bezier(.3, .1, .8, .8, math.div(6, 8)) * -108) (.3 + .7 * easing.ease(math.div(2, 12))), 290 )
153 --800: (easing.cubic-bezier(.3, .1, .8, .8, math.div(7, 8)) * -108) (.3 + .7 * easing.ease(math.div(1, 12))), 291 (
154 --900: (easing.cubic-bezier(.3, .1, .8, .8, math.div(8, 8)) * -108) (.3 + .7 * easing.ease(math.div(0, 12))), 292 0.3 + 0.7 * easing.ease(math.div(4, 12)),
293 ),
294 --600: (
295 easing.cubic-bezier(0.3, 0.1, 0.8, 0.8, math.div(5, 8)) * -108,
296 )
297 (
298 0.3 + 0.7 * easing.ease(math.div(3, 12)),
299 ),
300 --700: (
301 easing.cubic-bezier(0.3, 0.1, 0.8, 0.8, math.div(6, 8)) * -108,
302 )
303 (
304 0.3 + 0.7 * easing.ease(math.div(2, 12)),
305 ),
306 --800: (
307 easing.cubic-bezier(0.3, 0.1, 0.8, 0.8, math.div(7, 8)) * -108,
308 )
309 (
310 0.3 + 0.7 * easing.ease(math.div(1, 12)),
311 ),
312 --900: (
313 easing.cubic-bezier(0.3, 0.1, 0.8, 0.8, math.div(8, 8)) * -108,
314 )
315 (
316 0.3 + 0.7 * easing.ease(math.div(0, 12)),
317 ),
155 ), 318 ),
156 319
157 --colors: ( 320 --colors: (
158 --100: (easing.cubic-bezier(.2, .1, .8, .8, math.div(0, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(0, 12))), 321 --100: (
159 --200: (easing.cubic-bezier(.2, .1, .8, .8, math.div(1, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(1, 12))), 322 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(0, 12)) * -109 - 0.5,
160 --300: (easing.cubic-bezier(.2, .1, .8, .8, math.div(2, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(2, 12))), 323 )
161 --400: (easing.cubic-bezier(.2, .1, .8, .8, math.div(3, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(3, 12))), 324 (
162 --500: (easing.cubic-bezier(.2, .1, .8, .8, math.div(4, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(4, 12))), 325 0.3 + 0.7 * easing.ease(math.div(0, 12)),
163 --600: (easing.cubic-bezier(.2, .1, .8, .8, math.div(5, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(5, 12))), 326 ),
164 --700: (easing.cubic-bezier(.2, .1, .8, .8, math.div(6, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(6, 12))), 327 --200: (
165 --800: (easing.cubic-bezier(.2, .1, .8, .8, math.div(7, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(7, 12))), 328 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(1, 12)) * -109 - 0.5,
166 --900: (easing.cubic-bezier(.2, .1, .8, .8, math.div(8, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(8, 12))), 329 )
167 --1000: (easing.cubic-bezier(.2, .1, .8, .8, math.div(9, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(9, 12))), 330 (
168 --1100: (easing.cubic-bezier(.2, .1, .8, .8, math.div(10, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(10, 12))), 331 0.3 + 0.7 * easing.ease(math.div(1, 12)),
169 --1200: (easing.cubic-bezier(.2, .1, .8, .8, math.div(11, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(11, 12))), 332 ),
170 --1300: (easing.cubic-bezier(.2, .1, .8, .8, math.div(12, 12)) * -109 - .5) (.3 + .7 * easing.ease(math.div(12, 12))), 333 --300: (
334 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(2, 12)) * -109 - 0.5,
335 )
336 (
337 0.3 + 0.7 * easing.ease(math.div(2, 12)),
338 ),
339 --400: (
340 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(3, 12)) * -109 - 0.5,
341 )
342 (
343 0.3 + 0.7 * easing.ease(math.div(3, 12)),
344 ),
345 --500: (
346 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(4, 12)) * -109 - 0.5,
347 )
348 (
349 0.3 + 0.7 * easing.ease(math.div(4, 12)),
350 ),
351 --600: (
352 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(5, 12)) * -109 - 0.5,
353 )
354 (
355 0.3 + 0.7 * easing.ease(math.div(5, 12)),
356 ),
357 --700: (
358 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(6, 12)) * -109 - 0.5,
359 )
360 (
361 0.3 + 0.7 * easing.ease(math.div(6, 12)),
362 ),
363 --800: (
364 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(7, 12)) * -109 - 0.5,
365 )
366 (
367 0.3 + 0.7 * easing.ease(math.div(7, 12)),
368 ),
369 --900: (
370 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(8, 12)) * -109 - 0.5,
371 )
372 (
373 0.3 + 0.7 * easing.ease(math.div(8, 12)),
374 ),
375 --1000: (
376 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(9, 12)) * -109 - 0.5,
377 )
378 (
379 0.3 + 0.7 * easing.ease(math.div(9, 12)),
380 ),
381 --1100: (
382 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(10, 12)) * -109 - 0.5,
383 )
384 (
385 0.3 + 0.7 * easing.ease(math.div(10, 12)),
386 ),
387 --1200: (
388 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(11, 12)) * -109 - 0.5,
389 )
390 (
391 0.3 + 0.7 * easing.ease(math.div(11, 12)),
392 ),
393 --1300: (
394 easing.cubic-bezier(0.2, 0.1, 0.8, 0.8, math.div(12, 12)) * -109 - 0.5,
395 )
396 (
397 0.3 + 0.7 * easing.ease(math.div(12, 12)),
398 ),
171 ), 399 ),
172 ), 400 ),
173 401
174 --palettes: ( 402 --palettes: (
175 --base: hsl(257, 7%, 20%) --grays, 403 --base: hsl(257, 7%, 20%) --grays,
176 --blue: oklch(56% .16 275.25) --colors, 404 --blue: oklch(56% 0.16 275.25) --colors,
177 --purple: oklch(56% .16 305.58) --colors, 405 --purple: oklch(56% 0.16 305.58) --colors,
178 --red: oklch(56% .16 14.69) --colors, 406 --red: oklch(56% 0.16 14.69) --colors,
179 --green: oklch(56% .16 150.48) --colors, 407 --green: oklch(56% 0.16 150.48) --colors,
180 --yellow: oklch(56% .16 84.08) --colors, 408 --yellow: oklch(56% 0.16 84.08) --colors,
181 ), 409 ),
182 410
183 --semantic: map.merge($semantic-colors-common, ( 411 --semantic: map.merge(
184 --bg-base: --base --50, 412 $semantic-colors-common,
185 --bg-l1: --base --75, 413 (
186 --bg-l2: --base --100, 414 --bg-base: --base --50,
187 415 --bg-l1: --base --75,
188 --box: ( 416 --bg-l2: --base --100,
189 --border: --base --100, 417 --box: (
190 --border-strong: --base --100, 418 --border: --base --100,
419 --border-strong: --base --100,
420 ),
421 )
191 ), 422 ),
192 )),
193
194 --constants: ( 423 --constants: (
195 --shadow: rgba(#000, .35), 424 --shadow: rgba(#000, 0.35),
196 ), 425 ),
197); 426);
diff --git a/src/_config.scss b/src/_config.scss
index a3ea6ee..6ddef96 100644
--- a/src/_config.scss
+++ b/src/_config.scss
@@ -1,14 +1,17 @@
1@use 'sass:list'; 1@use "sass:list";
2@use 'sass:map'; 2@use "sass:map";
3@use 'sass:math'; 3@use "sass:math";
4@use 'pkg:iro-sass/src/easing' as easing; 4@use "pkg:iro-sass/easing" as easing;
5@use 'config.defaults' as def; 5@use "config.defaults" as def;
6 6
7$static-colors-override: () !default; 7$static-colors-override: () !default;
8$static-colors: map.deep-merge(def.$static-colors, $static-colors-override) !default; 8$static-colors: map.deep-merge(def.$static-colors, $static-colors-override) !default;
9 9
10$semantic-colors-common-override: () !default; 10$semantic-colors-common-override: () !default;
11$semantic-colors-common: map.deep-merge(def.$semantic-colors-common, $semantic-colors-common-override) !default; 11$semantic-colors-common: map.deep-merge(
12 def.$semantic-colors-common,
13 $semantic-colors-common-override
14) !default;
12 15
13$theme-light-override: () !default; 16$theme-light-override: () !default;
14$theme-light: map.deep-merge(def.$theme-light, $theme-light-override) !default; 17$theme-light: map.deep-merge(def.$theme-light, $theme-light-override) !default;
@@ -17,12 +20,15 @@ $theme-dark-override: () !default;
17$theme-dark: map.deep-merge(def.$theme-dark, $theme-dark-override) !default; 20$theme-dark: map.deep-merge(def.$theme-dark, $theme-dark-override) !default;
18 21
19$themes-override: () !default; 22$themes-override: () !default;
20$themes: map.deep-merge(( 23$themes: map.deep-merge(
21 --main: ( 24 (
22 light: $theme-light, 25 --main: (
23 dark: $theme-dark, 26 light: $theme-light,
27 dark: $theme-dark,
28 ),
24 ), 29 ),
25), $themes-override) !default; 30 $themes-override
31) !default;
26 32
27$theme-default: list.nth(map.keys($themes), 1) !default; 33$theme-default: list.nth(map.keys($themes), 1) !default;
28 34
diff --git a/src/_core.scss b/src/_core.scss
index 8c761ff..3427579 100644
--- a/src/_core.scss
+++ b/src/_core.scss
@@ -1,42 +1,42 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:meta'; 2@use "sass:meta";
3@use 'sass:string'; 3@use "sass:string";
4@use 'pkg:iro-sass/src/bem'; 4@use "pkg:iro-sass/bem";
5@use 'pkg:iro-sass/src/props'; 5@use "pkg:iro-sass/props";
6@use 'config'; 6@use "config";
7 7
8@use 'core.vars' as vars; 8@use "core.vars" as vars;
9@forward 'core.vars'; 9@forward "core.vars";
10 10
11@mixin styles { 11@mixin styles {
12 @each $theme-name, $theme in vars.$themes { 12 @each $theme-name, $theme in vars.$themes {
13 @if $theme-name == config.$theme-default { 13 @if $theme-name == config.$theme-default {
14 :root { 14 :root {
15 @include props.materialize(map.values(meta.module-variables('vars'))); 15 @include props.materialize(map.values(meta.module-variables("vars")));
16 16
17 @if map.has-key($theme, 'dark') { 17 @if map.has-key($theme, "dark") {
18 @media (prefers-color-scheme: dark) { 18 @media (prefers-color-scheme: dark) {
19 @include props.materialize(map.get($theme, 'dark')); 19 @include props.materialize(map.get($theme, "dark"));
20 } 20 }
21 } 21 }
22 } 22 }
23 23
24 @if map.has-key($theme, 'dark') and config.$explicit-dark-theme { 24 @if map.has-key($theme, "dark") and config.$explicit-dark-theme {
25 @include bem.theme('dark') { 25 @include bem.theme("dark") {
26 @include props.materialize(map.values(meta.module-variables('vars'))); 26 @include props.materialize(map.values(meta.module-variables("vars")));
27 @include props.materialize(map.get($theme, 'dark')); 27 @include props.materialize(map.get($theme, "dark"));
28 } 28 }
29 } 29 }
30 } @else { 30 } @else {
31 @include bem.theme(string.slice($theme-name, 3)) { 31 @include bem.theme(string.slice($theme-name, 3)) {
32 @include props.materialize(map.get($theme, 'light')); 32 @include props.materialize(map.get($theme, "light"));
33 33
34 color: props.get(vars.$theme, --text); 34 color: props.get(vars.$theme, --text);
35 background-color: props.get(vars.$theme, --bg-base); 35 background-color: props.get(vars.$theme, --bg-base);
36 36
37 @if map.has-key($theme, 'dark') { 37 @if map.has-key($theme, "dark") {
38 @media (prefers-color-scheme: dark) { 38 @media (prefers-color-scheme: dark) {
39 @include props.materialize(map.get($theme, 'dark')); 39 @include props.materialize(map.get($theme, "dark"));
40 } 40 }
41 } 41 }
42 } 42 }
diff --git a/src/_core.vars.scss b/src/_core.vars.scss
index 11acbfa..bef5f88 100644
--- a/src/_core.vars.scss
+++ b/src/_core.vars.scss
@@ -1,45 +1,45 @@
1// stylelint-disable scss/dollar-variable-pattern 1// stylelint-disable scss/dollar-variable-pattern
2 2
3@use 'sass:map'; 3@use "sass:map";
4@use 'sass:meta'; 4@use "sass:meta";
5@use 'sass:list'; 5@use "sass:list";
6@use 'functions' as fn; 6@use "functions" as fn;
7@use 'config'; 7@use "config";
8@use 'pkg:iro-sass/src/functions'; 8@use "pkg:iro-sass/functions";
9@use 'pkg:iro-sass/src/props'; 9@use "pkg:iro-sass/props";
10 10
11$size--0: props.def(--size--0, 0) !default; 11$size--0: props.def(--size--0, 0) !default;
12$size--10: props.def(--size--10, functions.px-to-rem(1px)) !default; 12$size--10: props.def(--size--10, functions.px-to-rem(1px)) !default;
13$size--25: props.def(--size--25, functions.px-to-rem(2px)) !default; 13$size--25: props.def(--size--25, functions.px-to-rem(2px)) !default;
14$size--40: props.def(--size--40, functions.px-to-rem(3px)) !default; 14$size--40: props.def(--size--40, functions.px-to-rem(3px)) !default;
15$size--50: props.def(--size--50, functions.px-to-rem(4px)) !default; 15$size--50: props.def(--size--50, functions.px-to-rem(4px)) !default;
16$size--65: props.def(--size--65, functions.px-to-rem(5px)) !default; 16$size--65: props.def(--size--65, functions.px-to-rem(5px)) !default;
17$size--75: props.def(--size--75, functions.px-to-rem(6px)) !default; 17$size--75: props.def(--size--75, functions.px-to-rem(6px)) !default;
18$size--85: props.def(--size--85, functions.px-to-rem(7px)) !default; 18$size--85: props.def(--size--85, functions.px-to-rem(7px)) !default;
19$size--100: props.def(--size--100, functions.px-to-rem(8px)) !default; 19$size--100: props.def(--size--100, functions.px-to-rem(8px)) !default;
20$size--115: props.def(--size--115, functions.px-to-rem(9px)) !default; 20$size--115: props.def(--size--115, functions.px-to-rem(9px)) !default;
21$size--125: props.def(--size--125, functions.px-to-rem(10px)) !default; 21$size--125: props.def(--size--125, functions.px-to-rem(10px)) !default;
22$size--130: props.def(--size--130, functions.px-to-rem(11px)) !default; 22$size--130: props.def(--size--130, functions.px-to-rem(11px)) !default;
23$size--150: props.def(--size--150, functions.px-to-rem(12px)) !default; 23$size--150: props.def(--size--150, functions.px-to-rem(12px)) !default;
24$size--160: props.def(--size--160, functions.px-to-rem(13px)) !default; 24$size--160: props.def(--size--160, functions.px-to-rem(13px)) !default;
25$size--175: props.def(--size--175, functions.px-to-rem(14px)) !default; 25$size--175: props.def(--size--175, functions.px-to-rem(14px)) !default;
26$size--200: props.def(--size--200, functions.px-to-rem(16px)) !default; 26$size--200: props.def(--size--200, functions.px-to-rem(16px)) !default;
27$size--225: props.def(--size--225, functions.px-to-rem(18px)) !default; 27$size--225: props.def(--size--225, functions.px-to-rem(18px)) !default;
28$size--250: props.def(--size--250, functions.px-to-rem(20px)) !default; 28$size--250: props.def(--size--250, functions.px-to-rem(20px)) !default;
29$size--275: props.def(--size--275, functions.px-to-rem(22px)) !default; 29$size--275: props.def(--size--275, functions.px-to-rem(22px)) !default;
30$size--300: props.def(--size--300, functions.px-to-rem(24px)) !default; 30$size--300: props.def(--size--300, functions.px-to-rem(24px)) !default;
31$size--325: props.def(--size--325, functions.px-to-rem(26px)) !default; 31$size--325: props.def(--size--325, functions.px-to-rem(26px)) !default;
32$size--350: props.def(--size--350, functions.px-to-rem(28px)) !default; 32$size--350: props.def(--size--350, functions.px-to-rem(28px)) !default;
33$size--375: props.def(--size--375, functions.px-to-rem(30px)) !default; 33$size--375: props.def(--size--375, functions.px-to-rem(30px)) !default;
34$size--400: props.def(--size--400, functions.px-to-rem(32px)) !default; 34$size--400: props.def(--size--400, functions.px-to-rem(32px)) !default;
35$size--450: props.def(--size--450, functions.px-to-rem(36px)) !default; 35$size--450: props.def(--size--450, functions.px-to-rem(36px)) !default;
36$size--500: props.def(--size--500, functions.px-to-rem(40px)) !default; 36$size--500: props.def(--size--500, functions.px-to-rem(40px)) !default;
37$size--550: props.def(--size--550, functions.px-to-rem(44px)) !default; 37$size--550: props.def(--size--550, functions.px-to-rem(44px)) !default;
38$size--600: props.def(--size--600, functions.px-to-rem(48px)) !default; 38$size--600: props.def(--size--600, functions.px-to-rem(48px)) !default;
39$size--650: props.def(--size--650, functions.px-to-rem(52px)) !default; 39$size--650: props.def(--size--650, functions.px-to-rem(52px)) !default;
40$size--700: props.def(--size--700, functions.px-to-rem(56px)) !default; 40$size--700: props.def(--size--700, functions.px-to-rem(56px)) !default;
41$size--800: props.def(--size--800, functions.px-to-rem(64px)) !default; 41$size--800: props.def(--size--800, functions.px-to-rem(64px)) !default;
42$size--900: props.def(--size--900, functions.px-to-rem(72px)) !default; 42$size--900: props.def(--size--900, functions.px-to-rem(72px)) !default;
43$size--1000: props.def(--size--1000, functions.px-to-rem(80px)) !default; 43$size--1000: props.def(--size--1000, functions.px-to-rem(80px)) !default;
44$size--1200: props.def(--size--1200, functions.px-to-rem(96px)) !default; 44$size--1200: props.def(--size--1200, functions.px-to-rem(96px)) !default;
45$size--1600: props.def(--size--1600, functions.px-to-rem(128px)) !default; 45$size--1600: props.def(--size--1600, functions.px-to-rem(128px)) !default;
@@ -58,58 +58,105 @@ $size--4600: props.def(--size--4600, functions.px-to-rem(368px)) !default;
58$size--5000: props.def(--size--5000, functions.px-to-rem(400px)) !default; 58$size--5000: props.def(--size--5000, functions.px-to-rem(400px)) !default;
59$size--6000: props.def(--size--6000, functions.px-to-rem(480px)) !default; 59$size--6000: props.def(--size--6000, functions.px-to-rem(480px)) !default;
60 60
61$font--standard--family: props.def(--font--standard--family, ('Inter', 'Open Sans', 'Segoe UI', 'Droid Sans', Roboto, Oxygen, 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif)) !default; 61$font--standard--family: props.def(
62$font--standard--line-height: props.def(--font--standard--line-height, 1.5) !default; 62 --font--standard--family,
63$font--standard--feature-settings: props.def(--font--standard--feature-settings, ('\'ss01\'')) !default; 63 (
64 "Inter",
65 "Open Sans",
66 "Segoe UI",
67 "Droid Sans",
68 Roboto,
69 Oxygen,
70 "Helvetica Neue",
71 Helvetica,
72 Tahoma,
73 Arial,
74 sans-serif
75 )
76) !default;
77$font--standard--line-height: props.def(--font--standard--line-height, 1.5) !default;
78$font--standard--feature-settings: props.def(
79 --font--standard--feature-settings,
80 ("'ss01'")
81) !default;
64 82
65$font--headline--family: props.def(--font--headline--family, props.get($font--standard--family)) !default; 83$font--headline--family: props.def(
66$font--headline--line-height: props.def(--font--headline--line-height, 1.3) !default; 84 --font--headline--family,
67$font--headline--weight: props.def(--font--headline--weight, 800) !default; 85 props.get($font--standard--family)
68$font--headline--feature-settings: props.def(--font--headline--feature-settings, ('\'opsz\'' 32, '\'ss01\'', '\'cv06\'')) !default; 86) !default;
87$font--headline--line-height: props.def(--font--headline--line-height, 1.3) !default;
88$font--headline--weight: props.def(--font--headline--weight, 800) !default;
89$font--headline--feature-settings: props.def(
90 --font--headline--feature-settings,
91 ("'opsz'" 32, "'ss01'", "'cv06'")
92) !default;
69 93
70$font--mono--family: props.def(--font--mono--family, ('Iosevka Term SS09', 'IBM Plex Mono', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Courier, monospace)) !default; 94$font--mono--family: props.def(
71$font--mono--line-height: props.def(--font--mono--line-height, 1.4) !default; 95 --font--mono--family,
72$font--mono--feature-settings: props.def(--font--mono--feature-settings, ('\'calt\'' 0, '\'dlig\' 1', '\'ss09\' 1')) !default; 96 (
97 "Iosevka Term SS09",
98 "IBM Plex Mono",
99 "Menlo",
100 "DejaVu Sans Mono",
101 "Bitstream Vera Sans Mono",
102 Courier,
103 monospace
104 )
105) !default;
106$font--mono--line-height: props.def(--font--mono--line-height, 1.4) !default;
107$font--mono--feature-settings: props.def(
108 --font--mono--feature-settings,
109 ("'calt'" 0, "'dlig' 1", "'ss09' 1")
110) !default;
73 111
74$font-size--50: props.def(--font-size--50, functions.px-to-rem(12px)) !default; 112$font-size--50: props.def(--font-size--50, functions.px-to-rem(12px)) !default;
75$font-size--75: props.def(--font-size--75 , functions.px-to-rem(13px)) !default; 113$font-size--75: props.def(--font-size--75, functions.px-to-rem(13px)) !default;
76$font-size--100: props.def(--font-size--100, functions.px-to-rem(14px)) !default; 114$font-size--100: props.def(--font-size--100, functions.px-to-rem(14px)) !default;
77$font-size--150: props.def(--font-size--150, functions.px-to-rem(16px)) !default; 115$font-size--150: props.def(--font-size--150, functions.px-to-rem(16px)) !default;
78$font-size--200: props.def(--font-size--200, functions.px-to-rem(18px)) !default; 116$font-size--200: props.def(--font-size--200, functions.px-to-rem(18px)) !default;
79$font-size--300: props.def(--font-size--300, functions.px-to-rem(20px)) !default; 117$font-size--300: props.def(--font-size--300, functions.px-to-rem(20px)) !default;
80$font-size--400: props.def(--font-size--400, functions.px-to-rem(24px)) !default; 118$font-size--400: props.def(--font-size--400, functions.px-to-rem(24px)) !default;
81$font-size--500: props.def(--font-size--500, functions.px-to-rem(28px)) !default; 119$font-size--500: props.def(--font-size--500, functions.px-to-rem(28px)) !default;
82$font-size--600: props.def(--font-size--600, functions.px-to-rem(32px)) !default; 120$font-size--600: props.def(--font-size--600, functions.px-to-rem(32px)) !default;
83$font-size--700: props.def(--font-size--700, functions.px-to-rem(36px)) !default; 121$font-size--700: props.def(--font-size--700, functions.px-to-rem(36px)) !default;
84$font-size--800: props.def(--font-size--800, functions.px-to-rem(40px)) !default; 122$font-size--800: props.def(--font-size--800, functions.px-to-rem(40px)) !default;
85$font-size--900: props.def(--font-size--900, functions.px-to-rem(45px)) !default; 123$font-size--900: props.def(--font-size--900, functions.px-to-rem(45px)) !default;
86$font-size--1000: props.def(--font-size--1000, functions.px-to-rem(50px)) !default; 124$font-size--1000: props.def(--font-size--1000, functions.px-to-rem(50px)) !default;
87$font-size--1100: props.def(--font-size--1100, functions.px-to-rem(60px)) !default; 125$font-size--1100: props.def(--font-size--1100, functions.px-to-rem(60px)) !default;
88$font-size--1200: props.def(--font-size--1200, functions.px-to-rem(70px)) !default; 126$font-size--1200: props.def(--font-size--1200, functions.px-to-rem(70px)) !default;
89$font-size--1300: props.def(--font-size--1300, functions.px-to-rem(80px)) !default; 127$font-size--1300: props.def(--font-size--1300, functions.px-to-rem(80px)) !default;
90 128
91$border-width--thick: props.def(--border-width--thick, 4px) !default; 129$border-width--thick: props.def(--border-width--thick, 4px) !default;
92$border-width--medium: props.def(--border-width--medium, 2px) !default; 130$border-width--medium: props.def(--border-width--medium, 2px) !default;
93$border-width--thin: props.def(--border-width--thin, 1px) !default; 131$border-width--thin: props.def(--border-width--thin, 1px) !default;
94 132
95$shadow--l1--x: props.def(--shadow--l1--x, 0) !default; 133$shadow--l1--x: props.def(--shadow--l1--x, 0) !default;
96$shadow--l1--y: props.def(--shadow--l1--y, 2px) !default; 134$shadow--l1--y: props.def(--shadow--l1--y, 2px) !default;
97$shadow--l1--blur: props.def(--shadow--l1--blur, 3px) !default; 135$shadow--l1--blur: props.def(--shadow--l1--blur, 3px) !default;
98$shadow--l1--grow: props.def(--shadow--l1--grow, -1px) !default; 136$shadow--l1--grow: props.def(--shadow--l1--grow, -1px) !default;
99 137
100$shadow--l2--x: props.def(--shadow--l2--x, 0) !default; 138$shadow--l2--x: props.def(--shadow--l2--x, 0) !default;
101$shadow--l2--y: props.def(--shadow--l2--y, 5px) !default; 139$shadow--l2--y: props.def(--shadow--l2--y, 5px) !default;
102$shadow--l2--blur: props.def(--shadow--l2--blur, 12px) !default; 140$shadow--l2--blur: props.def(--shadow--l2--blur, 12px) !default;
103$shadow--l2--grow: props.def(--shadow--l2--grow, -4px) !default; 141$shadow--l2--grow: props.def(--shadow--l2--grow, -4px) !default;
104 142
105$rounding: props.def(--rounding, 12px) !default; 143$rounding: props.def(--rounding, 12px) !default;
106$rounding--sm: props.def(--rounding--sm, 4px) !default; 144$rounding--sm: props.def(--rounding--sm, 4px) !default;
107 145
108$key-focus--outline-width: props.def(--key-focus--outline-width, props.get($border-width--thick)) !default; 146$key-focus--outline-width: props.def(
109$key-focus--border-width: props.def(--key-focus--border-width, props.get($border-width--medium)) !default; 147 --key-focus--outline-width,
110$key-focus--border-offset: props.def(--key-focus--border-offset, props.get($border-width--medium)) !default; 148 props.get($border-width--thick)
149) !default;
150$key-focus--border-width: props.def(
151 --key-focus--border-width,
152 props.get($border-width--medium)
153) !default;
154$key-focus--border-offset: props.def(
155 --key-focus--border-offset,
156 props.get($border-width--medium)
157) !default;
111 158
112$list--indent: props.def(--list--indent, props.get($size--400)) !default; 159$list--indent: props.def(--list--indent, props.get($size--400)) !default;
113$list--compact-indent: props.def(--list--compact-indent, props.get($size--250)) !default; 160$list--compact-indent: props.def(--list--compact-indent, props.get($size--250)) !default;
114 161
115$sticky-top-offset: props.def(--sticky-top-offset, 0rem) !default; 162$sticky-top-offset: props.def(--sticky-top-offset, 0rem) !default;
@@ -119,20 +166,34 @@ $sticky-top-offset: props.def(--sticky-top-offset, 0rem) !default;
119$-static-colors: (); 166$-static-colors: ();
120 167
121@each $palette-name, $palette in map.get(config.$static-colors, --palettes) { 168@each $palette-name, $palette in map.get(config.$static-colors, --palettes) {
122 $palette: fn.palette($palette, map.get(config.$static-colors, --levels), map.get(config.$static-colors, --base)); 169 $palette: fn.palette(
123 $-static-colors: map.merge($-static-colors, ( $palette-name: $palette )); 170 $palette,
171 map.get(config.$static-colors, --levels),
172 map.get(config.$static-colors, --base)
173 );
174 $-static-colors: map.merge(
175 $-static-colors,
176 (
177 $palette-name: $palette,
178 )
179 );
124} 180}
125 181
126// 182//
127 183
128$transparent-colors: props.def(--transparent-colors, (), 'color'); 184$transparent-colors: props.def(--transparent-colors, (), "color");
129 185
130@each $palette-name, $palette in (--black: #000 #fff, --white: #fff #000) { 186@each $palette-name, $palette in (--black: #000 #fff, --white: #fff #000) {
131 $color: list.nth($palette, 1); 187 $color: list.nth($palette, 1);
132 $text: list.nth($palette, 2); 188 $text: list.nth($palette, 2);
133 189
134 $palette: fn.transparent-palette($color, $text, map.get(config.$static-colors, --transparents)); 190 $palette: fn.transparent-palette($color, $text, map.get(config.$static-colors, --transparents));
135 $transparent-colors: props.merge($transparent-colors, ( $palette-name: $palette )); 191 $transparent-colors: props.merge(
192 $transparent-colors,
193 (
194 $palette-name: $palette,
195 )
196 );
136} 197}
137 198
138// 199//
@@ -142,40 +203,64 @@ $themes: ();
142@each $theme-name, $theme in config.$themes { 203@each $theme-name, $theme in config.$themes {
143 @each $variant-name, $variant in $theme { 204 @each $variant-name, $variant in $theme {
144 @if $variant != null { 205 @if $variant != null {
145 $compiled: props.def(--colors, (), 'color'); 206 $compiled: props.def(--colors, (), "color");
146 207
147 @each $palette-name, $palette in $-static-colors { 208 @each $palette-name, $palette in $-static-colors {
148 $compiled: props.merge($compiled, ( #{$palette-name}-static: $palette )); 209 $compiled: props.merge($compiled, (#{$palette-name}-static: $palette));
149 } 210 }
150 211
151 @each $palette-name, $palette in map.get($variant, --palettes) { 212 @each $palette-name, $palette in map.get($variant, --palettes) {
152 $base-color: list.nth($palette, 1); 213 $base-color: list.nth($palette, 1);
153 $levels: list.nth($palette, 2); 214 $levels: list.nth($palette, 2);
154 215
155 $palette: fn.palette($base-color, map.get($variant, --levels, $levels), list.nth(map.get($variant, --palettes, --base), 1)); 216 $palette: fn.palette(
156 $compiled: props.merge($compiled, ( $palette-name: $palette )); 217 $base-color,
218 map.get($variant, --levels, $levels),
219 list.nth(map.get($variant, --palettes, --base), 1)
220 );
221 $compiled: props.merge(
222 $compiled,
223 (
224 $palette-name: $palette,
225 )
226 );
157 } 227 }
158 228
159 @each $color, $value in map.get($variant, --constants) { 229 @each $color, $value in map.get($variant, --constants) {
160 $compiled: props.merge($compiled, ( $color: $value )); 230 $compiled: props.merge(
231 $compiled,
232 (
233 $color: $value,
234 )
235 );
161 } 236 }
162 237
163 @each $color, $ref in map.get($variant, --semantic) { 238 @each $color, $ref in map.get($variant, --semantic) {
164 $res: (); 239 $res: ();
165 240
166 @if meta.type-of($ref) == 'map' { 241 @if meta.type-of($ref) == "map" {
167 @each $key, $r in $ref { 242 @each $key, $r in $ref {
168 $re1: list.nth($r, 1); 243 $re1: list.nth($r, 1);
169 $re2: functions.list-slice($r, 2); 244 $re2: functions.list-slice($r, 2);
170 $res: map.merge($res, ($key: props.get($compiled, $re1, $re2...))); 245 $res: map.merge(
246 $res,
247 (
248 $key: props.get($compiled, $re1, $re2...),
249 )
250 );
171 } 251 }
172 } @else { 252 } @else {
173 $ref1: list.nth($ref, 1); 253 $ref1: list.nth($ref, 1);
174 $ref2: functions.list-slice($ref, 2); 254 $ref2: functions.list-slice($ref, 2);
175 $res: props.get($compiled, $ref1, $ref2...); 255 $res: props.get($compiled, $ref1, $ref2...);
176 } 256 }
177 257
178 $compiled: props.merge($compiled, ( $color: $res )); 258 $compiled: props.merge(
259 $compiled,
260 (
261 $color: $res,
262 )
263 );
179 } 264 }
180 265
181 $themes: map.set($themes, $theme-name, $variant-name, $compiled); 266 $themes: map.set($themes, $theme-name, $variant-name, $compiled);
diff --git a/src/_functions.scss b/src/_functions.scss
index e237ccc..8fb0d98 100644
--- a/src/_functions.scss
+++ b/src/_functions.scss
@@ -1,17 +1,17 @@
1@use 'sass:color'; 1@use "sass:color";
2@use 'sass:math'; 2@use "sass:math";
3@use 'sass:map'; 3@use "sass:map";
4@use 'sass:list'; 4@use "sass:list";
5@use 'sass:meta'; 5@use "sass:meta";
6 6
7@use 'pkg:iro-sass/src/easing'; 7@use "pkg:iro-sass/easing";
8@use 'apca'; 8@use "apca";
9 9
10@function palette($base-color, $levels, $ref-color: $base-color) { 10@function palette($base-color, $levels, $ref-color: $base-color) {
11 $base-lch: color.to-space($base-color, oklch); 11 $base-lch: color.to-space($base-color, oklch);
12 $ref-lch: color.to-space($ref-color, oklch); 12 $ref-lch: color.to-space($ref-color, oklch);
13 13
14 $ref-l: color.channel($ref-lch, 'lightness'); 14 $ref-l: color.channel($ref-lch, "lightness");
15 $ref-y: apca.sRGB_to_Y($ref-lch); 15 $ref-y: apca.sRGB_to_Y($ref-lch);
16 16
17 $black-y: apca.sRGB_to_Y(#000); 17 $black-y: apca.sRGB_to_Y(#000);
@@ -32,17 +32,19 @@
32 $h: list.nth($level, 3); 32 $h: list.nth($level, 3);
33 } 33 }
34 34
35 @if meta.type-of($color) != 'color' { 35 @if meta.type-of($color) != "color" {
36 $y: apca.reverse($color, $ref-y); 36 $y: apca.reverse($color, $ref-y);
37 $l: color.channel($base-lch, 'lightness'); 37 $l: color.channel($base-lch, "lightness");
38 38
39 @if $y != false { 39 @if $y != false {
40 $l: color.channel(apca.Y_to_sRGB($y), 'lightness', oklch); 40 $l: color.channel(apca.Y_to_sRGB($y), "lightness", oklch);
41 } @else { 41 } @else {
42 $y: $ref-y; 42 $y: $ref-y;
43 } 43 }
44 44
45 $color: oklch($l ($c * color.channel($base-lch, 'chroma')) ($h + color.channel($base-lch, 'hue'))); 45 $color: oklch(
46 $l ($c * color.channel($base-lch, "chroma")) ($h + color.channel($base-lch, "hue"))
47 );
46 } @else { 48 } @else {
47 $y: apca.sRGB_to_Y($color); 49 $y: apca.sRGB_to_Y($color);
48 } 50 }
@@ -51,7 +53,11 @@
51 $contrast-white: apca.contrast($white-y, $y); 53 $contrast-white: apca.contrast($white-y, $y);
52 54
53 $palette: map.set($palette, $key, $color); 55 $palette: map.set($palette, $key, $color);
54 $palette: map.set($palette, #{$key}-text, if(sass(math.abs($contrast-black) > math.abs($contrast-white)): #000; else: #fff)); 56 $palette: map.set(
57 $palette,
58 #{$key}-text,
59 if(sass(math.abs($contrast-black) > math.abs($contrast-white)): #000; else: #fff)
60 );
55 } 61 }
56 62
57 @return $palette; 63 @return $palette;
diff --git a/src/_props.scss b/src/_props.scss
index 0830375..2683ca9 100644
--- a/src/_props.scss
+++ b/src/_props.scss
@@ -1,46 +1,46 @@
1@use 'sass:list'; 1@use "sass:list";
2@use 'sass:map'; 2@use "sass:map";
3@use 'sass:meta'; 3@use "sass:meta";
4@use 'sass:string'; 4@use "sass:string";
5@use 'config'; 5@use "config";
6@use 'pkg:include-media/dist/include-media' as media; 6@use "pkg:include-media/dist/include-media" as media;
7@use 'pkg:iro-sass/src/bem'; 7@use "pkg:iro-sass/bem";
8@use 'pkg:iro-sass/src/props'; 8@use "pkg:iro-sass/props";
9 9
10@mixin materialize-at-root($ref) { 10@mixin materialize-at-root($ref) {
11 @if meta.type-of($ref) == 'map' { 11 @if meta.type-of($ref) == "map" {
12 $ref: map.values($ref); 12 $ref: map.values($ref);
13 } 13 }
14 14
15 :root { 15 :root {
16 @include props.materialize($ref, null); 16 @include props.materialize($ref, null);
17 @include props.materialize($ref, 'color'); 17 @include props.materialize($ref, "color");
18 18
19 @each $breakpoint in map.keys(media.$breakpoints) { 19 @each $breakpoint in map.keys(media.$breakpoints) {
20 @include media.media('<=#{$breakpoint}') { 20 @include media.media("<=#{$breakpoint}") {
21 @include props.materialize($ref, $breakpoint); 21 @include props.materialize($ref, $breakpoint);
22 } 22 }
23 } 23 }
24 24
25 @media (prefers-color-scheme: dark) { 25 @media (prefers-color-scheme: dark) {
26 @include props.materialize($ref, 'dark'); 26 @include props.materialize($ref, "dark");
27 } 27 }
28 } 28 }
29 29
30 @if config.$explicit-dark-theme { 30 @if config.$explicit-dark-theme {
31 @include bem.theme('dark') { 31 @include bem.theme("dark") {
32 @include props.materialize($ref, 'color'); 32 @include props.materialize($ref, "color");
33 @include props.materialize($ref, 'dark'); 33 @include props.materialize($ref, "dark");
34 } 34 }
35 } 35 }
36 36
37 @each $theme-name in map.keys(config.$themes) { 37 @each $theme-name in map.keys(config.$themes) {
38 @if $theme-name != config.$theme-default { 38 @if $theme-name != config.$theme-default {
39 @include bem.theme(string.slice($theme-name, 3)) { 39 @include bem.theme(string.slice($theme-name, 3)) {
40 @include props.materialize($ref, 'color'); 40 @include props.materialize($ref, "color");
41 41
42 @media (prefers-color-scheme: dark) { 42 @media (prefers-color-scheme: dark) {
43 @include props.materialize($ref, 'dark'); 43 @include props.materialize($ref, "dark");
44 } 44 }
45 } 45 }
46 } 46 }
diff --git a/src/_themes.scss b/src/_themes.scss
index f06a5ca..be13e60 100644
--- a/src/_themes.scss
+++ b/src/_themes.scss
@@ -1,71 +1,71 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/bem'; 3@use "pkg:iro-sass/bem";
4@use 'pkg:iro-sass/src/props'; 4@use "pkg:iro-sass/props";
5@use 'pkg:include-media/dist/include-media' as media; 5@use "pkg:include-media/dist/include-media" as media;
6 6
7@use 'core.vars' as vars; 7@use "core.vars" as vars;
8@forward 'core.vars'; 8@forward "core.vars";
9 9
10@mixin styles { 10@mixin styles {
11 @include bem.theme('base') { 11 @include bem.theme("base") {
12 background-color: props.get(vars.$theme, --bg-base); 12 background-color: props.get(vars.$theme, --bg-base);
13 13
14 @include bem.suffix('light') { 14 @include bem.suffix("light") {
15 @media (prefers-color-scheme: light) { 15 @media (prefers-color-scheme: light) {
16 background-color: props.get(vars.$theme, --bg-base); 16 background-color: props.get(vars.$theme, --bg-base);
17 } 17 }
18 } 18 }
19 19
20 @include bem.suffix('dark') { 20 @include bem.suffix("dark") {
21 @media (prefers-color-scheme: dark) { 21 @media (prefers-color-scheme: dark) {
22 background-color: props.get(vars.$theme, --bg-base); 22 background-color: props.get(vars.$theme, --bg-base);
23 } 23 }
24 } 24 }
25 } 25 }
26 26
27 @include bem.theme('l1') { 27 @include bem.theme("l1") {
28 background-color: props.get(vars.$theme, --bg-l1); 28 background-color: props.get(vars.$theme, --bg-l1);
29 29
30 @include bem.suffix('light') { 30 @include bem.suffix("light") {
31 @media (prefers-color-scheme: light) { 31 @media (prefers-color-scheme: light) {
32 background-color: props.get(vars.$theme, --bg-l1); 32 background-color: props.get(vars.$theme, --bg-l1);
33 } 33 }
34 } 34 }
35 35
36 @include bem.suffix('dark') { 36 @include bem.suffix("dark") {
37 @media (prefers-color-scheme: dark) { 37 @media (prefers-color-scheme: dark) {
38 background-color: props.get(vars.$theme, --bg-l1); 38 background-color: props.get(vars.$theme, --bg-l1);
39 } 39 }
40 } 40 }
41 } 41 }
42 42
43 @include bem.theme('l2') { 43 @include bem.theme("l2") {
44 background-color: props.get(vars.$theme, --bg-l2); 44 background-color: props.get(vars.$theme, --bg-l2);
45 45
46 @include bem.suffix('light') { 46 @include bem.suffix("light") {
47 @media (prefers-color-scheme: light) { 47 @media (prefers-color-scheme: light) {
48 background-color: props.get(vars.$theme, --bg-l2); 48 background-color: props.get(vars.$theme, --bg-l2);
49 } 49 }
50 } 50 }
51 51
52 @include bem.suffix('dark') { 52 @include bem.suffix("dark") {
53 @media (prefers-color-scheme: dark) { 53 @media (prefers-color-scheme: dark) {
54 background-color: props.get(vars.$theme, --bg-l2); 54 background-color: props.get(vars.$theme, --bg-l2);
55 } 55 }
56 } 56 }
57 } 57 }
58 58
59 @include bem.theme('50') { 59 @include bem.theme("50") {
60 background-color: props.get(vars.$theme, --base, --50); 60 background-color: props.get(vars.$theme, --base, --50);
61 61
62 @include bem.suffix('light') { 62 @include bem.suffix("light") {
63 @media (prefers-color-scheme: light) { 63 @media (prefers-color-scheme: light) {
64 background-color: props.get(vars.$theme, --base, --50); 64 background-color: props.get(vars.$theme, --base, --50);
65 } 65 }
66 } 66 }
67 67
68 @include bem.suffix('dark') { 68 @include bem.suffix("dark") {
69 @media (prefers-color-scheme: dark) { 69 @media (prefers-color-scheme: dark) {
70 background-color: props.get(vars.$theme, --base, --50); 70 background-color: props.get(vars.$theme, --base, --50);
71 } 71 }
diff --git a/src/_utils.scss b/src/_utils.scss
index dd8e8bb..be2faab 100644
--- a/src/_utils.scss
+++ b/src/_utils.scss
@@ -1,27 +1,27 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/bem'; 3@use "pkg:iro-sass/bem";
4@use 'pkg:iro-sass/src/props'; 4@use "pkg:iro-sass/props";
5@use 'pkg:include-media/dist/include-media' as media; 5@use "pkg:include-media/dist/include-media" as media;
6 6
7@use 'core.vars' as vars; 7@use "core.vars" as vars;
8@forward 'core.vars'; 8@forward "core.vars";
9 9
10/* stylelint-disable-next-line scss/dollar-variable-pattern */ 10/* stylelint-disable-next-line scss/dollar-variable-pattern */
11$-dirs: ( 11$-dirs: (
12 '': '', 12 "": "",
13 'b': '-block', 13 "b": "-block",
14 'bs': '-block-start', 14 "bs": "-block-start",
15 'be': '-block-end', 15 "be": "-block-end",
16 'i': '-inline', 16 "i": "-inline",
17 'is': '-inline-start', 17 "is": "-inline-start",
18 'ie': '-inline-end', 18 "ie": "-inline-end",
19) !default; 19) !default;
20 20
21$-axes: ( 21$-axes: (
22 '': '', 22 "": "",
23 'r': 'row-', 23 "r": "row-",
24 'c': 'column-', 24 "c": "column-",
25) !default; 25) !default;
26 26
27/* stylelint-disable-next-line scss/dollar-variable-pattern */ 27/* stylelint-disable-next-line scss/dollar-variable-pattern */
@@ -48,145 +48,145 @@ $-font-sizes: (
48) !default; 48) !default;
49 49
50$-aspect-ratios: ( 50$-aspect-ratios: (
51 '1\\/1': '1 / 1', 51 "1\\/1": "1 / 1",
52 '4\\/3': '4 / 3', 52 "4\\/3": "4 / 3",
53 '5\\/4': '5 / 4', 53 "5\\/4": "5 / 4",
54) !default; 54) !default;
55 55
56@mixin styles { 56@mixin styles {
57 @include bem.utility('d-block') { 57 @include bem.utility("d-block") {
58 display: block; 58 display: block;
59 } 59 }
60 60
61 @include bem.utility('d-inline-block') { 61 @include bem.utility("d-inline-block") {
62 display: inline-block; 62 display: inline-block;
63 } 63 }
64 64
65 @include bem.utility('d-inline') { 65 @include bem.utility("d-inline") {
66 display: inline; 66 display: inline;
67 } 67 }
68 68
69 @include bem.utility('d-contents') { 69 @include bem.utility("d-contents") {
70 display: contents; 70 display: contents;
71 } 71 }
72 72
73 @include bem.utility('d-flex') { 73 @include bem.utility("d-flex") {
74 display: flex; 74 display: flex;
75 } 75 }
76 76
77 @include bem.utility('td-none') { 77 @include bem.utility("td-none") {
78 text-decoration: none; 78 text-decoration: none;
79 } 79 }
80 80
81 @include bem.utility('d-none') { 81 @include bem.utility("d-none") {
82 display: none; 82 display: none;
83 83
84 @each $breakpoint in map.keys(media.$breakpoints) { 84 @each $breakpoint in map.keys(media.$breakpoints) {
85 @include media.media('<=#{$breakpoint}') { 85 @include media.media("<=#{$breakpoint}") {
86 @include bem.suffix('#{$breakpoint}-lo') { 86 @include bem.suffix("#{$breakpoint}-lo") {
87 display: none; 87 display: none;
88 } 88 }
89 } 89 }
90 90
91 @include media.media('>#{$breakpoint}') { 91 @include media.media(">#{$breakpoint}") {
92 @include bem.suffix('#{$breakpoint}-hi') { 92 @include bem.suffix("#{$breakpoint}-hi") {
93 display: none; 93 display: none;
94 } 94 }
95 } 95 }
96 } 96 }
97 97
98 @include bem.at-theme('js') { 98 @include bem.at-theme("js") {
99 @include bem.suffix('js') { 99 @include bem.suffix("js") {
100 display: none; 100 display: none;
101 } 101 }
102 } 102 }
103 103
104 @include bem.at-theme('no-js') { 104 @include bem.at-theme("no-js") {
105 @include bem.suffix('no-js') { 105 @include bem.suffix("no-js") {
106 display: none; 106 display: none;
107 } 107 }
108 } 108 }
109 109
110 @include bem.suffix('empty') { 110 @include bem.suffix("empty") {
111 &:empty { 111 &:empty {
112 display: none; 112 display: none;
113 } 113 }
114 } 114 }
115 } 115 }
116 116
117 @include bem.utility('va-top') { 117 @include bem.utility("va-top") {
118 vertical-align: top; 118 vertical-align: top;
119 } 119 }
120 120
121 @include bem.utility('va-baseline') { 121 @include bem.utility("va-baseline") {
122 vertical-align: baseline; 122 vertical-align: baseline;
123 } 123 }
124 124
125 @include bem.utility('va-middle') { 125 @include bem.utility("va-middle") {
126 vertical-align: middle; 126 vertical-align: middle;
127 } 127 }
128 128
129 @include bem.utility('va-bottom') { 129 @include bem.utility("va-bottom") {
130 vertical-align: bottom; 130 vertical-align: bottom;
131 } 131 }
132 132
133 @include bem.utility('ta-start') { 133 @include bem.utility("ta-start") {
134 text-align: start; 134 text-align: start;
135 } 135 }
136 136
137 @include bem.utility('ta-end') { 137 @include bem.utility("ta-end") {
138 text-align: end; 138 text-align: end;
139 } 139 }
140 140
141 @include bem.utility('ta-center') { 141 @include bem.utility("ta-center") {
142 text-align: center; 142 text-align: center;
143 } 143 }
144 144
145 @include bem.utility('fw-normal') { 145 @include bem.utility("fw-normal") {
146 font-weight: normal; 146 font-weight: normal;
147 } 147 }
148 148
149 @include bem.utility('ai-center') { 149 @include bem.utility("ai-center") {
150 align-items: center; 150 align-items: center;
151 } 151 }
152 152
153 @include bem.utility('ai-start') { 153 @include bem.utility("ai-start") {
154 align-items: flex-start; 154 align-items: flex-start;
155 } 155 }
156 156
157 @include bem.utility('ai-end') { 157 @include bem.utility("ai-end") {
158 align-items: flex-end; 158 align-items: flex-end;
159 } 159 }
160 160
161 @include bem.utility('ai-stretch') { 161 @include bem.utility("ai-stretch") {
162 align-items: stretch; 162 align-items: stretch;
163 } 163 }
164 164
165 @include bem.utility('ac-center') { 165 @include bem.utility("ac-center") {
166 align-content: center; 166 align-content: center;
167 } 167 }
168 168
169 @include bem.utility('jc-center') { 169 @include bem.utility("jc-center") {
170 justify-content: center; 170 justify-content: center;
171 } 171 }
172 172
173 @include bem.utility('jc-start') { 173 @include bem.utility("jc-start") {
174 justify-content: flex-start; 174 justify-content: flex-start;
175 } 175 }
176 176
177 @include bem.utility('jc-end') { 177 @include bem.utility("jc-end") {
178 justify-content: flex-end; 178 justify-content: flex-end;
179 } 179 }
180 180
181 @include bem.utility('tt-upper') { 181 @include bem.utility("tt-upper") {
182 text-transform: uppercase; 182 text-transform: uppercase;
183 } 183 }
184 184
185 @include bem.utility('tt-lower') { 185 @include bem.utility("tt-lower") {
186 text-transform: lowercase; 186 text-transform: lowercase;
187 } 187 }
188 188
189 @include bem.utility('c-heading') { 189 @include bem.utility("c-heading") {
190 color: props.get(vars.$theme, --heading); 190 color: props.get(vars.$theme, --heading);
191 191
192 @each $theme in map.keys(props.get(vars.$transparent-colors)) { 192 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
@@ -198,7 +198,7 @@ $-aspect-ratios: (
198 } 198 }
199 } 199 }
200 200
201 @include bem.utility('c-text') { 201 @include bem.utility("c-text") {
202 color: props.get(vars.$theme, --text); 202 color: props.get(vars.$theme, --text);
203 203
204 @each $theme in map.keys(props.get(vars.$transparent-colors)) { 204 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
@@ -210,7 +210,7 @@ $-aspect-ratios: (
210 } 210 }
211 } 211 }
212 212
213 @include bem.utility('c-mute') { 213 @include bem.utility("c-mute") {
214 color: props.get(vars.$theme, --text-mute); 214 color: props.get(vars.$theme, --text-mute);
215 215
216 @each $theme in map.keys(props.get(vars.$transparent-colors)) { 216 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
@@ -222,7 +222,7 @@ $-aspect-ratios: (
222 } 222 }
223 } 223 }
224 224
225 @include bem.utility('c-mute-more') { 225 @include bem.utility("c-mute-more") {
226 color: props.get(vars.$theme, --text-mute-more); 226 color: props.get(vars.$theme, --text-mute-more);
227 227
228 @each $theme in map.keys(props.get(vars.$transparent-colors)) { 228 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
@@ -235,189 +235,195 @@ $-aspect-ratios: (
235 } 235 }
236 236
237 @each $mod, $size in $-font-sizes { 237 @each $mod, $size in $-font-sizes {
238 @include bem.utility('fs-#{$mod}') { 238 @include bem.utility("fs-#{$mod}") {
239 font-size: props.get($size); 239 font-size: props.get($size);
240 } 240 }
241 } 241 }
242 242
243 @each $dir, $prop in (is: inline-size, bs: block-size) { 243 @each $dir, $prop in (is: inline-size, bs: block-size) {
244 @include bem.utility('#{$dir}-100') { 244 @include bem.utility("#{$dir}-100") {
245 #{$prop}: 100%; 245 #{$prop}: 100%;
246 } 246 }
247 247
248 @include bem.utility('#{$dir}-75') { 248 @include bem.utility("#{$dir}-75") {
249 #{$prop}: 75%; 249 #{$prop}: 75%;
250 } 250 }
251 251
252 @include bem.utility('#{$dir}-50') { 252 @include bem.utility("#{$dir}-50") {
253 #{$prop}: 50%; 253 #{$prop}: 50%;
254 } 254 }
255 255
256 @include bem.utility('#{$dir}-25') { 256 @include bem.utility("#{$dir}-25") {
257 #{$prop}: 25%; 257 #{$prop}: 25%;
258 } 258 }
259 259
260 @include bem.utility('#{$dir}-1px') { 260 @include bem.utility("#{$dir}-1px") {
261 #{$prop}: 1px; 261 #{$prop}: 1px;
262 } 262 }
263 263
264 @include bem.utility('#{$dir}-0') { 264 @include bem.utility("#{$dir}-0") {
265 #{$prop}: 0; 265 #{$prop}: 0;
266 } 266 }
267 } 267 }
268 268
269 @include bem.utility('elp') { 269 @include bem.utility("elp") {
270 overflow: hidden; 270 overflow: hidden;
271 text-overflow: ellipsis; 271 text-overflow: ellipsis;
272 white-space: nowrap; 272 white-space: nowrap;
273 } 273 }
274 274
275 @include bem.utility('hyph') { 275 @include bem.utility("hyph") {
276 hyphens: auto; 276 hyphens: auto;
277 hyphenate-limit-chars: auto; 277 hyphenate-limit-chars: auto;
278 } 278 }
279 279
280 @include bem.utility('tw-balance') { 280 @include bem.utility("tw-balance") {
281 text-wrap-style: balance; 281 text-wrap-style: balance;
282 } 282 }
283 283
284 @include bem.utility('o-auto') { 284 @include bem.utility("o-auto") {
285 overflow: auto; 285 overflow: auto;
286 } 286 }
287 287
288 @include bem.utility('o-hidden') { 288 @include bem.utility("o-hidden") {
289 overflow: hidden; 289 overflow: hidden;
290 } 290 }
291 291
292 @include bem.utility('p-static') { 292 @include bem.utility("p-static") {
293 position: static; 293 position: static;
294 } 294 }
295 295
296 @include bem.utility('p-relative') { 296 @include bem.utility("p-relative") {
297 position: relative; 297 position: relative;
298 } 298 }
299 299
300 @include bem.utility('p-fixed') { 300 @include bem.utility("p-fixed") {
301 position: fixed; 301 position: fixed;
302 } 302 }
303 303
304 @include bem.utility('p-sticky-bs') { 304 @include bem.utility("p-sticky-bs") {
305 position: sticky; 305 position: sticky;
306 inset-block-start: props.get(vars.$sticky-top-offset); 306 inset-block-start: props.get(vars.$sticky-top-offset);
307 } 307 }
308 308
309 @include bem.utility('p-sticky-be') { 309 @include bem.utility("p-sticky-be") {
310 position: sticky; 310 position: sticky;
311 inset-block-end: 0; 311 inset-block-end: 0;
312 } 312 }
313 313
314 @include bem.utility('br-round') { 314 @include bem.utility("br-round") {
315 border-radius: props.get(vars.$rounding); 315 border-radius: props.get(vars.$rounding);
316 } 316 }
317 317
318 @include bem.utility('br-round-sm') { 318 @include bem.utility("br-round-sm") {
319 border-radius: props.get(vars.$rounding--sm); 319 border-radius: props.get(vars.$rounding--sm);
320 } 320 }
321 321
322 @each $dir, $prefix in $-axes { 322 @each $dir, $prefix in $-axes {
323 @each $mod, $size in $-sizes { 323 @each $mod, $size in $-sizes {
324 @include bem.utility('#{$dir}g-#{$mod}') { 324 @include bem.utility("#{$dir}g-#{$mod}") {
325 #{$prefix}gap: props.get($size); 325 #{$prefix}gap: props.get($size);
326 } 326 }
327 } 327 }
328 } 328 }
329 329
330 @each $dir, $suffix in $-dirs { 330 @each $dir, $suffix in $-dirs {
331 @include bem.utility('m#{$dir}-auto') { 331 @include bem.utility("m#{$dir}-auto") {
332 margin#{$suffix}: auto; 332 margin#{$suffix}: auto;
333 } 333 }
334 334
335 @include bem.utility('p#{$dir}-auto') { 335 @include bem.utility("p#{$dir}-auto") {
336 padding#{$suffix}: auto; 336 padding#{$suffix}: auto;
337 } 337 }
338 338
339 @each $mod, $size in $-sizes { 339 @each $mod, $size in $-sizes {
340 @include bem.utility('m#{$dir}-#{$mod}') { 340 @include bem.utility("m#{$dir}-#{$mod}") {
341 margin#{$suffix}: props.get($size); 341 margin#{$suffix}: props.get($size);
342 } 342 }
343 343
344 @include bem.utility('p#{$dir}-#{$mod}') { 344 @include bem.utility("p#{$dir}-#{$mod}") {
345 padding#{$suffix}: props.get($size); 345 padding#{$suffix}: props.get($size);
346 } 346 }
347 } 347 }
348 348
349 @include bem.utility('b#{$dir}-0') { 349 @include bem.utility("b#{$dir}-0") {
350 border#{$suffix}: 0; 350 border#{$suffix}: 0;
351 351
352 @include bem.suffix('light') { 352 @include bem.suffix("light") {
353 @media (prefers-color-scheme: light) { 353 @media (prefers-color-scheme: light) {
354 border#{$suffix}: 0; 354 border#{$suffix}: 0;
355 } 355 }
356 } 356 }
357 357
358 @include bem.suffix('dark') { 358 @include bem.suffix("dark") {
359 @media (prefers-color-scheme: dark) { 359 @media (prefers-color-scheme: dark) {
360 border#{$suffix}: 0; 360 border#{$suffix}: 0;
361 } 361 }
362 } 362 }
363 } 363 }
364 364
365 @include bem.utility('b#{$dir}-1') { 365 @include bem.utility("b#{$dir}-1") {
366 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border); 366 border#{$suffix}: props.get(vars.$border-width--thin) solid
367 props.get(vars.$theme, --border);
367 368
368 @include bem.suffix('light') { 369 @include bem.suffix("light") {
369 @media (prefers-color-scheme: light) { 370 @media (prefers-color-scheme: light) {
370 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border); 371 border#{$suffix}: props.get(vars.$border-width--thin) solid
372 props.get(vars.$theme, --border);
371 } 373 }
372 } 374 }
373 375
374 @include bem.suffix('dark') { 376 @include bem.suffix("dark") {
375 @media (prefers-color-scheme: dark) { 377 @media (prefers-color-scheme: dark) {
376 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border); 378 border#{$suffix}: props.get(vars.$border-width--thin) solid
379 props.get(vars.$theme, --border);
377 } 380 }
378 } 381 }
379 } 382 }
380 383
381 @include bem.utility('b#{$dir}-1-mute') { 384 @include bem.utility("b#{$dir}-1-mute") {
382 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border-mute); 385 border#{$suffix}: props.get(vars.$border-width--thin) solid
386 props.get(vars.$theme, --border-mute);
383 387
384 @include bem.suffix('light') { 388 @include bem.suffix("light") {
385 @media (prefers-color-scheme: light) { 389 @media (prefers-color-scheme: light) {
386 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border-mute); 390 border#{$suffix}: props.get(vars.$border-width--thin) solid
391 props.get(vars.$theme, --border-mute);
387 } 392 }
388 } 393 }
389 394
390 @include bem.suffix('dark') { 395 @include bem.suffix("dark") {
391 @media (prefers-color-scheme: dark) { 396 @media (prefers-color-scheme: dark) {
392 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border-mute); 397 border#{$suffix}: props.get(vars.$border-width--thin) solid
398 props.get(vars.$theme, --border-mute);
393 } 399 }
394 } 400 }
395 } 401 }
396 } 402 }
397 403
398 @include bem.utility('mbs-neutralize') { 404 @include bem.utility("mbs-neutralize") {
399 &::before { 405 &::before {
400 display: block; 406 display: block;
401 margin-block: -100em 100em; 407 margin-block: -100em 100em;
402 content: ''; 408 content: "";
403 } 409 }
404 } 410 }
405 411
406 @each $mod, $value in $-aspect-ratios { 412 @each $mod, $value in $-aspect-ratios {
407 @include bem.utility('ar-#{$mod}') { 413 @include bem.utility("ar-#{$mod}") {
408 aspect-ratio: string.unquote($value); 414 aspect-ratio: string.unquote($value);
409 } 415 }
410 } 416 }
411 417
412 @include bem.utility('sr-only') { 418 @include bem.utility("sr-only") {
413 position: absolute; 419 position: absolute;
414 width: 1px; 420 width: 1px;
415 height: 1px; 421 height: 1px;
416 padding: 0; 422 padding: 0;
417 margin: -1px; 423 margin: -1px;
418 overflow: hidden; 424 overflow: hidden;
419 white-space: nowrap; 425 white-space: nowrap;
420 border: 0; 426 border: 0;
421 clip-path: inset(50%); 427 clip-path: inset(50%);
422 } 428 }
423} 429}
diff --git a/src/layouts/_card-list.scss b/src/layouts/_card-list.scss
index f2a6ff5..c05b798 100644
--- a/src/layouts/_card-list.scss
+++ b/src/layouts/_card-list.scss
@@ -1,39 +1,44 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:include-media/dist/include-media' as media; 2@use "pkg:include-media/dist/include-media" as media;
3@use 'pkg:iro-sass/src/bem'; 3@use "pkg:iro-sass/bem";
4@use 'pkg:iro-sass/src/props'; 4@use "pkg:iro-sass/props";
5@use '../props' as *; 5@use "../props" as *;
6 6
7@use '../objects/card.vars' as card; 7@use "../objects/card.vars" as card;
8 8
9@forward 'card-list.vars'; 9@forward "card-list.vars";
10@use 'card-list.vars' as vars; 10@use "card-list.vars" as vars;
11 11
12@mixin styles { 12@mixin styles {
13 @include materialize-at-root(meta.module-variables('vars')); 13 @include materialize-at-root(meta.module-variables("vars"));
14 14
15 @include bem.layout('card-list') { 15 @include bem.layout("card-list") {
16 display: flex; 16 display: flex;
17 flex-direction: column; 17 flex-direction: column;
18 gap: props.get(vars.$row-gap); 18 gap: props.get(vars.$row-gap);
19 19
20 @include bem.modifier('merge') { 20 @include bem.modifier("merge") {
21 position: relative; 21 position: relative;
22 gap: 0; 22 gap: 0;
23 border-radius: props.get(card.$rounding); 23 border-radius: props.get(card.$rounding);
24 24
25 @include bem.elem('card') { 25 @include bem.elem("card") {
26 border-color: props.get(card.$border-color) props.get(card.$border-color) props.get(vars.$border-color); 26 border-color: props.get(card.$border-color) props.get(card.$border-color)
27 props.get(vars.$border-color);
27 background-clip: content-box; 28 background-clip: content-box;
28 box-shadow: none; 29 box-shadow: none;
29 30
30 &:not(:last-child) { 31 &:not(:last-child) {
31 position: relative; 32 position: relative;
32 border-end-start-radius: 0; 33 border-end-start-radius: 0;
33 border-end-end-radius: 0; 34 border-end-end-radius: 0;
34 } 35 }
35 36
36 @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive', 'modifier' 'collapsible') { 37 @include bem.multi(
38 "&:link, &:visited, &:enabled",
39 "modifier" "interactive",
40 "modifier" "collapsible"
41 ) {
37 &:hover, 42 &:hover,
38 &:active, 43 &:active,
39 &:focus-visible { 44 &:focus-visible {
@@ -46,19 +51,28 @@
46 } 51 }
47 52
48 @include bem.next-twin-elem { 53 @include bem.next-twin-elem {
49 margin-block-start: calc(-1 * props.get(card.$border-width)); 54 margin-block-start: calc(-1 * props.get(card.$border-width));
50 border-block-start-color: transparent; 55 border-block-start-color: transparent;
51 border-start-start-radius: 0; 56 border-start-start-radius: 0;
52 border-start-end-radius: 0; 57 border-start-end-radius: 0;
53 58
54 @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive', 'modifier' 'collapsible') { 59 @include bem.multi(
60 "&:link, &:visited, &:enabled",
61 "modifier" "interactive",
62 "modifier" "collapsible"
63 ) {
55 &:hover, 64 &:hover,
56 &:active { 65 &:active {
57 border-block-start-color: props.get(card.$hover--border-color); 66 border-block-start-color: props.get(card.$hover--border-color);
58 } 67 }
59 68
60 &:focus-visible { 69 &:focus-visible {
61 margin-block-start: calc(-1 * props.get(card.$border-width) - props.get(card.$key-focus--border-width)); 70 margin-block-start: calc(
71 -1 *
72 props.get(card.$border-width) - props.get(
73 card.$key-focus--border-width
74 )
75 );
62 } 76 }
63 } 77 }
64 } 78 }
@@ -67,7 +81,11 @@
67 border-block-end-color: props.get(card.$border-color); 81 border-block-end-color: props.get(card.$border-color);
68 } 82 }
69 83
70 @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive', 'modifier' 'collapsible') { 84 @include bem.multi(
85 "&:link, &:visited, &:enabled",
86 "modifier" "interactive",
87 "modifier" "collapsible"
88 ) {
71 &:hover, 89 &:hover,
72 &:active { 90 &:active {
73 border-color: props.get(card.$hover--border-color); 91 border-color: props.get(card.$hover--border-color);
@@ -75,17 +93,20 @@
75 93
76 &:focus-visible { 94 &:focus-visible {
77 border-color: props.get(card.$hover--bg-color); 95 border-color: props.get(card.$hover--bg-color);
78 box-shadow: 96 box-shadow: 0 0 0
79 0 0 0 97 calc(
80 calc(props.get(card.$key-focus--border-width) + props.get(card.$key-focus--outline-width)) 98 props.get(card.$key-focus--border-width) +
99 props.get(card.$key-focus--outline-width)
100 )
81 props.get(card.$key-focus--outline-color); 101 props.get(card.$key-focus--outline-color);
82 } 102 }
83 } 103 }
84 } 104 }
85 105
86 @include bem.modifier('borderless') { 106 @include bem.modifier("borderless") {
87 @include bem.elem('card') { 107 @include bem.elem("card") {
88 border-color: props.get(card.$bg-color) props.get(card.$bg-color) props.get(vars.$border-color); 108 border-color: props.get(card.$bg-color) props.get(card.$bg-color)
109 props.get(vars.$border-color);
89 110
90 @include bem.next-twin-elem { 111 @include bem.next-twin-elem {
91 border-block-start-color: transparent; 112 border-block-start-color: transparent;
@@ -95,7 +116,11 @@
95 border-block-end-color: props.get(card.$bg-color); 116 border-block-end-color: props.get(card.$bg-color);
96 } 117 }
97 118
98 @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive', 'modifier' 'collapsible') { 119 @include bem.multi(
120 "&:link, &:visited, &:enabled",
121 "modifier" "interactive",
122 "modifier" "collapsible"
123 ) {
99 &:hover, 124 &:hover,
100 &:active { 125 &:active {
101 border-color: props.get(card.$hover--border-color); 126 border-color: props.get(card.$hover--border-color);
@@ -108,84 +133,87 @@
108 } 133 }
109 } 134 }
110 135
111 @include bem.modifier('shadow') { 136 @include bem.modifier("shadow") {
112 box-shadow: 137 box-shadow: props.get(vars.$shadow-x) props.get(vars.$shadow-y)
113 props.get(vars.$shadow-x) 138 props.get(vars.$shadow-blur) props.get(vars.$shadow-grow)
114 props.get(vars.$shadow-y)
115 props.get(vars.$shadow-blur)
116 props.get(vars.$shadow-grow)
117 props.get(card.$shadow-color); 139 props.get(card.$shadow-color);
118 } 140 }
119 141
120 @include bem.modifier('interactive') { 142 @include bem.modifier("interactive") {
121 transition: transform .2s, box-shadow .2s; 143 transition:
144 transform 0.2s,
145 box-shadow 0.2s;
122 146
123 &:hover, 147 &:hover,
124 &:active, 148 &:active,
125 &:focus-within { 149 &:focus-within {
126 box-shadow: none; 150 box-shadow: none;
127 transform: translateY(props.get(card.$hover--offset-b)); 151 transform: translateY(props.get(card.$hover--offset-b));
128 } 152 }
129 } 153 }
130 } 154 }
131 155
132 @include bem.modifier('quiet') { 156 @include bem.modifier("quiet") {
133 row-gap: props.get(vars.$quiet--row-gap); 157 row-gap: props.get(vars.$quiet--row-gap);
134 } 158 }
135 159
136 @each $mod, $row-gap, $col-gap, $col-width, $quiet--row-gap, $breakpoint in vars.$grid-layouts { 160 @each $mod, $row-gap, $col-gap, $col-width, $quiet--row-gap,
161 $breakpoint in vars.$grid-layouts
162 {
137 @include bem.modifier($mod) { 163 @include bem.modifier($mod) {
138 display: grid; 164 display: grid;
139 grid-template-columns: repeat(auto-fill, minmax(props.get($col-width), 1fr)); 165 grid-template-columns: repeat(auto-fill, minmax(props.get($col-width), 1fr));
140 gap: props.get($row-gap) props.get($col-gap); 166 gap: props.get($row-gap) props.get($col-gap);
141 167
142 @include bem.modifier('quiet') { 168 @include bem.modifier("quiet") {
143 row-gap: props.get($quiet--row-gap); 169 row-gap: props.get($quiet--row-gap);
144 } 170 }
145 171
146 @include media.media('<=#{$breakpoint}') { 172 @include media.media("<=#{$breakpoint}") {
147 display: flex; 173 display: flex;
148 } 174 }
149 } 175 }
150 } 176 }
151 177
152 @each $mod, $row-gap, $col-gap, $col-width, $quiet--row-gap, $breakpoint in vars.$flex-layouts { 178 @each $mod, $row-gap, $col-gap, $col-width, $quiet--row-gap,
179 $breakpoint in vars.$flex-layouts
180 {
153 @include bem.modifier($mod) { 181 @include bem.modifier($mod) {
154 display: flex; 182 display: flex;
155 flex-flow: row wrap; 183 flex-flow: row wrap;
156 gap: props.get($row-gap) props.get($col-gap); 184 gap: props.get($row-gap) props.get($col-gap);
157 185
158 @include bem.modifier('quiet') { 186 @include bem.modifier("quiet") {
159 row-gap: props.get($quiet--row-gap); 187 row-gap: props.get($quiet--row-gap);
160 } 188 }
161 189
162 @include bem.elem('card') { 190 @include bem.elem("card") {
163 flex: 0.1 0 auto; 191 flex: 0.1 0 auto;
164 inline-size: props.get($col-width); 192 inline-size: props.get($col-width);
165 } 193 }
166 194
167 @include media.media('<=#{$breakpoint}') { 195 @include media.media("<=#{$breakpoint}") {
168 flex-flow: column nowrap; 196 flex-flow: column nowrap;
169 197
170 @include bem.elem('card') { 198 @include bem.elem("card") {
171 inline-size: auto; 199 inline-size: auto;
172 } 200 }
173 } 201 }
174 } 202 }
175 } 203 }
176 204
177 @include bem.modifier('masonry') { 205 @include bem.modifier("masonry") {
178 display: block; 206 display: block;
179 columns: auto props.get(vars.$masonry--col-width); 207 columns: auto props.get(vars.$masonry--col-width);
180 column-gap: props.get(vars.$masonry--col-gap); 208 column-gap: props.get(vars.$masonry--col-gap);
181 209
182 @include bem.elem('card') { 210 @include bem.elem("card") {
183 margin-block-end: props.get(vars.$masonry--row-gap); 211 margin-block-end: props.get(vars.$masonry--row-gap);
184 break-inside: avoid; 212 break-inside: avoid;
185 } 213 }
186 214
187 @include bem.modifier('quiet') { 215 @include bem.modifier("quiet") {
188 @include bem.elem('card') { 216 @include bem.elem("card") {
189 margin-block-end: props.get(vars.$masonry--quiet--row-gap); 217 margin-block-end: props.get(vars.$masonry--quiet--row-gap);
190 } 218 }
191 } 219 }
@@ -194,34 +222,34 @@
194 @each $mod, $row-gap, $col-gap, $row-height, $quiet--row-gap in vars.$masonry-h-layouts { 222 @each $mod, $row-gap, $col-gap, $row-height, $quiet--row-gap in vars.$masonry-h-layouts {
195 @include bem.modifier($mod) { 223 @include bem.modifier($mod) {
196 flex-flow: row wrap; 224 flex-flow: row wrap;
197 gap: props.get($row-gap) props.get($col-gap); 225 gap: props.get($row-gap) props.get($col-gap);
198 226
199 @include bem.modifier('no-flush') { 227 @include bem.modifier("no-flush") {
200 &::after { 228 &::after {
201 display: block; 229 display: block;
202 flex: 1 0 auto; 230 flex: 1 0 auto;
203 inline-size: props.get($row-height); 231 inline-size: props.get($row-height);
204 content: ''; 232 content: "";
205 } 233 }
206 } 234 }
207 235
208 @include bem.elem('card') { 236 @include bem.elem("card") {
209 flex: 1 0 auto; 237 flex: 1 0 auto;
210 max-inline-size: 100%; 238 max-inline-size: 100%;
211 } 239 }
212 240
213 @include bem.elem('card-image') { 241 @include bem.elem("card-image") {
214 block-size: props.get($row-height); 242 block-size: props.get($row-height);
215 } 243 }
216 244
217 @include bem.modifier('quiet') { 245 @include bem.modifier("quiet") {
218 row-gap: props.get($quiet--row-gap); 246 row-gap: props.get($quiet--row-gap);
219 } 247 }
220 } 248 }
221 } 249 }
222 250
223 @include bem.modifier('aspect-5\\/4') { 251 @include bem.modifier("aspect-5\\/4") {
224 @include bem.elem('card-image') { 252 @include bem.elem("card-image") {
225 aspect-ratio: 5 / 4; 253 aspect-ratio: 5 / 4;
226 } 254 }
227 } 255 }
diff --git a/src/layouts/_card-list.vars.scss b/src/layouts/_card-list.vars.scss
index fb89b52..ece68f3 100644
--- a/src/layouts/_card-list.vars.scss
+++ b/src/layouts/_card-list.vars.scss
@@ -1,61 +1,116 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3@use '../objects/card' as card; 3@use "../objects/card" as card;
4 4
5$row-gap: props.def(--l-card-list--row-gap, props.get(core.$size--200)) !default; 5$row-gap: props.def(--l-card-list--row-gap, props.get(core.$size--200)) !default;
6$quiet--row-gap: props.def(--l-card-list--quiet--row-gap, props.get(core.$size--800)) !default; 6$quiet--row-gap: props.def(--l-card-list--quiet--row-gap, props.get(core.$size--800)) !default;
7 7
8$grid--row-gap: props.def(--l-card-list--grid--row-gap, props.get(core.$size--600)) !default; 8$grid--row-gap: props.def(--l-card-list--grid--row-gap, props.get(core.$size--600)) !default;
9$grid--col-gap: props.def(--l-card-list--grid--col-gap, props.get(core.$size--600)) !default; 9$grid--col-gap: props.def(--l-card-list--grid--col-gap, props.get(core.$size--600)) !default;
10$grid--col-width: props.def(--l-card-list--grid--col-width, props.get(core.$size--3200)) !default; 10$grid--col-width: props.def(--l-card-list--grid--col-width, props.get(core.$size--3200)) !default;
11$grid--quiet--row-gap: props.def(--l-card-list--grid--quiet--row-gap, props.get(core.$size--800)) !default; 11$grid--quiet--row-gap: props.def(
12 --l-card-list--grid--quiet--row-gap,
13 props.get(core.$size--800)
14) !default;
12 15
13$grid-sm--row-gap: props.def(--l-card-list--grid-sm--row-gap, props.get(core.$size--200)) !default; 16$grid-sm--row-gap: props.def(--l-card-list--grid-sm--row-gap, props.get(core.$size--200)) !default;
14$grid-sm--col-gap: props.def(--l-card-list--grid-sm--col-gap, props.get(core.$size--200)) !default; 17$grid-sm--col-gap: props.def(--l-card-list--grid-sm--col-gap, props.get(core.$size--200)) !default;
15$grid-sm--col-width: props.def(--l-card-list--grid-sm--col-width, props.get(core.$size--4600)) !default; 18$grid-sm--col-width: props.def(
16$grid-sm--quiet--row-gap: props.def(--l-card-list--grid-sm--quiet--row-gap, props.get(core.$size--800)) !default; 19 --l-card-list--grid-sm--col-width,
20 props.get(core.$size--4600)
21) !default;
22$grid-sm--quiet--row-gap: props.def(
23 --l-card-list--grid-sm--quiet--row-gap,
24 props.get(core.$size--800)
25) !default;
17 26
18$grid-xs--row-gap: props.def(--l-card-list--grid-xs--row-gap, props.get(core.$size--200)) !default; 27$grid-xs--row-gap: props.def(--l-card-list--grid-xs--row-gap, props.get(core.$size--200)) !default;
19$grid-xs--col-gap: props.def(--l-card-list--grid-xs--col-gap, props.get(core.$size--200)) !default; 28$grid-xs--col-gap: props.def(--l-card-list--grid-xs--col-gap, props.get(core.$size--200)) !default;
20$grid-xs--col-width: props.def(--l-card-list--grid-xs--col-width, props.get(core.$size--1600)) !default; 29$grid-xs--col-width: props.def(
21$grid-xs--quiet--row-gap: props.def(--l-card-list--grid-xs--quiet--row-gap, props.get(core.$size--800)) !default; 30 --l-card-list--grid-xs--col-width,
31 props.get(core.$size--1600)
32) !default;
33$grid-xs--quiet--row-gap: props.def(
34 --l-card-list--grid-xs--quiet--row-gap,
35 props.get(core.$size--800)
36) !default;
22 37
23$grid-layouts: ( 38$grid-layouts: (
24 'grid' $grid--row-gap $grid--col-gap $grid--col-width $grid--quiet--row-gap sm, 39 "grid" $grid--row-gap $grid--col-gap $grid--col-width $grid--quiet--row-gap sm,
25 'grid-sm' $grid-sm--row-gap $grid-sm--col-gap $grid-sm--col-width $grid-sm--quiet--row-gap sm, 40 "grid-sm" $grid-sm--row-gap $grid-sm--col-gap $grid-sm--col-width $grid-sm--quiet--row-gap sm,
26 'grid-xs' $grid-xs--row-gap $grid-xs--col-gap $grid-xs--col-width $grid-xs--quiet--row-gap xs, 41 "grid-xs" $grid-xs--row-gap $grid-xs--col-gap $grid-xs--col-width $grid-xs--quiet--row-gap xs
27) !default; 42) !default;
28 43
29$flex-layouts: ( 44$flex-layouts: (
30 'flex' $grid--row-gap $grid--col-gap $grid--col-width $grid--quiet--row-gap sm, 45 "flex" $grid--row-gap $grid--col-gap $grid--col-width $grid--quiet--row-gap sm,
31 'flex-sm' $grid-sm--row-gap $grid-sm--col-gap $grid-sm--col-width $grid-sm--quiet--row-gap sm, 46 "flex-sm" $grid-sm--row-gap $grid-sm--col-gap $grid-sm--col-width $grid-sm--quiet--row-gap sm,
32 'flex-xs' $grid-xs--row-gap $grid-xs--col-gap $grid-xs--col-width $grid-xs--quiet--row-gap xs, 47 "flex-xs" $grid-xs--row-gap $grid-xs--col-gap $grid-xs--col-width $grid-xs--quiet--row-gap xs
33) !default; 48) !default;
34 49
35$masonry-h--row-gap: props.def(--l-card-list--masonry-h--row-gap, props.get(core.$size--400)) !default; 50$masonry-h--row-gap: props.def(
36$masonry-h--col-gap: props.def(--l-card-list--masonry-h--col-gap, props.get(core.$size--400)) !default; 51 --l-card-list--masonry-h--row-gap,
37$masonry-h--row-height: props.def(--l-card-list--masonry-h--row-height, props.get(core.$size--3200)) !default; 52 props.get(core.$size--400)
38$masonry-h--quiet--row-gap: props.def(--l-card-list--masonry-h--quiet--row-gap, props.get(core.$size--800)) !default; 53) !default;
54$masonry-h--col-gap: props.def(
55 --l-card-list--masonry-h--col-gap,
56 props.get(core.$size--400)
57) !default;
58$masonry-h--row-height: props.def(
59 --l-card-list--masonry-h--row-height,
60 props.get(core.$size--3200)
61) !default;
62$masonry-h--quiet--row-gap: props.def(
63 --l-card-list--masonry-h--quiet--row-gap,
64 props.get(core.$size--800)
65) !default;
39 66
40$masonry-h-sm--row-gap: props.def(--l-card-list--masonry-h-sm--row-gap, props.get(core.$size--400)) !default; 67$masonry-h-sm--row-gap: props.def(
41$masonry-h-sm--col-gap: props.def(--l-card-list--masonry-h-sm--col-gap, props.get(core.$size--400)) !default; 68 --l-card-list--masonry-h-sm--row-gap,
42$masonry-h-sm--row-height: props.def(--l-card-list--masonry-h-sm--row-height, props.get(core.$size--2600)) !default; 69 props.get(core.$size--400)
43$masonry-h-sm--quiet--row-gap: props.def(--l-card-list--masonry-h-sm--quiet--row-gap, props.get(core.$size--800)) !default; 70) !default;
71$masonry-h-sm--col-gap: props.def(
72 --l-card-list--masonry-h-sm--col-gap,
73 props.get(core.$size--400)
74) !default;
75$masonry-h-sm--row-height: props.def(
76 --l-card-list--masonry-h-sm--row-height,
77 props.get(core.$size--2600)
78) !default;
79$masonry-h-sm--quiet--row-gap: props.def(
80 --l-card-list--masonry-h-sm--quiet--row-gap,
81 props.get(core.$size--800)
82) !default;
44 83
45$masonry-h-layouts: ( 84$masonry-h-layouts: (
46 'masonry-h' $masonry-h--row-gap $masonry-h--col-gap $masonry-h--row-height $masonry-h--quiet--row-gap, 85 "masonry-h" $masonry-h--row-gap $masonry-h--col-gap $masonry-h--row-height
47 'masonry-h-sm' $masonry-h-sm--row-gap $masonry-h-sm--col-gap $masonry-h-sm--row-height $masonry-h-sm--quiet--row-gap, 86 $masonry-h--quiet--row-gap,
87 "masonry-h-sm" $masonry-h-sm--row-gap $masonry-h-sm--col-gap $masonry-h-sm--row-height
88 $masonry-h-sm--quiet--row-gap
48) !default; 89) !default;
49 90
50$masonry--row-gap: props.def(--l-card-list--masonry--row-gap, props.get(core.$size--400)) !default; 91$masonry--row-gap: props.def(--l-card-list--masonry--row-gap, props.get(core.$size--400)) !default;
51$masonry--col-gap: props.def(--l-card-list--masonry--col-gap, props.get(core.$size--400)) !default; 92$masonry--col-gap: props.def(--l-card-list--masonry--col-gap, props.get(core.$size--400)) !default;
52$masonry--col-width: props.def(--l-card-list--masonry--col-width, props.get(core.$size--3200)) !default; 93$masonry--col-width: props.def(
53$masonry--quiet--row-gap: props.def(--l-card-list--masonry--quiet--row-gap, props.get(core.$size--800)) !default; 94 --l-card-list--masonry--col-width,
95 props.get(core.$size--3200)
96) !default;
97$masonry--quiet--row-gap: props.def(
98 --l-card-list--masonry--quiet--row-gap,
99 props.get(core.$size--800)
100) !default;
54 101
55$shadow-x: props.def(--l-card-list--shadow-x, props.get(card.$shadow-x)) !default; 102$shadow-x: props.def(--l-card-list--shadow-x, props.get(card.$shadow-x)) !default;
56$shadow-y: props.def(--l-card-list--shadow-y, props.get(card.$shadow-y)) !default; 103$shadow-y: props.def(--l-card-list--shadow-y, props.get(card.$shadow-y)) !default;
57$shadow-blur: props.def(--l-card-list--shadow-blur, props.get(card.$shadow-blur)) !default; 104$shadow-blur: props.def(--l-card-list--shadow-blur, props.get(card.$shadow-blur)) !default;
58$shadow-grow: props.def(--l-card-list--shadow-grow, props.get(card.$shadow-grow)) !default; 105$shadow-grow: props.def(--l-card-list--shadow-grow, props.get(card.$shadow-grow)) !default;
59 106
60$border-color: props.def(--l-card-list--border-color, props.get(card.$border-color), 'color') !default; 107$border-color: props.def(
61$border-color-dark: props.def(--l-card-list--border-color, props.get(core.$theme, --border-mute), 'dark') !default; 108 --l-card-list--border-color,
109 props.get(card.$border-color),
110 "color"
111) !default;
112$border-color-dark: props.def(
113 --l-card-list--border-color,
114 props.get(core.$theme, --border-mute),
115 "dark"
116) !default;
diff --git a/src/layouts/_container.scss b/src/layouts/_container.scss
index 46ded23..7b3dc3f 100644
--- a/src/layouts/_container.scss
+++ b/src/layouts/_container.scss
@@ -1,37 +1,37 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'container.vars'; 6@forward "container.vars";
7@use 'container.vars' as vars; 7@use "container.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.layout('container') { 12 @include bem.layout("container") {
13 @each $mod, $size in vars.$fixed-sizes { 13 @each $mod, $size in vars.$fixed-sizes {
14 @include bem.modifier($mod) { 14 @include bem.modifier($mod) {
15 max-inline-size: props.get($size); 15 max-inline-size: props.get($size);
16 margin-inline: auto; 16 margin-inline: auto;
17 } 17 }
18 } 18 }
19 19
20 @include bem.modifier('pad-i') { 20 @include bem.modifier("pad-i") {
21 padding-inline: props.get(vars.$pad-i); 21 padding-inline: props.get(vars.$pad-i);
22 } 22 }
23 23
24 @include bem.modifier('pad-b') { 24 @include bem.modifier("pad-b") {
25 padding-block: props.get(vars.$pad-b); 25 padding-block: props.get(vars.$pad-b);
26 } 26 }
27 27
28 @each $mod, $pad-i, $pad-b in vars.$sizes { 28 @each $mod, $pad-i, $pad-b in vars.$sizes {
29 @include bem.modifier($mod) { 29 @include bem.modifier($mod) {
30 @include bem.modifier('pad-i') { 30 @include bem.modifier("pad-i") {
31 padding-inline: props.get($pad-i); 31 padding-inline: props.get($pad-i);
32 } 32 }
33 33
34 @include bem.modifier('pad-b') { 34 @include bem.modifier("pad-b") {
35 padding-block: props.get($pad-b); 35 padding-block: props.get($pad-b);
36 } 36 }
37 } 37 }
diff --git a/src/layouts/_container.vars.scss b/src/layouts/_container.vars.scss
index 094046f..09ef165 100644
--- a/src/layouts/_container.vars.scss
+++ b/src/layouts/_container.vars.scss
@@ -1,39 +1,36 @@
1@use 'pkg:iro-sass/src/functions' as fn; 1@use "pkg:iro-sass/functions" as fn;
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$fixed-200: props.def(--l-container--fixed-200, fn.px-to-rem(1300px)) !default; 5$fixed-200: props.def(--l-container--fixed-200, fn.px-to-rem(1300px)) !default;
6$fixed-150: props.def(--l-container--fixed-150, fn.px-to-rem(860px)) !default; 6$fixed-150: props.def(--l-container--fixed-150, fn.px-to-rem(860px)) !default;
7$fixed: props.def(--l-container--fixed, fn.px-to-rem(680px)) !default; 7$fixed: props.def(--l-container--fixed, fn.px-to-rem(680px)) !default;
8 8
9$fixed-sizes: ( 9$fixed-sizes: (
10 'fixed-200': $fixed-200, 10 "fixed-200": $fixed-200,
11 'fixed-150': $fixed-150, 11 "fixed-150": $fixed-150,
12 'fixed': $fixed 12 "fixed": $fixed,
13) !default; 13) !default;
14 14
15$pad-i: props.def(--l-container--pad-i, props.get(core.$size--600)) !default; 15$pad-i: props.def(--l-container--pad-i, props.get(core.$size--600)) !default;
16$pad-b: props.def(--l-container--pad-b, props.get(core.$size--800)) !default; 16$pad-b: props.def(--l-container--pad-b, props.get(core.$size--800)) !default;
17 17
18$pad-i--md: props.def(--l-container--pad-i, props.get(core.$size--400), 'md') !default; 18$pad-i--md: props.def(--l-container--pad-i, props.get(core.$size--400), "md") !default;
19$pad-b--md: props.def(--l-container--pad-b, props.get(core.$size--700), 'md') !default; 19$pad-b--md: props.def(--l-container--pad-b, props.get(core.$size--700), "md") !default;
20 20
21$pad-i--sm: props.def(--l-container--pad-i, props.get(core.$size--200), 'sm') !default; 21$pad-i--sm: props.def(--l-container--pad-i, props.get(core.$size--200), "sm") !default;
22$pad-b--sm: props.def(--l-container--pad-b, props.get(core.$size--600), 'sm') !default; 22$pad-b--sm: props.def(--l-container--pad-b, props.get(core.$size--600), "sm") !default;
23 23
24$pad-i--xs: props.def(--l-container--pad-i, props.get(core.$size--150), 'xs') !default; 24$pad-i--xs: props.def(--l-container--pad-i, props.get(core.$size--150), "xs") !default;
25$pad-b--xs: props.def(--l-container--pad-b, props.get(core.$size--450), 'xs') !default; 25$pad-b--xs: props.def(--l-container--pad-b, props.get(core.$size--450), "xs") !default;
26 26
27$sm--pad-i: props.def(--l-container--sm--pad-i, props.get(core.$size--300)) !default; 27$sm--pad-i: props.def(--l-container--sm--pad-i, props.get(core.$size--300)) !default;
28$sm--pad-b: props.def(--l-container--sm--pad-b, props.get(core.$size--800)) !default; 28$sm--pad-b: props.def(--l-container--sm--pad-b, props.get(core.$size--800)) !default;
29 29
30$sm--pad-i--sm: props.def(--l-container--sm--pad-i, props.get(core.$size--200), 'sm') !default; 30$sm--pad-i--sm: props.def(--l-container--sm--pad-i, props.get(core.$size--200), "sm") !default;
31$sm--pad-b--sm: props.def(--l-container--sm--pad-b, props.get(core.$size--600), 'sm') !default; 31$sm--pad-b--sm: props.def(--l-container--sm--pad-b, props.get(core.$size--600), "sm") !default;
32 32
33$sm--pad-i--xs: props.def(--l-container--sm--pad-i, props.get(core.$size--150), 'xs') !default; 33$sm--pad-i--xs: props.def(--l-container--sm--pad-i, props.get(core.$size--150), "xs") !default;
34$sm--pad-b--xs: props.def(--l-container--sm--pad-b, props.get(core.$size--450), 'xs') !default; 34$sm--pad-b--xs: props.def(--l-container--sm--pad-b, props.get(core.$size--450), "xs") !default;
35 35
36$sizes: ( 36$sizes: ("sm" $sm--pad-i $sm--pad-b, "md" $sm--pad-i $sm--pad-b) !default;
37 'sm' $sm--pad-i $sm--pad-b,
38 'md' $sm--pad-i $sm--pad-b,
39) !default;
diff --git a/src/layouts/_flex.scss b/src/layouts/_flex.scss
index ea0b268..70d29f9 100644
--- a/src/layouts/_flex.scss
+++ b/src/layouts/_flex.scss
@@ -1,18 +1,18 @@
1@use 'pkg:iro-sass/src/bem'; 1@use "pkg:iro-sass/bem";
2 2
3@mixin styles { 3@mixin styles {
4 @include bem.layout('flex') { 4 @include bem.layout("flex") {
5 display: flex; 5 display: flex;
6 6
7 @include bem.modifier('column') { 7 @include bem.modifier("column") {
8 flex-direction: column; 8 flex-direction: column;
9 } 9 }
10 10
11 @include bem.modifier('wrap') { 11 @include bem.modifier("wrap") {
12 flex-wrap: wrap; 12 flex-wrap: wrap;
13 } 13 }
14 14
15 @include bem.modifier('wrap-reverse') { 15 @include bem.modifier("wrap-reverse") {
16 flex-wrap: wrap-reverse; 16 flex-wrap: wrap-reverse;
17 } 17 }
18 } 18 }
diff --git a/src/layouts/_form.scss b/src/layouts/_form.scss
index f094cbc..f71e469 100644
--- a/src/layouts/_form.scss
+++ b/src/layouts/_form.scss
@@ -1,57 +1,57 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'form.vars'; 6@forward "form.vars";
7@use 'form.vars' as vars; 7@use "form.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.layout('form') { 12 @include bem.layout("form") {
13 display: flex; 13 display: flex;
14 flex-direction: column; 14 flex-direction: column;
15 gap: props.get(vars.$item-spacing-b) props.get(vars.$label-spacing-i); 15 gap: props.get(vars.$item-spacing-b) props.get(vars.$label-spacing-i);
16 16
17 @include bem.elem('item') { 17 @include bem.elem("item") {
18 display: block; 18 display: block;
19 } 19 }
20 20
21 @include bem.elem('item-content') { 21 @include bem.elem("item-content") {
22 @include bem.modifier('align-start') { 22 @include bem.modifier("align-start") {
23 align-self: start; 23 align-self: start;
24 } 24 }
25 } 25 }
26 26
27 @include bem.modifier('row') { 27 @include bem.modifier("row") {
28 flex-direction: row; 28 flex-direction: row;
29 align-items: flex-end; 29 align-items: flex-end;
30 } 30 }
31 31
32 @include bem.modifier('labels-start', 'labels-end') { 32 @include bem.modifier("labels-start", "labels-end") {
33 display: grid; 33 display: grid;
34 grid-template-rows: auto; 34 grid-template-rows: auto;
35 grid-template-columns: auto 1fr; 35 grid-template-columns: auto 1fr;
36 align-items: baseline; 36 align-items: baseline;
37 37
38 @include bem.elem('item') { 38 @include bem.elem("item") {
39 display: contents; 39 display: contents;
40 } 40 }
41 41
42 @include bem.elem('item-label') { 42 @include bem.elem("item-label") {
43 grid-column: 1; 43 grid-column: 1;
44 padding-inline-end: 0; 44 padding-inline-end: 0;
45 } 45 }
46 46
47 @include bem.elem('item-content') { 47 @include bem.elem("item-content") {
48 grid-column: 2; 48 grid-column: 2;
49 margin-block-start: 0; 49 margin-block-start: 0;
50 } 50 }
51 } 51 }
52 52
53 @include bem.modifier('labels-end') { 53 @include bem.modifier("labels-end") {
54 @include bem.elem('item-label') { 54 @include bem.elem("item-label") {
55 text-align: end; 55 text-align: end;
56 } 56 }
57 } 57 }
diff --git a/src/layouts/_form.vars.scss b/src/layouts/_form.vars.scss
index 52670cc..68cb23a 100644
--- a/src/layouts/_form.vars.scss
+++ b/src/layouts/_form.vars.scss
@@ -1,5 +1,5 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$item-spacing-b: props.def(--l-form--item-spacing-b, props.get(core.$size--325)) !default; 4$item-spacing-b: props.def(--l-form--item-spacing-b, props.get(core.$size--325)) !default;
5$label-spacing-i: props.def(--l-form--label-spacing-i, props.get(core.$size--325)) !default; 5$label-spacing-i: props.def(--l-form--label-spacing-i, props.get(core.$size--325)) !default;
diff --git a/src/layouts/_hlist.scss b/src/layouts/_hlist.scss
index 32b3097..00787db 100644
--- a/src/layouts/_hlist.scss
+++ b/src/layouts/_hlist.scss
@@ -1,30 +1,30 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'hlist.vars'; 6@forward "hlist.vars";
7@use 'hlist.vars' as vars; 7@use "hlist.vars" as vars;
8@use '../objects/button.vars' as button; 8@use "../objects/button.vars" as button;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.layout('hlist') { 13 @include bem.layout("hlist") {
14 display: inline-flex; 14 display: inline-flex;
15 flex-wrap: wrap; 15 flex-wrap: wrap;
16 gap: props.get(vars.$gap); 16 gap: props.get(vars.$gap);
17 17
18 @each $mod, $size in vars.$sizes { 18 @each $mod, $size in vars.$sizes {
19 @include bem.modifier($mod) { 19 @include bem.modifier($mod) {
20 gap: props.get($size); 20 gap: props.get($size);
21 21
22 @include bem.modifier('separated') { 22 @include bem.modifier("separated") {
23 @include bem.elem('item') { 23 @include bem.elem("item") {
24 @include bem.next-twin-elem { 24 @include bem.next-twin-elem {
25 &::before { 25 &::before {
26 content: '·'; 26 content: "·";
27 margin-inline: calc(.65 * props.get($size)); 27 margin-inline: calc(0.65 * props.get($size));
28 } 28 }
29 } 29 }
30 } 30 }
@@ -32,40 +32,51 @@
32 } 32 }
33 } 33 }
34 34
35 @include bem.modifier('separated') { 35 @include bem.modifier("separated") {
36 gap: 0; 36 gap: 0;
37 37
38 @include bem.elem('item') { 38 @include bem.elem("item") {
39 @include bem.next-twin-elem { 39 @include bem.next-twin-elem {
40 &::before { 40 &::before {
41 content: '·'; 41 content: "·";
42 margin-inline: calc(.65 * props.get(vars.$gap)); 42 margin-inline: calc(0.65 * props.get(vars.$gap));
43 } 43 }
44 } 44 }
45 } 45 }
46 } 46 }
47 47
48 @include bem.modifier('buttons') { 48 @include bem.modifier("buttons") {
49 margin-inline: calc(-1 * props.get(button.$pad-i) - props.get(button.$border-width)); 49 margin-inline: calc(-1 * props.get(button.$pad-i) - props.get(button.$border-width));
50 50
51 @include bem.modifier('pill') { 51 @include bem.modifier("pill") {
52 margin-inline: calc(-1 * props.get(button.$pad-i-pill) - props.get(button.$border-width)); 52 margin-inline: calc(
53 -1 * props.get(button.$pad-i-pill) - props.get(button.$border-width)
54 );
53 } 55 }
54 56
55 @include bem.modifier('icon') { 57 @include bem.modifier("icon") {
56 margin-inline: calc(-1 * props.get(button.$pad-b) - props.get(button.$border-width) - .5em * (props.get(button.$line-height) - 1)); 58 margin-inline: calc(
59 -1 * props.get(button.$pad-b) - props.get(button.$border-width) - 0.5em *
60 (props.get(button.$line-height) - 1)
61 );
57 } 62 }
58 63
59 @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in button.$fixed-sizes { 64 @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in button.$fixed-sizes
60 @include bem.modifier('buttons-#{$mod}') { 65 {
66 @include bem.modifier("buttons-#{$mod}") {
61 margin-inline: calc(-1 * props.get($pad-i) - props.get(button.$border-width)); 67 margin-inline: calc(-1 * props.get($pad-i) - props.get(button.$border-width));
62 68
63 @include bem.modifier('pill') { 69 @include bem.modifier("pill") {
64 margin-inline: calc(-1 * props.get($pad-i-pill) - props.get(button.$border-width)); 70 margin-inline: calc(
71 -1 * props.get($pad-i-pill) - props.get(button.$border-width)
72 );
65 } 73 }
66 74
67 @include bem.modifier('icon') { 75 @include bem.modifier("icon") {
68 margin-inline: calc(-1 * props.get($pad-b) - props.get(button.$border-width) - .5em * (props.get(button.$line-height) - 1)); 76 margin-inline: calc(
77 -1 * props.get($pad-b) - props.get(button.$border-width) - 0.5em *
78 (props.get(button.$line-height) - 1)
79 );
69 } 80 }
70 } 81 }
71 } 82 }
diff --git a/src/layouts/_hlist.vars.scss b/src/layouts/_hlist.vars.scss
index 2d99057..557cfae 100644
--- a/src/layouts/_hlist.vars.scss
+++ b/src/layouts/_hlist.vars.scss
@@ -1,16 +1,16 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$gap: props.def(--l-hlist--gap, props.get(core.$size--150)) !default; 4$gap: props.def(--l-hlist--gap, props.get(core.$size--150)) !default;
5 5
6$gapless: props.def(--l-hlist--gapless, 0) !default; 6$gapless: props.def(--l-hlist--gapless, 0) !default;
7$sm: props.def(--l-hlist--sm, props.get(core.$size--100)) !default; 7$sm: props.def(--l-hlist--sm, props.get(core.$size--100)) !default;
8$lg: props.def(--l-hlist--lg, props.get(core.$size--300)) !default; 8$lg: props.def(--l-hlist--lg, props.get(core.$size--300)) !default;
9$xl: props.def(--l-hlist--xl, props.get(core.$size--450)) !default; 9$xl: props.def(--l-hlist--xl, props.get(core.$size--450)) !default;
10 10
11$sizes: ( 11$sizes: (
12 'gapless': $gapless, 12 "gapless": $gapless,
13 'sm': $sm, 13 "sm": $sm,
14 'lg': $lg, 14 "lg": $lg,
15 'xl': $xl, 15 "xl": $xl,
16) !default; 16) !default;
diff --git a/src/layouts/_media.scss b/src/layouts/_media.scss
index 4492ea9..b6732bf 100644
--- a/src/layouts/_media.scss
+++ b/src/layouts/_media.scss
@@ -1,17 +1,17 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'media.vars'; 6@forward "media.vars";
7@use 'media.vars' as vars; 7@use "media.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.layout('media') { 12 @include bem.layout("media") {
13 display: flex; 13 display: flex;
14 gap: props.get(vars.$gap); 14 gap: props.get(vars.$gap);
15 align-items: center; 15 align-items: center;
16 line-height: 1.4; 16 line-height: 1.4;
17 17
@@ -21,19 +21,19 @@
21 } 21 }
22 } 22 }
23 23
24 @include bem.modifier('wrap') { 24 @include bem.modifier("wrap") {
25 flex-wrap: wrap; 25 flex-wrap: wrap;
26 } 26 }
27 27
28 @include bem.elem('block') { 28 @include bem.elem("block") {
29 flex: 0 0 auto; 29 flex: 0 0 auto;
30 30
31 @include bem.modifier('shrink', 'main') { 31 @include bem.modifier("shrink", "main") {
32 flex-shrink: 1; 32 flex-shrink: 1;
33 min-inline-size: 0; 33 min-inline-size: 0;
34 } 34 }
35 35
36 @include bem.modifier('main') { 36 @include bem.modifier("main") {
37 inline-size: 100%; 37 inline-size: 100%;
38 } 38 }
39 } 39 }
diff --git a/src/layouts/_media.vars.scss b/src/layouts/_media.vars.scss
index 78e157f..f24ea2a 100644
--- a/src/layouts/_media.vars.scss
+++ b/src/layouts/_media.vars.scss
@@ -1,16 +1,16 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$gap: props.def(--l-media--gap, props.get(core.$size--150)) !default; 4$gap: props.def(--l-media--gap, props.get(core.$size--150)) !default;
5 5
6$gapless: props.def(--l-media--gapless, 0) !default; 6$gapless: props.def(--l-media--gapless, 0) !default;
7$sm: props.def(--l-media--sm, props.get(core.$size--100)) !default; 7$sm: props.def(--l-media--sm, props.get(core.$size--100)) !default;
8$lg: props.def(--l-media--lg, props.get(core.$size--300)) !default; 8$lg: props.def(--l-media--lg, props.get(core.$size--300)) !default;
9$xl: props.def(--l-media--xl, props.get(core.$size--450)) !default; 9$xl: props.def(--l-media--xl, props.get(core.$size--450)) !default;
10 10
11$sizes: ( 11$sizes: (
12 'gapless': $gapless, 12 "gapless": $gapless,
13 'sm': $sm, 13 "sm": $sm,
14 'lg': $lg, 14 "lg": $lg,
15 'xl': $xl, 15 "xl": $xl,
16) !default; 16) !default;
diff --git a/src/layouts/_overflow.scss b/src/layouts/_overflow.scss
index ab983b9..57e2512 100644
--- a/src/layouts/_overflow.scss
+++ b/src/layouts/_overflow.scss
@@ -1,10 +1,10 @@
1@use 'pkg:iro-sass/src/bem'; 1@use "pkg:iro-sass/bem";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5@mixin styles { 5@mixin styles {
6 @include bem.layout('overflow') { 6 @include bem.layout("overflow") {
7 overflow: auto; 7 overflow: auto;
8 scrollbar-color: props.get(core.$theme, --text-disabled) transparent; 8 scrollbar-color: props.get(core.$theme, --text-disabled) transparent;
9 } 9 }
10} 10}
diff --git a/src/layouts/_split-view.scss b/src/layouts/_split-view.scss
index ea651c7..1bffddd 100644
--- a/src/layouts/_split-view.scss
+++ b/src/layouts/_split-view.scss
@@ -1,101 +1,110 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:include-media/dist/include-media' as media; 2@use "pkg:include-media/dist/include-media" as media;
3@use 'pkg:iro-sass/src/bem'; 3@use "pkg:iro-sass/bem";
4@use 'pkg:iro-sass/src/props'; 4@use "pkg:iro-sass/props";
5@use '../props' as *; 5@use "../props" as *;
6 6
7@forward 'split-view.vars'; 7@forward "split-view.vars";
8@use 'split-view.vars' as vars; 8@use "split-view.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.layout('split-view') { 13 @include bem.layout("split-view") {
14 display: flex; 14 display: flex;
15 gap: props.get(vars.$col-gap); 15 gap: props.get(vars.$col-gap);
16 align-items: start; 16 align-items: start;
17 17
18 @include bem.elem('panel') { 18 @include bem.elem("panel") {
19 flex: 1 1 auto; 19 flex: 1 1 auto;
20 inline-size: 100%; 20 inline-size: 100%;
21 min-inline-size: 0; 21 min-inline-size: 0;
22 22
23 &::before { 23 &::before {
24 display: block; 24 display: block;
25 margin-block: -100em 100em; 25 margin-block: -100em 100em;
26 content: ''; 26 content: "";
27 } 27 }
28 28
29 @include bem.modifier('side-25') { 29 @include bem.modifier("side-25") {
30 flex: 0 0 auto; 30 flex: 0 0 auto;
31 inline-size: 25%; 31 inline-size: 25%;
32 } 32 }
33 33
34 @include bem.modifier('min-50') { 34 @include bem.modifier("min-50") {
35 min-inline-size: props.get(vars.$panel--min-50); 35 min-inline-size: props.get(vars.$panel--min-50);
36 } 36 }
37 37
38 @include bem.modifier('min-100') { 38 @include bem.modifier("min-100") {
39 min-inline-size: props.get(vars.$panel--min-100); 39 min-inline-size: props.get(vars.$panel--min-100);
40 } 40 }
41 41
42 @include bem.modifier('min-200') { 42 @include bem.modifier("min-200") {
43 min-inline-size: props.get(vars.$panel--min-200); 43 min-inline-size: props.get(vars.$panel--min-200);
44 } 44 }
45 45
46 @include bem.modifier('sticky') { 46 @include bem.modifier("sticky") {
47 position: sticky; 47 position: sticky;
48 inset-block-start: props.get(vars.$panel--sticky-offset); 48 inset-block-start: props.get(vars.$panel--sticky-offset);
49 } 49 }
50 } 50 }
51 51
52 @include bem.modifier('gapless') { 52 @include bem.modifier("gapless") {
53 gap: props.get(vars.$gapless); 53 gap: props.get(vars.$gapless);
54 54
55 @include bem.elem('panel') { 55 @include bem.elem("panel") {
56 @include bem.modifier('min-50') { 56 @include bem.modifier("min-50") {
57 min-inline-size: calc(props.get(vars.$panel--min-50) + props.get(vars.$col-gap) - props.get(vars.$gapless)); 57 min-inline-size: calc(
58 props.get(vars.$panel--min-50) +
59 props.get(vars.$col-gap) - props.get(vars.$gapless)
60 );
58 } 61 }
59 62
60 @include bem.modifier('min-100') { 63 @include bem.modifier("min-100") {
61 min-inline-size: calc(props.get(vars.$panel--min-100) + props.get(vars.$col-gap) - props.get(vars.$gapless)); 64 min-inline-size: calc(
65 props.get(vars.$panel--min-100) +
66 props.get(vars.$col-gap) - props.get(vars.$gapless)
67 );
62 } 68 }
63 69
64 @include bem.modifier('min-200') { 70 @include bem.modifier("min-200") {
65 min-inline-size: calc(props.get(vars.$panel--min-200) + props.get(vars.$col-gap) - props.get(vars.$gapless)); 71 min-inline-size: calc(
72 props.get(vars.$panel--min-200) +
73 props.get(vars.$col-gap) - props.get(vars.$gapless)
74 );
66 } 75 }
67 } 76 }
68 } 77 }
69 78
70 @include bem.elem('content') { 79 @include bem.elem("content") {
71 inline-size: 100%; 80 inline-size: 100%;
72 } 81 }
73 82
74 @include media.media('<=md') { 83 @include media.media("<=md") {
75 flex-direction: column; 84 flex-direction: column;
76 gap: props.get(vars.$row-gap); 85 gap: props.get(vars.$row-gap);
77 align-items: stretch; 86 align-items: stretch;
78 87
79 @include bem.modifier('gapless') { 88 @include bem.modifier("gapless") {
80 gap: props.get(vars.$gapless); 89 gap: props.get(vars.$gapless);
81 } 90 }
82 91
83 @include bem.modifier('wrap-reverse') { 92 @include bem.modifier("wrap-reverse") {
84 flex-direction: column-reverse; 93 flex-direction: column-reverse;
85 } 94 }
86 95
87 @include bem.elem('panel') { 96 @include bem.elem("panel") {
88 inline-size: auto; 97 inline-size: auto;
89 98
90 @include bem.modifier('side-25') { 99 @include bem.modifier("side-25") {
91 inline-size: auto; 100 inline-size: auto;
92 } 101 }
93 102
94 @include bem.modifier('min-50', 'min-100', 'min-200') { 103 @include bem.modifier("min-50", "min-100", "min-200") {
95 min-inline-size: 0; 104 min-inline-size: 0;
96 } 105 }
97 106
98 @include bem.modifier('sticky') { 107 @include bem.modifier("sticky") {
99 position: static; 108 position: static;
100 } 109 }
101 } 110 }
diff --git a/src/layouts/_split-view.vars.scss b/src/layouts/_split-view.vars.scss
index b2944e7..9b6dd21 100644
--- a/src/layouts/_split-view.vars.scss
+++ b/src/layouts/_split-view.vars.scss
@@ -1,13 +1,16 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$col-gap: props.def(--l-split-view--col-gap, props.get(core.$size--800)) !default; 4$col-gap: props.def(--l-split-view--col-gap, props.get(core.$size--800)) !default;
5$row-gap: props.def(--l-split-view--row-gap, props.get(core.$size--600)) !default; 5$row-gap: props.def(--l-split-view--row-gap, props.get(core.$size--600)) !default;
6 6
7$gapless: props.def(--l-split-view--gapless, 0rem) !default; 7$gapless: props.def(--l-split-view--gapless, 0rem) !default;
8 8
9$panel--min-50: props.def(--l-split-view--panel--min-50, props.get(core.$size--2400)) !default; 9$panel--min-50: props.def(--l-split-view--panel--min-50, props.get(core.$size--2400)) !default;
10$panel--min-100: props.def(--l-split-view--panel--min-100, props.get(core.$size--3200)) !default; 10$panel--min-100: props.def(--l-split-view--panel--min-100, props.get(core.$size--3200)) !default;
11$panel--min-200: props.def(--l-split-view--panel--min-200, props.get(core.$size--4200)) !default; 11$panel--min-200: props.def(--l-split-view--panel--min-200, props.get(core.$size--4200)) !default;
12 12
13$panel--sticky-offset: props.def(--l-split-view--panel--sticky-offset, props.get(core.$sticky-top-offset)) !default; 13$panel--sticky-offset: props.def(
14 --l-split-view--panel--sticky-offset,
15 props.get(core.$sticky-top-offset)
16) !default;
diff --git a/src/objects/_alert.scss b/src/objects/_alert.scss
index c2a1c58..3aeb781 100644
--- a/src/objects/_alert.scss
+++ b/src/objects/_alert.scss
@@ -1,44 +1,37 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:meta'; 2@use "sass:meta";
3@use 'pkg:iro-sass/src/bem'; 3@use "pkg:iro-sass/bem";
4@use 'pkg:iro-sass/src/props'; 4@use "pkg:iro-sass/props";
5@use '../props' as *; 5@use "../props" as *;
6 6
7@forward 'alert.vars'; 7@forward "alert.vars";
8@use 'alert.vars' as vars; 8@use "alert.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.object('alert') { 13 @include bem.object("alert") {
14 padding-block: props.get(vars.$pad-b); 14 padding-block: props.get(vars.$pad-b);
15 padding-inline: props.get(vars.$pad-i); 15 padding-inline: props.get(vars.$pad-i);
16 background-color: props.get(vars.$bg-color); 16 background-color: props.get(vars.$bg-color);
17 border: props.get(vars.$border-width) solid transparent; 17 border: props.get(vars.$border-width) solid transparent;
18 border-color: props.get(vars.$border-color); 18 border-color: props.get(vars.$border-color);
19 border-radius: props.get(vars.$rounding); 19 border-radius: props.get(vars.$rounding);
20 box-shadow: 20 box-shadow: props.get(vars.$shadow-x) props.get(vars.$shadow-y) props.get(vars.$shadow-blur)
21 props.get(vars.$shadow-x) 21 props.get(vars.$shadow-grow) props.get(vars.$shadow-color);
22 props.get(vars.$shadow-y)
23 props.get(vars.$shadow-blur)
24 props.get(vars.$shadow-grow)
25 props.get(vars.$shadow-color);
26 22
27 &::before { 23 &::before {
28 display: block; 24 display: block;
29 margin-block: -100em 100em; 25 margin-block: -100em 100em;
30 content: ''; 26 content: "";
31 } 27 }
32 28
33 @each $mod, $theme in vars.$themes-config { 29 @each $mod, $theme in vars.$themes-config {
34 @include bem.modifier($mod) { 30 @include bem.modifier($mod) {
35 background-color: props.get(vars.$themes, $theme, --bg-color); 31 background-color: props.get(vars.$themes, $theme, --bg-color);
36 border-color: props.get(vars.$themes, $theme, --border-color); 32 border-color: props.get(vars.$themes, $theme, --border-color);
37 box-shadow: 33 box-shadow: props.get(vars.$shadow-x) props.get(vars.$shadow-y)
38 props.get(vars.$shadow-x) 34 props.get(vars.$shadow-blur) props.get(vars.$shadow-grow)
39 props.get(vars.$shadow-y)
40 props.get(vars.$shadow-blur)
41 props.get(vars.$shadow-grow)
42 props.get(vars.$themes, $theme, --shadow-color); 35 props.get(vars.$themes, $theme, --shadow-color);
43 } 36 }
44 } 37 }
diff --git a/src/objects/_alert.vars.scss b/src/objects/_alert.vars.scss
index bbd3dad..aedd917 100644
--- a/src/objects/_alert.vars.scss
+++ b/src/objects/_alert.vars.scss
@@ -1,36 +1,50 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$border-width: props.def(--o-alert--border-width, props.get(core.$border-width--medium)) !default; 4$border-width: props.def(--o-alert--border-width, props.get(core.$border-width--medium)) !default;
5$pad-i: props.def(--o-alert--pad-i, props.get(core.$size--250)) !default; 5$pad-i: props.def(--o-alert--pad-i, props.get(core.$size--250)) !default;
6$pad-b: props.def(--o-alert--pad-b, props.get(core.$size--200)) !default; 6$pad-b: props.def(--o-alert--pad-b, props.get(core.$size--200)) !default;
7$rounding: props.def(--o-alert--rounding, props.get(core.$rounding)) !default; 7$rounding: props.def(--o-alert--rounding, props.get(core.$rounding)) !default;
8 8
9$shadow-x: props.def(--o-alert--shadow-x, props.get(core.$shadow--l2--x)) !default; 9$shadow-x: props.def(--o-alert--shadow-x, props.get(core.$shadow--l2--x)) !default;
10$shadow-y: props.def(--o-alert--shadow-y, props.get(core.$shadow--l2--y)) !default; 10$shadow-y: props.def(--o-alert--shadow-y, props.get(core.$shadow--l2--y)) !default;
11$shadow-blur: props.def(--o-alert--shadow-blur, props.get(core.$shadow--l2--blur)) !default; 11$shadow-blur: props.def(--o-alert--shadow-blur, props.get(core.$shadow--l2--blur)) !default;
12$shadow-grow: props.def(--o-alert--shadow-grow, props.get(core.$shadow--l2--grow)) !default; 12$shadow-grow: props.def(--o-alert--shadow-grow, props.get(core.$shadow--l2--grow)) !default;
13 13
14$bg-color: props.def(--o-alert--bg-color, props.get(core.$theme, --bg-l2), 'color') !default; 14$bg-color: props.def(--o-alert--bg-color, props.get(core.$theme, --bg-l2), "color") !default;
15$border-color: props.def(--o-alert--border-color, props.get(core.$theme, --text-mute-more) props.get(core.$theme, --text-mute-more) props.get(core.$theme, --text-mute), 'color') !default; 15$border-color: props.def(
16 --o-alert--border-color,
17 props.get(core.$theme, --text-mute-more) props.get(core.$theme, --text-mute-more)
18 props.get(core.$theme, --text-mute),
19 "color"
20) !default;
16 21
17$shadow-color: props.def(--o-alert--shadow-color, props.get(core.$transparent-colors, --black, --200), 'color') !default; 22$shadow-color: props.def(
23 --o-alert--shadow-color,
24 props.get(core.$transparent-colors, --black, --200),
25 "color"
26) !default;
18 27
19$themes-config: ( 28$themes-config: (
20 accent: --accent, 29 accent: --accent,
21 positive: --positive, 30 positive: --positive,
22 negative: --negative, 31 negative: --negative,
23 warning: --warning, 32 warning: --warning,
24) !default; 33) !default;
25 34
26$themes: props.def(--o-alert, (), 'color'); 35$themes: props.def(--o-alert, (), "color");
27 36
28@each $theme, $key in $themes-config { 37@each $theme, $key in $themes-config {
29 $themes: props.merge($themes, ( 38 $themes: props.merge(
30 $key: ( 39 $themes,
31 --bg-color: props.get(core.$theme, --bg-l2), 40 (
32 --border-color: props.get(core.$theme, $key, --700) props.get(core.$theme, $key, --700) props.get(core.$theme, $key, --800), 41 $key: (
33 --shadow-color: props.get(core.$theme, $key, --200), 42 --bg-color: props.get(core.$theme, --bg-l2),
43 --border-color: props.get(core.$theme, $key, --700)
44 props.get(core.$theme, $key, --700)
45 props.get(core.$theme, $key, --800),
46 --shadow-color: props.get(core.$theme, $key, --200),
47 ),
34 ) 48 )
35 )); 49 );
36} 50}
diff --git a/src/objects/_avatar.scss b/src/objects/_avatar.scss
index 272c213..f805502 100644
--- a/src/objects/_avatar.scss
+++ b/src/objects/_avatar.scss
@@ -1,118 +1,135 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'avatar.vars'; 6@forward "avatar.vars";
7@use 'avatar.vars' as vars; 7@use "avatar.vars" as vars;
8 8
9@mixin status($indicator-size) { 9@mixin status($indicator-size) {
10 @include bem.elem('status') { 10 @include bem.elem("status") {
11 inline-size: props.get($indicator-size); 11 inline-size: props.get($indicator-size);
12 block-size: props.get($indicator-size); 12 block-size: props.get($indicator-size);
13 13
14 @include bem.sibling-elem('content') { 14 @include bem.sibling-elem("content") {
15 mask-image: radial-gradient(circle calc(.5 * props.get($indicator-size) + props.get(vars.$indicator-spacing)) at 15 mask-image: radial-gradient(
16 calc(100% - .5 * props.get($indicator-size)) 16 circle calc(0.5 * props.get($indicator-size) + props.get(vars.$indicator-spacing))
17 calc(100% - .5 * props.get($indicator-size)), 17 at calc(100% - 0.5 * props.get($indicator-size))
18 transparent 95%, 18 calc(100% - 0.5 * props.get($indicator-size)),
19 #fff); 19 transparent 95%,
20 #fff
21 );
20 } 22 }
21 } 23 }
22} 24}
23 25
24@mixin styles { 26@mixin styles {
25 @include materialize-at-root(meta.module-variables('vars')); 27 @include materialize-at-root(meta.module-variables("vars"));
26 28
27 @include bem.object('avatar') { 29 @include bem.object("avatar") {
28 position: relative; 30 position: relative;
29 display: inline-block; 31 display: inline-block;
30 font-style: normal; 32 font-style: normal;
31 vertical-align: .05em; 33 vertical-align: 0.05em;
32 border-radius: props.get(vars.$rounding); 34 border-radius: props.get(vars.$rounding);
33 35
34 &::after { 36 &::after {
35 position: absolute; 37 position: absolute;
36 inset: calc(-1 * props.get(vars.$key-focus--border-offset)); 38 inset: calc(-1 * props.get(vars.$key-focus--border-offset));
37 z-index: 1; 39 z-index: 1;
38 display: none; 40 display: none;
39 pointer-events: none; 41 pointer-events: none;
40 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 42 outline: props.get(vars.$key-focus--border-color) solid
41 content: ''; 43 props.get(vars.$key-focus--border-width);
42 border: props.get(vars.$key-focus--border-offset) solid transparent; 44 content: "";
43 border-radius: props.get(vars.$rounding); 45 border: props.get(vars.$key-focus--border-offset) solid transparent;
44 box-shadow: 46 border-radius: props.get(vars.$rounding);
45 0 47 box-shadow: 0 0 0
46 0 48 calc(
47 0 49 props.get(vars.$key-focus--border-width) +
48 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 50 props.get(vars.$key-focus--outline-width)
51 )
49 props.get(vars.$key-focus--outline-color); 52 props.get(vars.$key-focus--outline-color);
50 } 53 }
51 54
52 @include bem.elem('status') { 55 @include bem.elem("status") {
53 position: absolute; 56 position: absolute;
54 inset-block-end: 0; 57 inset-block-end: 0;
55 inset-inline-end: 0; 58 inset-inline-end: 0;
56 } 59 }
57 60
58 @include bem.elem('icon') { 61 @include bem.elem("icon") {
59 position: absolute; 62 position: absolute;
60 inset-block-end: 0; 63 inset-block-end: 0;
61 inset-inline-end: 0; 64 inset-inline-end: 0;
62 display: flex; 65 display: flex;
63 align-items: flex-end; 66 align-items: flex-end;
64 justify-content: flex-end; 67 justify-content: flex-end;
65 inline-size: props.get(vars.$icon-size); 68 inline-size: props.get(vars.$icon-size);
66 block-size: props.get(vars.$icon-size); 69 block-size: props.get(vars.$icon-size);
67 70
68 @include bem.sibling-elem('content') { 71 @include bem.sibling-elem("content") {
69 clip-path: props.get(vars.$icon-mask); 72 clip-path: props.get(vars.$icon-mask);
70 } 73 }
71 } 74 }
72 75
73 @include bem.elem('content') { 76 @include bem.elem("content") {
74 display: block; 77 display: block;
75 inline-size: props.get(vars.$size); 78 inline-size: props.get(vars.$size);
76 block-size: props.get(vars.$size); 79 block-size: props.get(vars.$size);
77 font-size: props.get(vars.$font-size); 80 font-size: props.get(vars.$font-size);
78 line-height: props.get(vars.$size); 81 line-height: props.get(vars.$size);
79 text-align: center; 82 text-align: center;
80 object-fit: cover; 83 object-fit: cover;
81 object-position: center center; 84 object-position: center center;
82 border-radius: props.get(vars.$rounding); 85 border-radius: props.get(vars.$rounding);
83 } 86 }
84 87
85 @include bem.modifier('circle') { 88 @include bem.modifier("circle") {
86 border-radius: 100%; 89 border-radius: 100%;
87 90
88 &::after { 91 &::after {
89 border-radius: 100%; 92 border-radius: 100%;
90 } 93 }
91 94
92 @include bem.elem('content') { 95 @include bem.elem("content") {
93 border-radius: 100%; 96 border-radius: 100%;
94 } 97 }
95 } 98 }
96 99
97 @include bem.modifier('placeholder') { 100 @include bem.modifier("placeholder") {
98 @include bem.elem('content') { 101 @include bem.elem("content") {
99 background-color: hsl(0, 0%, props.get(vars.$bg-color--l)); 102 background-color: hsl(0, 0%, props.get(vars.$bg-color--l));
100 } 103 }
101 } 104 }
102 105
103 @include bem.modifier('colored') { 106 @include bem.modifier("colored") {
104 @include bem.elem('content') { 107 @include bem.elem("content") {
105 color: #fff; 108 color: #fff;
106 background-color: hsl(props.get(vars.$bg-color--h), props.get(vars.$bg-color--s), props.get(vars.$bg-color--l)); 109 background-color: hsl(
110 props.get(vars.$bg-color--h),
111 props.get(vars.$bg-color--s),
112 props.get(vars.$bg-color--l)
113 );
107 } 114 }
108 } 115 }
109 116
110 @include bem.modifier('colored-gradient') { 117 @include bem.modifier("colored-gradient") {
111 @include bem.elem('content') { 118 @include bem.elem("content") {
112 color: #fff; 119 color: #fff;
113 background: linear-gradient(props.get(vars.$bg-angle), 120 background: linear-gradient(
114 hsl(props.get(vars.$bg-color--h), props.get(vars.$bg-color--s), props.get(vars.$bg-color--l)), 121 props.get(vars.$bg-angle),
115 hsl(props.get(vars.$bg-color-2--h), props.get(vars.$bg-color-2--s), props.get(vars.$bg-color-2--l))); 122 hsl(
123 props.get(vars.$bg-color--h),
124 props.get(vars.$bg-color--s),
125 props.get(vars.$bg-color--l)
126 ),
127 hsl(
128 props.get(vars.$bg-color-2--h),
129 props.get(vars.$bg-color-2--s),
130 props.get(vars.$bg-color-2--l)
131 )
132 );
116 } 133 }
117 } 134 }
118 135
@@ -122,19 +139,19 @@
122 @include bem.modifier($mod) { 139 @include bem.modifier($mod) {
123 @include status($indicator-size); 140 @include status($indicator-size);
124 141
125 @include bem.elem('icon') { 142 @include bem.elem("icon") {
126 inline-size: props.get($icon-size); 143 inline-size: props.get($icon-size);
127 block-size: props.get($icon-size); 144 block-size: props.get($icon-size);
128 145
129 @include bem.sibling-elem('content') { 146 @include bem.sibling-elem("content") {
130 clip-path: props.get($icon-mask); 147 clip-path: props.get($icon-mask);
131 } 148 }
132 } 149 }
133 150
134 @include bem.elem('content') { 151 @include bem.elem("content") {
135 inline-size: props.get($size); 152 inline-size: props.get($size);
136 block-size: props.get($size); 153 block-size: props.get($size);
137 font-size: props.get($font-size); 154 font-size: props.get($font-size);
138 line-height: props.get($size); 155 line-height: props.get($size);
139 } 156 }
140 } 157 }
diff --git a/src/objects/_avatar.vars.scss b/src/objects/_avatar.vars.scss
index 467d7cc..7d1c342 100644
--- a/src/objects/_avatar.vars.scss
+++ b/src/objects/_avatar.vars.scss
@@ -1,79 +1,102 @@
1@use 'sass:math'; 1@use "sass:math";
2 2
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6@function icon-mask($p) { 6@function icon-mask($p) {
7 $offset: 0.15 * math.div(0.5, $p); 7 $offset: 0.15 * math.div(0.5, $p);
8 @return 'data:image/svg+xml;utf8,<svg version="1.1" xmlns="http://www.w3.org/2000/svg"><defs><clipPath id="avatar_mask" clipPathUnits="objectBoundingBox"><path d="M 0,0 H 1 V #{$p} H #{$p + $offset} C #{$p + 0.055},#{$p} #{$p},#{$p + 0.055} #{$p},#{$p + $offset} V 1 H 0 Z" /></clipPath></defs></svg>#avatar_mask'; 8 @return 'data:image/svg+xml;utf8,<svg version="1.1" xmlns="http://www.w3.org/2000/svg"><defs><clipPath id="avatar_mask" clipPathUnits="objectBoundingBox"><path d="M 0,0 H 1 V #{$p} H #{$p + $offset} C #{$p + 0.055},#{$p} #{$p},#{$p + 0.055} #{$p},#{$p + $offset} V 1 H 0 Z" /></clipPath></defs></svg>#avatar_mask';
9} 9}
10 10
11$size: props.def(--o-avatar--size, props.get(core.$size--500)) !default; 11$size: props.def(--o-avatar--size, props.get(core.$size--500)) !default;
12$font-size: props.def(--o-avatar--font-size, props.get(core.$font-size--100)) !default; 12$font-size: props.def(--o-avatar--font-size, props.get(core.$font-size--100)) !default;
13$indicator-size: props.def(--o-avatar--indicator-size, props.get(core.$size--150)) !default; 13$indicator-size: props.def(--o-avatar--indicator-size, props.get(core.$size--150)) !default;
14$indicator-spacing: props.def(--o-avatar--indicator-spacing, props.get(core.$size--40)) !default; 14$indicator-spacing: props.def(--o-avatar--indicator-spacing, props.get(core.$size--40)) !default;
15$rounding: props.def(--o-avatar--rounding, 25%) !default; 15$rounding: props.def(--o-avatar--rounding, 25%) !default;
16$icon-size: props.def(--o-avatar--icon-size, 1.2em) !default; 16$icon-size: props.def(--o-avatar--icon-size, 1.2em) !default;
17$icon-mask: props.def(--o-avatar--icon-mask, url(icon-mask(.5))) !default; 17$icon-mask: props.def(--o-avatar--icon-mask, url(icon-mask(0.5))) !default;
18 18
19$size--xxxl: props.def(--o-avatar--xxxl--size, props.get(core.$size--1600)) !default; 19$size--xxxl: props.def(--o-avatar--xxxl--size, props.get(core.$size--1600)) !default;
20$font-size--xxxl: props.def(--o-avatar--xxxl--font-size, props.get(core.$font-size--800)) !default; 20$font-size--xxxl: props.def(--o-avatar--xxxl--font-size, props.get(core.$font-size--800)) !default;
21$indicator-size--xxxl: props.def(--o-avatar--xxxl--indicator-size, props.get(core.$size--400)) !default; 21$indicator-size--xxxl: props.def(
22$icon-size--xxxl: props.def(--o-avatar--xxxl--icon-size, 1.9em) !default; 22 --o-avatar--xxxl--indicator-size,
23$icon-mask--xxxl: props.def(--o-avatar--xxxl--icon-mask, url(icon-mask(.75))) !default; 23 props.get(core.$size--400)
24) !default;
25$icon-size--xxxl: props.def(--o-avatar--xxxl--icon-size, 1.9em) !default;
26$icon-mask--xxxl: props.def(--o-avatar--xxxl--icon-mask, url(icon-mask(0.75))) !default;
24 27
25$size--xxl: props.def(--o-avatar--xxl--size, props.get(core.$size--1200)) !default; 28$size--xxl: props.def(--o-avatar--xxl--size, props.get(core.$size--1200)) !default;
26$font-size--xxl: props.def(--o-avatar--xxl--font-size, props.get(core.$font-size--600)) !default; 29$font-size--xxl: props.def(--o-avatar--xxl--font-size, props.get(core.$font-size--600)) !default;
27$indicator-size--xxl: props.def(--o-avatar--xxl--indicator-size, props.get(core.$size--300)) !default; 30$indicator-size--xxl: props.def(
28$icon-size--xxl: props.def(--o-avatar--xxl--icon-size, 1.7em) !default; 31 --o-avatar--xxl--indicator-size,
29$icon-mask--xxl: props.def(--o-avatar--xxl--icon-mask, url(icon-mask(.7))) !default; 32 props.get(core.$size--300)
33) !default;
34$icon-size--xxl: props.def(--o-avatar--xxl--icon-size, 1.7em) !default;
35$icon-mask--xxl: props.def(--o-avatar--xxl--icon-mask, url(icon-mask(0.7))) !default;
30 36
31$size--xl: props.def(--o-avatar--xl--size, props.get(core.$size--800)) !default; 37$size--xl: props.def(--o-avatar--xl--size, props.get(core.$size--800)) !default;
32$font-size--xl: props.def(--o-avatar--xl--font-size, props.get(core.$font-size--300)) !default; 38$font-size--xl: props.def(--o-avatar--xl--font-size, props.get(core.$font-size--300)) !default;
33$indicator-size--xl: props.def(--o-avatar--xl--indicator-size, props.get(core.$size--225)) !default; 39$indicator-size--xl: props.def(--o-avatar--xl--indicator-size, props.get(core.$size--225)) !default;
34$icon-size--xl: props.def(--o-avatar--xl--icon-size, 1.5em) !default; 40$icon-size--xl: props.def(--o-avatar--xl--icon-size, 1.5em) !default;
35$icon-mask--xl: props.def(--o-avatar--xl--icon-mask, url(icon-mask(.6))) !default; 41$icon-mask--xl: props.def(--o-avatar--xl--icon-mask, url(icon-mask(0.6))) !default;
36 42
37$size--lg: props.def(--o-avatar--lg--size, props.get(core.$size--650)) !default; 43$size--lg: props.def(--o-avatar--lg--size, props.get(core.$size--650)) !default;
38$font-size--lg: props.def(--o-avatar--lg--font-size, props.get(core.$font-size--200)) !default; 44$font-size--lg: props.def(--o-avatar--lg--font-size, props.get(core.$font-size--200)) !default;
39$indicator-size--lg: props.def(--o-avatar--lg--indicator-size, props.get(core.$size--175)) !default; 45$indicator-size--lg: props.def(--o-avatar--lg--indicator-size, props.get(core.$size--175)) !default;
40$icon-size--lg: props.def(--o-avatar--lg--icon-size, 1.25em) !default; 46$icon-size--lg: props.def(--o-avatar--lg--icon-size, 1.25em) !default;
41$icon-mask--lg: props.def(--o-avatar--lg--icon-mask, url(icon-mask(.55))) !default; 47$icon-mask--lg: props.def(--o-avatar--lg--icon-mask, url(icon-mask(0.55))) !default;
42 48
43$size--sm: props.def(--o-avatar--sm--size, props.get(core.$size--375)) !default; 49$size--sm: props.def(--o-avatar--sm--size, props.get(core.$size--375)) !default;
44$font-size--sm: props.def(--o-avatar--sm--font-size, props.get(core.$font-size--75)) !default; 50$font-size--sm: props.def(--o-avatar--sm--font-size, props.get(core.$font-size--75)) !default;
45$indicator-size--sm: props.def(--o-avatar--sm--indicator-size, props.get(core.$size--125)) !default; 51$indicator-size--sm: props.def(--o-avatar--sm--indicator-size, props.get(core.$size--125)) !default;
46$icon-size--sm: props.def(--o-avatar--sm--icon-size, 1.2em) !default; 52$icon-size--sm: props.def(--o-avatar--sm--icon-size, 1.2em) !default;
47$icon-mask--sm: props.def(--o-avatar--sm--icon-mask, url(icon-mask(.5))) !default; 53$icon-mask--sm: props.def(--o-avatar--sm--icon-mask, url(icon-mask(0.5))) !default;
48 54
49$size--xs: props.def(--o-avatar--xs--size, props.get(core.$size--250)) !default; 55$size--xs: props.def(--o-avatar--xs--size, props.get(core.$size--250)) !default;
50$font-size--xs: props.def(--o-avatar--xs--font-size, props.get(core.$font-size--50)) !default; 56$font-size--xs: props.def(--o-avatar--xs--font-size, props.get(core.$font-size--50)) !default;
51$indicator-size--xs: props.def(--o-avatar--xs--indicator-size, props.get(core.$size--100)) !default; 57$indicator-size--xs: props.def(--o-avatar--xs--indicator-size, props.get(core.$size--100)) !default;
52$icon-size--xs: props.def(--o-avatar--xs--icon-size, 1.2em) !default; 58$icon-size--xs: props.def(--o-avatar--xs--icon-size, 1.2em) !default;
53$icon-mask--xs: props.def(--o-avatar--xs--icon-mask, url(icon-mask(.5))) !default; 59$icon-mask--xs: props.def(--o-avatar--xs--icon-mask, url(icon-mask(0.5))) !default;
54 60
55$key-focus--border-width: props.def(--o-avatar--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 61$key-focus--border-width: props.def(
56$key-focus--border-offset: props.def(--o-avatar--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 62 --o-avatar--key-focus--border-width,
57$key-focus--outline-width: props.def(--o-avatar--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 63 props.get(core.$key-focus--border-width)
64) !default;
65$key-focus--border-offset: props.def(
66 --o-avatar--key-focus--border-offset,
67 props.get(core.$key-focus--border-offset)
68) !default;
69$key-focus--outline-width: props.def(
70 --o-avatar--key-focus--outline-width,
71 props.get(core.$key-focus--outline-width)
72) !default;
58 73
59$bg-color--h: props.def(--o-avatar--bg-color--h, 354, 'color') !default; 74$bg-color--h: props.def(--o-avatar--bg-color--h, 354, "color") !default;
60$bg-color--s: props.def(--o-avatar--bg-color--s, 44%, 'color') !default; 75$bg-color--s: props.def(--o-avatar--bg-color--s, 44%, "color") !default;
61$bg-color--l: props.def(--o-avatar--bg-color--l, 45%, 'color') !default; 76$bg-color--l: props.def(--o-avatar--bg-color--l, 45%, "color") !default;
62 77
63$bg-color-2--h: props.def(--o-avatar--bg-color-2--h, 354, 'color') !default; 78$bg-color-2--h: props.def(--o-avatar--bg-color-2--h, 354, "color") !default;
64$bg-color-2--s: props.def(--o-avatar--bg-color-2--s, 44%, 'color') !default; 79$bg-color-2--s: props.def(--o-avatar--bg-color-2--s, 44%, "color") !default;
65$bg-color-2--l: props.def(--o-avatar--bg-color-2--l, 45%, 'color') !default; 80$bg-color-2--l: props.def(--o-avatar--bg-color-2--l, 45%, "color") !default;
66 81
67$bg-angle: props.def(--o-avatar--bg-angle, 180deg) !default; 82$bg-angle: props.def(--o-avatar--bg-angle, 180deg) !default;
68 83
69$key-focus--border-color: props.def(--o-avatar--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 84$key-focus--border-color: props.def(
70$key-focus--outline-color: props.def(--o-avatar--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 85 --o-avatar--key-focus--border-color,
86 props.get(core.$theme, --focus, --border),
87 "color"
88) !default;
89$key-focus--outline-color: props.def(
90 --o-avatar--key-focus--outline-color,
91 props.get(core.$theme, --focus, --outline),
92 "color"
93) !default;
71 94
72$sizes: ( 95$sizes: (
73 'xs' $size--xs $font-size--xs $indicator-size--xs $icon-size--xs $icon-mask--xs, 96 "xs" $size--xs $font-size--xs $indicator-size--xs $icon-size--xs $icon-mask--xs,
74 'sm' $size--sm $font-size--sm $indicator-size--sm $icon-size--sm $icon-mask--sm, 97 "sm" $size--sm $font-size--sm $indicator-size--sm $icon-size--sm $icon-mask--sm,
75 'lg' $size--lg $font-size--lg $indicator-size--lg $icon-size--lg $icon-mask--lg, 98 "lg" $size--lg $font-size--lg $indicator-size--lg $icon-size--lg $icon-mask--lg,
76 'xl' $size--xl $font-size--xl $indicator-size--xl $icon-size--xl $icon-mask--xl, 99 "xl" $size--xl $font-size--xl $indicator-size--xl $icon-size--xl $icon-mask--xl,
77 'xxl' $size--xxl $font-size--xxl $indicator-size--xxl $icon-size--xxl $icon-mask--xxl, 100 "xxl" $size--xxl $font-size--xxl $indicator-size--xxl $icon-size--xxl $icon-mask--xxl,
78 'xxxl' $size--xxxl $font-size--xxxl $indicator-size--xxxl $icon-size--xxxl $icon-mask--xxxl, 101 "xxxl" $size--xxxl $font-size--xxxl $indicator-size--xxxl $icon-size--xxxl $icon-mask--xxxl
79) !default; 102) !default;
diff --git a/src/objects/_backdrop.scss b/src/objects/_backdrop.scss
index 6660abf..1a7d1fa 100644
--- a/src/objects/_backdrop.scss
+++ b/src/objects/_backdrop.scss
@@ -1,23 +1,23 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'backdrop.vars'; 6@forward "backdrop.vars";
7@use 'backdrop.vars' as vars; 7@use "backdrop.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.object('backdrop') { 12 @include bem.object("backdrop") {
13 position: fixed; 13 position: fixed;
14 inset: 0; 14 inset: 0;
15 z-index: props.get(vars.$z-index); 15 z-index: props.get(vars.$z-index);
16 box-sizing: border-box; 16 box-sizing: border-box;
17 display: flex; 17 display: flex;
18 flex-direction: column; 18 flex-direction: column;
19 overflow: auto; 19 overflow: auto;
20 background-color: props.get(vars.$bg-color); 20 background-color: props.get(vars.$bg-color);
21 backdrop-filter: blur(props.get(vars.$blur)); 21 backdrop-filter: blur(props.get(vars.$blur));
22 } 22 }
23} 23}
diff --git a/src/objects/_backdrop.vars.scss b/src/objects/_backdrop.vars.scss
index 9206117..78f4742 100644
--- a/src/objects/_backdrop.vars.scss
+++ b/src/objects/_backdrop.vars.scss
@@ -1,6 +1,10 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$z-index: props.def(--o-backdrop--z-index, 10000) !default; 4$z-index: props.def(--o-backdrop--z-index, 10000) !default;
5$blur: props.def(--o-backdrop--blur, 2em) !default; 5$blur: props.def(--o-backdrop--blur, 2em) !default;
6$bg-color: props.def(--o-backdrop--bg-color, props.get(core.$transparent-colors, --black, --600), 'color') !default; 6$bg-color: props.def(
7 --o-backdrop--bg-color,
8 props.get(core.$transparent-colors, --black, --600),
9 "color"
10) !default;
diff --git a/src/objects/_button.scss b/src/objects/_button.scss
index a3c8187..8adc0f7 100644
--- a/src/objects/_button.scss
+++ b/src/objects/_button.scss
@@ -1,115 +1,119 @@
1@use 'sass:list'; 1@use "sass:list";
2@use 'sass:map'; 2@use "sass:map";
3@use 'sass:meta'; 3@use "sass:meta";
4@use 'sass:string'; 4@use "sass:string";
5@use 'pkg:iro-sass/src/bem'; 5@use "pkg:iro-sass/bem";
6@use 'pkg:iro-sass/src/props'; 6@use "pkg:iro-sass/props";
7@use '../props' as *; 7@use "../props" as *;
8 8
9@forward 'button.vars'; 9@forward "button.vars";
10@use 'button.vars' as vars; 10@use "button.vars" as vars;
11 11
12@mixin -apply-theme($theme, $key: ()) { 12@mixin -apply-theme($theme, $key: ()) {
13 color: props.get($theme, list.join($key, --disabled --label-color)...); 13 color: props.get($theme, list.join($key, --disabled --label-color)...);
14 background-color: props.get($theme, list.join($key, --disabled --bg-color)...); 14 background-color: props.get($theme, list.join($key, --disabled --bg-color)...);
15 border-color: props.get($theme, list.join($key, --disabled --border-color)...); 15 border-color: props.get($theme, list.join($key, --disabled --border-color)...);
16 16
17 &::after { 17 &::after {
18 outline-color: props.get($theme, list.join($key, --key-focus --border-color)...); 18 outline-color: props.get($theme, list.join($key, --key-focus --border-color)...);
19 box-shadow: 19 box-shadow: 0 0 0
20 0 20 calc(
21 0 21 props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)
22 0 22 )
23 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width))
24 props.get($theme, list.join($key, --key-focus --outline-color)...); 23 props.get($theme, list.join($key, --key-focus --outline-color)...);
25 } 24 }
26 25
27 &:link, 26 &:link,
28 &:visited, 27 &:visited,
29 &:enabled { 28 &:enabled {
30 color: props.get($theme, list.join($key, --label-color)...); 29 color: props.get($theme, list.join($key, --label-color)...);
31 background-color: props.get($theme, list.join($key, --bg-color)...); 30 background-color: props.get($theme, list.join($key, --bg-color)...);
32 border-color: props.get($theme, list.join($key, --border-color)...); 31 border-color: props.get($theme, list.join($key, --border-color)...);
33 box-shadow: 32 box-shadow: props.get(vars.$shadow-x) props.get(vars.$shadow-y) props.get(vars.$shadow-blur)
34 props.get(vars.$shadow-x) 33 props.get(vars.$shadow-grow) props.get($theme, list.join($key, --shadow-color)...);
35 props.get(vars.$shadow-y)
36 props.get(vars.$shadow-blur)
37 props.get(vars.$shadow-grow)
38 props.get($theme, list.join($key, --shadow-color)...);
39 34
40 &:hover, 35 &:hover,
41 &:focus-visible { 36 &:focus-visible {
42 color: props.get($theme, list.join($key, --hover --label-color)...); 37 color: props.get($theme, list.join($key, --hover --label-color)...);
43 background-color: props.get($theme, list.join($key, --hover --bg-color)...); 38 background-color: props.get($theme, list.join($key, --hover --bg-color)...);
44 border-color: props.get($theme, list.join($key, --hover --border-color)...); 39 border-color: props.get($theme, list.join($key, --hover --border-color)...);
45 } 40 }
46 41
47 &:active { 42 &:active {
48 color: props.get($theme, list.join($key, --active --label-color)...); 43 color: props.get($theme, list.join($key, --active --label-color)...);
49 background-color: props.get($theme, list.join($key, --active --bg-color)...); 44 background-color: props.get($theme, list.join($key, --active --bg-color)...);
50 border-color: props.get($theme, list.join($key, --active --border-color)...); 45 border-color: props.get($theme, list.join($key, --active --border-color)...);
51 box-shadow: none; 46 box-shadow: none;
52 } 47 }
53 } 48 }
54 49
55 @include bem.modifier('badge') { 50 @include bem.modifier("badge") {
56 color: props.get($theme, list.join($key, --badge --label-color)...); 51 color: props.get($theme, list.join($key, --badge --label-color)...);
57 background-color: props.get($theme, list.join($key, --badge --bg-color)...); 52 background-color: props.get($theme, list.join($key, --badge --bg-color)...);
58 border-color: props.get($theme, list.join($key, --badge --border-color)...); 53 border-color: props.get($theme, list.join($key, --badge --border-color)...);
59 box-shadow: none; 54 box-shadow: none;
60 55
61 &:link, 56 &:link,
62 &:visited, 57 &:visited,
63 &:enabled { 58 &:enabled {
64 color: props.get($theme, list.join($key, --badge --label-color)...); 59 color: props.get($theme, list.join($key, --badge --label-color)...);
65 background-color: props.get($theme, list.join($key, --badge --bg-color)...); 60 background-color: props.get($theme, list.join($key, --badge --bg-color)...);
66 border-color: props.get($theme, list.join($key, --badge --border-color)...); 61 border-color: props.get($theme, list.join($key, --badge --border-color)...);
67 box-shadow: none; 62 box-shadow: none;
68 63
69 &:hover, 64 &:hover,
70 &:focus-visible { 65 &:focus-visible {
71 color: props.get($theme, list.join($key, --badge --hover --label-color)...); 66 color: props.get($theme, list.join($key, --badge --hover --label-color)...);
72 background-color: props.get($theme, list.join($key, --badge --hover --bg-color)...); 67 background-color: props.get($theme, list.join($key, --badge --hover --bg-color)...);
73 border-color: props.get($theme, list.join($key, --badge --hover --border-color)...); 68 border-color: props.get($theme, list.join($key, --badge --hover --border-color)...);
74 } 69 }
75 70
76 &:active { 71 &:active {
77 color: props.get($theme, list.join($key, --badge --active --label-color)...); 72 color: props.get($theme, list.join($key, --badge --active --label-color)...);
78 background-color: props.get($theme, list.join($key, --badge --active --bg-color)...); 73 background-color: props.get(
79 border-color: props.get($theme, list.join($key, --badge --active --border-color)...); 74 $theme,
75 list.join($key, --badge --active --bg-color)...
76 );
77 border-color: props.get(
78 $theme,
79 list.join($key, --badge --active --border-color)...
80 );
80 } 81 }
81 } 82 }
82 } 83 }
83 84
84 @include bem.modifier('quiet') { 85 @include bem.modifier("quiet") {
85 color: props.get($theme, list.join($key, --quiet --disabled --label-color)...); 86 color: props.get($theme, list.join($key, --quiet --disabled --label-color)...);
86 background-color: transparent; 87 background-color: transparent;
87 border-color: transparent; 88 border-color: transparent;
88 89
89 &:link, 90 &:link,
90 &:visited, 91 &:visited,
91 &:enabled { 92 &:enabled {
92 color: props.get($theme, list.join($key, --quiet --label-color)...); 93 color: props.get($theme, list.join($key, --quiet --label-color)...);
93 background-color: transparent; 94 background-color: transparent;
94 border-color: transparent; 95 border-color: transparent;
95 box-shadow: none; 96 box-shadow: none;
96 97
97 &:hover, 98 &:hover,
98 &:focus-visible { 99 &:focus-visible {
99 color: props.get($theme, list.join($key, --quiet --hover --label-color)...); 100 color: props.get($theme, list.join($key, --quiet --hover --label-color)...);
100 background-color: props.get($theme, list.join($key, --quiet --hover --bg-color)...); 101 background-color: props.get($theme, list.join($key, --quiet --hover --bg-color)...);
101 border-color: transparent; 102 border-color: transparent;
102 } 103 }
103 104
104 &:active { 105 &:active {
105 color: props.get($theme, list.join($key, --quiet --active --label-color)...); 106 color: props.get($theme, list.join($key, --quiet --active --label-color)...);
106 background-color: props.get($theme, list.join($key, --quiet --active --bg-color)...); 107 background-color: props.get(
107 border-color: transparent; 108 $theme,
109 list.join($key, --quiet --active --bg-color)...
110 );
111 border-color: transparent;
108 } 112 }
109 } 113 }
110 } 114 }
111 115
112 @include bem.is('highlighted') { 116 @include bem.is("highlighted") {
113 &:link, 117 &:link,
114 &:visited, 118 &:visited,
115 &:enabled { 119 &:enabled {
@@ -121,32 +125,27 @@
121 125
122 box-shadow: 126 box-shadow:
123 0 0 0 1px props.get($theme, list.join($key, --highlighted --border-color)...), 127 0 0 0 1px props.get($theme, list.join($key, --highlighted --border-color)...),
124 props.get(vars.$shadow-x) 128 props.get(vars.$shadow-x) props.get(vars.$shadow-y) props.get(vars.$shadow-blur)
125 props.get(vars.$shadow-y) 129 props.get(vars.$shadow-grow)
126 props.get(vars.$shadow-blur) 130 props.get($theme, list.join($key, --highlighted --shadow-color)...);
127 props.get(vars.$shadow-grow)
128 props.get($theme, list.join($key, --highlighted --shadow-color)...);
129 131
130 &:focus-visible { 132 &:focus-visible {
131 box-shadow: 133 box-shadow: props.get(vars.$shadow-x) props.get(vars.$shadow-y)
132 props.get(vars.$shadow-x) 134 props.get(vars.$shadow-blur) props.get(vars.$shadow-grow)
133 props.get(vars.$shadow-y)
134 props.get(vars.$shadow-blur)
135 props.get(vars.$shadow-grow)
136 props.get($theme, list.join($key, --shadow-color)...); 135 props.get($theme, list.join($key, --shadow-color)...);
137 } 136 }
138 } 137 }
139 } 138 }
140 139
141 @include bem.is('selected') { 140 @include bem.is("selected") {
142 color: props.get($theme, list.join($key, --selected --disabled --label-color)...); 141 color: props.get($theme, list.join($key, --selected --disabled --label-color)...);
143 background-color: props.get($theme, list.join($key, --selected --disabled --bg-color)...); 142 background-color: props.get($theme, list.join($key, --selected --disabled --bg-color)...);
144 border-color: props.get($theme, list.join($key, --selected --disabled --border-color)...); 143 border-color: props.get($theme, list.join($key, --selected --disabled --border-color)...);
145 144
146 @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'badge') { 145 @include bem.multi("&:link, &:visited, &:enabled", "modifier" "badge") {
147 color: props.get($theme, list.join($key, --selected --label-color)...); 146 color: props.get($theme, list.join($key, --selected --label-color)...);
148 background-color: props.get($theme, list.join($key, --selected --bg-color)...); 147 background-color: props.get($theme, list.join($key, --selected --bg-color)...);
149 border-color: props.get($theme, list.join($key, --selected --border-color)...); 148 border-color: props.get($theme, list.join($key, --selected --border-color)...);
150 } 149 }
151 150
152 &:link, 151 &:link,
@@ -154,47 +153,67 @@
154 &:enabled { 153 &:enabled {
155 &:hover, 154 &:hover,
156 &:focus-visible { 155 &:focus-visible {
157 color: props.get($theme, list.join($key, --selected --hover --label-color)...); 156 color: props.get($theme, list.join($key, --selected --hover --label-color)...);
158 background-color: props.get($theme, list.join($key, --selected --hover --bg-color)...); 157 background-color: props.get(
159 border-color: props.get($theme, list.join($key, --selected --hover --border-color)...); 158 $theme,
159 list.join($key, --selected --hover --bg-color)...
160 );
161 border-color: props.get(
162 $theme,
163 list.join($key, --selected --hover --border-color)...
164 );
160 } 165 }
161 166
162 &:active { 167 &:active {
163 color: props.get($theme, list.join($key, --selected --active --label-color)...); 168 color: props.get($theme, list.join($key, --selected --active --label-color)...);
164 background-color: props.get($theme, list.join($key, --selected --active --bg-color)...); 169 background-color: props.get(
165 border-color: props.get($theme, list.join($key, --selected --active --border-color)...); 170 $theme,
171 list.join($key, --selected --active --bg-color)...
172 );
173 border-color: props.get(
174 $theme,
175 list.join($key, --selected --active --border-color)...
176 );
166 } 177 }
167 } 178 }
168 } 179 }
169} 180}
170 181
171@mixin styles { 182@mixin styles {
172 @include materialize-at-root(meta.module-variables('vars')); 183 @include materialize-at-root(meta.module-variables("vars"));
173 184
174 @include bem.object('button') { 185 @include bem.object("button") {
175 position: relative; 186 position: relative;
176 display: inline-block; 187 display: inline-block;
177 padding-block: props.get(vars.$pad-b); 188 padding-block: props.get(vars.$pad-b);
178 padding-inline: props.get(vars.$pad-i); 189 padding-inline: props.get(vars.$pad-i);
179 text-overflow: ellipsis; 190 text-overflow: ellipsis;
180 font-size: props.get(vars.$font-size); 191 font-size: props.get(vars.$font-size);
181 line-height: props.get(vars.$line-height); 192 line-height: props.get(vars.$line-height);
182 text-align: center; 193 text-align: center;
183 white-space: nowrap; 194 white-space: nowrap;
184 text-decoration: none; 195 text-decoration: none;
185 border: props.get(vars.$border-width) solid transparent; 196 border: props.get(vars.$border-width) solid transparent;
186 border-radius: props.get(vars.$rounding); 197 border-radius: props.get(vars.$rounding);
187 transition: color .1s, background-color .1s, border-color .1s, box-shadow .1s; 198 transition:
199 color 0.1s,
200 background-color 0.1s,
201 border-color 0.1s,
202 box-shadow 0.1s;
188 203
189 &::after { 204 &::after {
190 position: absolute; 205 position: absolute;
191 inset: calc(-1 * props.get(vars.$border-width) - props.get(vars.$key-focus--border-offset)); 206 inset: calc(
192 z-index: 1; 207 -1 * props.get(vars.$border-width) - props.get(vars.$key-focus--border-offset)
193 display: none; 208 );
209 z-index: 1;
210 display: none;
194 pointer-events: none; 211 pointer-events: none;
195 outline: transparent solid props.get(vars.$key-focus--border-width); 212 outline: transparent solid props.get(vars.$key-focus--border-width);
196 content: ''; 213 content: "";
197 border-radius: calc(props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)); 214 border-radius: calc(
215 props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)
216 );
198 } 217 }
199 218
200 &:link, 219 &:link,
@@ -209,7 +228,7 @@
209 } 228 }
210 } 229 }
211 230
212 @include bem.elem('label') { 231 @include bem.elem("label") {
213 display: inline-block; 232 display: inline-block;
214 margin-inline: props.get(vars.$pad-i-label); 233 margin-inline: props.get(vars.$pad-i-label);
215 } 234 }
@@ -222,79 +241,91 @@
222 } 241 }
223 } 242 }
224 243
225 @include bem.modifier('pill') { 244 @include bem.modifier("pill") {
226 padding-inline: props.get(vars.$pad-i-pill); 245 padding-inline: props.get(vars.$pad-i-pill);
227 border-radius: 100em; 246 border-radius: 100em;
228 247
229 &::after { 248 &::after {
230 border-radius: 100em; 249 border-radius: 100em;
231 } 250 }
232 } 251 }
233 252
234 @include bem.modifier('icon') { 253 @include bem.modifier("icon") {
235 inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get(vars.$pad-b)); 254 inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get(vars.$pad-b));
236 padding-inline: 0; 255 padding-inline: 0;
237 } 256 }
238 257
239 @include bem.modifier('wide') { 258 @include bem.modifier("wide") {
240 @include bem.elem('label') { 259 @include bem.elem("label") {
241 margin-inline: props.get(vars.$pad-i-wide); 260 margin-inline: props.get(vars.$pad-i-wide);
242 } 261 }
243 } 262 }
244 263
245 @include bem.modifier('justify') { 264 @include bem.modifier("justify") {
246 text-align: justify; 265 text-align: justify;
247 text-align-last: justify; 266 text-align-last: justify;
248 } 267 }
249 268
250 @each $mod, $pad-i, $pad-i-label, $pad-i-wide, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { 269 @each $mod, $pad-i, $pad-i-label, $pad-i-wide, $pad-i-pill, $pad-b,
270 $font-size in vars.$fixed-sizes
271 {
251 @include bem.modifier($mod) { 272 @include bem.modifier($mod) {
252 padding-block: props.get($pad-b); 273 padding-block: props.get($pad-b);
253 padding-inline: props.get($pad-i); 274 padding-inline: props.get($pad-i);
254 font-size: props.get($font-size); 275 font-size: props.get($font-size);
255 276
256 @include bem.elem('label') { 277 @include bem.elem("label") {
257 margin-inline: props.get($pad-i-label); 278 margin-inline: props.get($pad-i-label);
258 } 279 }
259 280
260 @include bem.modifier('pill') { 281 @include bem.modifier("pill") {
261 padding-inline: props.get($pad-i-pill); 282 padding-inline: props.get($pad-i-pill);
262 } 283 }
263 284
264 @include bem.modifier('icon') { 285 @include bem.modifier("icon") {
265 inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get($pad-b)); 286 inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get($pad-b));
266 padding-inline: 0; 287 padding-inline: 0;
267 } 288 }
268 289
269 @include bem.modifier('wide') { 290 @include bem.modifier("wide") {
270 @include bem.elem('label') { 291 @include bem.elem("label") {
271 margin-inline: props.get($pad-i-wide); 292 margin-inline: props.get($pad-i-wide);
272 } 293 }
273 } 294 }
274 } 295 }
275 } 296 }
276 297
277 @include bem.modifier('align-block') { 298 @include bem.modifier("align-block") {
278 margin-inline: calc(-1 * props.get(vars.$pad-i) - props.get(vars.$border-width)); 299 margin-inline: calc(-1 * props.get(vars.$pad-i) - props.get(vars.$border-width));
279 300
280 @include bem.modifier('pill') { 301 @include bem.modifier("pill") {
281 margin-inline: calc(-1 * props.get(vars.$pad-i-pill) - props.get(vars.$border-width)); 302 margin-inline: calc(
303 -1 * props.get(vars.$pad-i-pill) - props.get(vars.$border-width)
304 );
282 } 305 }
283 306
284 @include bem.modifier('icon') { 307 @include bem.modifier("icon") {
285 margin-inline: calc(-1 * props.get(vars.$pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); 308 margin-inline: calc(
309 -1 * props.get(vars.$pad-b) - props.get(vars.$border-width) - 0.5em *
310 (props.get(vars.$line-height) - 1)
311 );
286 } 312 }
287 313
288 @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { 314 @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes {
289 @include bem.modifier($mod) { 315 @include bem.modifier($mod) {
290 margin-inline: calc(-1 * props.get($pad-i) - props.get(vars.$border-width)); 316 margin-inline: calc(-1 * props.get($pad-i) - props.get(vars.$border-width));
291 317
292 @include bem.modifier('pill') { 318 @include bem.modifier("pill") {
293 margin-inline: calc(-1 * props.get($pad-i-pill) - props.get(vars.$border-width)); 319 margin-inline: calc(
320 -1 * props.get($pad-i-pill) - props.get(vars.$border-width)
321 );
294 } 322 }
295 323
296 @include bem.modifier('icon') { 324 @include bem.modifier("icon") {
297 margin-inline: calc(-1 * props.get($pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); 325 margin-inline: calc(
326 -1 * props.get($pad-b) - props.get(vars.$border-width) - 0.5em *
327 (props.get(vars.$line-height) - 1)
328 );
298 } 329 }
299 } 330 }
300 } 331 }
diff --git a/src/objects/_button.vars.scss b/src/objects/_button.vars.scss
index 3f835ae..a137d6d 100644
--- a/src/objects/_button.vars.scss
+++ b/src/objects/_button.vars.scss
@@ -1,386 +1,456 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6$line-height: props.def(--o-button--line-height, 1.4) !default; 6$line-height: props.def(--o-button--line-height, 1.4) !default;
7$border-width: props.def(--o-button--border-width, props.get(core.$border-width--thin)) !default; 7$border-width: props.def(--o-button--border-width, props.get(core.$border-width--thin)) !default;
8$rounding: props.def(--o-button--rounding, props.get(core.$rounding--sm)) !default; 8$rounding: props.def(--o-button--rounding, props.get(core.$rounding--sm)) !default;
9 9
10$pad-i--xs: props.def(--o-button--xs--pad-i, props.get(core.$size--75)) !default; 10$pad-i--xs: props.def(--o-button--xs--pad-i, props.get(core.$size--75)) !default;
11$pad-i-label--xs: props.def(--o-button--xs--pad-i-label, props.get(core.$size--40)) !default; 11$pad-i-label--xs: props.def(--o-button--xs--pad-i-label, props.get(core.$size--40)) !default;
12$pad-i-wide--xs: props.def(--o-button--xs--pad-i-wide, props.get(core.$size--150)) !default; 12$pad-i-wide--xs: props.def(--o-button--xs--pad-i-wide, props.get(core.$size--150)) !default;
13$pad-i-pill--xs: props.def(--o-button--xs--pad-i-pill, props.get(core.$size--115)) !default; 13$pad-i-pill--xs: props.def(--o-button--xs--pad-i-pill, props.get(core.$size--115)) !default;
14$pad-b--xs: props.def(--o-button--xs--pad-b, props.get(core.$size--40)) !default; 14$pad-b--xs: props.def(--o-button--xs--pad-b, props.get(core.$size--40)) !default;
15$font-size--xs: props.def(--o-button--xs--font-size, props.get(core.$font-size--75)) !default; 15$font-size--xs: props.def(--o-button--xs--font-size, props.get(core.$font-size--75)) !default;
16 16
17$pad-i--sm: props.def(--o-button--sm--pad-i, props.get(core.$size--85)) !default; 17$pad-i--sm: props.def(--o-button--sm--pad-i, props.get(core.$size--85)) !default;
18$pad-i-label--sm: props.def(--o-button--sm--pad-i-label, props.get(core.$size--50)) !default; 18$pad-i-label--sm: props.def(--o-button--sm--pad-i-label, props.get(core.$size--50)) !default;
19$pad-i-wide--sm: props.def(--o-button--sm--pad-i-wide, props.get(core.$size--175)) !default; 19$pad-i-wide--sm: props.def(--o-button--sm--pad-i-wide, props.get(core.$size--175)) !default;
20$pad-i-pill--sm: props.def(--o-button--sm--pad-i-pill, props.get(core.$size--125)) !default; 20$pad-i-pill--sm: props.def(--o-button--sm--pad-i-pill, props.get(core.$size--125)) !default;
21$pad-b--sm: props.def(--o-button--sm--pad-b, props.get(core.$size--50)) !default; 21$pad-b--sm: props.def(--o-button--sm--pad-b, props.get(core.$size--50)) !default;
22$font-size--sm: props.def(--o-button--sm--font-size, props.get(core.$font-size--100)) !default; 22$font-size--sm: props.def(--o-button--sm--font-size, props.get(core.$font-size--100)) !default;
23 23
24$pad-i: props.def(--o-button--pad-i, props.get(core.$size--115)) !default; 24$pad-i: props.def(--o-button--pad-i, props.get(core.$size--115)) !default;
25$pad-i-label: props.def(--o-button--pad-i-label, props.get(core.$size--50)) !default; 25$pad-i-label: props.def(--o-button--pad-i-label, props.get(core.$size--50)) !default;
26$pad-i-wide: props.def(--o-button--pad-i-wide, props.get(core.$size--200)) !default; 26$pad-i-wide: props.def(--o-button--pad-i-wide, props.get(core.$size--200)) !default;
27$pad-i-pill: props.def(--o-button--pad-i-pill, props.get(core.$size--160)) !default; 27$pad-i-pill: props.def(--o-button--pad-i-pill, props.get(core.$size--160)) !default;
28$pad-b: props.def(--o-button--pad-b, props.get(core.$size--85)) !default; 28$pad-b: props.def(--o-button--pad-b, props.get(core.$size--85)) !default;
29$font-size: props.def(--o-button--font-size, props.get(core.$font-size--100)) !default; 29$font-size: props.def(--o-button--font-size, props.get(core.$font-size--100)) !default;
30 30
31$pad-i--lg: props.def(--o-button--lg--pad-i, props.get(core.$size--160)) !default; 31$pad-i--lg: props.def(--o-button--lg--pad-i, props.get(core.$size--160)) !default;
32$pad-i-label--lg: props.def(--o-button--lg--pad-i-label, props.get(core.$size--65)) !default; 32$pad-i-label--lg: props.def(--o-button--lg--pad-i-label, props.get(core.$size--65)) !default;
33$pad-i-wide--lg: props.def(--o-button--lg--pad-i-wide, props.get(core.$size--300)) !default; 33$pad-i-wide--lg: props.def(--o-button--lg--pad-i-wide, props.get(core.$size--300)) !default;
34$pad-i-pill--lg: props.def(--o-button--lg--pad-i-pill, props.get(core.$size--175)) !default; 34$pad-i-pill--lg: props.def(--o-button--lg--pad-i-pill, props.get(core.$size--175)) !default;
35$pad-b--lg: props.def(--o-button--lg--pad-b, props.get(core.$size--115)) !default; 35$pad-b--lg: props.def(--o-button--lg--pad-b, props.get(core.$size--115)) !default;
36$font-size--lg: props.def(--o-button--lg--font-size, props.get(core.$font-size--150)) !default; 36$font-size--lg: props.def(--o-button--lg--font-size, props.get(core.$font-size--150)) !default;
37 37
38$pad-i--xl: props.def(--o-button--xl--pad-i, props.get(core.$size--200)) !default; 38$pad-i--xl: props.def(--o-button--xl--pad-i, props.get(core.$size--200)) !default;
39$pad-i-label--xl: props.def(--o-button--xl--pad-i-label, props.get(core.$size--85)) !default; 39$pad-i-label--xl: props.def(--o-button--xl--pad-i-label, props.get(core.$size--85)) !default;
40$pad-i-wide--xl: props.def(--o-button--xl--pad-i-wide, props.get(core.$size--400)) !default; 40$pad-i-wide--xl: props.def(--o-button--xl--pad-i-wide, props.get(core.$size--400)) !default;
41$pad-i-pill--xl: props.def(--o-button--xl--pad-i-pill, props.get(core.$size--225)) !default; 41$pad-i-pill--xl: props.def(--o-button--xl--pad-i-pill, props.get(core.$size--225)) !default;
42$pad-b--xl: props.def(--o-button--xl--pad-b, props.get(core.$size--150)) !default; 42$pad-b--xl: props.def(--o-button--xl--pad-b, props.get(core.$size--150)) !default;
43$font-size--xl: props.def(--o-button--xl--font-size, props.get(core.$font-size--200)) !default; 43$font-size--xl: props.def(--o-button--xl--font-size, props.get(core.$font-size--200)) !default;
44 44
45$shadow-x: props.def(--o-button--shadow-x, props.get(core.$shadow--l1--x)) !default; 45$shadow-x: props.def(--o-button--shadow-x, props.get(core.$shadow--l1--x)) !default;
46$shadow-y: props.def(--o-button--shadow-y, props.get(core.$shadow--l1--y)) !default; 46$shadow-y: props.def(--o-button--shadow-y, props.get(core.$shadow--l1--y)) !default;
47$shadow-blur: props.def(--o-button--shadow-blur, props.get(core.$shadow--l1--blur)) !default; 47$shadow-blur: props.def(--o-button--shadow-blur, props.get(core.$shadow--l1--blur)) !default;
48$shadow-grow: props.def(--o-button--shadow-grow, props.get(core.$shadow--l1--grow)) !default; 48$shadow-grow: props.def(--o-button--shadow-grow, props.get(core.$shadow--l1--grow)) !default;
49 49
50$key-focus--border-width: props.def(--o-button--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 50$key-focus--border-width: props.def(
51$key-focus--border-offset: props.def(--o-button--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 51 --o-button--key-focus--border-width,
52$key-focus--outline-width: props.def(--o-button--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 52 props.get(core.$key-focus--border-width)
53) !default;
54$key-focus--border-offset: props.def(
55 --o-button--key-focus--border-offset,
56 props.get(core.$key-focus--border-offset)
57) !default;
58$key-focus--outline-width: props.def(
59 --o-button--key-focus--outline-width,
60 props.get(core.$key-focus--outline-width)
61) !default;
53 62
54$fixed-sizes: ( 63$fixed-sizes: (
55 'xs' $pad-i--xs $pad-i-label--xs $pad-i-wide--xs $pad-i-pill--xs $pad-b--xs $font-size--xs, 64 "xs" $pad-i--xs $pad-i-label--xs $pad-i-wide--xs $pad-i-pill--xs $pad-b--xs $font-size--xs,
56 'sm' $pad-i--sm $pad-i-label--sm $pad-i-wide--sm $pad-i-pill--sm $pad-b--sm $font-size--sm, 65 "sm" $pad-i--sm $pad-i-label--sm $pad-i-wide--sm $pad-i-pill--sm $pad-b--sm $font-size--sm,
57 'lg' $pad-i--lg $pad-i-label--lg $pad-i-wide--lg $pad-i-pill--lg $pad-b--lg $font-size--lg, 66 "lg" $pad-i--lg $pad-i-label--lg $pad-i-wide--lg $pad-i-pill--lg $pad-b--lg $font-size--lg,
58 'xl' $pad-i--xl $pad-i-label--xl $pad-i-wide--xl $pad-i-pill--xl $pad-b--xl $font-size--xl, 67 "xl" $pad-i--xl $pad-i-label--xl $pad-i-wide--xl $pad-i-pill--xl $pad-b--xl $font-size--xl
59) !default; 68) !default;
60 69
61$themes: props.def(--o-button, (), 'color'); 70$themes: props.def(--o-button, (), "color");
62 71
63$default-theme-override: () !default; 72$default-theme-override: () !default;
64$default-theme: map.deep-merge(( 73$default-theme: map.deep-merge(
65 --bg-color: props.get(core.$theme, --bg-l2), 74 (
66 --label-color: props.get(core.$theme, --text), 75 --bg-color: props.get(core.$theme, --bg-l2),
67 --border-color: props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border-strong), 76 --label-color: props.get(core.$theme, --text),
68 --shadow-color: props.get(core.$theme, --shadow), 77 --border-color: props.get(core.$theme, --box, --border)
69 78 props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border-strong),
70 --hover: ( 79 --shadow-color: props.get(core.$theme, --shadow),
71 --bg-color: props.get(core.$theme, --bg-l1),
72 --label-color: props.get(core.$theme, --heading),
73 --border-color: props.get(core.$theme, --border),
74 ),
75
76 --active: (
77 --bg-color: props.get(core.$theme, --border-mute),
78 --label-color: props.get(core.$theme, --heading),
79 --border-color: props.get(core.$theme, --border-strong),
80 ),
81
82 --disabled: (
83 --bg-color: transparent,
84 --label-color: props.get(core.$theme, --border-strong),
85 --border-color: props.get(core.$theme, --text-disabled),
86 ),
87
88 --key-focus: (
89 --border-color: props.get(core.$theme, --focus, --border),
90 --outline-color: props.get(core.$theme, --focus, --outline),
91 ),
92
93 --highlighted: (
94 --border-color: props.get(core.$theme, --focus, --border),
95 --shadow-color: props.get(core.$theme, --focus, --outline),
96 ),
97
98 --selected: (
99 --bg-color: props.get(core.$theme, --heading),
100 --label-color: props.get(core.$theme, --base, --50),
101 --border-color: props.get(core.$theme, --heading),
102
103 --hover: ( 80 --hover: (
104 --bg-color: props.get(core.$theme, --text), 81 --bg-color: props.get(core.$theme, --bg-l1),
105 --label-color: props.get(core.$theme, --base, --50), 82 --label-color: props.get(core.$theme, --heading),
106 --border-color: props.get(core.$theme, --text), 83 --border-color: props.get(core.$theme, --border),
107 ), 84 ),
108 85
109 --active: ( 86 --active: (
110 --bg-color: props.get(core.$theme, --text-mute), 87 --bg-color: props.get(core.$theme, --border-mute),
111 --label-color: props.get(core.$theme, --base, --50), 88 --label-color: props.get(core.$theme, --heading),
112 --border-color: props.get(core.$theme, --text-mute), 89 --border-color: props.get(core.$theme, --border-strong),
113 ), 90 ),
114 91
115 --disabled: ( 92 --disabled: (
116 --bg-color: props.get(core.$theme, --border-mute), 93 --bg-color: transparent,
117 --label-color: props.get(core.$theme, --border-strong), 94 --label-color: props.get(core.$theme, --border-strong),
118 --border-color: props.get(core.$theme, --border-mute), 95 --border-color: props.get(core.$theme, --text-disabled),
119 ), 96 ),
120 ),
121 97
122 --badge: ( 98 --key-focus: (
123 --bg-color: props.get(core.$theme, --border-mute), 99 --border-color: props.get(core.$theme, --focus, --border),
124 --label-color: props.get(core.$theme, --heading), 100 --outline-color: props.get(core.$theme, --focus, --outline),
125 --border-color: props.get(core.$theme, --border-mute),
126
127 --hover: (
128 --bg-color: props.get(core.$theme, --border),
129 --label-color: props.get(core.$theme, --heading),
130 --border-color: props.get(core.$theme, --border),
131 ), 101 ),
132 102
133 --active: ( 103 --highlighted: (
134 --bg-color: props.get(core.$theme, --border-strong), 104 --border-color: props.get(core.$theme, --focus, --border),
135 --label-color: props.get(core.$theme, --heading), 105 --shadow-color: props.get(core.$theme, --focus, --outline),
136 --border-color: props.get(core.$theme, --border-strong),
137 ), 106 ),
138 ),
139 107
140 --quiet: ( 108 --selected: (
141 --label-color: props.get(core.$theme, --text), 109 --bg-color: props.get(core.$theme, --heading),
110 --label-color: props.get(core.$theme, --base, --50),
111 --border-color: props.get(core.$theme, --heading),
112 --hover: (
113 --bg-color: props.get(core.$theme, --text),
114 --label-color: props.get(core.$theme, --base, --50),
115 --border-color: props.get(core.$theme, --text),
116 ),
142 117
143 --hover: ( 118 --active: (
144 --bg-color: props.get(core.$theme, --border-mute), 119 --bg-color: props.get(core.$theme, --text-mute),
145 --label-color: props.get(core.$theme, --heading), 120 --label-color: props.get(core.$theme, --base, --50),
121 --border-color: props.get(core.$theme, --text-mute),
122 ),
123
124 --disabled: (
125 --bg-color: props.get(core.$theme, --border-mute),
126 --label-color: props.get(core.$theme, --border-strong),
127 --border-color: props.get(core.$theme, --border-mute),
128 ),
146 ), 129 ),
147 130
148 --active: ( 131 --badge: (
149 --bg-color: props.get(core.$theme, --border), 132 --bg-color: props.get(core.$theme, --border-mute),
150 --label-color: props.get(core.$theme, --heading), 133 --label-color: props.get(core.$theme, --heading),
134 --border-color: props.get(core.$theme, --border-mute),
135 --hover: (
136 --bg-color: props.get(core.$theme, --border),
137 --label-color: props.get(core.$theme, --heading),
138 --border-color: props.get(core.$theme, --border),
139 ),
140
141 --active: (
142 --bg-color: props.get(core.$theme, --border-strong),
143 --label-color: props.get(core.$theme, --heading),
144 --border-color: props.get(core.$theme, --border-strong),
145 ),
151 ), 146 ),
152 147
153 --disabled: ( 148 --quiet: (
154 --label-color: props.get(core.$theme, --border-strong), 149 --label-color: props.get(core.$theme, --text),
150 --hover: (
151 --bg-color: props.get(core.$theme, --border-mute),
152 --label-color: props.get(core.$theme, --heading),
153 ),
154
155 --active: (
156 --bg-color: props.get(core.$theme, --border),
157 --label-color: props.get(core.$theme, --heading),
158 ),
159
160 --disabled: (
161 --label-color: props.get(core.$theme, --border-strong),
162 ),
155 ), 163 ),
156 ), 164 ),
157), $default-theme-override) !default; 165 $default-theme-override
158$default-theme: props.def(--o-button, $default-theme, 'color'); 166) !default;
167$default-theme: props.def(--o-button, $default-theme, "color");
159 168
160$default-theme-dark-override: () !default; 169$default-theme-dark-override: () !default;
161$default-theme-dark: map.deep-merge(( 170$default-theme-dark: map.deep-merge(
162 --bg-color: props.get(core.$theme, --border-mute), 171 (
163 --border-color: props.get(core.$theme, --border-mute), 172 --bg-color: props.get(core.$theme, --border-mute),
164 173 --border-color: props.get(core.$theme, --border-mute),
165 --hover: ( 174 --hover: (
166 --bg-color: props.get(core.$theme, --border), 175 --bg-color: props.get(core.$theme, --border),
167 --border-color: props.get(core.$theme, --border), 176 --border-color: props.get(core.$theme, --border),
168 ), 177 ),
169 178
170 --active: ( 179 --active: (
171 --bg-color: props.get(core.$theme, --border-strong), 180 --bg-color: props.get(core.$theme, --border-strong),
172 --border-color: props.get(core.$theme, --border-strong), 181 --border-color: props.get(core.$theme, --border-strong),
173 ), 182 ),
174 183
175 --selected: ( 184 --selected: (
176 --border-color: props.get(core.$theme, --text), 185 --border-color: props.get(core.$theme, --text),
186 ),
177 ), 187 ),
178), $default-theme-override) !default; 188 $default-theme-override
179$default-theme-dark: props.def(--o-button, $default-theme-dark, 'dark'); 189) !default;
190$default-theme-dark: props.def(--o-button, $default-theme-dark, "dark");
180 191
181@each $theme in map.keys(props.get(core.$transparent-colors)) { 192@each $theme in map.keys(props.get(core.$transparent-colors)) {
182 $button-theme: --static-#{string.slice($theme, 3)}; 193 $button-theme: --static-#{string.slice($theme, 3)};
183 194
184 $themes: props.merge($themes, ( 195 $themes: props.merge(
185 $button-theme: ( 196 $themes,
186 --bg-color: props.get(core.$transparent-colors, $theme, --200), 197 (
187 --label-color: props.get(core.$transparent-colors, $theme, --900), 198 $button-theme: (
188 --border-color: props.get(core.$transparent-colors, $theme, --300) props.get(core.$transparent-colors, $theme, --300) props.get(core.$transparent-colors, $theme, --400), 199 --bg-color: props.get(core.$transparent-colors, $theme, --200),
189 --shadow-color: props.get(core.$transparent-colors, --black, --200), 200 --label-color: props.get(core.$transparent-colors, $theme, --900),
190 201 --border-color: props.get(core.$transparent-colors, $theme, --300)
191 --hover: ( 202 props.get(core.$transparent-colors, $theme, --300)
192 --bg-color: props.get(core.$transparent-colors, $theme, --300), 203 props.get(core.$transparent-colors, $theme, --400),
193 --label-color: props.get(core.$transparent-colors, $theme, --900), 204 --shadow-color: props.get(core.$transparent-colors, --black, --200),
194 --border-color: props.get(core.$transparent-colors, $theme, --400), 205 --hover: (
195 ), 206 --bg-color: props.get(core.$transparent-colors, $theme, --300),
207 --label-color: props.get(core.$transparent-colors, $theme, --900),
208 --border-color: props.get(core.$transparent-colors, $theme, --400),
209 ),
196 210
197 --active: ( 211 --active: (
198 --bg-color: props.get(core.$transparent-colors, $theme, --400), 212 --bg-color: props.get(core.$transparent-colors, $theme, --400),
199 --label-color: props.get(core.$transparent-colors, $theme, --900), 213 --label-color: props.get(core.$transparent-colors, $theme, --900),
200 --border-color: props.get(core.$transparent-colors, $theme, --500), 214 --border-color: props.get(core.$transparent-colors, $theme, --500),
201 ), 215 ),
202 216
203 --disabled: ( 217 --disabled: (
204 --bg-color: props.get(core.$transparent-colors, $theme, --100), 218 --bg-color: props.get(core.$transparent-colors, $theme, --100),
205 --label-color: props.get(core.$transparent-colors, $theme, --500), 219 --label-color: props.get(core.$transparent-colors, $theme, --500),
206 --border-color: props.get(core.$transparent-colors, $theme, --300), 220 --border-color: props.get(core.$transparent-colors, $theme, --300),
207 ), 221 ),
208 222
209 --key-focus: ( 223 --key-focus: (
210 --border-color: props.get(core.$transparent-colors, $theme, --900), 224 --border-color: props.get(core.$transparent-colors, $theme, --900),
211 --outline-color: props.get(core.$transparent-colors, $theme, --300), 225 --outline-color: props.get(core.$transparent-colors, $theme, --300),
212 ), 226 ),
213 227
214 --highlighted: ( 228 --highlighted: (
215 --border-color: props.get(core.$transparent-colors, $theme, --900), 229 --border-color: props.get(core.$transparent-colors, $theme, --900),
216 --shadow-color: props.get(core.$transparent-colors, --black, --200), 230 --shadow-color: props.get(core.$transparent-colors, --black, --200),
217 ), 231 ),
218 232
219 --selected: ( 233 --selected: (
220 --bg-color: props.get(core.$transparent-colors, $theme, --900), 234 --bg-color: props.get(core.$transparent-colors, $theme, --900),
221 --label-color: props.get(core.$transparent-colors, $theme, --text), 235 --label-color: props.get(core.$transparent-colors, $theme, --text),
222 --border-color: props.get(core.$transparent-colors, $theme, --100) props.get(core.$transparent-colors, $theme, --100) props.get(core.$transparent-colors, $theme, --200), 236 --border-color: props.get(core.$transparent-colors, $theme, --100)
237 props.get(core.$transparent-colors, $theme, --100)
238 props.get(core.$transparent-colors, $theme, --200),
239 --hover: (
240 --bg-color: props.get(core.$transparent-colors, $theme, --800),
241 --label-color: props.get(
242 core.$transparent-colors,
243 $theme,
244 --text
245 ),
246 --border-color: props.get(
247 core.$transparent-colors,
248 $theme,
249 --100
250 ),
251 ),
223 252
224 --hover: ( 253 --active: (
225 --bg-color: props.get(core.$transparent-colors, $theme, --800), 254 --bg-color: props.get(core.$transparent-colors, $theme, --800),
226 --label-color: props.get(core.$transparent-colors, $theme, --text), 255 --label-color: props.get(
227 --border-color: props.get(core.$transparent-colors, $theme, --100), 256 core.$transparent-colors,
228 ), 257 $theme,
258 --text
259 ),
260 --border-color: props.get(
261 core.$transparent-colors,
262 $theme,
263 --100
264 ),
265 ),
229 266
230 --active: ( 267 --disabled: (
231 --bg-color: props.get(core.$transparent-colors, $theme, --800), 268 --bg-color: props.get(core.$transparent-colors, $theme, --200),
232 --label-color: props.get(core.$transparent-colors, $theme, --text), 269 --label-color: props.get(
233 --border-color: props.get(core.$transparent-colors, $theme, --100), 270 core.$transparent-colors,
234 ), 271 $theme,
272 --500
273 ),
274 --border-color: props.get(
275 core.$transparent-colors,
276 $theme,
277 --100
278 ),
279 ),
280 ),
235 281
236 --disabled: ( 282 --badge: (
237 --bg-color: props.get(core.$transparent-colors, $theme, --200), 283 --bg-color: props.get(core.$transparent-colors, $theme, --200),
238 --label-color: props.get(core.$transparent-colors, $theme, --500), 284 --label-color: props.get(core.$transparent-colors, $theme, --900),
239 --border-color: props.get(core.$transparent-colors, $theme, --100), 285 --border-color: transparent,
240 ),
241 ),
242 286
243 --badge: ( 287 --hover: (
244 --bg-color: props.get(core.$transparent-colors, $theme, --200), 288 --bg-color: props.get(core.$transparent-colors, $theme, --300),
245 --label-color: props.get(core.$transparent-colors, $theme, --900), 289 --label-color: props.get(
246 --border-color: transparent, 290 core.$transparent-colors,
291 $theme,
292 --900
293 ),
294 --border-color: transparent,
295 ),
247 296
248 --hover: ( 297 --active: (
249 --bg-color: props.get(core.$transparent-colors, $theme, --300), 298 --bg-color: props.get(core.$transparent-colors, $theme, --400),
250 --label-color: props.get(core.$transparent-colors, $theme, --900), 299 --label-color: props.get(
251 --border-color: transparent, 300 core.$transparent-colors,
252 ), 301 $theme,
302 --900
303 ),
304 --border-color: transparent,
305 ),
306 ),
253 307
254 --active: ( 308 --quiet: (
255 --bg-color: props.get(core.$transparent-colors, $theme, --400), 309 --label-color: props.get(core.$transparent-colors, $theme, --900),
256 --label-color: props.get(core.$transparent-colors, $theme, --900), 310 --hover: (
257 --border-color: transparent, 311 --bg-color: props.get(core.$transparent-colors, $theme, --200),
258 ), 312 --label-color: props.get(
259 ), 313 core.$transparent-colors,
314 $theme,
315 --900
316 ),
317 ),
260 318
261 --quiet: ( 319 --active: (
262 --label-color: props.get(core.$transparent-colors, $theme, --900), 320 --bg-color: props.get(core.$transparent-colors, $theme, --300),
321 --label-color: props.get(
322 core.$transparent-colors,
323 $theme,
324 --900
325 ),
326 ),
263 327
264 --hover: ( 328 --disabled: (
265 --bg-color: props.get(core.$transparent-colors, $theme, --200), 329 --label-color: props.get(
266 --label-color: props.get(core.$transparent-colors, $theme, --900), 330 core.$transparent-colors,
331 $theme,
332 --500
333 ),
334 ),
335 ),
267 ), 336 ),
268
269 --active: (
270 --bg-color: props.get(core.$transparent-colors, $theme, --300),
271 --label-color: props.get(core.$transparent-colors, $theme, --900),
272 ),
273
274 --disabled: (
275 --label-color: props.get(core.$transparent-colors, $theme, --500),
276 ),
277 ),
278 ) 337 )
279 )); 338 );
280} 339}
281 340
282$themes-config: ( 341$themes-config: (
283 accent: --accent, 342 accent: --accent,
284 positive: --positive, 343 positive: --positive,
285 negative: --negative, 344 negative: --negative,
286 warning: --warning, 345 warning: --warning,
287) !default; 346) !default;
288 347
289@each $theme, $key in $themes-config { 348@each $theme, $key in $themes-config {
290 $themes: props.merge($themes, ( 349 $themes: props.merge(
291 --#{$theme}: ( 350 $themes,
292 --bg-color: props.get(core.$theme, $key, --100), 351 (
293 --label-color: props.get(core.$theme, $key, --1100), 352 --#{$theme}: (
294 --border-color: props.get(core.$theme, $key, --500) props.get(core.$theme, $key, --500) props.get(core.$theme, $key, --600), 353 --bg-color: props.get(core.$theme, $key, --100),
295 --shadow-color: props.get(core.$theme, $key, --200), 354 --label-color: props.get(core.$theme, $key, --1100),
355 --border-color: props.get(core.$theme, $key, --500)
356 props.get(core.$theme, $key, --500)
357 props.get(core.$theme, $key, --600),
358 --shadow-color: props.get(core.$theme, $key, --200),
359 --hover: (
360 --bg-color: props.get(core.$theme, $key, --200),
361 --label-color: props.get(core.$theme, $key, --1200),
362 --border-color: props.get(core.$theme, $key, --600),
363 ),
296 364
297 --hover: ( 365 --active: (
298 --bg-color: props.get(core.$theme, $key, --200), 366 --bg-color: props.get(core.$theme, $key, --300),
299 --label-color: props.get(core.$theme, $key, --1200), 367 --label-color: props.get(core.$theme, $key, --1300),
300 --border-color: props.get(core.$theme, $key, --600), 368 --border-color: props.get(core.$theme, $key, --800),
301 ), 369 ),
302 370
303 --active: ( 371 --disabled: (
304 --bg-color: props.get(core.$theme, $key, --300), 372 --bg-color: props.get(core.$theme, --bg-l1),
305 --label-color: props.get(core.$theme, $key, --1300), 373 --label-color: props.get(core.$theme, --border-strong),
306 --border-color: props.get(core.$theme, $key, --800), 374 --border-color: props.get(core.$theme, --border),
307 ), 375 ),
308 376
309 --disabled: ( 377 --key-focus: (
310 --bg-color: props.get(core.$theme, --bg-l1), 378 --border-color: props.get(core.$theme, --focus, --border),
311 --label-color: props.get(core.$theme, --border-strong), 379 --outline-color: props.get(core.$theme, --focus, --outline),
312 --border-color: props.get(core.$theme, --border), 380 ),
313 ),
314 381
315 --key-focus: ( 382 --highlighted: (
316 --border-color: props.get(core.$theme, --focus, --border), 383 --border-color: props.get(core.$theme, $key, --900),
317 --outline-color: props.get(core.$theme, --focus, --outline), 384 --shadow-color: props.get(core.$theme, $key, --200),
318 ), 385 ),
319 386
320 --highlighted: ( 387 --selected: (
321 --border-color: props.get(core.$theme, $key, --900), 388 --bg-color: props.get(core.$theme, #{$key}-static, --900),
322 --shadow-color: props.get(core.$theme, $key, --200), 389 --label-color: props.get(core.$theme, #{$key}-static, --900-text),
323 ), 390 --border-color: props.get(core.$theme, #{$key}-static, --900)
391 props.get(core.$theme, #{$key}-static, --900)
392 props.get(core.$theme, #{$key}-static, --1000),
393 --hover: (
394 --bg-color: props.get(core.$theme, #{$key}-static, --1000),
395 --label-color: props.get(
396 core.$theme,
397 #{$key}-static,
398 --1000-text
399 ),
400 --border-color: props.get(core.$theme, #{$key}-static, --1000),
401 ),
324 402
325 --selected: ( 403 --active: (
326 --bg-color: props.get(core.$theme, #{$key}-static, --900), 404 --bg-color: props.get(core.$theme, #{$key}-static, --1100),
327 --label-color: props.get(core.$theme, #{$key}-static, --900-text), 405 --label-color: props.get(
328 --border-color: props.get(core.$theme, #{$key}-static, --900) props.get(core.$theme, #{$key}-static, --900) props.get(core.$theme, #{$key}-static, --1000), 406 core.$theme,
407 #{$key}-static,
408 --1100-text
409 ),
410 --border-color: props.get(core.$theme, #{$key}-static, --1100),
411 ),
329 412
330 --hover: ( 413 --disabled: (
331 --bg-color: props.get(core.$theme, #{$key}-static, --1000), 414 --bg-color: props.get(core.$theme, --border-mute),
332 --label-color: props.get(core.$theme, #{$key}-static, --1000-text), 415 --label-color: props.get(core.$theme, --border-strong),
333 --border-color: props.get(core.$theme, #{$key}-static, --1000), 416 --border-color: props.get(core.$theme, --border-mute),
334 ), 417 ),
418 ),
335 419
336 --active: ( 420 --badge: (
337 --bg-color: props.get(core.$theme, #{$key}-static, --1100), 421 --bg-color: props.get(core.$theme, $key, --100),
338 --label-color: props.get(core.$theme, #{$key}-static, --1100-text), 422 --label-color: props.get(core.$theme, $key, --1100),
339 --border-color: props.get(core.$theme, #{$key}-static, --1100), 423 --border-color: props.get(core.$theme, $key, --300),
340 ), 424 --hover: (
341 425 --bg-color: props.get(core.$theme, $key, --200),
342 --disabled: ( 426 --label-color: props.get(core.$theme, $key, --1200),
343 --bg-color: props.get(core.$theme, --border-mute), 427 --border-color: props.get(core.$theme, $key, --400),
344 --label-color: props.get(core.$theme, --border-strong), 428 ),
345 --border-color: props.get(core.$theme, --border-mute),
346 ),
347 ),
348
349 --badge: (
350 --bg-color: props.get(core.$theme, $key, --100),
351 --label-color: props.get(core.$theme, $key, --1100),
352 --border-color: props.get(core.$theme, $key, --300),
353
354 --hover: (
355 --bg-color: props.get(core.$theme, $key, --200),
356 --label-color: props.get(core.$theme, $key, --1200),
357 --border-color: props.get(core.$theme, $key, --400),
358 ),
359 429
360 --active: ( 430 --active: (
361 --bg-color: props.get(core.$theme, $key, --300), 431 --bg-color: props.get(core.$theme, $key, --300),
362 --label-color: props.get(core.$theme, $key, --1300), 432 --label-color: props.get(core.$theme, $key, --1300),
363 --border-color: props.get(core.$theme, $key, --500), 433 --border-color: props.get(core.$theme, $key, --500),
364 ), 434 ),
365 ), 435 ),
366 436
367 --quiet: ( 437 --quiet: (
368 --label-color: props.get(core.$theme, $key, --1100), 438 --label-color: props.get(core.$theme, $key, --1100),
439 --hover: (
440 --bg-color: props.get(core.$theme, $key, --200),
441 --label-color: props.get(core.$theme, $key, --1200),
442 ),
369 443
370 --hover: ( 444 --active: (
371 --bg-color: props.get(core.$theme, $key, --200), 445 --bg-color: props.get(core.$theme, $key, --300),
372 --label-color: props.get(core.$theme, $key, --1200), 446 --label-color: props.get(core.$theme, $key, --1300),
373 ), 447 ),
374 448
375 --active: ( 449 --disabled: (
376 --bg-color: props.get(core.$theme, $key, --300), 450 --label-color: props.get(core.$theme, --border-strong),
377 --label-color: props.get(core.$theme, $key, --1300), 451 ),
378 ), 452 ),
379 453 )
380 --disabled: (
381 --label-color: props.get(core.$theme, --border-strong),
382 ),
383 ),
384 ) 454 )
385 )); 455 );
386} 456}
diff --git a/src/objects/_card.scss b/src/objects/_card.scss
index b8bc727..3275bc8 100644
--- a/src/objects/_card.scss
+++ b/src/objects/_card.scss
@@ -1,84 +1,95 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5@use 'avatar.vars' as avatar; 5@use "avatar.vars" as avatar;
6 6
7@forward 'card.vars'; 7@forward "card.vars";
8@use 'card.vars' as vars; 8@use "card.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.object('card') { 13 @include bem.object("card") {
14 position: relative; 14 position: relative;
15 display: flex; 15 display: flex;
16 flex-direction: column; 16 flex-direction: column;
17 background-color: props.get(vars.$bg-color); 17 background-color: props.get(vars.$bg-color);
18 border: props.get(vars.$border-width) solid transparent; 18 border: props.get(vars.$border-width) solid transparent;
19 border-color: props.get(vars.$border-color); 19 border-color: props.get(vars.$border-color);
20 border-radius: props.get(vars.$rounding); 20 border-radius: props.get(vars.$rounding);
21 transition: transform .2s, background-color .2s, border-color .2s, box-shadow .2s; 21 transition:
22 transform 0.2s,
23 background-color 0.2s,
24 border-color 0.2s,
25 box-shadow 0.2s;
22 26
23 @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive', 'modifier' 'collapsible') { 27 @include bem.multi(
28 "&:link, &:visited, &:enabled",
29 "modifier" "interactive",
30 "modifier" "collapsible"
31 ) {
24 &:hover, 32 &:hover,
25 &:active, 33 &:active,
26 &:focus-visible { 34 &:focus-visible {
27 background-color: props.get(vars.$hover--bg-color); 35 background-color: props.get(vars.$hover--bg-color);
28 border-color: props.get(vars.$hover--border-color); 36 border-color: props.get(vars.$hover--border-color);
29 box-shadow: none; 37 box-shadow: none;
30 transform: translateY(props.get(vars.$hover--offset-b)); 38 transform: translateY(props.get(vars.$hover--offset-b));
31 } 39 }
32 40
33 &:focus-visible { 41 &:focus-visible {
34 margin: calc(-1 * props.get(vars.$key-focus--border-width)); 42 margin: calc(-1 * props.get(vars.$key-focus--border-width));
35 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 43 outline: props.get(vars.$key-focus--border-color) solid
36 border: calc(props.get(vars.$key-focus--border-offset) + props.get(vars.$border-width)) solid transparent; 44 props.get(vars.$key-focus--border-width);
37 border-radius: calc(props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)); 45 border: calc(
38 box-shadow: 46 props.get(vars.$key-focus--border-offset) + props.get(vars.$border-width)
39 0 0 0 47 )
40 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 48 solid transparent;
49 border-radius: calc(
50 props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)
51 );
52 box-shadow: 0 0 0
53 calc(
54 props.get(vars.$key-focus--border-width) +
55 props.get(vars.$key-focus--outline-width)
56 )
41 props.get(vars.$key-focus--outline-color); 57 props.get(vars.$key-focus--outline-color);
42 transition: transform .2s; 58 transition: transform 0.2s;
43 } 59 }
44 } 60 }
45 61
46 @include bem.modifier('borderless') { 62 @include bem.modifier("borderless") {
47 border-color: props.get(vars.$bg-color); 63 border-color: props.get(vars.$bg-color);
48 } 64 }
49 65
50 @include bem.modifier('shadow') { 66 @include bem.modifier("shadow") {
51 box-shadow: 67 box-shadow: props.get(vars.$shadow-x) props.get(vars.$shadow-y)
52 props.get(vars.$shadow-x) 68 props.get(vars.$shadow-blur) props.get(vars.$shadow-grow)
53 props.get(vars.$shadow-y)
54 props.get(vars.$shadow-blur)
55 props.get(vars.$shadow-grow)
56 props.get(vars.$shadow-color); 69 props.get(vars.$shadow-color);
57 70
58 @include bem.modifier('quiet') { 71 @include bem.modifier("quiet") {
59 @include bem.elem('image') { 72 @include bem.elem("image") {
60 box-shadow: 73 box-shadow: props.get(vars.$shadow-x) props.get(vars.$shadow-y)
61 props.get(vars.$shadow-x) 74 props.get(vars.$shadow-blur) props.get(vars.$shadow-grow)
62 props.get(vars.$shadow-y)
63 props.get(vars.$shadow-blur)
64 props.get(vars.$shadow-grow)
65 props.get(vars.$shadow-color); 75 props.get(vars.$shadow-color);
66 } 76 }
67 } 77 }
68 } 78 }
69 79
70 @include bem.modifier('highlight') { 80 @include bem.modifier("highlight") {
71 margin: calc(props.get(vars.$border-width) - props.get(vars.$highlight--border-width)); 81 margin: calc(props.get(vars.$border-width) - props.get(vars.$highlight--border-width));
72 border-color: props.get(vars.$highlight--border-color); 82 border-color: props.get(vars.$highlight--border-color);
73 border-width: props.get(vars.$highlight--border-width); 83 border-width: props.get(vars.$highlight--border-width);
74 box-shadow: 84 box-shadow: props.get(vars.$highlight--shadow-x) props.get(vars.$highlight--shadow-y)
75 props.get(vars.$highlight--shadow-x) 85 props.get(vars.$highlight--shadow-blur) props.get(vars.$highlight--shadow-grow)
76 props.get(vars.$highlight--shadow-y)
77 props.get(vars.$highlight--shadow-blur)
78 props.get(vars.$highlight--shadow-grow)
79 props.get(vars.$highlight--shadow-color); 86 props.get(vars.$highlight--shadow-color);
80 87
81 @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive', 'modifier' 'collapsible') { 88 @include bem.multi(
89 "&:link, &:visited, &:enabled",
90 "modifier" "interactive",
91 "modifier" "collapsible"
92 ) {
82 &:hover, 93 &:hover,
83 &:active { 94 &:active {
84 border-color: props.get(vars.$highlight--border-color); 95 border-color: props.get(vars.$highlight--border-color);
@@ -86,207 +97,238 @@
86 } 97 }
87 } 98 }
88 99
89 @include bem.elem('avatar') { 100 @include bem.elem("avatar") {
90 margin-block-start: props.get(vars.$pad-b); 101 margin-block-start: props.get(vars.$pad-b);
91 margin-inline-start: props.get(vars.$pad-i); 102 margin-inline-start: props.get(vars.$pad-i);
92 } 103 }
93 104
94 @include bem.elem('image') { 105 @include bem.elem("image") {
95 position: relative; 106 position: relative;
96 display: block; 107 display: block;
97 flex: 0 0 auto; 108 flex: 0 0 auto;
98 inline-size: calc(100% + 2 * props.get(vars.$border-width)); 109 inline-size: calc(100% + 2 * props.get(vars.$border-width));
99 margin: calc(-1 * props.get(vars.$border-width)); 110 margin: calc(-1 * props.get(vars.$border-width));
100 overflow: hidden; 111 overflow: hidden;
101 object-fit: cover; 112 object-fit: cover;
102 transition: background-color .2s, transform .2s, opacity .2s; 113 transition:
114 background-color 0.2s,
115 transform 0.2s,
116 opacity 0.2s;
103 117
104 &:first-child { 118 &:first-child {
105 border-start-start-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); 119 border-start-start-radius: calc(
106 border-start-end-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); 120 props.get(vars.$rounding) - props.get(vars.$border-width)
121 );
122 border-start-end-radius: calc(
123 props.get(vars.$rounding) - props.get(vars.$border-width)
124 );
107 } 125 }
108 126
109 &:last-child { 127 &:last-child {
110 border-end-start-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); 128 border-end-start-radius: calc(
111 border-end-end-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); 129 props.get(vars.$rounding) - props.get(vars.$border-width)
130 );
131 border-end-end-radius: calc(
132 props.get(vars.$rounding) - props.get(vars.$border-width)
133 );
112 } 134 }
113 135
114 @include bem.next-elem('avatar') { 136 @include bem.next-elem("avatar") {
115 margin-block-start: calc(-.7 * props.get(avatar.$size--xl)); 137 margin-block-start: calc(-0.7 * props.get(avatar.$size--xl));
116 } 138 }
117 } 139 }
118 140
119 @include bem.elem('image-img') { 141 @include bem.elem("image-img") {
120 display: block; 142 display: block;
121 inline-size: 100%; 143 inline-size: 100%;
122 block-size: 100%; 144 block-size: 100%;
123 object-fit: cover; 145 object-fit: cover;
124 } 146 }
125 147
126 @include bem.elem('image-overlay') { 148 @include bem.elem("image-overlay") {
127 position: absolute; 149 position: absolute;
128 inset-block-end: 0; 150 inset-block-end: 0;
129 inset-inline: 0; 151 inset-inline: 0;
130 z-index: 5; 152 z-index: 5;
131 padding-block: props.get(vars.$image-overlay--pad-b); 153 padding-block: props.get(vars.$image-overlay--pad-b);
132 padding-inline: props.get(vars.$image-overlay--pad-i); 154 padding-inline: props.get(vars.$image-overlay--pad-i);
133 } 155 }
134 156
135 @include bem.elem('body') { 157 @include bem.elem("body") {
136 flex: 0 0 auto; 158 flex: 0 0 auto;
137 padding-block: props.get(vars.$pad-b); 159 padding-block: props.get(vars.$pad-b);
138 padding-inline: props.get(vars.$pad-i); 160 padding-inline: props.get(vars.$pad-i);
139 161
140 &::before { 162 &::before {
141 display: block; 163 display: block;
142 margin-block: -100em 100em; 164 margin-block: -100em 100em;
143 content: ''; 165 content: "";
144 } 166 }
145 167
146 @include bem.modifier('no-mbs-neutralize') { 168 @include bem.modifier("no-mbs-neutralize") {
147 &::before { 169 &::before {
148 display: none; 170 display: none;
149 } 171 }
150 } 172 }
151 173
152 @include bem.modifier('main') { 174 @include bem.modifier("main") {
153 flex-shrink: 1; 175 flex-shrink: 1;
154 block-size: 100%; 176 block-size: 100%;
155 min-block-size: 0; 177 min-block-size: 0;
156 } 178 }
157 } 179 }
158 180
159 @include bem.elem('content') { 181 @include bem.elem("content") {
160 margin-block-start: props.get(vars.$spacing); 182 margin-block-start: props.get(vars.$spacing);
161 } 183 }
162 184
163 @include bem.elem('footer') { 185 @include bem.elem("footer") {
164 flex: 0 0 auto; 186 flex: 0 0 auto;
165 padding-block: 0 props.get(vars.$pad-b); 187 padding-block: 0 props.get(vars.$pad-b);
166 padding-inline: props.get(vars.$pad-i); 188 padding-inline: props.get(vars.$pad-i);
167 margin-block-start: calc(-1 * props.get(vars.$pad-b)); 189 margin-block-start: calc(-1 * props.get(vars.$pad-b));
168 190
169 &::before { 191 &::before {
170 display: block; 192 display: block;
171 block-size: props.get(vars.$divider-width); 193 block-size: props.get(vars.$divider-width);
172 margin-block: props.get(vars.$spacing); 194 margin-block: props.get(vars.$spacing);
173 content: ''; 195 content: "";
174 background-color: props.get(vars.$divider-width); 196 background-color: props.get(vars.$divider-width);
175 } 197 }
176 } 198 }
177 199
178 @include bem.modifier('quiet') { 200 @include bem.modifier("quiet") {
179 margin-inline: 0; 201 margin-inline: 0;
180 background-color: transparent; 202 background-color: transparent;
181 border: 0; 203 border: 0;
182 box-shadow: none; 204 box-shadow: none;
183 205
184 @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive', 'modifier' 'collapsible') { 206 @include bem.multi(
207 "&:link, &:visited, &:enabled",
208 "modifier" "interactive",
209 "modifier" "collapsible"
210 ) {
185 &:hover, 211 &:hover,
186 &:active, 212 &:active,
187 &:focus-visible { 213 &:focus-visible {
188 background-color: transparent; 214 background-color: transparent;
189 transform: none; 215 transform: none;
190 216
191 @include bem.elem('image') { 217 @include bem.elem("image") {
192 background-color: props.get(vars.$quiet--hover--image-color); 218 background-color: props.get(vars.$quiet--hover--image-color);
193 opacity: .75; 219 opacity: 0.75;
194 transform: translateY(props.get(vars.$hover--offset-b)); 220 transform: translateY(props.get(vars.$hover--offset-b));
195 } 221 }
196 } 222 }
197 223
198 &:focus-visible { 224 &:focus-visible {
199 margin: 0; 225 margin: 0;
200 outline: none; 226 outline: none;
201 border: 0; 227 border: 0;
202 box-shadow: none; 228 box-shadow: none;
203 229
204 @include bem.elem('image') { 230 @include bem.elem("image") {
205 margin: calc(-1 * props.get(vars.$key-focus--border-width) - props.get(vars.$border-width)); 231 margin: calc(
206 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 232 -1 *
233 props.get(vars.$key-focus--border-width) - props.get(
234 vars.$border-width
235 )
236 );
237 outline: props.get(vars.$key-focus--border-color) solid
238 props.get(vars.$key-focus--border-width);
207 background-color: props.get(vars.$quiet--hover--image-color); 239 background-color: props.get(vars.$quiet--hover--image-color);
208 border: props.get(vars.$key-focus--border-offset) solid transparent; 240 border: props.get(vars.$key-focus--border-offset) solid transparent;
209 border-radius: calc(props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)); 241 border-radius: calc(
210 box-shadow: 242 props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)
211 0 243 );
212 0 244 box-shadow: 0 0 0
213 0 245 calc(
214 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 246 props.get(vars.$key-focus--border-width) +
247 props.get(vars.$key-focus--outline-width)
248 )
215 props.get(vars.$key-focus--outline-color); 249 props.get(vars.$key-focus--outline-color);
216 opacity: 1; 250 opacity: 1;
217 } 251 }
218 } 252 }
219 } 253 }
220 254
221 @include bem.elem('image') { 255 @include bem.elem("image") {
222 position: relative; 256 position: relative;
223 background-color: props.get(vars.$quiet--image-color); 257 background-color: props.get(vars.$quiet--image-color);
224 background-clip: padding-box; 258 background-clip: padding-box;
225 border-radius: props.get(vars.$rounding); 259 border-radius: props.get(vars.$rounding);
226 } 260 }
227 261
228 @include bem.elem('body') { 262 @include bem.elem("body") {
229 padding: 0; 263 padding: 0;
230 padding-block-start: props.get(vars.$spacing); 264 padding-block-start: props.get(vars.$spacing);
231 } 265 }
232 266
233 @include bem.elem('footer') { 267 @include bem.elem("footer") {
234 padding-inline: 0; 268 padding-inline: 0;
235 } 269 }
236 } 270 }
237 271
238 @include bem.modifier('thumbnail') { 272 @include bem.modifier("thumbnail") {
239 @include bem.elem('image') { 273 @include bem.elem("image") {
240 border-radius: props.get(vars.$rounding); 274 border-radius: props.get(vars.$rounding);
241 } 275 }
242 276
243 @include bem.elem('body') { 277 @include bem.elem("body") {
244 position: absolute; 278 position: absolute;
245 inset-block-end: calc(-1 * props.get(vars.$border-width)); 279 inset-block-end: calc(-1 * props.get(vars.$border-width));
246 inset-inline: calc(-1 * props.get(vars.$border-width)); 280 inset-inline: calc(-1 * props.get(vars.$border-width));
247 z-index: 10; 281 z-index: 10;
248 visibility: hidden; 282 visibility: hidden;
249 background-color: props.get(vars.$hover--bg-color); 283 background-color: props.get(vars.$hover--bg-color);
250 border-color: transparent; 284 border-color: transparent;
251 border-style: solid; 285 border-style: solid;
252 border-width: 0 props.get(vars.$border-width) props.get(vars.$border-width); 286 border-width: 0 props.get(vars.$border-width) props.get(vars.$border-width);
253 border-end-start-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); 287 border-end-start-radius: calc(
254 border-end-end-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); 288 props.get(vars.$rounding) - props.get(vars.$border-width)
255 opacity: 0; 289 );
290 border-end-end-radius: calc(
291 props.get(vars.$rounding) - props.get(vars.$border-width)
292 );
293 opacity: 0;
256 transition: 294 transition:
257 border-color .2s ease, 295 border-color 0.2s ease,
258 opacity .2s ease, 296 opacity 0.2s ease,
259 visibility 0s .2s linear; 297 visibility 0s 0.2s linear;
260 } 298 }
261 299
262 @include bem.multi('&:link, &:visited, &:enabled', 'modifier' 'interactive', 'modifier' 'collapsible') { 300 @include bem.multi(
301 "&:link, &:visited, &:enabled",
302 "modifier" "interactive",
303 "modifier" "collapsible"
304 ) {
263 &:hover, 305 &:hover,
264 &:active, 306 &:active,
265 &:focus-visible { 307 &:focus-visible {
266 @include bem.elem('body') { 308 @include bem.elem("body") {
267 visibility: visible; 309 visibility: visible;
268 border-color: props.get(vars.$hover--border-color); 310 border-color: props.get(vars.$hover--border-color);
269 opacity: 1; 311 opacity: 1;
270 transition: 312 transition:
271 border-color .2s ease, 313 border-color 0.2s ease,
272 opacity .2s ease, 314 opacity 0.2s ease,
273 visibility .2s linear; 315 visibility 0.2s linear;
274 } 316 }
275 } 317 }
276 } 318 }
277 } 319 }
278 320
279 @include bem.modifier('horizontal') { 321 @include bem.modifier("horizontal") {
280 flex-direction: row; 322 flex-direction: row;
281 align-items: center; 323 align-items: center;
282 324
283 @include bem.elem('image') { 325 @include bem.elem("image") {
284 align-self: stretch; 326 align-self: stretch;
285 inline-size: auto; 327 inline-size: auto;
286 328
287 &:first-child { 329 &:first-child {
288 border-start-end-radius: 0; 330 border-start-end-radius: 0;
289 border-end-start-radius: props.get(vars.$rounding); 331 border-end-start-radius: props.get(vars.$rounding);
290 } 332 }
291 333
292 &:last-child { 334 &:last-child {
@@ -295,37 +337,38 @@
295 } 337 }
296 } 338 }
297 339
298 @include bem.elem('body') { 340 @include bem.elem("body") {
299 @include bem.modifier('main') { 341 @include bem.modifier("main") {
300 block-size: auto; 342 block-size: auto;
301 min-block-size: none; 343 min-block-size: none;
302 inline-size: 100%; 344 inline-size: 100%;
303 min-inline-size: 0; 345 min-inline-size: 0;
304 } 346 }
305 } 347 }
306 } 348 }
307 349
308 @include bem.modifier('collapsible') { 350 @include bem.modifier("collapsible") {
309 display: block; 351 display: block;
310 interpolate-size: allow-keywords; 352 interpolate-size: allow-keywords;
311 353
312 @include bem.elem("header") { 354 @include bem.elem("header") {
313 display: flex; 355 display: flex;
314 align-items: center; 356 align-items: center;
315 gap: 1em; 357 gap: 1em;
316 cursor: pointer; 358 cursor: pointer;
317 359
318 &::before { 360 &::before {
319 margin: 0; 361 margin: 0;
320 inline-size: 1em; 362 inline-size: 1em;
321 font-size: 0.8em; 363 font-size: 0.8em;
322 content: "â–¶"; 364 content: "â–¶";
323 } 365 }
324 366
325 &:focus-visible { 367 &:focus-visible {
326 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 368 outline: props.get(vars.$key-focus--border-color) solid
369 props.get(vars.$key-focus--border-width);
327 outline-offset: calc(-1 * props.get(vars.$key-focus--border-width)); 370 outline-offset: calc(-1 * props.get(vars.$key-focus--border-width));
328 border-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width)); 371 border-radius: calc(props.get(vars.$rounding) - props.get(vars.$border-width));
329 } 372 }
330 373
331 @include bem.next-elem("body") { 374 @include bem.next-elem("body") {
@@ -334,7 +377,7 @@
334 } 377 }
335 378
336 &::details-content { 379 &::details-content {
337 opacity: 0; 380 opacity: 0;
338 block-size: 0; 381 block-size: 0;
339 overflow-y: clip; 382 overflow-y: clip;
340 transition: 383 transition:
@@ -351,7 +394,7 @@
351 } 394 }
352 395
353 &::details-content { 396 &::details-content {
354 opacity: 1; 397 opacity: 1;
355 block-size: auto; 398 block-size: auto;
356 } 399 }
357 } 400 }
diff --git a/src/objects/_card.vars.scss b/src/objects/_card.vars.scss
index 4616c80..96f3cb9 100644
--- a/src/objects/_card.vars.scss
+++ b/src/objects/_card.vars.scss
@@ -1,51 +1,130 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$divider-width: props.def(--o-card--divider-width, props.get(core.$border-width--thin)) !default; 5$divider-width: props.def(--o-card--divider-width, props.get(core.$border-width--thin)) !default;
6$border-width: props.def(--o-card--border-width, props.get(core.$border-width--thin)) !default; 6$border-width: props.def(--o-card--border-width, props.get(core.$border-width--thin)) !default;
7$sub-border-width: props.def(--o-card--sub-border-width, props.get(core.$border-width--thick)) !default; 7$sub-border-width: props.def(
8$pad-i: props.def(--o-card--pad-i, props.get(core.$size--300)) !default; 8 --o-card--sub-border-width,
9$pad-b: props.def(--o-card--pad-b, props.get(core.$size--250)) !default; 9 props.get(core.$border-width--thick)
10$spacing: props.def(--o-card--spacing, props.get(core.$size--200)) !default; 10) !default;
11$rounding: props.def(--o-card--rounding, props.get(core.$rounding)) !default; 11$pad-i: props.def(--o-card--pad-i, props.get(core.$size--300)) !default;
12$pad-b: props.def(--o-card--pad-b, props.get(core.$size--250)) !default;
13$spacing: props.def(--o-card--spacing, props.get(core.$size--200)) !default;
14$rounding: props.def(--o-card--rounding, props.get(core.$rounding)) !default;
12$image-overlay--pad-i: props.def(--o-card--image-overlay--pad-i, props.get($pad-i)) !default; 15$image-overlay--pad-i: props.def(--o-card--image-overlay--pad-i, props.get($pad-i)) !default;
13$image-overlay--pad-b: props.def(--o-card--image-overlay--pad-b, props.get($pad-b)) !default; 16$image-overlay--pad-b: props.def(--o-card--image-overlay--pad-b, props.get($pad-b)) !default;
14 17
15$hover--offset-b: props.def(--o-card--hover--offset-b, calc(-1 * props.get(core.$size--65))) !default; 18$hover--offset-b: props.def(
19 --o-card--hover--offset-b,
20 calc(-1 * props.get(core.$size--65))
21) !default;
16 22
17$shadow-x: props.def(--o-card--shadow-x, props.get(core.$shadow--l1--x)) !default; 23$shadow-x: props.def(--o-card--shadow-x, props.get(core.$shadow--l1--x)) !default;
18$shadow-y: props.def(--o-card--shadow-y, props.get(core.$shadow--l1--y)) !default; 24$shadow-y: props.def(--o-card--shadow-y, props.get(core.$shadow--l1--y)) !default;
19$shadow-blur: props.def(--o-card--shadow-blur, props.get(core.$shadow--l1--blur)) !default; 25$shadow-blur: props.def(--o-card--shadow-blur, props.get(core.$shadow--l1--blur)) !default;
20$shadow-grow: props.def(--o-card--shadow-grow, props.get(core.$shadow--l1--grow)) !default; 26$shadow-grow: props.def(--o-card--shadow-grow, props.get(core.$shadow--l1--grow)) !default;
21 27
22$key-focus--border-width: props.def(--o-card--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 28$key-focus--border-width: props.def(
23$key-focus--border-offset: props.def(--o-card--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 29 --o-card--key-focus--border-width,
24$key-focus--outline-width: props.def(--o-card--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 30 props.get(core.$key-focus--border-width)
31) !default;
32$key-focus--border-offset: props.def(
33 --o-card--key-focus--border-offset,
34 props.get(core.$key-focus--border-offset)
35) !default;
36$key-focus--outline-width: props.def(
37 --o-card--key-focus--outline-width,
38 props.get(core.$key-focus--outline-width)
39) !default;
25 40
26$shadow-color: props.def(--o-card--shadow-color, props.get(core.$theme, --shadow), 'color') !default; 41$shadow-color: props.def(
27$bg-color: props.def(--o-card--bg-color, props.get(core.$theme, --bg-l2), 'color') !default; 42 --o-card--shadow-color,
28$border-color: props.def(--o-card--border-color, props.get(core.$theme, --box, --border), 'color') !default; 43 props.get(core.$theme, --shadow),
29$divider-color: props.def(--o-card--divider-color, props.get(core.$theme, --border-mute), 'color') !default; 44 "color"
45) !default;
46$bg-color: props.def(--o-card--bg-color, props.get(core.$theme, --bg-l2), "color") !default;
47$border-color: props.def(
48 --o-card--border-color,
49 props.get(core.$theme, --box, --border),
50 "color"
51) !default;
52$divider-color: props.def(
53 --o-card--divider-color,
54 props.get(core.$theme, --border-mute),
55 "color"
56) !default;
30 57
31$highlight--shadow-x: props.def(--o-card--highlight--shadow-x, props.get(core.$shadow--l2--x)) !default; 58$highlight--shadow-x: props.def(
32$highlight--shadow-y: props.def(--o-card--highlight--shadow-y, props.get(core.$shadow--l2--y)) !default; 59 --o-card--highlight--shadow-x,
33$highlight--shadow-blur: props.def(--o-card--highlight--shadow-blur, props.get(core.$shadow--l2--blur)) !default; 60 props.get(core.$shadow--l2--x)
34$highlight--shadow-grow: props.def(--o-card--highlight--shadow-grow, props.get(core.$shadow--l2--grow)) !default; 61) !default;
62$highlight--shadow-y: props.def(
63 --o-card--highlight--shadow-y,
64 props.get(core.$shadow--l2--y)
65) !default;
66$highlight--shadow-blur: props.def(
67 --o-card--highlight--shadow-blur,
68 props.get(core.$shadow--l2--blur)
69) !default;
70$highlight--shadow-grow: props.def(
71 --o-card--highlight--shadow-grow,
72 props.get(core.$shadow--l2--grow)
73) !default;
35 74
36$highlight--border-width: props.def(--o-card--highlight--border-width, props.get(core.$border-width--medium)) !default; 75$highlight--border-width: props.def(
37$highlight--border-color: props.def(--o-card--highlight--border-color, props.get(core.$theme, --accent, --700) props.get(core.$theme, --accent, --700) props.get(core.$theme, --accent, --800), 'color') !default; 76 --o-card--highlight--border-width,
38$highlight--shadow-color: props.def(--o-card--highlight--shadow-color, props.get(core.$theme, --accent, --200), 'color') !default; 77 props.get(core.$border-width--medium)
78) !default;
79$highlight--border-color: props.def(
80 --o-card--highlight--border-color,
81 props.get(core.$theme, --accent, --700) props.get(core.$theme, --accent, --700)
82 props.get(core.$theme, --accent, --800),
83 "color"
84) !default;
85$highlight--shadow-color: props.def(
86 --o-card--highlight--shadow-color,
87 props.get(core.$theme, --accent, --200),
88 "color"
89) !default;
39 90
40$hover--bg-color: props.def(--o-card--hover--bg-color, color-mix(in lch, props.get($bg-color), props.get(core.$theme, --border-mute)), 'color') !default; 91$hover--bg-color: props.def(
41$hover--border-color: props.def(--o-card--hover--border-color, props.get(core.$theme, --border), 'color') !default; 92 --o-card--hover--bg-color,
93 color-mix(in lch, props.get($bg-color), props.get(core.$theme, --border-mute)),
94 "color"
95) !default;
96$hover--border-color: props.def(
97 --o-card--hover--border-color,
98 props.get(core.$theme, --border),
99 "color"
100) !default;
42 101
43$key-focus--label-color: props.def(--o-card--key-focus--label-color, props.get(core.$theme, --focus, --text), 'color') !default; 102$key-focus--label-color: props.def(
44$key-focus--border-color: props.def(--o-card--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 103 --o-card--key-focus--label-color,
45$key-focus--outline-color: props.def(--o-card--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 104 props.get(core.$theme, --focus, --text),
105 "color"
106) !default;
107$key-focus--border-color: props.def(
108 --o-card--key-focus--border-color,
109 props.get(core.$theme, --focus, --border),
110 "color"
111) !default;
112$key-focus--outline-color: props.def(
113 --o-card--key-focus--outline-color,
114 props.get(core.$theme, --focus, --outline),
115 "color"
116) !default;
46 117
47$quiet--image-color: props.def(--o-card--quiet--image-color, props.get(core.$theme, --bg-base), 'color') !default; 118$quiet--image-color: props.def(
48$quiet--hover--image-color: props.def(--o-card--quiet--hover--image-color, props.get(core.$theme, --border), 'color') !default; 119 --o-card--quiet--image-color,
120 props.get(core.$theme, --bg-base),
121 "color"
122) !default;
123$quiet--hover--image-color: props.def(
124 --o-card--quiet--hover--image-color,
125 props.get(core.$theme, --border),
126 "color"
127) !default;
49 128
50$pad-i--sm: props.def(--o-card--pad-i, props.get(core.$size--200), 'sm') !default; 129$pad-i--sm: props.def(--o-card--pad-i, props.get(core.$size--200), "sm") !default;
51$pad-b--sm: props.def(--o-card--pad-b, props.get(core.$size--175), 'sm') !default; 130$pad-b--sm: props.def(--o-card--pad-b, props.get(core.$size--175), "sm") !default;
diff --git a/src/objects/_checkbox.scss b/src/objects/_checkbox.scss
index f3fb793..60cee65 100644
--- a/src/objects/_checkbox.scss
+++ b/src/objects/_checkbox.scss
@@ -1,130 +1,140 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/functions' as fn; 3@use "pkg:iro-sass/functions" as fn;
4@use 'pkg:iro-sass/src/props'; 4@use "pkg:iro-sass/props";
5@use '../props' as *; 5@use "../props" as *;
6@use '../core.vars' as core; 6@use "../core.vars" as core;
7 7
8@forward 'checkbox.vars'; 8@forward "checkbox.vars";
9@use 'checkbox.vars' as vars; 9@use "checkbox.vars" as vars;
10 10
11@mixin styles { 11@mixin styles {
12 @include materialize-at-root(meta.module-variables('vars')); 12 @include materialize-at-root(meta.module-variables("vars"));
13 13
14 @include bem.object('checkbox') { 14 @include bem.object("checkbox") {
15 position: relative; 15 position: relative;
16 display: inline-block; 16 display: inline-block;
17 padding-block: props.get(vars.$pad-b); 17 padding-block: props.get(vars.$pad-b);
18 padding-inline: props.get(vars.$pad-i); 18 padding-inline: props.get(vars.$pad-i);
19 margin-inline: 19 margin-inline: calc(-1 * props.get(vars.$pad-i) - props.get(vars.$key-focus--border-offset))
20 calc(-1 * props.get(vars.$pad-i) - props.get(vars.$key-focus--border-offset)) 20 calc(
21 calc(props.get(vars.$spacing-sibling) - props.get(vars.$pad-b) - props.get(vars.$key-focus--border-offset)); 21 props.get(vars.$spacing-sibling) - props.get(vars.$pad-b) - props.get(
22 vars.$key-focus--border-offset
23 )
24 );
22 25
23 @include bem.elem('box') { 26 @include bem.elem("box") {
24 position: relative; 27 position: relative;
25 display: inline-block; 28 display: inline-block;
26 flex: 0 0 auto; 29 flex: 0 0 auto;
27 inline-size: props.get(vars.$size); 30 inline-size: props.get(vars.$size);
28 block-size: props.get(vars.$size); 31 block-size: props.get(vars.$size);
29 margin-block-start: calc(.5em * props.get(core.$font--standard--line-height) - .5 * props.get(vars.$size) - props.get(vars.$key-focus--border-offset)); 32 margin-block-start: calc(
30 vertical-align: top; 33 0.5em * props.get(core.$font--standard--line-height) - 0.5 *
31 background-color: props.get(vars.$box-border-color); 34 props.get(vars.$size) - props.get(vars.$key-focus--border-offset)
32 background-clip: padding-box; 35 );
33 border: props.get(vars.$key-focus--border-offset) solid transparent; 36 vertical-align: top;
34 border-radius: calc(props.get(vars.$border-width) + props.get(vars.$key-focus--border-offset)); 37 background-color: props.get(vars.$box-border-color);
38 background-clip: padding-box;
39 border: props.get(vars.$key-focus--border-offset) solid transparent;
40 border-radius: calc(
41 props.get(vars.$border-width) + props.get(vars.$key-focus--border-offset)
42 );
35 43
36 &::before, 44 &::before,
37 &::after { 45 &::after {
38 position: absolute; 46 position: absolute;
39 display: block; 47 display: block;
40 content: ''; 48 content: "";
41 } 49 }
42 50
43 &::before { 51 &::before {
44 inset-block-start: props.get(vars.$border-width); 52 inset-block-start: props.get(vars.$border-width);
45 inset-inline-start: props.get(vars.$border-width); 53 inset-inline-start: props.get(vars.$border-width);
46 z-index: 2; 54 z-index: 2;
47 inline-size: calc(props.get(vars.$size) - 2 * props.get(vars.$border-width)); 55 inline-size: calc(props.get(vars.$size) - 2 * props.get(vars.$border-width));
48 block-size: calc(props.get(vars.$size) - 2 * props.get(vars.$border-width)); 56 block-size: calc(props.get(vars.$size) - 2 * props.get(vars.$border-width));
49 background-color: props.get(vars.$box-bg-color); 57 background-color: props.get(vars.$box-bg-color);
50 transition: transform .2s ease; 58 transition: transform 0.2s ease;
51 } 59 }
52 60
53 &::after { 61 &::after {
54 inset-block-start: calc(.5 * props.get(vars.$size) - 1px); 62 inset-block-start: calc(0.5 * props.get(vars.$size) - 1px);
55 inset-inline-start: calc(1.5 * props.get(vars.$border-width)); 63 inset-inline-start: calc(1.5 * props.get(vars.$border-width));
56 z-index: 3; 64 z-index: 3;
57 box-sizing: border-box; 65 box-sizing: border-box;
58 inline-size: calc(props.get(vars.$size) - 3 * props.get(vars.$border-width)); 66 inline-size: calc(props.get(vars.$size) - 3 * props.get(vars.$border-width));
59 block-size: 0; 67 block-size: 0;
60 border-color: props.get(vars.$box-bg-color); 68 border-color: props.get(vars.$box-bg-color);
61 border-style: solid; 69 border-style: solid;
62 border-radius: 2px; 70 border-radius: 2px;
63 transform: scale(0); 71 transform: scale(0);
64 transition: transform .2s ease; 72 transition: transform 0.2s ease;
65 border-block-width: 0 2px; 73 border-block-width: 0 2px;
66 border-inline-width: 0 2px; 74 border-inline-width: 0 2px;
67 } 75 }
68 } 76 }
69 77
70 @include bem.elem('check-icon') { 78 @include bem.elem("check-icon") {
71 position: absolute; 79 position: absolute;
72 inset-block-start: calc(1 * props.get(vars.$border-width)); 80 inset-block-start: calc(1 * props.get(vars.$border-width));
73 inset-inline-start: calc(1 * props.get(vars.$border-width)); 81 inset-inline-start: calc(1 * props.get(vars.$border-width));
74 z-index: 2; 82 z-index: 2;
75 display: block; 83 display: block;
76 inline-size: calc(100% - 2 * props.get(vars.$border-width)); 84 inline-size: calc(100% - 2 * props.get(vars.$border-width));
77 block-size: calc(100% - 2 * props.get(vars.$border-width)); 85 block-size: calc(100% - 2 * props.get(vars.$border-width));
78 margin: 0; 86 margin: 0;
79 color: props.get(vars.$box-bg-color); 87 color: props.get(vars.$box-bg-color);
80 stroke-width: fn.px-to-rem(3px); 88 stroke-width: fn.px-to-rem(3px);
81 transform: scale(0); 89 transform: scale(0);
82 transform-origin: 40% 90%; 90 transform-origin: 40% 90%;
83 transition: transform .2s ease; 91 transition: transform 0.2s ease;
84 } 92 }
85 93
86 @include bem.elem('label') { 94 @include bem.elem("label") {
87 margin-inline-start: calc(props.get(vars.$label-gap) - props.get(vars.$key-focus--border-offset)); 95 margin-inline-start: calc(
96 props.get(vars.$label-gap) - props.get(vars.$key-focus--border-offset)
97 );
88 } 98 }
89 99
90 @include bem.elem('native') { 100 @include bem.elem("native") {
91 position: absolute; 101 position: absolute;
92 inset-block-start: 0; 102 inset-block-start: 0;
93 inset-inline-start: 0; 103 inset-inline-start: 0;
94 z-index: -1; 104 z-index: -1;
95 inline-size: 100%; 105 inline-size: 100%;
96 block-size: 100%; 106 block-size: 100%;
97 padding: 0; 107 padding: 0;
98 margin: 0; 108 margin: 0;
99 overflow: hidden; 109 overflow: hidden;
100 appearance: none; 110 appearance: none;
101 border-radius: props.get(vars.$rounding); 111 border-radius: props.get(vars.$rounding);
102 112
103 &:hover, 113 &:hover,
104 &:focus-visible { 114 &:focus-visible {
105 @include bem.sibling-elem('label') { 115 @include bem.sibling-elem("label") {
106 color: props.get(vars.$hover--label-color); 116 color: props.get(vars.$hover--label-color);
107 } 117 }
108 118
109 @include bem.sibling-elem('box') { 119 @include bem.sibling-elem("box") {
110 background-color: props.get(vars.$hover--box-border-color); 120 background-color: props.get(vars.$hover--box-border-color);
111 } 121 }
112 } 122 }
113 123
114 &:checked { 124 &:checked {
115 @include bem.sibling-elem('box') { 125 @include bem.sibling-elem("box") {
116 &::before { 126 &::before {
117 transform: scale(0); 127 transform: scale(0);
118 } 128 }
119 129
120 @include bem.elem('check-icon') { 130 @include bem.elem("check-icon") {
121 transform: scale(1); 131 transform: scale(1);
122 } 132 }
123 } 133 }
124 } 134 }
125 135
126 &:indeterminate { 136 &:indeterminate {
127 @include bem.sibling-elem('box') { 137 @include bem.sibling-elem("box") {
128 &::before { 138 &::before {
129 transform: scale(0); 139 transform: scale(0);
130 } 140 }
@@ -133,18 +143,18 @@
133 transform: scale(1); 143 transform: scale(1);
134 } 144 }
135 145
136 @include bem.elem('check-icon') { 146 @include bem.elem("check-icon") {
137 transform: scale(0); 147 transform: scale(0);
138 } 148 }
139 } 149 }
140 } 150 }
141 151
142 &:disabled { 152 &:disabled {
143 @include bem.sibling-elem('label') { 153 @include bem.sibling-elem("label") {
144 color: props.get(vars.$disabled--label-color); 154 color: props.get(vars.$disabled--label-color);
145 } 155 }
146 156
147 @include bem.sibling-elem('box') { 157 @include bem.sibling-elem("box") {
148 background-color: props.get(vars.$disabled--box-border-color); 158 background-color: props.get(vars.$disabled--box-border-color);
149 159
150 &::before { 160 &::before {
@@ -154,58 +164,59 @@
154 } 164 }
155 165
156 &:focus-visible { 166 &:focus-visible {
157 @include bem.sibling-elem('label') { 167 @include bem.sibling-elem("label") {
158 color: props.get(vars.$key-focus--label-color); 168 color: props.get(vars.$key-focus--label-color);
159 } 169 }
160 170
161 @include bem.sibling-elem('box') { 171 @include bem.sibling-elem("box") {
162 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 172 outline: props.get(vars.$key-focus--border-color) solid
163 box-shadow: 173 props.get(vars.$key-focus--border-width);
164 0 174 box-shadow: 0 0 0
165 0 175 calc(
166 0 176 props.get(vars.$key-focus--border-width) +
167 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 177 props.get(vars.$key-focus--outline-width)
178 )
168 props.get(vars.$key-focus--outline-color); 179 props.get(vars.$key-focus--outline-color);
169 } 180 }
170 } 181 }
171 } 182 }
172 183
173 @include bem.modifier('standalone') { 184 @include bem.modifier("standalone") {
174 @include bem.elem('box') { 185 @include bem.elem("box") {
175 margin-block-start: 0; 186 margin-block-start: 0;
176 } 187 }
177 } 188 }
178 189
179 @include bem.modifier('accent') { 190 @include bem.modifier("accent") {
180 @include bem.elem('native') { 191 @include bem.elem("native") {
181 &:checked { 192 &:checked {
182 @include bem.sibling-elem('box') { 193 @include bem.sibling-elem("box") {
183 background-color: props.get(vars.$accent--box-border-color); 194 background-color: props.get(vars.$accent--box-border-color);
184 } 195 }
185 196
186 &:hover, 197 &:hover,
187 &:focus-visible { 198 &:focus-visible {
188 @include bem.sibling-elem('box') { 199 @include bem.sibling-elem("box") {
189 background-color: props.get(vars.$accent--hover--box-border-color); 200 background-color: props.get(vars.$accent--hover--box-border-color);
190 } 201 }
191 } 202 }
192 } 203 }
193 204
194 &:indeterminate { 205 &:indeterminate {
195 @include bem.sibling-elem('box') { 206 @include bem.sibling-elem("box") {
196 background-color: props.get(vars.$accent--box-border-color); 207 background-color: props.get(vars.$accent--box-border-color);
197 } 208 }
198 209
199 &:hover, 210 &:hover,
200 &:focus-visible { 211 &:focus-visible {
201 @include bem.sibling-elem('box') { 212 @include bem.sibling-elem("box") {
202 background-color: props.get(vars.$accent--hover--box-border-color); 213 background-color: props.get(vars.$accent--hover--box-border-color);
203 } 214 }
204 } 215 }
205 } 216 }
206 217
207 &:disabled { 218 &:disabled {
208 @include bem.sibling-elem('box') { 219 @include bem.sibling-elem("box") {
209 background-color: props.get(vars.$disabled--box-border-color); 220 background-color: props.get(vars.$disabled--box-border-color);
210 221
211 &::before { 222 &::before {
@@ -214,13 +225,13 @@
214 } 225 }
215 226
216 &:checked { 227 &:checked {
217 @include bem.sibling-elem('box') { 228 @include bem.sibling-elem("box") {
218 background-color: props.get(vars.$disabled--box-border-color); 229 background-color: props.get(vars.$disabled--box-border-color);
219 } 230 }
220 } 231 }
221 232
222 &:indeterminate { 233 &:indeterminate {
223 @include bem.sibling-elem('box') { 234 @include bem.sibling-elem("box") {
224 background-color: props.get(vars.$disabled--box-border-color); 235 background-color: props.get(vars.$disabled--box-border-color);
225 } 236 }
226 } 237 }
diff --git a/src/objects/_checkbox.vars.scss b/src/objects/_checkbox.vars.scss
index 278aac8..8362aa7 100644
--- a/src/objects/_checkbox.vars.scss
+++ b/src/objects/_checkbox.vars.scss
@@ -1,32 +1,92 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$size: props.def(--o-checkbox--size, props.get(core.$size--175)) !default; 5$size: props.def(--o-checkbox--size, props.get(core.$size--175)) !default;
6$label-gap: props.def(--o-checkbox--label-gap, props.get(core.$size--125)) !default; 6$label-gap: props.def(--o-checkbox--label-gap, props.get(core.$size--125)) !default;
7$border-width: props.def(--o-checkbox--border-width, props.get(core.$border-width--medium)) !default; 7$border-width: props.def(
8$pad-i: props.def(--o-checkbox--pad-i, props.get(core.$size--65)) !default; 8 --o-checkbox--border-width,
9$pad-b: props.def(--o-checkbox--pad-b, props.get(core.$size--65)) !default; 9 props.get(core.$border-width--medium)
10$rounding: props.def(--o-checkbox--rounding, props.get(core.$rounding--sm)) !default; 10) !default;
11$pad-i: props.def(--o-checkbox--pad-i, props.get(core.$size--65)) !default;
12$pad-b: props.def(--o-checkbox--pad-b, props.get(core.$size--65)) !default;
13$rounding: props.def(--o-checkbox--rounding, props.get(core.$rounding--sm)) !default;
11$spacing-sibling: props.def(--o-checkbox--spacing-sibling, props.get(core.$size--300)) !default; 14$spacing-sibling: props.def(--o-checkbox--spacing-sibling, props.get(core.$size--300)) !default;
12 15
13$key-focus--border-width: props.def(--o-checkbox--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 16$key-focus--border-width: props.def(
14$key-focus--border-offset: props.def(--o-checkbox--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 17 --o-checkbox--key-focus--border-width,
15$key-focus--outline-width: props.def(--o-checkbox--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 18 props.get(core.$key-focus--border-width)
19) !default;
20$key-focus--border-offset: props.def(
21 --o-checkbox--key-focus--border-offset,
22 props.get(core.$key-focus--border-offset)
23) !default;
24$key-focus--outline-width: props.def(
25 --o-checkbox--key-focus--outline-width,
26 props.get(core.$key-focus--outline-width)
27) !default;
16 28
17$box-border-color: props.def(--o-checkbox--box-border-color, props.get(core.$theme, --text-mute-more), 'color') !default; 29$box-border-color: props.def(
18$box-bg-color: props.def(--o-checkbox--box-bg-color, props.get(core.$theme, --base, --75), 'color') !default; 30 --o-checkbox--box-border-color,
31 props.get(core.$theme, --text-mute-more),
32 "color"
33) !default;
34$box-bg-color: props.def(
35 --o-checkbox--box-bg-color,
36 props.get(core.$theme, --base, --75),
37 "color"
38) !default;
19 39
20$hover--label-color: props.def(--o-checkbox--hover--label-color, props.get(core.$theme, --heading), 'color') !default; 40$hover--label-color: props.def(
21$hover--box-border-color: props.def(--o-checkbox--hover--box-border-color, props.get(core.$theme, --text-mute), 'color') !default; 41 --o-checkbox--hover--label-color,
42 props.get(core.$theme, --heading),
43 "color"
44) !default;
45$hover--box-border-color: props.def(
46 --o-checkbox--hover--box-border-color,
47 props.get(core.$theme, --text-mute),
48 "color"
49) !default;
22 50
23$accent--box-border-color: props.def(--o-checkbox--accent--box-border-color, props.get(core.$theme, --accent, --900), 'color') !default; 51$accent--box-border-color: props.def(
24$accent--hover--box-border-color: props.def(--o-checkbox--accent--hover--box-border-color, props.get(core.$theme, --accent, --1000), 'color') !default; 52 --o-checkbox--accent--box-border-color,
53 props.get(core.$theme, --accent, --900),
54 "color"
55) !default;
56$accent--hover--box-border-color: props.def(
57 --o-checkbox--accent--hover--box-border-color,
58 props.get(core.$theme, --accent, --1000),
59 "color"
60) !default;
25 61
26$disabled--label-color: props.def(--o-checkbox--disabled--label-color, props.get(core.$theme, --text-disabled), 'color') !default; 62$disabled--label-color: props.def(
27$disabled--box-border-color: props.def(--o-checkbox--disabled--box-border-color, props.get(core.$theme, --border-strong), 'color') !default; 63 --o-checkbox--disabled--label-color,
28$disabled--box-bg-color: props.def(--o-checkbox--disabled--box-bg-color, props.get(core.$theme, --base, --75), 'color') !default; 64 props.get(core.$theme, --text-disabled),
65 "color"
66) !default;
67$disabled--box-border-color: props.def(
68 --o-checkbox--disabled--box-border-color,
69 props.get(core.$theme, --border-strong),
70 "color"
71) !default;
72$disabled--box-bg-color: props.def(
73 --o-checkbox--disabled--box-bg-color,
74 props.get(core.$theme, --base, --75),
75 "color"
76) !default;
29 77
30$key-focus--label-color: props.def(--o-checkbox--key-focus--label-color, props.get(core.$theme, --focus, --text), 'color') !default; 78$key-focus--label-color: props.def(
31$key-focus--border-color: props.def(--o-checkbox--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 79 --o-checkbox--key-focus--label-color,
32$key-focus--outline-color: props.def(--o-checkbox--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 80 props.get(core.$theme, --focus, --text),
81 "color"
82) !default;
83$key-focus--border-color: props.def(
84 --o-checkbox--key-focus--border-color,
85 props.get(core.$theme, --focus, --border),
86 "color"
87) !default;
88$key-focus--outline-color: props.def(
89 --o-checkbox--key-focus--outline-color,
90 props.get(core.$theme, --focus, --outline),
91 "color"
92) !default;
diff --git a/src/objects/_dialog.scss b/src/objects/_dialog.scss
index d2ee8c3..f5584e6 100644
--- a/src/objects/_dialog.scss
+++ b/src/objects/_dialog.scss
@@ -1,29 +1,29 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'dialog.vars'; 6@forward "dialog.vars";
7@use 'dialog.vars' as vars; 7@use "dialog.vars" as vars;
8 8
9@use 'backdrop.vars' as backdrop; 9@use "backdrop.vars" as backdrop;
10@use 'divider.vars' as divider; 10@use "divider.vars" as divider;
11 11
12@mixin styles { 12@mixin styles {
13 @include materialize-at-root(meta.module-variables('vars')); 13 @include materialize-at-root(meta.module-variables("vars"));
14 14
15 @include bem.object('dialog') { 15 @include bem.object("dialog") {
16 display: none; 16 display: none;
17 box-sizing: border-box; 17 box-sizing: border-box;
18 inline-size: 100%; 18 inline-size: 100%;
19 max-inline-size: none; 19 max-inline-size: none;
20 block-size: 100%; 20 block-size: 100%;
21 min-block-size: 0; 21 min-block-size: 0;
22 max-block-size: none; 22 max-block-size: none;
23 padding: props.get(vars.$pad-b) props.get(vars.$pad-i); 23 padding: props.get(vars.$pad-b) props.get(vars.$pad-i);
24 margin: 0; 24 margin: 0;
25 background-color: transparent; 25 background-color: transparent;
26 border: 0; 26 border: 0;
27 27
28 &::backdrop { 28 &::backdrop {
29 background-color: props.get(backdrop.$bg-color); 29 background-color: props.get(backdrop.$bg-color);
@@ -31,38 +31,40 @@
31 } 31 }
32 32
33 &[open], 33 &[open],
34 &:popover-open { 34 &:popover-open {
35 display: flex; 35 display: flex;
36 flex-direction: column; 36 flex-direction: column;
37 } 37 }
38 38
39 @include bem.elem('content') { 39 @include bem.elem("content") {
40 pointer-events: auto; 40 pointer-events: auto;
41 border-radius: props.get(vars.$rounding); 41 border-radius: props.get(vars.$rounding);
42 background-color: props.get(vars.$bg-color); 42 background-color: props.get(vars.$bg-color);
43 } 43 }
44 44
45 @include bem.elem('header') { 45 @include bem.elem("header") {
46 display: flex; 46 display: flex;
47 align-items: center; 47 align-items: center;
48 padding: props.get(vars.$body--pad-i) props.get(vars.$body--pad-i) 0; 48 padding: props.get(vars.$body--pad-i) props.get(vars.$body--pad-i) 0;
49 } 49 }
50 50
51 @include bem.elem('divider') { 51 @include bem.elem("divider") {
52 margin-inline: props.get(vars.$body--pad-i); 52 margin-inline: props.get(vars.$body--pad-i);
53 53
54 @include bem.next-elem('body') { 54 @include bem.next-elem("body") {
55 padding-block-start: calc(.5 * props.get(vars.$body--pad-b) - props.get(divider.$margin-b)); 55 padding-block-start: calc(
56 0.5 * props.get(vars.$body--pad-b) - props.get(divider.$margin-b)
57 );
56 } 58 }
57 } 59 }
58 60
59 @include bem.elem('body') { 61 @include bem.elem("body") {
60 padding: props.get(vars.$body--pad-b) props.get(vars.$body--pad-i); 62 padding: props.get(vars.$body--pad-b) props.get(vars.$body--pad-i);
61 63
62 &::before { 64 &::before {
63 display: block; 65 display: block;
64 margin-block: -100em 100em; 66 margin-block: -100em 100em;
65 content: ''; 67 content: "";
66 } 68 }
67 } 69 }
68 } 70 }
diff --git a/src/objects/_dialog.vars.scss b/src/objects/_dialog.vars.scss
index 39c47ba..8650e51 100644
--- a/src/objects/_dialog.vars.scss
+++ b/src/objects/_dialog.vars.scss
@@ -1,10 +1,10 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4@use '../layouts/container.vars' as container; 4@use "../layouts/container.vars" as container;
5 5
6$pad-b: props.def(--o-dialog--pad-b, props.get(container.$pad-i)) !default; 6$pad-b: props.def(--o-dialog--pad-b, props.get(container.$pad-i)) !default;
7$pad-i: props.def(--o-dialog--pad-b, props.get(container.$pad-i)) !default; 7$pad-i: props.def(--o-dialog--pad-b, props.get(container.$pad-i)) !default;
8$rounding: props.def(--o-dialog--rounding, props.get(core.$rounding)) !default; 8$rounding: props.def(--o-dialog--rounding, props.get(core.$rounding)) !default;
9 9
10$border-width: props.def(--o-dialog--border-width, props.get(core.$border-width--thin)) !default; 10$border-width: props.def(--o-dialog--border-width, props.get(core.$border-width--thin)) !default;
@@ -12,5 +12,9 @@ $border-width: props.def(--o-dialog--border-width, props.get(core.$border-width-
12$body--pad-b: props.def(--o-dialog--body--pad-b, props.get(container.$pad-i)) !default; 12$body--pad-b: props.def(--o-dialog--body--pad-b, props.get(container.$pad-i)) !default;
13$body--pad-i: props.def(--o-dialog--body--pad-i, props.get(container.$pad-i)) !default; 13$body--pad-i: props.def(--o-dialog--body--pad-i, props.get(container.$pad-i)) !default;
14 14
15$bg-color: props.def(--o-dialog--bg-color, props.get(core.$theme, --bg-l1), 'color') !default; 15$bg-color: props.def(--o-dialog--bg-color, props.get(core.$theme, --bg-l1), "color") !default;
16$border-color: props.def(--o-dialog--border-color, props.get(core.$theme, --border-mute), 'color') !default; 16$border-color: props.def(
17 --o-dialog--border-color,
18 props.get(core.$theme, --border-mute),
19 "color"
20) !default;
diff --git a/src/objects/_divider.scss b/src/objects/_divider.scss
index d81284b..f082d12 100644
--- a/src/objects/_divider.scss
+++ b/src/objects/_divider.scss
@@ -1,38 +1,38 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:meta'; 2@use "sass:meta";
3@use 'sass:string'; 3@use "sass:string";
4@use 'pkg:iro-sass/src/bem'; 4@use "pkg:iro-sass/bem";
5@use 'pkg:iro-sass/src/props'; 5@use "pkg:iro-sass/props";
6@use '../props' as *; 6@use "../props" as *;
7@use '../core.vars' as core; 7@use "../core.vars" as core;
8 8
9@forward 'divider.vars'; 9@forward "divider.vars";
10@use 'divider.vars' as vars; 10@use "divider.vars" as vars;
11 11
12@mixin styles { 12@mixin styles {
13 @include materialize-at-root(meta.module-variables('vars')); 13 @include materialize-at-root(meta.module-variables("vars"));
14 14
15 @include bem.object('divider') { 15 @include bem.object("divider") {
16 display: flex; 16 display: flex;
17 flex: 0 0 auto; 17 flex: 0 0 auto;
18 flex-direction: row; 18 flex-direction: row;
19 align-items: center; 19 align-items: center;
20 block-size: 1em; 20 block-size: 1em;
21 margin-block: props.get(vars.$margin-b); 21 margin-block: props.get(vars.$margin-b);
22 font-size: props.get(vars.$strong--label-font-size); 22 font-size: props.get(vars.$strong--label-font-size);
23 font-weight: 700; 23 font-weight: 700;
24 line-height: 1; 24 line-height: 1;
25 color: props.get(vars.$strong--label-color); 25 color: props.get(vars.$strong--label-color);
26 text-transform: uppercase; 26 text-transform: uppercase;
27 letter-spacing: props.get(vars.$letter-spacing); 27 letter-spacing: props.get(vars.$letter-spacing);
28 background-color: transparent; 28 background-color: transparent;
29 29
30 &::before, 30 &::before,
31 &::after { 31 &::after {
32 flex: 1 1 auto; 32 flex: 1 1 auto;
33 inline-size: 100%; 33 inline-size: 100%;
34 block-size: props.get(vars.$strong--border-width); 34 block-size: props.get(vars.$strong--border-width);
35 content: ''; 35 content: "";
36 background-color: props.get(vars.$strong--bg-color); 36 background-color: props.get(vars.$strong--bg-color);
37 } 37 }
38 38
@@ -40,15 +40,15 @@
40 display: block; 40 display: block;
41 } 41 }
42 42
43 @include bem.elem('label') { 43 @include bem.elem("label") {
44 flex: 0 0 auto; 44 flex: 0 0 auto;
45 } 45 }
46 46
47 @include bem.modifier('vertical') { 47 @include bem.modifier("vertical") {
48 align-self: stretch; 48 align-self: stretch;
49 inline-size: props.get(vars.$vertical--border-width); 49 inline-size: props.get(vars.$vertical--border-width);
50 block-size: auto; 50 block-size: auto;
51 margin-block: 0; 51 margin-block: 0;
52 background-color: props.get(vars.$strong--bg-color); 52 background-color: props.get(vars.$strong--bg-color);
53 53
54 &::before, 54 &::before,
@@ -57,13 +57,13 @@
57 } 57 }
58 } 58 }
59 59
60 @include bem.modifier('dot') { 60 @include bem.modifier("dot") {
61 align-self: center; 61 align-self: center;
62 inline-size: props.get(vars.$dot--size); 62 inline-size: props.get(vars.$dot--size);
63 block-size: props.get(vars.$dot--size); 63 block-size: props.get(vars.$dot--size);
64 margin-block: 0; 64 margin-block: 0;
65 background-color: props.get(vars.$strong--bg-color); 65 background-color: props.get(vars.$strong--bg-color);
66 border-radius: props.get(vars.$dot--size); 66 border-radius: props.get(vars.$dot--size);
67 67
68 &::before, 68 &::before,
69 &::after { 69 &::after {
@@ -71,73 +71,73 @@
71 } 71 }
72 } 72 }
73 73
74 @include bem.modifier('medium') { 74 @include bem.modifier("medium") {
75 font-size: props.get(vars.$medium--label-font-size); 75 font-size: props.get(vars.$medium--label-font-size);
76 font-weight: 500; 76 font-weight: 500;
77 color: props.get(vars.$medium--label-color); 77 color: props.get(vars.$medium--label-color);
78 78
79 &::before, 79 &::before,
80 &::after { 80 &::after {
81 block-size: props.get(vars.$medium--border-width); 81 block-size: props.get(vars.$medium--border-width);
82 background-color: props.get(vars.$medium--bg-color); 82 background-color: props.get(vars.$medium--bg-color);
83 } 83 }
84 84
85 @include bem.modifier('vertical') { 85 @include bem.modifier("vertical") {
86 background-color: props.get(vars.$medium--bg-color); 86 background-color: props.get(vars.$medium--bg-color);
87 } 87 }
88 88
89 @include bem.modifier('dot') { 89 @include bem.modifier("dot") {
90 background-color: props.get(vars.$medium--bg-color); 90 background-color: props.get(vars.$medium--bg-color);
91 } 91 }
92 } 92 }
93 93
94 @include bem.modifier('quiet') { 94 @include bem.modifier("quiet") {
95 font-size: props.get(vars.$quiet--label-font-size); 95 font-size: props.get(vars.$quiet--label-font-size);
96 font-weight: 500; 96 font-weight: 500;
97 color: props.get(vars.$quiet--label-color); 97 color: props.get(vars.$quiet--label-color);
98 98
99 &::before, 99 &::before,
100 &::after { 100 &::after {
101 block-size: props.get(vars.$quiet--border-width); 101 block-size: props.get(vars.$quiet--border-width);
102 background-color: props.get(vars.$quiet--bg-color); 102 background-color: props.get(vars.$quiet--bg-color);
103 } 103 }
104 104
105 @include bem.modifier('vertical') { 105 @include bem.modifier("vertical") {
106 background-color: props.get(vars.$vertical--quiet--bg-color); 106 background-color: props.get(vars.$vertical--quiet--bg-color);
107 } 107 }
108 108
109 @include bem.modifier('dot') { 109 @include bem.modifier("dot") {
110 background-color: props.get(vars.$dot--quiet--bg-color); 110 background-color: props.get(vars.$dot--quiet--bg-color);
111 } 111 }
112 } 112 }
113 113
114 @include bem.modifier('faint') { 114 @include bem.modifier("faint") {
115 font-size: props.get(vars.$faint--label-font-size); 115 font-size: props.get(vars.$faint--label-font-size);
116 font-weight: 500; 116 font-weight: 500;
117 color: props.get(vars.$faint--label-color); 117 color: props.get(vars.$faint--label-color);
118 118
119 &::before, 119 &::before,
120 &::after { 120 &::after {
121 block-size: props.get(vars.$faint--border-width); 121 block-size: props.get(vars.$faint--border-width);
122 background-color: props.get(vars.$faint--bg-color); 122 background-color: props.get(vars.$faint--bg-color);
123 } 123 }
124 124
125 @include bem.modifier('vertical') { 125 @include bem.modifier("vertical") {
126 background-color: props.get(vars.$vertical--quiet--bg-color); 126 background-color: props.get(vars.$vertical--quiet--bg-color);
127 } 127 }
128 128
129 @include bem.modifier('dot') { 129 @include bem.modifier("dot") {
130 background-color: props.get(vars.$dot--quiet--bg-color); 130 background-color: props.get(vars.$dot--quiet--bg-color);
131 } 131 }
132 } 132 }
133 133
134 @include bem.modifier('labelled') { 134 @include bem.modifier("labelled") {
135 &::before { 135 &::before {
136 margin-inline-end: 1em; 136 margin-inline-end: 1em;
137 } 137 }
138 138
139 &::after { 139 &::after {
140 display: block; 140 display: block;
141 margin-inline-start: 1em; 141 margin-inline-start: 1em;
142 } 142 }
143 } 143 }
@@ -149,7 +149,7 @@
149 background-color: props.get(vars.$themes, $theme, --bg); 149 background-color: props.get(vars.$themes, $theme, --bg);
150 } 150 }
151 151
152 @include bem.elem('label') { 152 @include bem.elem("label") {
153 color: props.get(vars.$themes, $theme, --label); 153 color: props.get(vars.$themes, $theme, --label);
154 } 154 }
155 } 155 }
@@ -162,39 +162,39 @@
162 background-color: props.get(vars.$static-themes, $theme, --strong, --bg); 162 background-color: props.get(vars.$static-themes, $theme, --strong, --bg);
163 } 163 }
164 164
165 @include bem.elem('label') { 165 @include bem.elem("label") {
166 color: props.get(vars.$static-themes, $theme, --strong, --label); 166 color: props.get(vars.$static-themes, $theme, --strong, --label);
167 } 167 }
168 168
169 @include bem.modifier('medium') { 169 @include bem.modifier("medium") {
170 &::before, 170 &::before,
171 &::after { 171 &::after {
172 background-color: props.get(vars.$static-themes, $theme, --medium, --bg); 172 background-color: props.get(vars.$static-themes, $theme, --medium, --bg);
173 } 173 }
174 174
175 @include bem.elem('label') { 175 @include bem.elem("label") {
176 color: props.get(vars.$static-themes, $theme, --medium, --label); 176 color: props.get(vars.$static-themes, $theme, --medium, --label);
177 } 177 }
178 } 178 }
179 179
180 @include bem.modifier('quiet') { 180 @include bem.modifier("quiet") {
181 &::before, 181 &::before,
182 &::after { 182 &::after {
183 background-color: props.get(vars.$static-themes, $theme, --quiet, --bg); 183 background-color: props.get(vars.$static-themes, $theme, --quiet, --bg);
184 } 184 }
185 185
186 @include bem.elem('label') { 186 @include bem.elem("label") {
187 color: props.get(vars.$static-themes, $theme, --quiet, --label); 187 color: props.get(vars.$static-themes, $theme, --quiet, --label);
188 } 188 }
189 } 189 }
190 190
191 @include bem.modifier('faint') { 191 @include bem.modifier("faint") {
192 &::before, 192 &::before,
193 &::after { 193 &::after {
194 background-color: props.get(vars.$static-themes, $theme, --faint, --bg); 194 background-color: props.get(vars.$static-themes, $theme, --faint, --bg);
195 } 195 }
196 196
197 @include bem.elem('label') { 197 @include bem.elem("label") {
198 color: props.get(vars.$static-themes, $theme, --faint, --label); 198 color: props.get(vars.$static-themes, $theme, --faint, --label);
199 } 199 }
200 } 200 }
diff --git a/src/objects/_divider.vars.scss b/src/objects/_divider.vars.scss
index a8b0f9f..38224d4 100644
--- a/src/objects/_divider.vars.scss
+++ b/src/objects/_divider.vars.scss
@@ -1,80 +1,153 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6$margin-b: props.def(--o-divider--size, props.get(core.$size--85)) !default; 6$margin-b: props.def(--o-divider--size, props.get(core.$size--85)) !default;
7$vertical--border-width: props.def(--o-divider--vertical--width, props.get(core.$border-width--thin)) !default; 7$vertical--border-width: props.def(
8$dot--size: props.def(--o-divider--dot--size, props.get(core.$size--50)) !default; 8 --o-divider--vertical--width,
9$letter-spacing: props.def(--o-divider--letter-spacing, 1px) !default; 9 props.get(core.$border-width--thin)
10) !default;
11$dot--size: props.def(--o-divider--dot--size, props.get(core.$size--50)) !default;
12$letter-spacing: props.def(--o-divider--letter-spacing, 1px) !default;
10 13
11$strong--border-width: props.def(--o-divider--strong--border-width, props.get(core.$border-width--thick)) !default; 14$strong--border-width: props.def(
12$strong--label-font-size: props.def(--o-divider--strong--label-font-size, props.get(core.$font-size--100)) !default; 15 --o-divider--strong--border-width,
16 props.get(core.$border-width--thick)
17) !default;
18$strong--label-font-size: props.def(
19 --o-divider--strong--label-font-size,
20 props.get(core.$font-size--100)
21) !default;
13 22
14$medium--border-width: props.def(--o-divider--medium--border-width, props.get(core.$border-width--medium)) !default; 23$medium--border-width: props.def(
15$medium--label-font-size: props.def(--o-divider--medium--label-font-size, props.get(core.$font-size--75)) !default; 24 --o-divider--medium--border-width,
25 props.get(core.$border-width--medium)
26) !default;
27$medium--label-font-size: props.def(
28 --o-divider--medium--label-font-size,
29 props.get(core.$font-size--75)
30) !default;
16 31
17$quiet--border-width: props.def(--o-divider--quiet--border-width, props.get(core.$border-width--thin)) !default; 32$quiet--border-width: props.def(
18$quiet--label-font-size: props.def(--o-divider--quiet--label-font-size, props.get(core.$font-size--50)) !default; 33 --o-divider--quiet--border-width,
34 props.get(core.$border-width--thin)
35) !default;
36$quiet--label-font-size: props.def(
37 --o-divider--quiet--label-font-size,
38 props.get(core.$font-size--50)
39) !default;
19 40
20$faint--border-width: props.def(--o-divider--faint--border-width, props.get(core.$border-width--thin)) !default; 41$faint--border-width: props.def(
21$faint--label-font-size: props.def(--o-divider--faint--label-font-size, props.get(core.$font-size--50)) !default; 42 --o-divider--faint--border-width,
43 props.get(core.$border-width--thin)
44) !default;
45$faint--label-font-size: props.def(
46 --o-divider--faint--label-font-size,
47 props.get(core.$font-size--50)
48) !default;
22 49
23$strong--bg-color: props.def(--o-divider--strong--bg-color, props.get(core.$theme, --text), 'color') !default; 50$strong--bg-color: props.def(
24$strong--label-color: props.def(--o-divider--strong--label-color, props.get(core.$theme, --text), 'color') !default; 51 --o-divider--strong--bg-color,
52 props.get(core.$theme, --text),
53 "color"
54) !default;
55$strong--label-color: props.def(
56 --o-divider--strong--label-color,
57 props.get(core.$theme, --text),
58 "color"
59) !default;
25 60
26$medium--bg-color: props.def(--o-divider--medium--bg-color, props.get(core.$theme, --border), 'color') !default; 61$medium--bg-color: props.def(
27$medium--label-color: props.def(--o-divider--medium--label-color, props.get(core.$theme, --text-mute), 'color') !default; 62 --o-divider--medium--bg-color,
63 props.get(core.$theme, --border),
64 "color"
65) !default;
66$medium--label-color: props.def(
67 --o-divider--medium--label-color,
68 props.get(core.$theme, --text-mute),
69 "color"
70) !default;
28 71
29$quiet--bg-color: props.def(--o-divider--quiet--bg-color, props.get(core.$theme, --border), 'color') !default; 72$quiet--bg-color: props.def(
30$quiet--label-color: props.def(--o-divider--quiet--label-color, props.get(core.$theme, --text-mute-more), 'color') !default; 73 --o-divider--quiet--bg-color,
74 props.get(core.$theme, --border),
75 "color"
76) !default;
77$quiet--label-color: props.def(
78 --o-divider--quiet--label-color,
79 props.get(core.$theme, --text-mute-more),
80 "color"
81) !default;
31 82
32$faint--bg-color: props.def(--o-divider--faint--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 83$faint--bg-color: props.def(
33$faint--label-color: props.def(--o-divider--faint--label-color, props.get(core.$theme, --text-disabled), 'color') !default; 84 --o-divider--faint--bg-color,
85 props.get(core.$theme, --border-mute),
86 "color"
87) !default;
88$faint--label-color: props.def(
89 --o-divider--faint--label-color,
90 props.get(core.$theme, --text-disabled),
91 "color"
92) !default;
34 93
35$vertical--quiet--bg-color: props.def(--o-divider--vertical--quiet--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 94$vertical--quiet--bg-color: props.def(
95 --o-divider--vertical--quiet--bg-color,
96 props.get(core.$theme, --border-mute),
97 "color"
98) !default;
36 99
37$dot--quiet--bg-color: props.def(--o-divider--dot--quiet--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 100$dot--quiet--bg-color: props.def(
101 --o-divider--dot--quiet--bg-color,
102 props.get(core.$theme, --border-mute),
103 "color"
104) !default;
38 105
39$static-themes: props.def(--o-divider, (), 'color'); 106$static-themes: props.def(--o-divider, (), "color");
40 107
41@each $theme in map.keys(props.get(core.$transparent-colors)) { 108@each $theme in map.keys(props.get(core.$transparent-colors)) {
42 $button-theme: --static-#{string.slice($theme, 3)}; 109 $button-theme: --static-#{string.slice($theme, 3)};
43 110
44 $static-themes: props.merge($static-themes, ( 111 $static-themes: props.merge(
45 $button-theme: ( 112 $static-themes,
46 --strong: ( 113 (
47 --bg: props.get(core.$transparent-colors, $theme, --800), 114 $button-theme: (
48 --label: props.get(core.$transparent-colors, $theme, --900), 115 --strong: (
49 ), 116 --bg: props.get(core.$transparent-colors, $theme, --800),
50 --medium: ( 117 --label: props.get(core.$transparent-colors, $theme, --900),
51 --bg: props.get(core.$transparent-colors, $theme, --300), 118 ),
52 --label: props.get(core.$transparent-colors, $theme, --500), 119 --medium: (
53 ), 120 --bg: props.get(core.$transparent-colors, $theme, --300),
54 --quiet: ( 121 --label: props.get(core.$transparent-colors, $theme, --500),
55 --bg: props.get(core.$transparent-colors, $theme, --300), 122 ),
56 --label: props.get(core.$transparent-colors, $theme, --500), 123 --quiet: (
57 ), 124 --bg: props.get(core.$transparent-colors, $theme, --300),
58 --faint: ( 125 --label: props.get(core.$transparent-colors, $theme, --500),
59 --bg: props.get(core.$transparent-colors, $theme, --200), 126 ),
60 --label: props.get(core.$transparent-colors, $theme, --400), 127 --faint: (
61 ), 128 --bg: props.get(core.$transparent-colors, $theme, --200),
129 --label: props.get(core.$transparent-colors, $theme, --400),
130 ),
131 ),
62 ) 132 )
63 )); 133 );
64} 134}
65 135
66$themes-config: ( 136$themes-config: (
67 accent: --accent, 137 accent: --accent,
68 negative: --negative, 138 negative: --negative,
69) !default; 139) !default;
70 140
71$themes: props.def(--o-divider, (), 'color'); 141$themes: props.def(--o-divider, (), "color");
72 142
73@each $theme, $key in $themes-config { 143@each $theme, $key in $themes-config {
74 $themes: props.merge($themes, ( 144 $themes: props.merge(
75 --#{$theme}: ( 145 $themes,
76 --bg: props.get(core.$theme, $key, --800), 146 (
77 --label: props.get(core.$theme, $key, --1000), 147 --#{$theme}: (
148 --bg: props.get(core.$theme, $key, --800),
149 --label: props.get(core.$theme, $key, --1000),
150 )
78 ) 151 )
79 )); 152 );
80} 153}
diff --git a/src/objects/_emoji.scss b/src/objects/_emoji.scss
index 655e662..0257b32 100644
--- a/src/objects/_emoji.scss
+++ b/src/objects/_emoji.scss
@@ -1,49 +1,55 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5@use 'icon.vars' as icon; 5@use "icon.vars" as icon;
6 6
7@forward 'emoji.vars'; 7@forward "emoji.vars";
8@use 'emoji.vars' as vars; 8@use "emoji.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.object('emoji') { 13 @include bem.object("emoji") {
14 position: relative; 14 position: relative;
15 display: inline-block; 15 display: inline-block;
16 inline-size: calc(props.get(vars.$size)); 16 inline-size: calc(props.get(vars.$size));
17 block-size: calc(props.get(vars.$size)); 17 block-size: calc(props.get(vars.$size));
18 padding: calc(props.get(vars.$pad)); 18 padding: calc(props.get(vars.$pad));
19 margin: calc(-1 * props.get(vars.$pad)); 19 margin: calc(-1 * props.get(vars.$pad));
20 vertical-align: props.get(vars.$valign); 20 vertical-align: props.get(vars.$valign);
21 object-fit: contain; 21 object-fit: contain;
22 22
23 @include bem.modifier('icon') { 23 @include bem.modifier("icon") {
24 margin: calc(-1 * props.get(vars.$pad) - .5 * (props.get(vars.$size) - props.get(icon.$size))); 24 margin: calc(
25 -1 * props.get(vars.$pad) - 0.5 * (props.get(vars.$size) - props.get(icon.$size))
26 );
25 vertical-align: props.get(icon.$valign); 27 vertical-align: props.get(icon.$valign);
26 } 28 }
27 29
28 @each $mod, $size, $valign in vars.$sizes { 30 @each $mod, $size, $valign in vars.$sizes {
29 @include bem.modifier($mod) { 31 @include bem.modifier($mod) {
30 inline-size: props.get($size); 32 inline-size: props.get($size);
31 block-size: props.get($size); 33 block-size: props.get($size);
32 vertical-align: props.get($valign); 34 vertical-align: props.get($valign);
33 35
34 @include bem.modifier('icon') { 36 @include bem.modifier("icon") {
35 margin: calc(-1 * props.get(vars.$pad) - .5 * (props.get($size) - props.get(icon.$size))); 37 margin: calc(
38 -1 * props.get(vars.$pad) - 0.5 * (props.get($size) - props.get(icon.$size))
39 );
36 } 40 }
37 } 41 }
38 } 42 }
39 43
40 @include bem.modifier('zoomable') { 44 @include bem.modifier("zoomable") {
41 border-radius: calc(props.get(vars.$rounding) / props.get(vars.$zoom)); 45 border-radius: calc(props.get(vars.$rounding) / props.get(vars.$zoom));
42 transition: transform .2s ease, background-color .2s ease; 46 transition:
47 transform 0.2s ease,
48 background-color 0.2s ease;
43 49
44 &:hover { 50 &:hover {
45 background-color: props.get(vars.$bg-color); 51 background-color: props.get(vars.$bg-color);
46 transform: scale(props.get(vars.$zoom)); 52 transform: scale(props.get(vars.$zoom));
47 } 53 }
48 } 54 }
49 } 55 }
diff --git a/src/objects/_emoji.vars.scss b/src/objects/_emoji.vars.scss
index cf940cf..1c2a0e2 100644
--- a/src/objects/_emoji.vars.scss
+++ b/src/objects/_emoji.vars.scss
@@ -1,26 +1,26 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$size: props.def(--o-emoji--size, calc(1 / 14 * 18em)) !default; 5$size: props.def(--o-emoji--size, calc(1 / 14 * 18em)) !default;
6$pad: props.def(--o-emoji--pad, .3em) !default; 6$pad: props.def(--o-emoji--pad, 0.3em) !default;
7$rounding: props.def(--o-emoji--rounding, props.get(core.$rounding--sm)) !default; 7$rounding: props.def(--o-emoji--rounding, props.get(core.$rounding--sm)) !default;
8$zoom: props.def(--o-emoji--zoom, 3) !default; 8$zoom: props.def(--o-emoji--zoom, 3) !default;
9$valign: props.def(--o-emoji--valign, -.25em) !default; 9$valign: props.def(--o-emoji--valign, -0.25em) !default;
10 10
11$size--125: props.def(--o-emoji--125--size, calc(1 / 14 * 23em)) !default; 11$size--125: props.def(--o-emoji--125--size, calc(1 / 14 * 23em)) !default;
12$valign--125: props.def(--o-emoji--125--valign, -.45em) !default; 12$valign--125: props.def(--o-emoji--125--valign, -0.45em) !default;
13 13
14$size--150: props.def(--o-emoji--150--size, calc(1 / 14 * 28em)) !default; 14$size--150: props.def(--o-emoji--150--size, calc(1 / 14 * 28em)) !default;
15$valign--150: props.def(--o-emoji--150--valign, -.65em) !default; 15$valign--150: props.def(--o-emoji--150--valign, -0.65em) !default;
16 16
17$size--200: props.def(--o-emoji--200--size, calc(1 / 14 * 38em)) !default; 17$size--200: props.def(--o-emoji--200--size, calc(1 / 14 * 38em)) !default;
18$valign--200: props.def(--o-emoji--200--valign, -1em) !default; 18$valign--200: props.def(--o-emoji--200--valign, -1em) !default;
19 19
20$sizes: ( 20$sizes: (
21 '125' $size--125 $valign--125, 21 "125" $size--125 $valign--125,
22 '150' $size--150 $valign--150, 22 "150" $size--150 $valign--150,
23 '200' $size--200 $valign--200, 23 "200" $size--200 $valign--200
24) !default; 24) !default;
25 25
26$bg-color: props.def(--o-emoji--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 26$bg-color: props.def(--o-emoji--bg-color, props.get(core.$theme, --border-mute), "color") !default;
diff --git a/src/objects/_field-label.scss b/src/objects/_field-label.scss
index 23875f5..fb664b4 100644
--- a/src/objects/_field-label.scss
+++ b/src/objects/_field-label.scss
@@ -1,74 +1,74 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'field-label.vars'; 6@forward "field-label.vars";
7@use 'field-label.vars' as vars; 7@use "field-label.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.object('field-label') { 12 @include bem.object("field-label") {
13 @include bem.elem('label') { 13 @include bem.elem("label") {
14 display: block; 14 display: block;
15 flex: 0 0 auto; 15 flex: 0 0 auto;
16 padding-inline-end: props.get(vars.$spacing-i); 16 padding-inline-end: props.get(vars.$spacing-i);
17 font-size: props.get(vars.$label-font-size); 17 font-size: props.get(vars.$label-font-size);
18 font-weight: 400; 18 font-weight: 400;
19 line-height: 1.3; 19 line-height: 1.3;
20 color: props.get(vars.$label-color); 20 color: props.get(vars.$label-color);
21 21
22 @include bem.next-elem('content') { 22 @include bem.next-elem("content") {
23 margin-block-start: props.get(vars.$spacing-b); 23 margin-block-start: props.get(vars.$spacing-b);
24 } 24 }
25 } 25 }
26 26
27 @include bem.elem('content') { 27 @include bem.elem("content") {
28 display: block; 28 display: block;
29 flex: 1 1 auto; 29 flex: 1 1 auto;
30 } 30 }
31 31
32 @include bem.elem('hint') { 32 @include bem.elem("hint") {
33 display: block; 33 display: block;
34 margin-block-start: props.get(vars.$spacing-b); 34 margin-block-start: props.get(vars.$spacing-b);
35 font-size: props.get(vars.$hint-font-size); 35 font-size: props.get(vars.$hint-font-size);
36 color: props.get(vars.$hint-color); 36 color: props.get(vars.$hint-color);
37 } 37 }
38 38
39 @include bem.is('invalid') { 39 @include bem.is("invalid") {
40 @include bem.elem('hint') { 40 @include bem.elem("hint") {
41 color: props.get(vars.$error-hint-color); 41 color: props.get(vars.$error-hint-color);
42 } 42 }
43 } 43 }
44 44
45 @include bem.is('disabled') { 45 @include bem.is("disabled") {
46 @include bem.elem('label', 'hint') { 46 @include bem.elem("label", "hint") {
47 color: props.get(vars.$disabled-color); 47 color: props.get(vars.$disabled-color);
48 } 48 }
49 } 49 }
50 50
51 @include bem.modifier('align-start', 'align-end') { 51 @include bem.modifier("align-start", "align-end") {
52 display: flex; 52 display: flex;
53 align-items: baseline; 53 align-items: baseline;
54 54
55 @include bem.elem('label') { 55 @include bem.elem("label") {
56 display: inline-block; 56 display: inline-block;
57 57
58 @include bem.next-elem('content') { 58 @include bem.next-elem("content") {
59 margin-block-start: 0; 59 margin-block-start: 0;
60 } 60 }
61 } 61 }
62 } 62 }
63 63
64 @include bem.modifier('align-start') { 64 @include bem.modifier("align-start") {
65 @include bem.elem('label') { 65 @include bem.elem("label") {
66 text-align: start; 66 text-align: start;
67 } 67 }
68 } 68 }
69 69
70 @include bem.modifier('align-end') { 70 @include bem.modifier("align-end") {
71 @include bem.elem('label') { 71 @include bem.elem("label") {
72 text-align: end; 72 text-align: end;
73 } 73 }
74 } 74 }
diff --git a/src/objects/_field-label.vars.scss b/src/objects/_field-label.vars.scss
index 5bd4547..4588e70 100644
--- a/src/objects/_field-label.vars.scss
+++ b/src/objects/_field-label.vars.scss
@@ -1,12 +1,34 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$spacing-i: props.def(--o-field-label--spacing-i, props.get(core.$size--150)) !default; 4$spacing-i: props.def(--o-field-label--spacing-i, props.get(core.$size--150)) !default;
5$spacing-b: props.def(--o-field-label--spacing-b, props.get(core.$size--85)) !default; 5$spacing-b: props.def(--o-field-label--spacing-b, props.get(core.$size--85)) !default;
6$label-font-size: props.def(--o-field-label--label-font-size, props.get(core.$font-size--75)) !default; 6$label-font-size: props.def(
7$hint-font-size: props.def(--o-field-label--hint-font-size, props.get(core.$font-size--75)) !default; 7 --o-field-label--label-font-size,
8 props.get(core.$font-size--75)
9) !default;
10$hint-font-size: props.def(
11 --o-field-label--hint-font-size,
12 props.get(core.$font-size--75)
13) !default;
8 14
9$label-color: props.def(--o-field-label--label-color, props.get(core.$theme, --text-mute), 'color') !default; 15$label-color: props.def(
10$hint-color: props.def(--o-field-label--hint-color, props.get(core.$theme, --text-mute), 'color') !default; 16 --o-field-label--label-color,
11$error-hint-color: props.def(--o-field-label--error-hint-color, props.get(core.$theme, --negative, --900), 'color') !default; 17 props.get(core.$theme, --text-mute),
12$disabled-color: props.def(--o-field-label--disabled-color, props.get(core.$theme, --text-disabled), 'color') !default; 18 "color"
19) !default;
20$hint-color: props.def(
21 --o-field-label--hint-color,
22 props.get(core.$theme, --text-mute),
23 "color"
24) !default;
25$error-hint-color: props.def(
26 --o-field-label--error-hint-color,
27 props.get(core.$theme, --negative, --900),
28 "color"
29) !default;
30$disabled-color: props.def(
31 --o-field-label--disabled-color,
32 props.get(core.$theme, --text-disabled),
33 "color"
34) !default;
diff --git a/src/objects/_figure.scss b/src/objects/_figure.scss
index 04b9bdf..d3e37b3 100644
--- a/src/objects/_figure.scss
+++ b/src/objects/_figure.scss
@@ -1,25 +1,25 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'figure.vars'; 6@forward "figure.vars";
7@use 'figure.vars' as vars; 7@use "figure.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.object('figure') { 12 @include bem.object("figure") {
13 @include bem.elem('caption') { 13 @include bem.elem("caption") {
14 padding-block: props.get(vars.$pad-b); 14 padding-block: props.get(vars.$pad-b);
15 font-size: props.get(vars.$font-size); 15 font-size: props.get(vars.$font-size);
16 color: props.get(vars.$text-color); 16 color: props.get(vars.$text-color);
17 border-block-end: props.get(vars.$border-width) solid props.get(vars.$border-color); 17 border-block-end: props.get(vars.$border-width) solid props.get(vars.$border-color);
18 18
19 &::before { 19 &::before {
20 display: block; 20 display: block;
21 margin-block: -100em 100em; 21 margin-block: -100em 100em;
22 content: ''; 22 content: "";
23 } 23 }
24 } 24 }
25 } 25 }
diff --git a/src/objects/_figure.vars.scss b/src/objects/_figure.vars.scss
index 3de3406..936932d 100644
--- a/src/objects/_figure.vars.scss
+++ b/src/objects/_figure.vars.scss
@@ -1,9 +1,17 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$pad-b: props.def(--o-figure--pad-b, props.get(core.$size--100)) !default; 4$pad-b: props.def(--o-figure--pad-b, props.get(core.$size--100)) !default;
5$border-width: props.def(--o-figure--border-width, props.get(core.$border-width--thin)) !default; 5$border-width: props.def(--o-figure--border-width, props.get(core.$border-width--thin)) !default;
6$font-size: props.def(--o-figure--font-size, props.get(core.$font-size--100)) !default; 6$font-size: props.def(--o-figure--font-size, props.get(core.$font-size--100)) !default;
7 7
8$text-color: props.def(--o-figure--text-color, props.get(core.$theme, --text-mute-more), 'color') !default; 8$text-color: props.def(
9$border-color: props.def(--o-figure--border-color, props.get(core.$theme, --border), 'color') !default; 9 --o-figure--text-color,
10 props.get(core.$theme, --text-mute-more),
11 "color"
12) !default;
13$border-color: props.def(
14 --o-figure--border-color,
15 props.get(core.$theme, --border),
16 "color"
17) !default;
diff --git a/src/objects/_heading.scss b/src/objects/_heading.scss
index 0e8392e..87a6269 100644
--- a/src/objects/_heading.scss
+++ b/src/objects/_heading.scss
@@ -1,64 +1,70 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:meta'; 2@use "sass:meta";
3@use 'sass:string'; 3@use "sass:string";
4@use 'pkg:iro-sass/src/bem'; 4@use "pkg:iro-sass/bem";
5@use 'pkg:iro-sass/src/props'; 5@use "pkg:iro-sass/props";
6@use '../props' as *; 6@use "../props" as *;
7 7
8@forward 'heading.vars'; 8@forward "heading.vars";
9@use 'heading.vars' as vars; 9@use "heading.vars" as vars;
10 10
11@mixin styles { 11@mixin styles {
12 @include materialize-at-root(meta.module-variables('vars')); 12 @include materialize-at-root(meta.module-variables("vars"));
13 13
14 @include bem.object('heading') { 14 @include bem.object("heading") {
15 display: block; 15 display: block;
16 margin-block-start: props.get(vars.$margin-bs); 16 margin-block-start: props.get(vars.$margin-bs);
17 font-family: props.get(vars.$font-family); 17 font-family: props.get(vars.$font-family);
18 font-weight: props.get(vars.$font-weight); 18 font-weight: props.get(vars.$font-weight);
19 font-feature-settings: props.get(vars.$feature-settings); 19 font-feature-settings: props.get(vars.$feature-settings);
20 line-height: props.get(vars.$line-height); 20 line-height: props.get(vars.$line-height);
21 color: props.get(vars.$text-color); 21 color: props.get(vars.$text-color);
22 text-transform: props.get(vars.$text-transform); 22 text-transform: props.get(vars.$text-transform);
23 letter-spacing: normal; 23 letter-spacing: normal;
24 24
25 & + & { 25 & + & {
26 margin-block-start: props.get(vars.$margin-bs-sibling); 26 margin-block-start: props.get(vars.$margin-bs-sibling);
27 } 27 }
28 28
29 @include bem.elem('highlight') { 29 @include bem.elem("highlight") {
30 background-image: linear-gradient(to top, 30 background-image: linear-gradient(
31 transparent props.get(vars.$bg-start), 31 to top,
32 props.get(vars.$bg-color) props.get(vars.$bg-start), 32 transparent props.get(vars.$bg-start),
33 props.get(vars.$bg-color) props.get(vars.$bg-end), 33 props.get(vars.$bg-color) props.get(vars.$bg-start),
34 transparent props.get(vars.$bg-end)); 34 props.get(vars.$bg-color) props.get(vars.$bg-end),
35 transparent props.get(vars.$bg-end)
36 );
35 } 37 }
36 38
37 @each $mod, $font-family, $line-height, $font-size, $font-weight, $letter-spacing, $feature-settings, $text-transform, $text-color in vars.$sizes { 39 @each $mod, $font-family, $line-height, $font-size, $font-weight, $letter-spacing,
40 $feature-settings, $text-transform, $text-color in vars.$sizes
41 {
38 @include bem.modifier($mod) { 42 @include bem.modifier($mod) {
39 font-family: props.get($font-family); 43 font-family: props.get($font-family);
40 font-size: props.get($font-size); 44 font-size: props.get($font-size);
41 font-weight: props.get($font-weight); 45 font-weight: props.get($font-weight);
42 font-feature-settings: props.get($feature-settings); 46 font-feature-settings: props.get($feature-settings);
43 line-height: props.get($line-height); 47 line-height: props.get($line-height);
44 color: props.get($text-color); 48 color: props.get($text-color);
45 text-transform: props.get($text-transform); 49 text-transform: props.get($text-transform);
46 letter-spacing: props.get($letter-spacing); 50 letter-spacing: props.get($letter-spacing);
47 } 51 }
48 } 52 }
49 53
50 @include bem.modifier('display') { 54 @include bem.modifier("display") {
51 @each $mod, $font-family, $line-height, $font-size, $font-weight, $letter-spacing, $feature-settings, $text-transform, $text-color in vars.$display--sizes { 55 @each $mod, $font-family, $line-height, $font-size, $font-weight, $letter-spacing,
56 $feature-settings, $text-transform, $text-color in vars.$display--sizes
57 {
52 @include bem.modifier($mod) { 58 @include bem.modifier($mod) {
53 font-family: props.get($font-family); 59 font-family: props.get($font-family);
54 font-size: props.get($font-size); 60 font-size: props.get($font-size);
55 font-weight: props.get($font-weight); 61 font-weight: props.get($font-weight);
56 font-feature-settings: props.get($feature-settings); 62 font-feature-settings: props.get($feature-settings);
57 line-height: props.get($line-height); 63 line-height: props.get($line-height);
58 color: props.get($text-color); 64 color: props.get($text-color);
59 text-transform: props.get($text-transform); 65 text-transform: props.get($text-transform);
60 letter-spacing: props.get($letter-spacing); 66 letter-spacing: props.get($letter-spacing);
61 transform: translateX(props.get(vars.$offset)); 67 transform: translateX(props.get(vars.$offset));
62 } 68 }
63 } 69 }
64 } 70 }
@@ -73,18 +79,26 @@
73 } 79 }
74 } 80 }
75 81
76 @include bem.elem('highlight') { 82 @include bem.elem("highlight") {
77 background-image: linear-gradient(to top, 83 background-image: linear-gradient(
78 transparent props.get(vars.$bg-start), 84 to top,
79 props.get(vars.$static-themes, $theme, --bg-color) props.get(vars.$bg-start), 85 transparent props.get(vars.$bg-start),
80 props.get(vars.$static-themes, $theme, --bg-color) props.get(vars.$bg-end), 86 props.get(vars.$static-themes, $theme, --bg-color) props.get(vars.$bg-start),
81 transparent props.get(vars.$bg-end)); 87 props.get(vars.$static-themes, $theme, --bg-color) props.get(vars.$bg-end),
88 transparent props.get(vars.$bg-end)
89 );
82 } 90 }
83 91
84 @include bem.modifier('display') { 92 @include bem.modifier("display") {
85 @each $mod, $value in vars.$sizes { 93 @each $mod, $value in vars.$sizes {
86 @include bem.modifier($mod) { 94 @include bem.modifier($mod) {
87 color: props.get(vars.$static-themes, $theme, --display, --#{$mod}, --text-color); 95 color: props.get(
96 vars.$static-themes,
97 $theme,
98 --display,
99 --#{$mod},
100 --text-color
101 );
88 } 102 }
89 } 103 }
90 } 104 }
diff --git a/src/objects/_heading.vars.scss b/src/objects/_heading.vars.scss
index 4267b8c..8943622 100644
--- a/src/objects/_heading.vars.scss
+++ b/src/objects/_heading.vars.scss
@@ -1,208 +1,472 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6$offset: props.def(--o-heading--offset, -.02em) !default; 6$offset: props.def(--o-heading--offset, -0.02em) !default;
7$margin-bs: props.def(--o-heading--margin-bs, props.get(core.$size--700)) !default; 7$margin-bs: props.def(--o-heading--margin-bs, props.get(core.$size--700)) !default;
8$margin-bs-sibling: props.def(--o-heading--margin-bs-sibling, props.get(core.$size--325)) !default; 8$margin-bs-sibling: props.def(--o-heading--margin-bs-sibling, props.get(core.$size--325)) !default;
9 9
10$text-color: props.def(--o-heading--text-color, props.get(core.$theme, --heading), 'color') !default; 10$text-color: props.def(
11$bg-color: props.def(--o-heading--bg-color, props.get(core.$theme, --base, --50), 'color') !default; 11 --o-heading--text-color,
12 props.get(core.$theme, --heading),
13 "color"
14) !default;
15$bg-color: props.def(--o-heading--bg-color, props.get(core.$theme, --base, --50), "color") !default;
12 16
13$text-color--xxl: props.def(--o-heading--xxl--text-color, props.get(core.$theme, --heading), 'color') !default; 17$text-color--xxl: props.def(
14$text-color--xl: props.def(--o-heading--xl--text-color, props.get($text-color--xxl), 'color') !default; 18 --o-heading--xxl--text-color,
15$text-color--lg: props.def(--o-heading--lg--text-color, props.get($text-color--xxl), 'color') !default; 19 props.get(core.$theme, --heading),
16$text-color--md: props.def(--o-heading--md--text-color, props.get($text-color--xxl), 'color') !default; 20 "color"
17$text-color--sm: props.def(--o-heading--sm--text-color, props.get(core.$theme, --text-mute-more), 'color') !default; 21) !default;
18$text-color--xs: props.def(--o-heading--xs--text-color, props.get($text-color--sm), 'color') !default; 22$text-color--xl: props.def(
23 --o-heading--xl--text-color,
24 props.get($text-color--xxl),
25 "color"
26) !default;
27$text-color--lg: props.def(
28 --o-heading--lg--text-color,
29 props.get($text-color--xxl),
30 "color"
31) !default;
32$text-color--md: props.def(
33 --o-heading--md--text-color,
34 props.get($text-color--xxl),
35 "color"
36) !default;
37$text-color--sm: props.def(
38 --o-heading--sm--text-color,
39 props.get(core.$theme, --text-mute-more),
40 "color"
41) !default;
42$text-color--xs: props.def(
43 --o-heading--xs--text-color,
44 props.get($text-color--sm),
45 "color"
46) !default;
19 47
20$display--text-color--xxl: props.def(--o-heading--display--xxl--text-color, props.get(core.$theme, --heading), 'color') !default; 48$display--text-color--xxl: props.def(
21$display--text-color--xl: props.def(--o-heading--display--xl--text-color, props.get($display--text-color--xxl), 'color') !default; 49 --o-heading--display--xxl--text-color,
22$display--text-color--lg: props.def(--o-heading--display--lg--text-color, props.get($display--text-color--xxl), 'color') !default; 50 props.get(core.$theme, --heading),
23$display--text-color--md: props.def(--o-heading--display--md--text-color, props.get($display--text-color--xxl), 'color') !default; 51 "color"
24$display--text-color--sm: props.def(--o-heading--display--sm--text-color, props.get($display--text-color--xxl), 'color') !default; 52) !default;
25$display--text-color--xs: props.def(--o-heading--display--xs--text-color, props.get(core.$theme, --text-mute-more), 'color') !default; 53$display--text-color--xl: props.def(
54 --o-heading--display--xl--text-color,
55 props.get($display--text-color--xxl),
56 "color"
57) !default;
58$display--text-color--lg: props.def(
59 --o-heading--display--lg--text-color,
60 props.get($display--text-color--xxl),
61 "color"
62) !default;
63$display--text-color--md: props.def(
64 --o-heading--display--md--text-color,
65 props.get($display--text-color--xxl),
66 "color"
67) !default;
68$display--text-color--sm: props.def(
69 --o-heading--display--sm--text-color,
70 props.get($display--text-color--xxl),
71 "color"
72) !default;
73$display--text-color--xs: props.def(
74 --o-heading--display--xs--text-color,
75 props.get(core.$theme, --text-mute-more),
76 "color"
77) !default;
26 78
27$bg-start: props.def(--o-heading--bg-start, .05em) !default; 79$bg-start: props.def(--o-heading--bg-start, 0.05em) !default;
28$bg-end: props.def(--o-heading--bg-end, .5em) !default; 80$bg-end: props.def(--o-heading--bg-end, 0.5em) !default;
29 81
30$font-family: props.def(--o-heading--font-family, props.get(core.$font--standard--family)) !default; 82$font-family: props.def(--o-heading--font-family, props.get(core.$font--standard--family)) !default;
31$line-height: props.def(--o-heading--line-height, props.get(core.$font--standard--line-height)) !default; 83$line-height: props.def(
32$font-weight: props.def(--o-heading--font-weight, bold) !default; 84 --o-heading--line-height,
33$feature-settings: props.def(--o-heading--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 85 props.get(core.$font--standard--line-height)
34$text-transform: props.def(--o-heading--text-transform, none) !default; 86) !default;
87$font-weight: props.def(--o-heading--font-weight, bold) !default;
88$feature-settings: props.def(
89 --o-heading--feature-settings,
90 props.get(core.$font--standard--feature-settings)
91) !default;
92$text-transform: props.def(--o-heading--text-transform, none) !default;
35 93
36$font-family--xxl: props.def(--o-heading--xxl--font-family, props.get(core.$font--standard--family)) !default; 94$font-family--xxl: props.def(
37$line-height--xxl: props.def(--o-heading--xxl--line-height, props.get(core.$font--standard--line-height)) !default; 95 --o-heading--xxl--font-family,
38$font-size--xxl: props.def(--o-heading--xxl--font-size, props.get(core.$font-size--300)) !default; 96 props.get(core.$font--standard--family)
39$font-weight--xxl: props.def(--o-heading--xxl--font-weight, bold) !default; 97) !default;
40$letter-spacing--xxl: props.def(--o-heading--xxl--letter-spacing, 0) !default; 98$line-height--xxl: props.def(
41$feature-settings--xxl: props.def(--o-heading--xxl--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 99 --o-heading--xxl--line-height,
42$text-transform--xxl: props.def(--o-heading--xxl--text-transform, none) !default; 100 props.get(core.$font--standard--line-height)
101) !default;
102$font-size--xxl: props.def(--o-heading--xxl--font-size, props.get(core.$font-size--300)) !default;
103$font-weight--xxl: props.def(--o-heading--xxl--font-weight, bold) !default;
104$letter-spacing--xxl: props.def(--o-heading--xxl--letter-spacing, 0) !default;
105$feature-settings--xxl: props.def(
106 --o-heading--xxl--feature-settings,
107 props.get(core.$font--standard--feature-settings)
108) !default;
109$text-transform--xxl: props.def(--o-heading--xxl--text-transform, none) !default;
43 110
44$font-family--xl: props.def(--o-heading--xl--font-family, props.get(core.$font--standard--family)) !default; 111$font-family--xl: props.def(
45$line-height--xl: props.def(--o-heading--xl--line-height, props.get(core.$font--standard--line-height)) !default; 112 --o-heading--xl--font-family,
46$font-size--xl: props.def(--o-heading--xl--font-size, props.get(core.$font-size--200)) !default; 113 props.get(core.$font--standard--family)
47$font-weight--xl: props.def(--o-heading--xl--font-weight, bold) !default; 114) !default;
48$letter-spacing--xl: props.def(--o-heading--xl--letter-spacing, 0) !default; 115$line-height--xl: props.def(
49$feature-settings--xl: props.def(--o-heading--xl--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 116 --o-heading--xl--line-height,
50$text-transform--xl: props.def(--o-heading--xl--text-transform, none) !default; 117 props.get(core.$font--standard--line-height)
118) !default;
119$font-size--xl: props.def(--o-heading--xl--font-size, props.get(core.$font-size--200)) !default;
120$font-weight--xl: props.def(--o-heading--xl--font-weight, bold) !default;
121$letter-spacing--xl: props.def(--o-heading--xl--letter-spacing, 0) !default;
122$feature-settings--xl: props.def(
123 --o-heading--xl--feature-settings,
124 props.get(core.$font--standard--feature-settings)
125) !default;
126$text-transform--xl: props.def(--o-heading--xl--text-transform, none) !default;
51 127
52$font-family--lg: props.def(--o-heading--lg--font-family, props.get(core.$font--standard--family)) !default; 128$font-family--lg: props.def(
53$line-height--lg: props.def(--o-heading--lg--line-height, props.get(core.$font--standard--line-height)) !default; 129 --o-heading--lg--font-family,
54$font-size--lg: props.def(--o-heading--lg--font-size, props.get(core.$font-size--150)) !default; 130 props.get(core.$font--standard--family)
55$font-weight--lg: props.def(--o-heading--lg--font-weight, bold) !default; 131) !default;
56$letter-spacing--lg: props.def(--o-heading--lg--letter-spacing, 0) !default; 132$line-height--lg: props.def(
57$feature-settings--lg: props.def(--o-heading--lg--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 133 --o-heading--lg--line-height,
58$text-transform--lg: props.def(--o-heading--lg--text-transform, none) !default; 134 props.get(core.$font--standard--line-height)
135) !default;
136$font-size--lg: props.def(--o-heading--lg--font-size, props.get(core.$font-size--150)) !default;
137$font-weight--lg: props.def(--o-heading--lg--font-weight, bold) !default;
138$letter-spacing--lg: props.def(--o-heading--lg--letter-spacing, 0) !default;
139$feature-settings--lg: props.def(
140 --o-heading--lg--feature-settings,
141 props.get(core.$font--standard--feature-settings)
142) !default;
143$text-transform--lg: props.def(--o-heading--lg--text-transform, none) !default;
59 144
60$font-family--md: props.def(--o-heading--md--font-family, props.get(core.$font--standard--family)) !default; 145$font-family--md: props.def(
61$line-height--md: props.def(--o-heading--md--line-height, props.get(core.$font--standard--line-height)) !default; 146 --o-heading--md--font-family,
62$font-size--md: props.def(--o-heading--md--font-size, props.get(core.$font-size--100)) !default; 147 props.get(core.$font--standard--family)
63$font-weight--md: props.def(--o-heading--md--font-weight, bold) !default; 148) !default;
64$letter-spacing--md: props.def(--o-heading--md--letter-spacing, 0) !default; 149$line-height--md: props.def(
65$feature-settings--md: props.def(--o-heading--md--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 150 --o-heading--md--line-height,
66$text-transform--md: props.def(--o-heading--md--text-transform, none) !default; 151 props.get(core.$font--standard--line-height)
152) !default;
153$font-size--md: props.def(--o-heading--md--font-size, props.get(core.$font-size--100)) !default;
154$font-weight--md: props.def(--o-heading--md--font-weight, bold) !default;
155$letter-spacing--md: props.def(--o-heading--md--letter-spacing, 0) !default;
156$feature-settings--md: props.def(
157 --o-heading--md--feature-settings,
158 props.get(core.$font--standard--feature-settings)
159) !default;
160$text-transform--md: props.def(--o-heading--md--text-transform, none) !default;
67 161
68$font-family--sm: props.def(--o-heading--sm--font-family, props.get(core.$font--standard--family)) !default; 162$font-family--sm: props.def(
69$line-height--sm: props.def(--o-heading--sm--line-height, props.get(core.$font--standard--line-height)) !default; 163 --o-heading--sm--font-family,
70$font-size--sm: props.def(--o-heading--sm--font-size, props.get(core.$font-size--100)) !default; 164 props.get(core.$font--standard--family)
71$font-weight--sm: props.def(--o-heading--sm--font-weight, normal) !default; 165) !default;
72$letter-spacing--sm: props.def(--o-heading--sm--letter-spacing, 0) !default; 166$line-height--sm: props.def(
73$feature-settings--sm: props.def(--o-heading--sm--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 167 --o-heading--sm--line-height,
74$text-transform--sm: props.def(--o-heading--sm--text-transform, none) !default; 168 props.get(core.$font--standard--line-height)
169) !default;
170$font-size--sm: props.def(--o-heading--sm--font-size, props.get(core.$font-size--100)) !default;
171$font-weight--sm: props.def(--o-heading--sm--font-weight, normal) !default;
172$letter-spacing--sm: props.def(--o-heading--sm--letter-spacing, 0) !default;
173$feature-settings--sm: props.def(
174 --o-heading--sm--feature-settings,
175 props.get(core.$font--standard--feature-settings)
176) !default;
177$text-transform--sm: props.def(--o-heading--sm--text-transform, none) !default;
75 178
76$font-family--xs: props.def(--o-heading--xs--font-family, props.get(core.$font--standard--family)) !default; 179$font-family--xs: props.def(
77$line-height--xs: props.def(--o-heading--xs--line-height, props.get(core.$font--standard--line-height)) !default; 180 --o-heading--xs--font-family,
78$font-size--xs: props.def(--o-heading--xs--font-size, props.get(core.$font-size--50)) !default; 181 props.get(core.$font--standard--family)
79$font-weight--xs: props.def(--o-heading--xs--font-weight, normal) !default; 182) !default;
80$letter-spacing--xs: props.def(--o-heading--xs--letter-spacing, 1px) !default; 183$line-height--xs: props.def(
81$feature-settings--xs: props.def(--o-heading--xs--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 184 --o-heading--xs--line-height,
82$text-transform--xs: props.def(--o-heading--xs--text-transform, none) !default; 185 props.get(core.$font--standard--line-height)
186) !default;
187$font-size--xs: props.def(--o-heading--xs--font-size, props.get(core.$font-size--50)) !default;
188$font-weight--xs: props.def(--o-heading--xs--font-weight, normal) !default;
189$letter-spacing--xs: props.def(--o-heading--xs--letter-spacing, 1px) !default;
190$feature-settings--xs: props.def(
191 --o-heading--xs--feature-settings,
192 props.get(core.$font--standard--feature-settings)
193) !default;
194$text-transform--xs: props.def(--o-heading--xs--text-transform, none) !default;
83 195
84$sizes: ( 196$sizes: (
85 'xs' $font-family--xs $line-height--xs $font-size--xs $font-weight--xs $letter-spacing--xs $feature-settings--xs $text-transform--xs $text-color--xs, 197 "xs" $font-family--xs $line-height--xs $font-size--xs $font-weight--xs $letter-spacing--xs
86 'sm' $font-family--sm $line-height--sm $font-size--sm $font-weight--sm $letter-spacing--sm $feature-settings--sm $text-transform--sm $text-color--sm, 198 $feature-settings--xs $text-transform--xs $text-color--xs,
87 'md' $font-family--md $line-height--md $font-size--md $font-weight--md $letter-spacing--md $feature-settings--md $text-transform--md $text-color--md, 199 "sm" $font-family--sm $line-height--sm $font-size--sm $font-weight--sm $letter-spacing--sm
88 'lg' $font-family--lg $line-height--lg $font-size--lg $font-weight--lg $letter-spacing--lg $feature-settings--lg $text-transform--lg $text-color--lg, 200 $feature-settings--sm $text-transform--sm $text-color--sm,
89 'xl' $font-family--xl $line-height--xl $font-size--xl $font-weight--xl $letter-spacing--xl $feature-settings--xl $text-transform--xl $text-color--xl, 201 "md" $font-family--md $line-height--md $font-size--md $font-weight--md $letter-spacing--md
90 'xxl' $font-family--xxl $line-height--xxl $font-size--xxl $font-weight--xxl $letter-spacing--xxl $feature-settings--xxl $text-transform--xxl $text-color--xxl, 202 $feature-settings--md $text-transform--md $text-color--md,
203 "lg" $font-family--lg $line-height--lg $font-size--lg $font-weight--lg $letter-spacing--lg
204 $feature-settings--lg $text-transform--lg $text-color--lg,
205 "xl" $font-family--xl $line-height--xl $font-size--xl $font-weight--xl $letter-spacing--xl
206 $feature-settings--xl $text-transform--xl $text-color--xl,
207 "xxl" $font-family--xxl $line-height--xxl $font-size--xxl $font-weight--xxl $letter-spacing--xxl
208 $feature-settings--xxl $text-transform--xxl $text-color--xxl
91) !default; 209) !default;
92 210
93$display--font-family--xxl: props.def(--o-heading--display--xxl--font-family, props.get(core.$font--headline--family)) !default; 211$display--font-family--xxl: props.def(
94$display--line-height--xxl: props.def(--o-heading--display--xxl--line-height, props.get(core.$font--headline--line-height)) !default; 212 --o-heading--display--xxl--font-family,
95$display--font-size--xxl: props.def(--o-heading--display--xxl--font-size, props.get(core.$font-size--1100)) !default; 213 props.get(core.$font--headline--family)
96$display--font-weight--xxl: props.def(--o-heading--display--xxl--font-weight, props.get(core.$font--headline--weight)) !default; 214) !default;
97$display--letter-spacing--xxl: props.def(--o-heading--display--xxl--letter-spacing, 0) !default; 215$display--line-height--xxl: props.def(
98$display--feature-settings--xxl: props.def(--o-heading--display--xxl--feature-settings, props.get(core.$font--headline--feature-settings)) !default; 216 --o-heading--display--xxl--line-height,
99$display--text-transform--xxl: props.def(--o-heading--display--xxl--text-transform, none) !default; 217 props.get(core.$font--headline--line-height)
218) !default;
219$display--font-size--xxl: props.def(
220 --o-heading--display--xxl--font-size,
221 props.get(core.$font-size--1100)
222) !default;
223$display--font-weight--xxl: props.def(
224 --o-heading--display--xxl--font-weight,
225 props.get(core.$font--headline--weight)
226) !default;
227$display--letter-spacing--xxl: props.def(--o-heading--display--xxl--letter-spacing, 0) !default;
228$display--feature-settings--xxl: props.def(
229 --o-heading--display--xxl--feature-settings,
230 props.get(core.$font--headline--feature-settings)
231) !default;
232$display--text-transform--xxl: props.def(--o-heading--display--xxl--text-transform, none) !default;
100 233
101$display--font-family--xl: props.def(--o-heading--display--xl--font-family, props.get(core.$font--headline--family)) !default; 234$display--font-family--xl: props.def(
102$display--line-height--xl: props.def(--o-heading--display--xl--line-height, props.get(core.$font--headline--line-height)) !default; 235 --o-heading--display--xl--font-family,
103$display--font-size--xl: props.def(--o-heading--display--xl--font-size, props.get(core.$font-size--700)) !default; 236 props.get(core.$font--headline--family)
104$display--font-weight--xl: props.def(--o-heading--display--xl--font-weight, props.get(core.$font--headline--weight)) !default; 237) !default;
105$display--letter-spacing--xl: props.def(--o-heading--display--xl--letter-spacing, 0) !default; 238$display--line-height--xl: props.def(
106$display--feature-settings--xl: props.def(--o-heading--display--xl--feature-settings, props.get(core.$font--headline--feature-settings)) !default; 239 --o-heading--display--xl--line-height,
107$display--text-transform--xl: props.def(--o-heading--display--xl--text-transform, none) !default; 240 props.get(core.$font--headline--line-height)
241) !default;
242$display--font-size--xl: props.def(
243 --o-heading--display--xl--font-size,
244 props.get(core.$font-size--700)
245) !default;
246$display--font-weight--xl: props.def(
247 --o-heading--display--xl--font-weight,
248 props.get(core.$font--headline--weight)
249) !default;
250$display--letter-spacing--xl: props.def(--o-heading--display--xl--letter-spacing, 0) !default;
251$display--feature-settings--xl: props.def(
252 --o-heading--display--xl--feature-settings,
253 props.get(core.$font--headline--feature-settings)
254) !default;
255$display--text-transform--xl: props.def(--o-heading--display--xl--text-transform, none) !default;
108 256
109$display--font-family--lg: props.def(--o-heading--display--lg--font-family, props.get(core.$font--headline--family)) !default; 257$display--font-family--lg: props.def(
110$display--line-height--lg: props.def(--o-heading--display--lg--line-height, props.get(core.$font--headline--line-height)) !default; 258 --o-heading--display--lg--font-family,
111$display--font-size--lg: props.def(--o-heading--display--lg--font-size, props.get(core.$font-size--300)) !default; 259 props.get(core.$font--headline--family)
112$display--font-weight--lg: props.def(--o-heading--display--lg--font-weight, props.get(core.$font--headline--weight)) !default; 260) !default;
113$display--letter-spacing--lg: props.def(--o-heading--display--lg--letter-spacing, 1px) !default; 261$display--line-height--lg: props.def(
114$display--feature-settings--lg: props.def(--o-heading--display--lg--feature-settings, props.get(core.$font--headline--feature-settings)) !default; 262 --o-heading--display--lg--line-height,
115$display--text-transform--lg: props.def(--o-heading--display--lg--text-transform, uppercase) !default; 263 props.get(core.$font--headline--line-height)
264) !default;
265$display--font-size--lg: props.def(
266 --o-heading--display--lg--font-size,
267 props.get(core.$font-size--300)
268) !default;
269$display--font-weight--lg: props.def(
270 --o-heading--display--lg--font-weight,
271 props.get(core.$font--headline--weight)
272) !default;
273$display--letter-spacing--lg: props.def(--o-heading--display--lg--letter-spacing, 1px) !default;
274$display--feature-settings--lg: props.def(
275 --o-heading--display--lg--feature-settings,
276 props.get(core.$font--headline--feature-settings)
277) !default;
278$display--text-transform--lg: props.def(
279 --o-heading--display--lg--text-transform,
280 uppercase
281) !default;
116 282
117$display--font-family--md: props.def(--o-heading--display--md--font-family, props.get(core.$font--standard--family)) !default; 283$display--font-family--md: props.def(
118$display--line-height--md: props.def(--o-heading--display--md--line-height, props.get(core.$font--standard--line-height)) !default; 284 --o-heading--display--md--font-family,
119$display--font-size--md: props.def(--o-heading--display--md--font-size, props.get(core.$font-size--150)) !default; 285 props.get(core.$font--standard--family)
120$display--font-weight--md: props.def(--o-heading--display--md--font-weight, bold) !default; 286) !default;
121$display--letter-spacing--md: props.def(--o-heading--display--md--letter-spacing, 0) !default; 287$display--line-height--md: props.def(
122$display--feature-settings--md: props.def(--o-heading--display--md--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 288 --o-heading--display--md--line-height,
123$display--text-transform--md: props.def(--o-heading--display--md--text-transform, none) !default; 289 props.get(core.$font--standard--line-height)
290) !default;
291$display--font-size--md: props.def(
292 --o-heading--display--md--font-size,
293 props.get(core.$font-size--150)
294) !default;
295$display--font-weight--md: props.def(--o-heading--display--md--font-weight, bold) !default;
296$display--letter-spacing--md: props.def(--o-heading--display--md--letter-spacing, 0) !default;
297$display--feature-settings--md: props.def(
298 --o-heading--display--md--feature-settings,
299 props.get(core.$font--standard--feature-settings)
300) !default;
301$display--text-transform--md: props.def(--o-heading--display--md--text-transform, none) !default;
124 302
125$display--font-family--sm: props.def(--o-heading--display--sm--font-family, props.get(core.$font--standard--family)) !default; 303$display--font-family--sm: props.def(
126$display--line-height--sm: props.def(--o-heading--display--sm--line-height, props.get(core.$font--standard--line-height)) !default; 304 --o-heading--display--sm--font-family,
127$display--font-size--sm: props.def(--o-heading--display--sm--font-size, props.get(core.$font-size--100)) !default; 305 props.get(core.$font--standard--family)
128$display--font-weight--sm: props.def(--o-heading--display--sm--font-weight, bold) !default; 306) !default;
129$display--letter-spacing--sm: props.def(--o-heading--display--sm--letter-spacing, 0) !default; 307$display--line-height--sm: props.def(
130$display--feature-settings--sm: props.def(--o-heading--display--sm--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 308 --o-heading--display--sm--line-height,
131$display--text-transform--sm: props.def(--o-heading--display--sm--text-transform, none) !default; 309 props.get(core.$font--standard--line-height)
310) !default;
311$display--font-size--sm: props.def(
312 --o-heading--display--sm--font-size,
313 props.get(core.$font-size--100)
314) !default;
315$display--font-weight--sm: props.def(--o-heading--display--sm--font-weight, bold) !default;
316$display--letter-spacing--sm: props.def(--o-heading--display--sm--letter-spacing, 0) !default;
317$display--feature-settings--sm: props.def(
318 --o-heading--display--sm--feature-settings,
319 props.get(core.$font--standard--feature-settings)
320) !default;
321$display--text-transform--sm: props.def(--o-heading--display--sm--text-transform, none) !default;
132 322
133$display--font-family--xs: props.def(--o-heading--display--xs--font-family, props.get(core.$font--standard--family)) !default; 323$display--font-family--xs: props.def(
134$display--line-height--xs: props.def(--o-heading--display--xs--line-height, props.get(core.$font--standard--line-height)) !default; 324 --o-heading--display--xs--font-family,
135$display--font-size--xs: props.def(--o-heading--display--xs--font-size, props.get(core.$font-size--50)) !default; 325 props.get(core.$font--standard--family)
136$display--font-weight--xs: props.def(--o-heading--display--xs--font-weight, normal) !default; 326) !default;
137$display--letter-spacing--xs: props.def(--o-heading--display--xs--letter-spacing, 1px) !default; 327$display--line-height--xs: props.def(
138$display--feature-settings--xs: props.def(--o-heading--display--xs--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 328 --o-heading--display--xs--line-height,
139$display--text-transform--xs: props.def(--o-heading--display--xs--text-transform, none) !default; 329 props.get(core.$font--standard--line-height)
330) !default;
331$display--font-size--xs: props.def(
332 --o-heading--display--xs--font-size,
333 props.get(core.$font-size--50)
334) !default;
335$display--font-weight--xs: props.def(--o-heading--display--xs--font-weight, normal) !default;
336$display--letter-spacing--xs: props.def(--o-heading--display--xs--letter-spacing, 1px) !default;
337$display--feature-settings--xs: props.def(
338 --o-heading--display--xs--feature-settings,
339 props.get(core.$font--standard--feature-settings)
340) !default;
341$display--text-transform--xs: props.def(--o-heading--display--xs--text-transform, none) !default;
140 342
141$display--font-size--xxl--md: props.def(--o-heading--display--xxl--font-size, props.get(core.$font-size--900), 'md') !default; 343$display--font-size--xxl--md: props.def(
142$display--font-size--xl--md: props.def(--o-heading--display--xl--font-size, props.get(core.$font-size--600), 'md') !default; 344 --o-heading--display--xxl--font-size,
143$display--font-size--lg--md: props.def(--o-heading--display--lg--font-size, props.get(core.$font-size--200), 'md') !default; 345 props.get(core.$font-size--900),
144$display--font-size--md--md: props.def(--o-heading--display--md--font-size, props.get(core.$font-size--100), 'md') !default; 346 "md"
145$display--font-size--sm--md: props.def(--o-heading--display--sm--font-size, props.get(core.$font-size--75), 'md') !default; 347) !default;
146$display--font-size--xs--md: props.def(--o-heading--display--xs--font-size, props.get(core.$font-size--50), 'md') !default; 348$display--font-size--xl--md: props.def(
349 --o-heading--display--xl--font-size,
350 props.get(core.$font-size--600),
351 "md"
352) !default;
353$display--font-size--lg--md: props.def(
354 --o-heading--display--lg--font-size,
355 props.get(core.$font-size--200),
356 "md"
357) !default;
358$display--font-size--md--md: props.def(
359 --o-heading--display--md--font-size,
360 props.get(core.$font-size--100),
361 "md"
362) !default;
363$display--font-size--sm--md: props.def(
364 --o-heading--display--sm--font-size,
365 props.get(core.$font-size--75),
366 "md"
367) !default;
368$display--font-size--xs--md: props.def(
369 --o-heading--display--xs--font-size,
370 props.get(core.$font-size--50),
371 "md"
372) !default;
147 373
148$display--sizes: ( 374$display--sizes: (
149 'xs' $display--font-family--xs $display--line-height--xs $display--font-size--xs $display--font-weight--xs $display--letter-spacing--xs $display--feature-settings--xs $display--text-transform--xs $display--text-color--xs, 375 "xs" $display--font-family--xs $display--line-height--xs $display--font-size--xs
150 'sm' $display--font-family--sm $display--line-height--sm $display--font-size--sm $display--font-weight--sm $display--letter-spacing--sm $display--feature-settings--sm $display--text-transform--sm $display--text-color--sm, 376 $display--font-weight--xs $display--letter-spacing--xs $display--feature-settings--xs
151 'md' $display--font-family--md $display--line-height--md $display--font-size--md $display--font-weight--md $display--letter-spacing--md $display--feature-settings--md $display--text-transform--md $display--text-color--md, 377 $display--text-transform--xs $display--text-color--xs,
152 'lg' $display--font-family--lg $display--line-height--lg $display--font-size--lg $display--font-weight--lg $display--letter-spacing--lg $display--feature-settings--lg $display--text-transform--lg $display--text-color--lg, 378 "sm" $display--font-family--sm $display--line-height--sm $display--font-size--sm
153 'xl' $display--font-family--xl $display--line-height--xl $display--font-size--xl $display--font-weight--xl $display--letter-spacing--xl $display--feature-settings--xl $display--text-transform--xl $display--text-color--xl, 379 $display--font-weight--sm $display--letter-spacing--sm $display--feature-settings--sm
154 'xxl' $display--font-family--xxl $display--line-height--xxl $display--font-size--xxl $display--font-weight--xxl $display--letter-spacing--xxl $display--feature-settings--xxl $display--text-transform--xxl $display--text-color--xxl, 380 $display--text-transform--sm $display--text-color--sm,
381 "md" $display--font-family--md $display--line-height--md $display--font-size--md
382 $display--font-weight--md $display--letter-spacing--md $display--feature-settings--md
383 $display--text-transform--md $display--text-color--md,
384 "lg" $display--font-family--lg $display--line-height--lg $display--font-size--lg
385 $display--font-weight--lg $display--letter-spacing--lg $display--feature-settings--lg
386 $display--text-transform--lg $display--text-color--lg,
387 "xl" $display--font-family--xl $display--line-height--xl $display--font-size--xl
388 $display--font-weight--xl $display--letter-spacing--xl $display--feature-settings--xl
389 $display--text-transform--xl $display--text-color--xl,
390 "xxl" $display--font-family--xxl $display--line-height--xxl $display--font-size--xxl
391 $display--font-weight--xxl $display--letter-spacing--xxl $display--feature-settings--xxl
392 $display--text-transform--xxl $display--text-color--xxl
155) !default; 393) !default;
156 394
157$static-themes: props.def(--o-heading, (), 'color'); 395$static-themes: props.def(--o-heading, (), "color");
158 396
159@each $theme in map.keys(props.get(core.$transparent-colors)) { 397@each $theme in map.keys(props.get(core.$transparent-colors)) {
160 $heading-theme: --static-#{string.slice($theme, 3)}; 398 $heading-theme: --static-#{string.slice($theme, 3)};
161 399
162 $static-themes: props.merge($static-themes, ( 400 $static-themes: props.merge(
163 $heading-theme: ( 401 $static-themes,
164 --bg-color: props.get(core.$transparent-colors, $theme, --200), 402 (
165 --text-color: props.get(core.$transparent-colors, $theme, --900), 403 $heading-theme: (
166 404 --bg-color: props.get(core.$transparent-colors, $theme, --200),
167 --xxl: (
168 --text-color: props.get(core.$transparent-colors, $theme, --900),
169 ),
170 --xl: (
171 --text-color: props.get(core.$transparent-colors, $theme, --900),
172 ),
173 --lg: (
174 --text-color: props.get(core.$transparent-colors, $theme, --900),
175 ),
176 --md: (
177 --text-color: props.get(core.$transparent-colors, $theme, --900),
178 ),
179 --sm: (
180 --text-color: props.get(core.$transparent-colors, $theme, --500),
181 ),
182 --xs: (
183 --text-color: props.get(core.$transparent-colors, $theme, --500),
184 ),
185
186 --display: (
187 --xxl: (
188 --text-color: props.get(core.$transparent-colors, $theme, --900), 405 --text-color: props.get(core.$transparent-colors, $theme, --900),
406 --xxl: (
407 --text-color: props.get(core.$transparent-colors, $theme, --900),
408 ),
409 --xl: (
410 --text-color: props.get(core.$transparent-colors, $theme, --900),
411 ),
412 --lg: (
413 --text-color: props.get(core.$transparent-colors, $theme, --900),
414 ),
415 --md: (
416 --text-color: props.get(core.$transparent-colors, $theme, --900),
417 ),
418 --sm: (
419 --text-color: props.get(core.$transparent-colors, $theme, --500),
420 ),
421 --xs: (
422 --text-color: props.get(core.$transparent-colors, $theme, --500),
423 ),
424
425 --display: (
426 --xxl: (
427 --text-color: props.get(
428 core.$transparent-colors,
429 $theme,
430 --900
431 ),
432 ),
433 --xl: (
434 --text-color: props.get(
435 core.$transparent-colors,
436 $theme,
437 --900
438 ),
439 ),
440 --lg: (
441 --text-color: props.get(
442 core.$transparent-colors,
443 $theme,
444 --900
445 ),
446 ),
447 --md: (
448 --text-color: props.get(
449 core.$transparent-colors,
450 $theme,
451 --900
452 ),
453 ),
454 --sm: (
455 --text-color: props.get(
456 core.$transparent-colors,
457 $theme,
458 --900
459 ),
460 ),
461 --xs: (
462 --text-color: props.get(
463 core.$transparent-colors,
464 $theme,
465 --500
466 ),
467 ),
468 ),
189 ), 469 ),
190 --xl: (
191 --text-color: props.get(core.$transparent-colors, $theme, --900),
192 ),
193 --lg: (
194 --text-color: props.get(core.$transparent-colors, $theme, --900),
195 ),
196 --md: (
197 --text-color: props.get(core.$transparent-colors, $theme, --900),
198 ),
199 --sm: (
200 --text-color: props.get(core.$transparent-colors, $theme, --900),
201 ),
202 --xs: (
203 --text-color: props.get(core.$transparent-colors, $theme, --500),
204 ),
205 ),
206 ) 470 )
207 )); 471 );
208} 472}
diff --git a/src/objects/_icon.scss b/src/objects/_icon.scss
index 1d046e0..7baa3f8 100644
--- a/src/objects/_icon.scss
+++ b/src/objects/_icon.scss
@@ -1,24 +1,24 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'icon.vars'; 6@forward "icon.vars";
7@use 'icon.vars' as vars; 7@use "icon.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.object('icon') { 12 @include bem.object("icon") {
13 display: inline; 13 display: inline;
14 inline-size: props.get(vars.$size); 14 inline-size: props.get(vars.$size);
15 block-size: props.get(vars.$size); 15 block-size: props.get(vars.$size);
16 vertical-align: props.get(vars.$valign); 16 vertical-align: props.get(vars.$valign);
17 stroke-width: props.get(vars.$stroke-width); 17 stroke-width: props.get(vars.$stroke-width);
18 stroke-linecap: round; 18 stroke-linecap: round;
19 stroke-linejoin: round; 19 stroke-linejoin: round;
20 20
21 @include bem.modifier('block') { 21 @include bem.modifier("block") {
22 display: block; 22 display: block;
23 } 23 }
24 } 24 }
diff --git a/src/objects/_icon.vars.scss b/src/objects/_icon.vars.scss
index 2a37212..4fdbfae 100644
--- a/src/objects/_icon.vars.scss
+++ b/src/objects/_icon.vars.scss
@@ -1,5 +1,5 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2 2
3$stroke-width: props.def(--o-icon--stroke-width, 1.5px) !default; 3$stroke-width: props.def(--o-icon--stroke-width, 1.5px) !default;
4$size: props.def(--o-icon--size, calc(1 / 14 * 16em)) !default; 4$size: props.def(--o-icon--size, calc(1 / 14 * 16em)) !default;
5$valign: props.def(--o-icon--valign, -.18em) !default; 5$valign: props.def(--o-icon--valign, -0.18em) !default;
diff --git a/src/objects/_lightbox.scss b/src/objects/_lightbox.scss
index a173d57..2b4abad 100644
--- a/src/objects/_lightbox.scss
+++ b/src/objects/_lightbox.scss
@@ -1,40 +1,40 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:meta'; 2@use "sass:meta";
3@use 'sass:string'; 3@use "sass:string";
4@use 'pkg:iro-sass/src/bem'; 4@use "pkg:iro-sass/bem";
5@use 'pkg:iro-sass/src/props'; 5@use "pkg:iro-sass/props";
6@use '../props' as *; 6@use "../props" as *;
7 7
8@forward 'lightbox.vars'; 8@forward "lightbox.vars";
9@use 'lightbox.vars' as vars; 9@use "lightbox.vars" as vars;
10 10
11@use 'button.vars' as button; 11@use "button.vars" as button;
12@use 'backdrop.vars' as backdrop; 12@use "backdrop.vars" as backdrop;
13@use 'thumbnail.vars' as thumbnail; 13@use "thumbnail.vars" as thumbnail;
14 14
15@mixin styles { 15@mixin styles {
16 @include materialize-at-root(meta.module-variables('vars')); 16 @include materialize-at-root(meta.module-variables("vars"));
17 17
18 @include bem.object('lightbox') { 18 @include bem.object("lightbox") {
19 box-sizing: border-box; 19 box-sizing: border-box;
20 display: none; 20 display: none;
21 flex: 1 1 auto; 21 flex: 1 1 auto;
22 grid-template-areas: 'image' 'thumbnails'; 22 grid-template-areas: "image" "thumbnails";
23 grid-template-rows: 1fr auto; 23 grid-template-rows: 1fr auto;
24 grid-template-columns: 1fr; 24 grid-template-columns: 1fr;
25 align-items: center; 25 align-items: center;
26 justify-items: center; 26 justify-items: center;
27 inline-size: 100%; 27 inline-size: 100%;
28 max-inline-size: none; 28 max-inline-size: none;
29 block-size: 100%; 29 block-size: 100%;
30 min-block-size: 0; 30 min-block-size: 0;
31 max-block-size: none; 31 max-block-size: none;
32 padding: 0; 32 padding: 0;
33 margin: 0; 33 margin: 0;
34 overflow: hidden; 34 overflow: hidden;
35 background-color: transparent; 35 background-color: transparent;
36 border: 0; 36 border: 0;
37 pointer-events: none; 37 pointer-events: none;
38 38
39 &::backdrop { 39 &::backdrop {
40 background-color: props.get(backdrop.$bg-color); 40 background-color: props.get(backdrop.$bg-color);
@@ -42,7 +42,7 @@
42 } 42 }
43 43
44 &[open], 44 &[open],
45 &:popover-open { 45 &:popover-open {
46 display: grid; 46 display: grid;
47 } 47 }
48 48
@@ -50,80 +50,79 @@
50 pointer-events: auto; 50 pointer-events: auto;
51 } 51 }
52 52
53 @include bem.elem('info', 'controls') { 53 @include bem.elem("info", "controls") {
54 position: absolute; 54 position: absolute;
55 inset-block-start: props.get(vars.$pad); 55 inset-block-start: props.get(vars.$pad);
56 z-index: 20; 56 z-index: 20;
57 display: flex; 57 display: flex;
58 align-items: center; 58 align-items: center;
59 block-size: props.get(vars.$controls--block-size); 59 block-size: props.get(vars.$controls--block-size);
60 padding-inline: props.get(vars.$controls--pad-i); 60 padding-inline: props.get(vars.$controls--pad-i);
61 background-color: props.get(vars.$controls--bg); 61 background-color: props.get(vars.$controls--bg);
62 border-radius: 10em; 62 border-radius: 10em;
63 box-shadow: 63 box-shadow: props.get(vars.$controls--shadow-x) props.get(vars.$controls--shadow-y)
64 props.get(vars.$controls--shadow-x) 64 props.get(vars.$controls--shadow-blur) props.get(vars.$controls--shadow-grow)
65 props.get(vars.$controls--shadow-y)
66 props.get(vars.$controls--shadow-blur)
67 props.get(vars.$controls--shadow-grow)
68 props.get(vars.$controls--shadow-color); 65 props.get(vars.$controls--shadow-color);
69 } 66 }
70 67
71 @include bem.elem('info') { 68 @include bem.elem("info") {
72 inset-inline-start: props.get(vars.$pad); 69 inset-inline-start: props.get(vars.$pad);
73 font-variant-numeric: tabular-nums; 70 font-variant-numeric: tabular-nums;
74 } 71 }
75 72
76 @include bem.elem('controls') { 73 @include bem.elem("controls") {
77 inset-inline-end: props.get(vars.$pad); 74 inset-inline-end: props.get(vars.$pad);
78 } 75 }
79 76
80 @include bem.elem('img') { 77 @include bem.elem("img") {
81 position: relative; 78 position: relative;
82 z-index: 10; 79 z-index: 10;
83 display: block; 80 display: block;
84 grid-area: image; 81 grid-area: image;
85 inline-size: auto; 82 inline-size: auto;
86 min-inline-size: 0; 83 min-inline-size: 0;
87 max-inline-size: 100%; 84 max-inline-size: 100%;
88 block-size: auto; 85 block-size: auto;
89 min-block-size: 0; 86 min-block-size: 0;
90 max-block-size: 100%; 87 max-block-size: 100%;
91 user-select: none; 88 user-select: none;
92 object-fit: contain; 89 object-fit: contain;
93 90
94 @include bem.is('hidden') { 91 @include bem.is("hidden") {
95 display: none; 92 display: none;
96 93
97 @include bem.next-elem('placeholder') { 94 @include bem.next-elem("placeholder") {
98 display: block; 95 display: block;
99 } 96 }
100 } 97 }
101 } 98 }
102 99
103 @include bem.elem('placeholder') { 100 @include bem.elem("placeholder") {
104 position: absolute; 101 position: absolute;
105 inset-block-start: 50%; 102 inset-block-start: 50%;
106 inset-inline-start: 50%; 103 inset-inline-start: 50%;
107 z-index: 5; 104 z-index: 5;
108 display: none; 105 display: none;
109 transform: translate(-50, -50); 106 transform: translate(-50, -50);
110 } 107 }
111 108
112 @include bem.elem('thumbnails') { 109 @include bem.elem("thumbnails") {
113 display: flex; 110 display: flex;
114 grid-area: thumbnails; 111 grid-area: thumbnails;
115 gap: props.get(vars.$thumbnail--spacing); 112 gap: props.get(vars.$thumbnail--spacing);
116 justify-content: center; 113 justify-content: center;
117 padding: props.get(vars.$pad); 114 padding: props.get(vars.$pad);
118 overflow: auto; 115 overflow: auto;
119 } 116 }
120 117
121 @include bem.elem('thumbnail') { 118 @include bem.elem("thumbnail") {
122 inline-size: props.get(vars.$thumbnail--width); 119 inline-size: props.get(vars.$thumbnail--width);
123 transition: inline-size .2s ease, margin-inline .2s ease; 120 transition:
121 inline-size 0.2s ease,
122 margin-inline 0.2s ease;
124 123
125 @include bem.is('selected') { 124 @include bem.is("selected") {
126 inline-size: props.get(vars.$thumbnail--active--width); 125 inline-size: props.get(vars.$thumbnail--active--width);
127 margin-inline: props.get(vars.$thumbnail--active--spacing); 126 margin-inline: props.get(vars.$thumbnail--active--spacing);
128 } 127 }
129 } 128 }
diff --git a/src/objects/_lightbox.vars.scss b/src/objects/_lightbox.vars.scss
index 6fb84f7..dc9a2a1 100644
--- a/src/objects/_lightbox.vars.scss
+++ b/src/objects/_lightbox.vars.scss
@@ -1,37 +1,80 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6$pad: props.def(--o-lightbox--pad, props.get(core.$size--150)) !default; 6$pad: props.def(--o-lightbox--pad, props.get(core.$size--150)) !default;
7 7
8$controls--pad-i: props.def(--o-lightbox--controls--pad-i, props.get(core.$size--150)) !default; 8$controls--pad-i: props.def(--o-lightbox--controls--pad-i, props.get(core.$size--150)) !default;
9$controls--block-size: props.def(--o-lightbox--controls--block-size, props.get(core.$size--550)) !default; 9$controls--block-size: props.def(
10 --o-lightbox--controls--block-size,
11 props.get(core.$size--550)
12) !default;
10 13
11$controls--shadow-x: props.def(--o-lightbox--controls--shadow-x, props.get(core.$shadow--l2--x)) !default; 14$controls--shadow-x: props.def(
12$controls--shadow-y: props.def(--o-lightbox--controls--shadow-y, props.get(core.$shadow--l2--y)) !default; 15 --o-lightbox--controls--shadow-x,
13$controls--shadow-blur: props.def(--o-lightbox--controls--shadow-blur, props.get(core.$shadow--l2--blur)) !default; 16 props.get(core.$shadow--l2--x)
14$controls--shadow-grow: props.def(--o-lightbox--controls--shadow-grow, props.get(core.$shadow--l2--grow)) !default; 17) !default;
18$controls--shadow-y: props.def(
19 --o-lightbox--controls--shadow-y,
20 props.get(core.$shadow--l2--y)
21) !default;
22$controls--shadow-blur: props.def(
23 --o-lightbox--controls--shadow-blur,
24 props.get(core.$shadow--l2--blur)
25) !default;
26$controls--shadow-grow: props.def(
27 --o-lightbox--controls--shadow-grow,
28 props.get(core.$shadow--l2--grow)
29) !default;
15 30
16$thumbnail--width: props.def(--o-lightbox--thumbnail--width, props.get(core.$size--600)) !default; 31$thumbnail--width: props.def(--o-lightbox--thumbnail--width, props.get(core.$size--600)) !default;
17$thumbnail--spacing: props.def(--o-lightbox--thumbnail--spacing, props.get(core.$size--100)) !default; 32$thumbnail--spacing: props.def(
18$thumbnail--active--width: props.def(--o-lightbox--thumbnail--active--width, props.get(core.$size--1000)) !default; 33 --o-lightbox--thumbnail--spacing,
19$thumbnail--active--spacing: props.def(--o-lightbox--thumbnail--active--spacing, props.get(core.$size--250)) !default; 34 props.get(core.$size--100)
35) !default;
36$thumbnail--active--width: props.def(
37 --o-lightbox--thumbnail--active--width,
38 props.get(core.$size--1000)
39) !default;
40$thumbnail--active--spacing: props.def(
41 --o-lightbox--thumbnail--active--spacing,
42 props.get(core.$size--250)
43) !default;
20 44
21$thumbnail--width--md: props.def(--o-lightbox--thumbnail--width, props.get(core.$size--400), 'md') !default; 45$thumbnail--width--md: props.def(
22$thumbnail--active--width--md: props.def(--o-lightbox--thumbnail--active--width, props.get(core.$size--600), 'md') !default; 46 --o-lightbox--thumbnail--width,
47 props.get(core.$size--400),
48 "md"
49) !default;
50$thumbnail--active--width--md: props.def(
51 --o-lightbox--thumbnail--active--width,
52 props.get(core.$size--600),
53 "md"
54) !default;
23 55
24$controls--bg: props.def(--o-lightbox--controls--bg, props.get(core.$transparent-colors, --black, --700), 'color') !default; 56$controls--bg: props.def(
25$controls--shadow-color: props.def(--o-lightbox--controls--shadow-color, props.get(core.$transparent-colors, --black, --300), 'color') !default; 57 --o-lightbox--controls--bg,
58 props.get(core.$transparent-colors, --black, --700),
59 "color"
60) !default;
61$controls--shadow-color: props.def(
62 --o-lightbox--controls--shadow-color,
63 props.get(core.$transparent-colors, --black, --300),
64 "color"
65) !default;
26 66
27$static-themes: props.def(--o-lightbox, (), 'color'); 67$static-themes: props.def(--o-lightbox, (), "color");
28 68
29@each $theme in map.keys(props.get(core.$transparent-colors)) { 69@each $theme in map.keys(props.get(core.$transparent-colors)) {
30 $lightbox-theme: --static-#{string.slice($theme, 3)}; 70 $lightbox-theme: --static-#{string.slice($theme, 3)};
31 71
32 $static-themes: props.merge($static-themes, ( 72 $static-themes: props.merge(
33 $lightbox-theme: ( 73 $static-themes,
34 --text: props.get(core.$transparent-colors, $theme, --text), 74 (
75 $lightbox-theme: (
76 --text: props.get(core.$transparent-colors, $theme, --text),
77 ),
35 ) 78 )
36 )); 79 );
37} 80}
diff --git a/src/objects/_menu.scss b/src/objects/_menu.scss
index dce14a8..c7fbc0e 100644
--- a/src/objects/_menu.scss
+++ b/src/objects/_menu.scss
@@ -1,75 +1,82 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5@use 'icon.vars' as icon; 5@use "icon.vars" as icon;
6 6
7@forward 'menu.vars'; 7@forward "menu.vars";
8@use 'menu.vars' as vars; 8@use "menu.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.object('menu') { 13 @include bem.object("menu") {
14 display: flex; 14 display: flex;
15 flex-direction: column; 15 flex-direction: column;
16 gap: props.get(vars.$spacing); 16 gap: props.get(vars.$spacing);
17 17
18 @include bem.elem('header') { 18 @include bem.elem("header") {
19 padding-block: props.get(vars.$item--pad-b); 19 padding-block: props.get(vars.$item--pad-b);
20 padding-inline: props.get(vars.$item--pad-i); 20 padding-inline: props.get(vars.$item--pad-i);
21 font-size: props.get(vars.$header--font-size); 21 font-size: props.get(vars.$header--font-size);
22 font-weight: 500; 22 font-weight: 500;
23 color: props.get(vars.$header--label-color); 23 color: props.get(vars.$header--label-color);
24 text-transform: uppercase; 24 text-transform: uppercase;
25 letter-spacing: .5px; 25 letter-spacing: 0.5px;
26 26
27 @include bem.next-twin-elem { 27 @include bem.next-twin-elem {
28 margin-block-start: calc(props.get(vars.$separator-width) + props.get(vars.$spacing)); 28 margin-block-start: calc(
29 props.get(vars.$separator-width) + props.get(vars.$spacing)
30 );
29 } 31 }
30 } 32 }
31 33
32 @include bem.elem('item') { 34 @include bem.elem("item") {
33 padding-block: props.get(vars.$item--pad-b); 35 padding-block: props.get(vars.$item--pad-b);
34 padding-inline: props.get(vars.$item--pad-i); 36 padding-inline: props.get(vars.$item--pad-i);
35 margin: calc(-1 * props.get(vars.$item--key-focus--outline-width)); 37 margin: calc(-1 * props.get(vars.$item--key-focus--outline-width));
36 color: props.get(vars.$item--disabled--label-color); 38 color: props.get(vars.$item--disabled--label-color);
37 background-clip: padding-box; 39 background-clip: padding-box;
38 border: props.get(vars.$item--key-focus--outline-width) solid transparent; 40 border: props.get(vars.$item--key-focus--outline-width) solid transparent;
39 border-radius: calc(props.get(vars.$item--rounding) + props.get(vars.$item--key-focus--outline-width)); 41 border-radius: calc(
42 props.get(vars.$item--rounding) + props.get(vars.$item--key-focus--outline-width)
43 );
40 44
41 &:link, 45 &:link,
42 &:visited, 46 &:visited,
43 &:enabled { 47 &:enabled {
44 color: currentColor; 48 color: currentColor;
45 49
46 @include bem.multi('&:hover, &:focus-visible', 'is' 'selected') { 50 @include bem.multi("&:hover, &:focus-visible", "is" "selected") {
47 color: props.get(vars.$item--hover--label-color); 51 color: props.get(vars.$item--hover--label-color);
48 background-color: props.get(vars.$item--hover--bg-color); 52 background-color: props.get(vars.$item--hover--bg-color);
49 } 53 }
50 54
51 &:active { 55 &:active {
52 color: props.get(vars.$item--active--label-color); 56 color: props.get(vars.$item--active--label-color);
53 background-color: props.get(vars.$item--active--bg-color); 57 background-color: props.get(vars.$item--active--bg-color);
54 } 58 }
55 59
56 &:focus-visible { 60 &:focus-visible {
57 outline: props.get(vars.$item--key-focus--border-color) solid props.get(vars.$item--key-focus--border-width); 61 outline: props.get(vars.$item--key-focus--border-color) solid
58 box-shadow: 62 props.get(vars.$item--key-focus--border-width);
59 0 63 box-shadow: 0 0 0
60 0 64 calc(
61 0 65 props.get(vars.$item--key-focus--border-width) +
62 calc(props.get(vars.$item--key-focus--border-width) + props.get(vars.$item--key-focus--outline-width)) 66 props.get(vars.$item--key-focus--outline-width)
67 )
63 props.get(vars.$item--key-focus--outline-color); 68 props.get(vars.$item--key-focus--outline-color);
64 } 69 }
65 } 70 }
66 71
67 @include bem.next-elem('header') { 72 @include bem.next-elem("header") {
68 margin-block-start: calc(props.get(vars.$separator-width) + props.get(vars.$spacing)); 73 margin-block-start: calc(
74 props.get(vars.$separator-width) + props.get(vars.$spacing)
75 );
69 } 76 }
70 } 77 }
71 78
72 @include bem.elem('header') { 79 @include bem.elem("header") {
73 &:link, 80 &:link,
74 &:visited, 81 &:visited,
75 &:enabled { 82 &:enabled {
@@ -77,25 +84,25 @@
77 } 84 }
78 } 85 }
79 86
80 @include bem.elem('separator') { 87 @include bem.elem("separator") {
81 block-size: 1px; 88 block-size: 1px;
82 margin-block: props.get(vars.$separator-width); 89 margin-block: props.get(vars.$separator-width);
83 margin-inline: props.get(vars.$item--pad-i); 90 margin-inline: props.get(vars.$item--pad-i);
84 background-color: props.get(vars.$separator-color); 91 background-color: props.get(vars.$separator-color);
85 } 92 }
86 93
87 @include bem.elem('slot') { 94 @include bem.elem("slot") {
88 padding-block: props.get(vars.$item--pad-b); 95 padding-block: props.get(vars.$item--pad-b);
89 padding-inline: props.get(vars.$item--pad-i); 96 padding-inline: props.get(vars.$item--pad-i);
90 } 97 }
91 98
92 @include bem.elem('icon-slot') { 99 @include bem.elem("icon-slot") {
93 display: flex; 100 display: flex;
94 justify-content: center; 101 justify-content: center;
95 inline-size: props.get(icon.$size); 102 inline-size: props.get(icon.$size);
96 } 103 }
97 104
98 @include bem.modifier('pull') { 105 @include bem.modifier("pull") {
99 margin: calc(-1 * props.get(vars.$item--pad-i)); 106 margin: calc(-1 * props.get(vars.$item--pad-i));
100 } 107 }
101 } 108 }
diff --git a/src/objects/_menu.vars.scss b/src/objects/_menu.vars.scss
index 9396117..c168c30 100644
--- a/src/objects/_menu.vars.scss
+++ b/src/objects/_menu.vars.scss
@@ -1,29 +1,74 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$spacing: props.def(--o-menu--spacing, 0em) !default; 5$spacing: props.def(--o-menu--spacing, 0em) !default;
6$header--font-size: props.def(--o-menu--header--font-size, props.get(core.$font-size--50)) !default; 6$header--font-size: props.def(--o-menu--header--font-size, props.get(core.$font-size--50)) !default;
7$separator-width: props.def(--o-menu--separator-width, props.get(core.$size--100)) !default; 7$separator-width: props.def(--o-menu--separator-width, props.get(core.$size--100)) !default;
8 8
9$item--pad-i: props.def(--o-menu--item--pad-i, props.get(core.$size--150)) !default; 9$item--pad-i: props.def(--o-menu--item--pad-i, props.get(core.$size--150)) !default;
10$item--pad-b: props.def(--o-menu--item--pad-b, props.get(core.$size--100)) !default; 10$item--pad-b: props.def(--o-menu--item--pad-b, props.get(core.$size--100)) !default;
11$item--rounding: props.def(--o-menu--item--rounding, 0em) !default; 11$item--rounding: props.def(--o-menu--item--rounding, 0em) !default;
12 12
13$item--key-focus--border-width: props.def(--o-menu--item--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 13$item--key-focus--border-width: props.def(
14$item--key-focus--border-offset: props.def(--o-menu--item--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 14 --o-menu--item--key-focus--border-width,
15$item--key-focus--outline-width: props.def(--o-menu--item--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 15 props.get(core.$key-focus--border-width)
16) !default;
17$item--key-focus--border-offset: props.def(
18 --o-menu--item--key-focus--border-offset,
19 props.get(core.$key-focus--border-offset)
20) !default;
21$item--key-focus--outline-width: props.def(
22 --o-menu--item--key-focus--outline-width,
23 props.get(core.$key-focus--outline-width)
24) !default;
16 25
17$separator-color: props.def(--o-menu--separator-color, props.get(core.$theme, --border), 'color') !default; 26$separator-color: props.def(
18$header--label-color: props.def(--o-menu--header--label-color, props.get(core.$theme, --heading), 'color') !default; 27 --o-menu--separator-color,
28 props.get(core.$theme, --border),
29 "color"
30) !default;
31$header--label-color: props.def(
32 --o-menu--header--label-color,
33 props.get(core.$theme, --heading),
34 "color"
35) !default;
19 36
20$item--hover--bg-color: props.def(--o-menu--item--hover--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 37$item--hover--bg-color: props.def(
21$item--hover--label-color: props.def(--o-menu--item--hover--label-color, props.get(core.$theme, --heading), 'color') !default; 38 --o-menu--item--hover--bg-color,
39 props.get(core.$theme, --border-mute),
40 "color"
41) !default;
42$item--hover--label-color: props.def(
43 --o-menu--item--hover--label-color,
44 props.get(core.$theme, --heading),
45 "color"
46) !default;
22 47
23$item--active--bg-color: props.def(--o-menu--item--active--bg-color, props.get(core.$theme, --border), 'color') !default; 48$item--active--bg-color: props.def(
24$item--active--label-color: props.def(--o-menu--item--active--label-color, props.get(core.$theme, --heading), 'color') !default; 49 --o-menu--item--active--bg-color,
50 props.get(core.$theme, --border),
51 "color"
52) !default;
53$item--active--label-color: props.def(
54 --o-menu--item--active--label-color,
55 props.get(core.$theme, --heading),
56 "color"
57) !default;
25 58
26$item--disabled--label-color: props.def(--o-menu--item--disabled--label-color, props.get(core.$theme, --text-disabled), 'color') !default; 59$item--disabled--label-color: props.def(
60 --o-menu--item--disabled--label-color,
61 props.get(core.$theme, --text-disabled),
62 "color"
63) !default;
27 64
28$item--key-focus--border-color: props.def(--o-menu--item--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 65$item--key-focus--border-color: props.def(
29$item--key-focus--outline-color: props.def(--o-menu--item--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 66 --o-menu--item--key-focus--border-color,
67 props.get(core.$theme, --focus, --border),
68 "color"
69) !default;
70$item--key-focus--outline-color: props.def(
71 --o-menu--item--key-focus--outline-color,
72 props.get(core.$theme, --focus, --outline),
73 "color"
74) !default;
diff --git a/src/objects/_navbar.scss b/src/objects/_navbar.scss
index cc1eaaa..4b678e0 100644
--- a/src/objects/_navbar.scss
+++ b/src/objects/_navbar.scss
@@ -1,151 +1,197 @@
1@use 'sass:list'; 1@use "sass:list";
2@use 'sass:map'; 2@use "sass:map";
3@use 'sass:meta'; 3@use "sass:meta";
4@use 'sass:string'; 4@use "sass:string";
5@use 'pkg:iro-sass/src/bem'; 5@use "pkg:iro-sass/bem";
6@use 'pkg:iro-sass/src/props'; 6@use "pkg:iro-sass/props";
7@use '../props' as *; 7@use "../props" as *;
8 8
9@forward 'navbar.vars'; 9@forward "navbar.vars";
10@use 'navbar.vars' as vars; 10@use "navbar.vars" as vars;
11 11
12@mixin -apply-theme($theme, $key: ()) { 12@mixin -apply-theme($theme, $key: ()) {
13 @include bem.elem('item-label') { 13 @include bem.elem("item-label") {
14 color: props.get($theme, list.join($key, --disabled --label-color)...); 14 color: props.get($theme, list.join($key, --disabled --label-color)...);
15 } 15 }
16 16
17 @include bem.elem('item-content') { 17 @include bem.elem("item-content") {
18 color: props.get($theme, list.join($key, --disabled --text-color)...); 18 color: props.get($theme, list.join($key, --disabled --text-color)...);
19 19
20 &::after { 20 &::after {
21 outline: props.get($theme, list.join($key, --key-focus --border)...) solid props.get(vars.$key-focus--border-width); 21 outline: props.get($theme, list.join($key, --key-focus --border)...) solid
22 box-shadow: 22 props.get(vars.$key-focus--border-width);
23 0 23 box-shadow: 0 0 0
24 0 24 calc(
25 0 25 props.get(vars.$key-focus--border-width) +
26 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 26 props.get(vars.$key-focus--outline-width)
27 )
27 props.get($theme, list.join($key, --key-focus --outline)...); 28 props.get($theme, list.join($key, --key-focus --outline)...);
28 } 29 }
29 } 30 }
30 31
31 @include bem.elem('item') { 32 @include bem.elem("item") {
32 &:link, 33 &:link,
33 &:visited, 34 &:visited,
34 &:enabled { 35 &:enabled {
35 @include bem.elem('item-label') { 36 @include bem.elem("item-label") {
36 color: props.get($theme, list.join($key, --label-color)...); 37 color: props.get($theme, list.join($key, --label-color)...);
37 } 38 }
38 39
39 @include bem.elem('item-content') { 40 @include bem.elem("item-content") {
40 color: props.get($theme, list.join($key, --text-color)...); 41 color: props.get($theme, list.join($key, --text-color)...);
41 } 42 }
42 43
43 &:hover, 44 &:hover,
44 &:focus-visible { 45 &:focus-visible {
45 @include bem.elem('item-label') { 46 @include bem.elem("item-label") {
46 color: props.get($theme, list.join($key, --hover --label-color)...); 47 color: props.get($theme, list.join($key, --hover --label-color)...);
47 } 48 }
48 49
49 @include bem.elem('item-content') { 50 @include bem.elem("item-content") {
50 color: props.get($theme, list.join($key, --hover --text-color)...); 51 color: props.get($theme, list.join($key, --hover --text-color)...);
51 background-color: props.get($theme, list.join($key, --hover --bg-color)...); 52 background-color: props.get($theme, list.join($key, --hover --bg-color)...);
52 } 53 }
53 } 54 }
54 55
55 &:focus-visible { 56 &:focus-visible {
56 @include bem.elem('item-label') { 57 @include bem.elem("item-label") {
57 color: props.get($theme, list.join($key, --key-focus --label)...); 58 color: props.get($theme, list.join($key, --key-focus --label)...);
58 } 59 }
59 } 60 }
60 61
61 &:active { 62 &:active {
62 @include bem.elem('item-label') { 63 @include bem.elem("item-label") {
63 color: props.get($theme, list.join($key, --active --label-color)...); 64 color: props.get($theme, list.join($key, --active --label-color)...);
64 } 65 }
65 66
66 @include bem.elem('item-content') { 67 @include bem.elem("item-content") {
67 color: props.get($theme, list.join($key, --active --text-color)...); 68 color: props.get($theme, list.join($key, --active --text-color)...);
68 background-color: props.get($theme, list.join($key, --active --bg-color)...); 69 background-color: props.get($theme, list.join($key, --active --bg-color)...);
69 } 70 }
70 } 71 }
71 } 72 }
72 73
73 @include bem.is('selected') { 74 @include bem.is("selected") {
74 @include bem.elem('item-label') { 75 @include bem.elem("item-label") {
75 color: props.get($theme, list.join($key, --selected --disabled --label-color)...); 76 color: props.get($theme, list.join($key, --selected --disabled --label-color)...);
76 } 77 }
77 78
78 @include bem.elem('item-content') { 79 @include bem.elem("item-content") {
79 color: props.get($theme, list.join($key, --selected --disabled --text-color)...); 80 color: props.get($theme, list.join($key, --selected --disabled --text-color)...);
80 background-color: props.get($theme, list.join($key, --selected --disabled --bg-color)...); 81 background-color: props.get(
82 $theme,
83 list.join($key, --selected --disabled --bg-color)...
84 );
81 } 85 }
82 86
83 &:link, 87 &:link,
84 &:visited, 88 &:visited,
85 &:enabled { 89 &:enabled {
86 @include bem.elem('item-label') { 90 @include bem.elem("item-label") {
87 color: props.get($theme, list.join($key, --selected --label-color)...); 91 color: props.get($theme, list.join($key, --selected --label-color)...);
88 } 92 }
89 93
90 @include bem.elem('item-content') { 94 @include bem.elem("item-content") {
91 color: props.get($theme, list.join($key, --selected --text-color)...); 95 color: props.get($theme, list.join($key, --selected --text-color)...);
92 background-color: props.get($theme, list.join($key, --selected --bg-color)...); 96 background-color: props.get($theme, list.join($key, --selected --bg-color)...);
93 } 97 }
94 98
95 &:hover, 99 &:hover,
96 &:focus-visible { 100 &:focus-visible {
97 @include bem.elem('item-label') { 101 @include bem.elem("item-label") {
98 color: props.get($theme, list.join($key, --selected --hover --label-color)...); 102 color: props.get(
103 $theme,
104 list.join($key, --selected --hover --label-color)...
105 );
99 } 106 }
100 107
101 @include bem.elem('item-content') { 108 @include bem.elem("item-content") {
102 color: props.get($theme, list.join($key, --selected --hover --text-color)...); 109 color: props.get(
103 background-color: props.get($theme, list.join($key, --selected --hover --bg-color)...); 110 $theme,
111 list.join($key, --selected --hover --text-color)...
112 );
113 background-color: props.get(
114 $theme,
115 list.join($key, --selected --hover --bg-color)...
116 );
104 } 117 }
105 } 118 }
106 119
107 &:active { 120 &:active {
108 @include bem.elem('item-label') { 121 @include bem.elem("item-label") {
109 color: props.get($theme, list.join($key, --selected --active --label-color)...); 122 color: props.get(
123 $theme,
124 list.join($key, --selected --active --label-color)...
125 );
110 } 126 }
111 127
112 @include bem.elem('item-content') { 128 @include bem.elem("item-content") {
113 color: props.get($theme, list.join($key, --selected --active --text-color)...); 129 color: props.get(
114 background-color: props.get($theme, list.join($key, --selected --active --bg-color)...); 130 $theme,
131 list.join($key, --selected --active --text-color)...
132 );
133 background-color: props.get(
134 $theme,
135 list.join($key, --selected --active --bg-color)...
136 );
115 } 137 }
116 } 138 }
117 } 139 }
118 } 140 }
119 } 141 }
120 142
121 @include bem.modifier('quiet') { 143 @include bem.modifier("quiet") {
122 @include bem.elem('item') { 144 @include bem.elem("item") {
123 @include bem.is('selected') { 145 @include bem.is("selected") {
124 @include bem.elem('item-content') { 146 @include bem.elem("item-content") {
125 color: props.get($theme, list.join($key, --quiet --selected --disabled --text-color)...); 147 color: props.get(
126 background-color: props.get($theme, list.join($key, --quiet --selected --disabled --bg-color)...); 148 $theme,
149 list.join($key, --quiet --selected --disabled --text-color)...
150 );
151 background-color: props.get(
152 $theme,
153 list.join($key, --quiet --selected --disabled --bg-color)...
154 );
127 } 155 }
128 156
129 &:link, 157 &:link,
130 &:visited, 158 &:visited,
131 &:enabled { 159 &:enabled {
132 @include bem.elem('item-content') { 160 @include bem.elem("item-content") {
133 color: props.get($theme, list.join($key, --quiet --selected --text-color)...); 161 color: props.get(
134 background-color: props.get($theme, list.join($key, --quiet --selected --bg-color)...); 162 $theme,
163 list.join($key, --quiet --selected --text-color)...
164 );
165 background-color: props.get(
166 $theme,
167 list.join($key, --quiet --selected --bg-color)...
168 );
135 } 169 }
136 170
137 &:hover, 171 &:hover,
138 &:focus-visible { 172 &:focus-visible {
139 @include bem.elem('item-content') { 173 @include bem.elem("item-content") {
140 color: props.get($theme, list.join($key, --quiet --selected --hover --text-color)...); 174 color: props.get(
141 background-color: props.get($theme, list.join($key, --quiet --selected --hover --bg-color)...); 175 $theme,
176 list.join($key, --quiet --selected --hover --text-color)...
177 );
178 background-color: props.get(
179 $theme,
180 list.join($key, --quiet --selected --hover --bg-color)...
181 );
142 } 182 }
143 } 183 }
144 184
145 &:active { 185 &:active {
146 @include bem.elem('item-content') { 186 @include bem.elem("item-content") {
147 color: props.get($theme, list.join($key, --quiet --selected --active --text-color)...); 187 color: props.get(
148 background-color: props.get($theme, list.join($key, --quiet --selected --active --bg-color)...); 188 $theme,
189 list.join($key, --quiet --selected --active --text-color)...
190 );
191 background-color: props.get(
192 $theme,
193 list.join($key, --quiet --selected --active --bg-color)...
194 );
149 } 195 }
150 } 196 }
151 } 197 }
@@ -155,64 +201,64 @@
155} 201}
156 202
157@mixin styles { 203@mixin styles {
158 @include materialize-at-root(meta.module-variables('vars')); 204 @include materialize-at-root(meta.module-variables("vars"));
159 205
160 @include bem.object('navbar') { 206 @include bem.object("navbar") {
161 display: flex; 207 display: flex;
162 block-size: props.get(vars.$block-size); 208 block-size: props.get(vars.$block-size);
163 209
164 @include bem.elem('item-label') { 210 @include bem.elem("item-label") {
165 order: 2; 211 order: 2;
166 margin-block-start: props.get(vars.$item--pad-b-icon); 212 margin-block-start: props.get(vars.$item--pad-b-icon);
167 font-size: props.get(vars.$item--label-font-size); 213 font-size: props.get(vars.$item--label-font-size);
168 font-weight: bold; 214 font-weight: bold;
169 215
170 @include bem.next-elem('item-content') { 216 @include bem.next-elem("item-content") {
171 padding-block: props.get(vars.$item--pad-b-icon); 217 padding-block: props.get(vars.$item--pad-b-icon);
172 padding-inline: props.get(vars.$item--pad-i-icon); 218 padding-inline: props.get(vars.$item--pad-i-icon);
173 font-size: props.get(vars.$item--icon-size); 219 font-size: props.get(vars.$item--icon-size);
174 } 220 }
175 } 221 }
176 222
177 @include bem.elem('item-content-text') { 223 @include bem.elem("item-content-text") {
178 margin-inline: props.get(vars.$item--pad-i-label); 224 margin-inline: props.get(vars.$item--pad-i-label);
179 } 225 }
180 226
181 @include bem.elem('item-content') { 227 @include bem.elem("item-content") {
182 position: relative; 228 position: relative;
183 order: 1; 229 order: 1;
184 padding-block: props.get(vars.$item--pad-b); 230 padding-block: props.get(vars.$item--pad-b);
185 padding-inline: props.get(vars.$item--pad-i); 231 padding-inline: props.get(vars.$item--pad-i);
186 font-size: props.get(vars.$item--font-size); 232 font-size: props.get(vars.$item--font-size);
187 white-space: nowrap; 233 white-space: nowrap;
188 border-radius: 100em; 234 border-radius: 100em;
189 235
190 &::after { 236 &::after {
191 position: absolute; 237 position: absolute;
192 inset: calc(-1 * props.get(vars.$key-focus--border-offset)); 238 inset: calc(-1 * props.get(vars.$key-focus--border-offset));
193 z-index: -10; 239 z-index: -10;
194 display: block; 240 display: block;
195 visibility: hidden; 241 visibility: hidden;
196 pointer-events: none; 242 pointer-events: none;
197 content: ''; 243 content: "";
198 border-radius: 100em; 244 border-radius: 100em;
199 } 245 }
200 } 246 }
201 247
202 @include bem.elem('item') { 248 @include bem.elem("item") {
203 display: flex; 249 display: flex;
204 flex-direction: column; 250 flex-direction: column;
205 align-items: center; 251 align-items: center;
206 justify-content: center; 252 justify-content: center;
207 inline-size: 100%; 253 inline-size: 100%;
208 padding-inline: calc(.5 * props.get(vars.$spacing)); 254 padding-inline: calc(0.5 * props.get(vars.$spacing));
209 font-weight: 500; 255 font-weight: 500;
210 256
211 &:link, 257 &:link,
212 &:visited, 258 &:visited,
213 &:enabled { 259 &:enabled {
214 &:focus-visible { 260 &:focus-visible {
215 @include bem.elem('item-content') { 261 @include bem.elem("item-content") {
216 &::after { 262 &::after {
217 visibility: visible; 263 visibility: visible;
218 } 264 }
@@ -220,7 +266,7 @@
220 } 266 }
221 } 267 }
222 268
223 @include bem.is('selected') { 269 @include bem.is("selected") {
224 font-weight: bold; 270 font-weight: bold;
225 } 271 }
226 } 272 }
@@ -233,22 +279,21 @@
233 } 279 }
234 } 280 }
235 281
236 @include bem.modifier('hide-unselected') { 282 @include bem.modifier("hide-unselected") {
237 @include bem.elem('item') { 283 @include bem.elem("item") {
238 display: none; 284 display: none;
239 285
240 @include bem.is('selected') { 286 @include bem.is("selected") {
241 display: flex; 287 display: flex;
242 } 288 }
243 } 289 }
244 } 290 }
245 291
246 @include bem.modifier('adapt') { 292 @include bem.modifier("adapt") {
247 block-size: 100%; 293 block-size: 100%;
248 } 294 }
249 295
250 296 @include bem.modifier("align-block") {
251 @include bem.modifier('align-block') {
252 margin-inline: calc(-1 * props.get(vars.$item--pad-i)); 297 margin-inline: calc(-1 * props.get(vars.$item--pad-i));
253 } 298 }
254 } 299 }
diff --git a/src/objects/_navbar.vars.scss b/src/objects/_navbar.vars.scss
index e96b714..b7d7e16 100644
--- a/src/objects/_navbar.vars.scss
+++ b/src/objects/_navbar.vars.scss
@@ -1,178 +1,242 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6$block-size: props.def(--o-navbar--block-size, props.get(core.$size--1000)) !default; 6$block-size: props.def(--o-navbar--block-size, props.get(core.$size--1000)) !default;
7$spacing: props.def(--o-navbar--spacing, props.get(core.$size--50)) !default; 7$spacing: props.def(--o-navbar--spacing, props.get(core.$size--50)) !default;
8 8
9$item--pad-i: props.def(--o-navbar--item--pad-i, props.get(core.$size--150)) !default; 9$item--pad-i: props.def(--o-navbar--item--pad-i, props.get(core.$size--150)) !default;
10$item--pad-i-label: props.def(--o-navbar--item--pad-i-label, props.get(core.$size--75)) !default; 10$item--pad-i-label: props.def(--o-navbar--item--pad-i-label, props.get(core.$size--75)) !default;
11$item--pad-i-icon: props.def(--o-navbar--item--pad-i-icon, props.get(core.$size--250)) !default; 11$item--pad-i-icon: props.def(--o-navbar--item--pad-i-icon, props.get(core.$size--250)) !default;
12$item--pad-b: props.def(--o-navbar--item--pad-b, props.get(core.$size--75)) !default; 12$item--pad-b: props.def(--o-navbar--item--pad-b, props.get(core.$size--75)) !default;
13$item--pad-b-icon: props.def(--o-navbar--item--pad-b-icon, props.get(core.$size--40)) !default; 13$item--pad-b-icon: props.def(--o-navbar--item--pad-b-icon, props.get(core.$size--40)) !default;
14$item--font-size: props.def(--o-navbar--item--font-size, props.get(core.$font-size--100)) !default; 14$item--font-size: props.def(--o-navbar--item--font-size, props.get(core.$font-size--100)) !default;
15$item--icon-size: props.def(--o-navbar--item--icon-size, props.get(core.$font-size--200)) !default; 15$item--icon-size: props.def(--o-navbar--item--icon-size, props.get(core.$font-size--200)) !default;
16$item--label-font-size: props.def(--o-navbar--item--label-font-size, props.get(core.$font-size--50)) !default; 16$item--label-font-size: props.def(
17 --o-navbar--item--label-font-size,
18 props.get(core.$font-size--50)
19) !default;
17 20
18$key-focus--border-width: props.def(--o-navbar--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 21$key-focus--border-width: props.def(
19$key-focus--border-offset: props.def(--o-navbar--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 22 --o-navbar--key-focus--border-width,
20$key-focus--outline-width: props.def(--o-navbar--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 23 props.get(core.$key-focus--border-width)
24) !default;
25$key-focus--border-offset: props.def(
26 --o-navbar--key-focus--border-offset,
27 props.get(core.$key-focus--border-offset)
28) !default;
29$key-focus--outline-width: props.def(
30 --o-navbar--key-focus--outline-width,
31 props.get(core.$key-focus--outline-width)
32) !default;
21 33
22$themes: props.def(--o-navbar, (), 'color'); 34$themes: props.def(--o-navbar, (), "color");
23 35
24$default-theme-override: () !default; 36$default-theme-override: () !default;
25$default-theme: map.deep-merge(( 37$default-theme: map.deep-merge(
26 --text-color: props.get(core.$theme, --text), 38 (
27 --label-color: props.get(core.$theme, --text-mute), 39 --text-color: props.get(core.$theme, --text),
28 40 --label-color: props.get(core.$theme, --text-mute),
29 --hover: (
30 --bg-color: props.get(core.$theme, --border-mute),
31 --text-color: props.get(core.$theme, --heading),
32 --label-color: props.get(core.$theme, --text),
33 ),
34
35 --active: (
36 --bg-color: props.get(core.$theme, --border),
37 --text-color: props.get(core.$theme, --heading),
38 --label-color: props.get(core.$theme, --heading),
39 ),
40
41 --disabled: (
42 --text-color: props.get(core.$theme, --border-strong),
43 --label-color: props.get(core.$theme, --text-disabled),
44 ),
45
46 --key-focus: (
47 --label: props.get(core.$theme, --focus, --text),
48 --border: props.get(core.$theme, --focus, --border),
49 --outline: props.get(core.$theme, --focus, --outline),
50 ),
51
52 --selected: (
53 --bg-color: props.get(core.$theme, --heading),
54 --text-color: props.get(core.$theme, --base, --50),
55 --label-color: props.get(core.$theme, --heading),
56
57 --hover: ( 41 --hover: (
58 --bg-color: props.get(core.$theme, --text), 42 --bg-color: props.get(core.$theme, --border-mute),
59 --text-color: props.get(core.$theme, --base, --50), 43 --text-color: props.get(core.$theme, --heading),
60 --label-color: props.get(core.$theme, --heading), 44 --label-color: props.get(core.$theme, --text),
61 ), 45 ),
62 46
63 --active: ( 47 --active: (
64 --bg-color: props.get(core.$theme, --text-mute), 48 --bg-color: props.get(core.$theme, --border),
65 --text-color: props.get(core.$theme, --base, --50), 49 --text-color: props.get(core.$theme, --heading),
66 --label-color: props.get(core.$theme, --heading), 50 --label-color: props.get(core.$theme, --heading),
67 ), 51 ),
68 52
69 --disabled: ( 53 --disabled: (
70 --bg-color: props.get(core.$theme, --border-mute), 54 --text-color: props.get(core.$theme, --border-strong),
71 --text-color: props.get(core.$theme, --border-strong),
72 --label-color: props.get(core.$theme, --text-disabled), 55 --label-color: props.get(core.$theme, --text-disabled),
73 ), 56 ),
74 ),
75
76 --quiet: (
77 --selected: (
78 --bg-color: props.get(core.$theme, --border-mute),
79 --text-color: props.get(core.$theme, --heading),
80
81 --hover: (
82 --bg-color: props.get(core.$theme, --border),
83 --text-color: props.get(core.$theme, --heading),
84 ),
85
86 --active: (
87 --bg-color: props.get(core.$theme, --border-strong),
88 --text-color: props.get(core.$theme, --heading),
89 ),
90
91 --disabled: (
92 --bg-color: props.get(core.$theme, --border-mute),
93 --text-color: props.get(core.$theme, --border-strong),
94 ),
95 )
96 )
97), $default-theme-override) !default;
98$default-theme: props.def(--o-navbar, $default-theme, 'color');
99
100@each $theme in map.keys(props.get(core.$transparent-colors)) {
101 $nav-theme: --static-#{string.slice($theme, 3)};
102 57
103 $themes: props.merge($themes, ( 58 --key-focus: (
104 $nav-theme: ( 59 --label: props.get(core.$theme, --focus, --text),
105 --text-color: props.get(core.$transparent-colors, $theme, --800), 60 --border: props.get(core.$theme, --focus, --border),
106 --label-color: props.get(core.$transparent-colors, $theme, --700), 61 --outline: props.get(core.$theme, --focus, --outline),
62 ),
107 63
64 --selected: (
65 --bg-color: props.get(core.$theme, --heading),
66 --text-color: props.get(core.$theme, --base, --50),
67 --label-color: props.get(core.$theme, --heading),
108 --hover: ( 68 --hover: (
109 --bg-color: props.get(core.$transparent-colors, $theme, --300), 69 --bg-color: props.get(core.$theme, --text),
110 --text-color: props.get(core.$transparent-colors, $theme, --900), 70 --text-color: props.get(core.$theme, --base, --50),
111 --label-color: props.get(core.$transparent-colors, $theme, --800), 71 --label-color: props.get(core.$theme, --heading),
112 ), 72 ),
113 73
114 --active: ( 74 --active: (
115 --bg-color: props.get(core.$transparent-colors, $theme, --400), 75 --bg-color: props.get(core.$theme, --text-mute),
116 --text-color: props.get(core.$transparent-colors, $theme, --900), 76 --text-color: props.get(core.$theme, --base, --50),
117 --label-color: props.get(core.$transparent-colors, $theme, --900), 77 --label-color: props.get(core.$theme, --heading),
118 ), 78 ),
119 79
120 --disabled: ( 80 --disabled: (
121 --text-color: props.get(core.$transparent-colors, $theme, --500), 81 --bg-color: props.get(core.$theme, --border-mute),
122 --label-color: props.get(core.$transparent-colors, $theme, --500), 82 --text-color: props.get(core.$theme, --border-strong),
123 ), 83 --label-color: props.get(core.$theme, --text-disabled),
124
125 --key-focus: (
126 --label: props.get(core.$transparent-colors, $theme, --800),
127 --border: props.get(core.$transparent-colors, $theme, --900),
128 --outline: props.get(core.$transparent-colors, $theme, --300),
129 ), 84 ),
85 ),
130 86
87 --quiet: (
131 --selected: ( 88 --selected: (
132 --bg-color: props.get(core.$transparent-colors, $theme, --900), 89 --bg-color: props.get(core.$theme, --border-mute),
133 --text-color: props.get(core.$transparent-colors, $theme, --text), 90 --text-color: props.get(core.$theme, --heading),
134 --label-color: props.get(core.$transparent-colors, $theme, --800),
135
136 --hover: ( 91 --hover: (
137 --bg-color: props.get(core.$transparent-colors, $theme, --800), 92 --bg-color: props.get(core.$theme, --border),
138 --text-color: props.get(core.$transparent-colors, $theme, --text), 93 --text-color: props.get(core.$theme, --heading),
139 --label-color: props.get(core.$transparent-colors, $theme, --900),
140 ), 94 ),
141 95
142 --active: ( 96 --active: (
143 --bg-color: props.get(core.$transparent-colors, $theme, --800), 97 --bg-color: props.get(core.$theme, --border-strong),
144 --text-color: props.get(core.$transparent-colors, $theme, --text), 98 --text-color: props.get(core.$theme, --heading),
145 --label-color: props.get(core.$transparent-colors, $theme, --900),
146 ), 99 ),
147 100
148 --disabled: ( 101 --disabled: (
149 --bg-color: props.get(core.$transparent-colors, $theme, --200), 102 --bg-color: props.get(core.$theme, --border-mute),
150 --text-color: props.get(core.$transparent-colors, $theme, --500), 103 --text-color: props.get(core.$theme, --border-strong),
151 --label-color: props.get(core.$transparent-colors, $theme, --100),
152 ), 104 ),
153 ), 105 ),
106 ),
107 ),
108 $default-theme-override
109) !default;
110$default-theme: props.def(--o-navbar, $default-theme, "color");
154 111
155 --quiet: ( 112@each $theme in map.keys(props.get(core.$transparent-colors)) {
156 --selected: ( 113 $nav-theme: --static-#{string.slice($theme, 3)};
157 --bg-color: props.get(core.$transparent-colors, $theme, --300),
158 --text-color: props.get(core.$transparent-colors, $theme, --900),
159 114
115 $themes: props.merge(
116 $themes,
117 (
118 $nav-theme: (
119 --text-color: props.get(core.$transparent-colors, $theme, --800),
120 --label-color: props.get(core.$transparent-colors, $theme, --700),
160 --hover: ( 121 --hover: (
161 --bg-color: props.get(core.$transparent-colors, $theme, --400), 122 --bg-color: props.get(core.$transparent-colors, $theme, --300),
162 --text-color: props.get(core.$transparent-colors, $theme, --900), 123 --text-color: props.get(core.$transparent-colors, $theme, --900),
163 ), 124 --label-color: props.get(core.$transparent-colors, $theme, --800),
125 ),
164 126
165 --active: ( 127 --active: (
166 --bg-color: props.get(core.$transparent-colors, $theme, --500), 128 --bg-color: props.get(core.$transparent-colors, $theme, --400),
167 --text-color: props.get(core.$transparent-colors, $theme, --900), 129 --text-color: props.get(core.$transparent-colors, $theme, --900),
168 ), 130 --label-color: props.get(core.$transparent-colors, $theme, --900),
131 ),
169 132
170 --disabled: ( 133 --disabled: (
171 --bg-color: props.get(core.$transparent-colors, $theme, --100), 134 --text-color: props.get(core.$transparent-colors, $theme, --500),
172 --text-color: props.get(core.$transparent-colors, $theme, --500), 135 --label-color: props.get(core.$transparent-colors, $theme, --500),
173 ), 136 ),
174 ) 137
175 ) 138 --key-focus: (
139 --label: props.get(core.$transparent-colors, $theme, --800),
140 --border: props.get(core.$transparent-colors, $theme, --900),
141 --outline: props.get(core.$transparent-colors, $theme, --300),
142 ),
143
144 --selected: (
145 --bg-color: props.get(core.$transparent-colors, $theme, --900),
146 --text-color: props.get(core.$transparent-colors, $theme, --text),
147 --label-color: props.get(core.$transparent-colors, $theme, --800),
148 --hover: (
149 --bg-color: props.get(core.$transparent-colors, $theme, --800),
150 --text-color: props.get(
151 core.$transparent-colors,
152 $theme,
153 --text
154 ),
155 --label-color: props.get(
156 core.$transparent-colors,
157 $theme,
158 --900
159 ),
160 ),
161
162 --active: (
163 --bg-color: props.get(core.$transparent-colors, $theme, --800),
164 --text-color: props.get(
165 core.$transparent-colors,
166 $theme,
167 --text
168 ),
169 --label-color: props.get(
170 core.$transparent-colors,
171 $theme,
172 --900
173 ),
174 ),
175
176 --disabled: (
177 --bg-color: props.get(core.$transparent-colors, $theme, --200),
178 --text-color: props.get(
179 core.$transparent-colors,
180 $theme,
181 --500
182 ),
183 --label-color: props.get(
184 core.$transparent-colors,
185 $theme,
186 --100
187 ),
188 ),
189 ),
190
191 --quiet: (
192 --selected: (
193 --bg-color: props.get(core.$transparent-colors, $theme, --300),
194 --text-color: props.get(
195 core.$transparent-colors,
196 $theme,
197 --900
198 ),
199 --hover: (
200 --bg-color: props.get(
201 core.$transparent-colors,
202 $theme,
203 --400
204 ),
205 --text-color: props.get(
206 core.$transparent-colors,
207 $theme,
208 --900
209 ),
210 ),
211
212 --active: (
213 --bg-color: props.get(
214 core.$transparent-colors,
215 $theme,
216 --500
217 ),
218 --text-color: props.get(
219 core.$transparent-colors,
220 $theme,
221 --900
222 ),
223 ),
224
225 --disabled: (
226 --bg-color: props.get(
227 core.$transparent-colors,
228 $theme,
229 --100
230 ),
231 --text-color: props.get(
232 core.$transparent-colors,
233 $theme,
234 --500
235 ),
236 ),
237 ),
238 ),
239 ),
176 ) 240 )
177 )); 241 );
178} 242}
diff --git a/src/objects/_palette.scss b/src/objects/_palette.scss
index f503812..88448e0 100644
--- a/src/objects/_palette.scss
+++ b/src/objects/_palette.scss
@@ -1,21 +1,27 @@
1@use 'sass:list'; 1@use "sass:list";
2@use 'sass:map'; 2@use "sass:map";
3@use 'sass:string'; 3@use "sass:string";
4@use 'pkg:iro-sass/src/bem'; 4@use "pkg:iro-sass/bem";
5@use '../config'; 5@use "../config";
6@use 'pkg:iro-sass/src/props'; 6@use "pkg:iro-sass/props";
7@use '../core.vars' as core; 7@use "../core.vars" as core;
8 8
9@mixin styles { 9@mixin styles {
10 @include bem.object('palette') { 10 @include bem.object("palette") {
11 display: flex; 11 display: flex;
12 block-size: 3em; 12 block-size: 3em;
13 13
14 @include bem.elem('item') { 14 @include bem.elem("item") {
15 flex: 1 1 auto; 15 flex: 1 1 auto;
16 16
17 $palette: map.get(config.$themes, config.$theme-default, light, --palettes, --base); 17 $palette: map.get(config.$themes, config.$theme-default, light, --palettes, --base);
18 $levels: map.get(config.$themes, config.$theme-default, light, --levels, list.nth($palette, 2)); 18 $levels: map.get(
19 config.$themes,
20 config.$theme-default,
21 light,
22 --levels,
23 list.nth($palette, 2)
24 );
19 25
20 @for $i from 1 through list.length($levels) { 26 @for $i from 1 through list.length($levels) {
21 $key: list.nth(map.keys($levels), $i); 27 $key: list.nth(map.keys($levels), $i);
@@ -26,11 +32,19 @@
26 } 32 }
27 } 33 }
28 34
29 @each $palette-name, $palette in map.get(config.$themes, config.$theme-default, light, --palettes) { 35 @each $palette-name,
30 $levels: map.get(config.$themes, config.$theme-default, light, --levels, list.nth($palette, 2)); 36 $palette in map.get(config.$themes, config.$theme-default, light, --palettes)
37 {
38 $levels: map.get(
39 config.$themes,
40 config.$theme-default,
41 light,
42 --levels,
43 list.nth($palette, 2)
44 );
31 45
32 @include bem.modifier(string.slice($palette-name, 3)) { 46 @include bem.modifier(string.slice($palette-name, 3)) {
33 @include bem.elem('item') { 47 @include bem.elem("item") {
34 @for $i from 1 through list.length($levels) { 48 @for $i from 1 through list.length($levels) {
35 $key: list.nth(map.keys($levels), $i); 49 $key: list.nth(map.keys($levels), $i);
36 50
@@ -42,17 +56,21 @@
42 } 56 }
43 } 57 }
44 58
45 @include bem.modifier('static') { 59 @include bem.modifier("static") {
46 @each $palette-name, $palette in map.get(config.$static-colors, --palettes) { 60 @each $palette-name, $palette in map.get(config.$static-colors, --palettes) {
47 $levels: map.get(config.$static-colors, --levels); 61 $levels: map.get(config.$static-colors, --levels);
48 62
49 @include bem.modifier(string.slice($palette-name, 3)) { 63 @include bem.modifier(string.slice($palette-name, 3)) {
50 @include bem.elem('item') { 64 @include bem.elem("item") {
51 @for $i from 1 through list.length($levels) { 65 @for $i from 1 through list.length($levels) {
52 $key: list.nth(map.keys($levels), $i); 66 $key: list.nth(map.keys($levels), $i);
53 67
54 &:nth-child(#{$i}) { 68 &:nth-child(#{$i}) {
55 background-color: props.get(core.$theme, #{$palette-name}-static, $key); 69 background-color: props.get(
70 core.$theme,
71 #{$palette-name}-static,
72 $key
73 );
56 } 74 }
57 } 75 }
58 } 76 }
diff --git a/src/objects/_placeholders.scss b/src/objects/_placeholders.scss
index 683f57e..d0af033 100644
--- a/src/objects/_placeholders.scss
+++ b/src/objects/_placeholders.scss
@@ -1,22 +1,22 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'placeholders.vars'; 6@forward "placeholders.vars";
7@use 'placeholders.vars' as vars; 7@use "placeholders.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.object('placeholders') { 12 @include bem.object("placeholders") {
13 @include bem.elem('placeholder') { 13 @include bem.elem("placeholder") {
14 display: inline-block; 14 display: inline-block;
15 min-block-size: props.get(vars.$min-block-size); 15 min-block-size: props.get(vars.$min-block-size);
16 vertical-align: middle; 16 vertical-align: middle;
17 background-color: currentColor; 17 background-color: currentColor;
18 border-radius: props.get(vars.$rounding); 18 border-radius: props.get(vars.$rounding);
19 opacity: props.get(vars.$opacity); 19 opacity: props.get(vars.$opacity);
20 } 20 }
21 } 21 }
22} 22}
diff --git a/src/objects/_placeholders.vars.scss b/src/objects/_placeholders.vars.scss
index 1ac4ef7..87e1657 100644
--- a/src/objects/_placeholders.vars.scss
+++ b/src/objects/_placeholders.vars.scss
@@ -1,6 +1,6 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$min-block-size: props.def(--o-placeholder--min-block-size, 1em) !default; 4$min-block-size: props.def(--o-placeholder--min-block-size, 1em) !default;
5$rounding: props.def(--o-placeholder--rounding, props.get(core.$rounding)) !default; 5$rounding: props.def(--o-placeholder--rounding, props.get(core.$rounding)) !default;
6$opacity: props.def(--o-placeholder--opacity, .5) !default; 6$opacity: props.def(--o-placeholder--opacity, 0.5) !default;
diff --git a/src/objects/_popover.scss b/src/objects/_popover.scss
index 1cb5660..90187c1 100644
--- a/src/objects/_popover.scss
+++ b/src/objects/_popover.scss
@@ -1,44 +1,40 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'popover.vars'; 6@forward "popover.vars";
7@use 'popover.vars' as vars; 7@use "popover.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.object('popover') { 12 @include bem.object("popover") {
13 position: fixed; 13 position: fixed;
14 inset-block-start: 0; 14 inset-block-start: 0;
15 inset-inline-start: 0; 15 inset-inline-start: 0;
16 z-index: props.get(vars.$z-index); 16 z-index: props.get(vars.$z-index);
17 padding-block: props.get(vars.$pad-b); 17 padding-block: props.get(vars.$pad-b);
18 padding-inline: props.get(vars.$pad-i); 18 padding-inline: props.get(vars.$pad-i);
19 margin: 0; 19 margin: 0;
20 color: currentColor; 20 color: currentColor;
21 background-color: props.get(vars.$bg-color); 21 background-color: props.get(vars.$bg-color);
22 border: props.get(vars.$border-width) solid transparent; 22 border: props.get(vars.$border-width) solid transparent;
23 border-color: props.get(vars.$border-color); 23 border-color: props.get(vars.$border-color);
24 border-radius: props.get(vars.$rounding); 24 border-radius: props.get(vars.$rounding);
25 box-shadow: 25 box-shadow: props.get(vars.$shadow-x) props.get(vars.$shadow-y) props.get(vars.$shadow-blur)
26 props.get(vars.$shadow-x) 26 props.get(vars.$shadow-grow) props.get(vars.$shadow-color);
27 props.get(vars.$shadow-y) 27 transform: translate(var(--x), var(--y));
28 props.get(vars.$shadow-blur)
29 props.get(vars.$shadow-grow)
30 props.get(vars.$shadow-color);
31 transform: translate(var(--x), var(--y));
32 28
33 @include bem.modifier('up-left') { 29 @include bem.modifier("up-left") {
34 transform: translate(var(--x), calc(var(--y) - 100%)); 30 transform: translate(var(--x), calc(var(--y) - 100%));
35 } 31 }
36 32
37 @include bem.modifier('up-right') { 33 @include bem.modifier("up-right") {
38 transform: translate(calc(var(--x) - 100%), calc(var(--y) - 100%)); 34 transform: translate(calc(var(--x) - 100%), calc(var(--y) - 100%));
39 } 35 }
40 36
41 @include bem.modifier('down-right') { 37 @include bem.modifier("down-right") {
42 transform: translate(calc(var(--x) - 100%), var(--y)); 38 transform: translate(calc(var(--x) - 100%), var(--y));
43 } 39 }
44 } 40 }
diff --git a/src/objects/_popover.vars.scss b/src/objects/_popover.vars.scss
index 202d71a..df1072e 100644
--- a/src/objects/_popover.vars.scss
+++ b/src/objects/_popover.vars.scss
@@ -1,19 +1,28 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$z-index: props.def(--o-popover--z-index, 11000) !default; 5$z-index: props.def(--o-popover--z-index, 11000) !default;
6$pad-i: props.def(--o-popover--pad-i, 0) !default; 6$pad-i: props.def(--o-popover--pad-i, 0) !default;
7$pad-b: props.def(--o-popover--pad-b, props.get(core.$size--85)) !default; 7$pad-b: props.def(--o-popover--pad-b, props.get(core.$size--85)) !default;
8$separator-width: props.def(--o-popover--separator-width, props.get(core.$size--85)) !default; 8$separator-width: props.def(--o-popover--separator-width, props.get(core.$size--85)) !default;
9$rounding: props.def(--o-popover--rounding, props.get(core.$rounding)) !default; 9$rounding: props.def(--o-popover--rounding, props.get(core.$rounding)) !default;
10$border-width: props.def(--o-popover--border-width, props.get(core.$border-width--thin)) !default; 10$border-width: props.def(--o-popover--border-width, props.get(core.$border-width--thin)) !default;
11 11
12$shadow-x: props.def(--o-popover--shadow-x, props.get(core.$shadow--l2--x)) !default; 12$shadow-x: props.def(--o-popover--shadow-x, props.get(core.$shadow--l2--x)) !default;
13$shadow-y: props.def(--o-popover--shadow-y, props.get(core.$shadow--l2--y)) !default; 13$shadow-y: props.def(--o-popover--shadow-y, props.get(core.$shadow--l2--y)) !default;
14$shadow-blur: props.def(--o-popover--shadow-blur, props.get(core.$shadow--l2--blur)) !default; 14$shadow-blur: props.def(--o-popover--shadow-blur, props.get(core.$shadow--l2--blur)) !default;
15$shadow-grow: props.def(--o-popover--shadow-grow, props.get(core.$shadow--l2--grow)) !default; 15$shadow-grow: props.def(--o-popover--shadow-grow, props.get(core.$shadow--l2--grow)) !default;
16 16
17$bg-color: props.def(--o-popover--bg-color, props.get(core.$theme, --bg-l2), 'color') !default; 17$bg-color: props.def(--o-popover--bg-color, props.get(core.$theme, --bg-l2), "color") !default;
18$border-color: props.def(--o-popover--border-color, props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border-strong), 'color') !default; 18$border-color: props.def(
19$shadow-color: props.def(--o-popover--shadow-color, props.get(core.$theme, --shadow), 'color') !default; 19 --o-popover--border-color,
20 props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border)
21 props.get(core.$theme, --box, --border-strong),
22 "color"
23) !default;
24$shadow-color: props.def(
25 --o-popover--shadow-color,
26 props.get(core.$theme, --shadow),
27 "color"
28) !default;
diff --git a/src/objects/_radio.scss b/src/objects/_radio.scss
index ae4a85a..c964657 100644
--- a/src/objects/_radio.scss
+++ b/src/objects/_radio.scss
@@ -1,92 +1,100 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5@use '../core.vars' as core; 5@use "../core.vars" as core;
6 6
7@forward 'radio.vars'; 7@forward "radio.vars";
8@use 'radio.vars' as vars; 8@use "radio.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.object('radio') { 13 @include bem.object("radio") {
14 position: relative; 14 position: relative;
15 display: inline-block; 15 display: inline-block;
16 padding-block: props.get(vars.$pad-b); 16 padding-block: props.get(vars.$pad-b);
17 padding-inline: props.get(vars.$pad-i); 17 padding-inline: props.get(vars.$pad-i);
18 margin-inline: 18 margin-inline: calc(-1 * props.get(vars.$pad-i) - props.get(vars.$key-focus--border-offset))
19 calc(-1 * props.get(vars.$pad-i) - props.get(vars.$key-focus--border-offset)) 19 calc(
20 calc(props.get(vars.$spacing-sibling) - props.get(vars.$pad-i) - props.get(vars.$key-focus--border-offset)); 20 props.get(vars.$spacing-sibling) - props.get(vars.$pad-i) - props.get(
21 vars.$key-focus--border-offset
22 )
23 );
21 24
22 @include bem.elem('circle') { 25 @include bem.elem("circle") {
23 display: inline-block; 26 display: inline-block;
24 flex: 0 0 auto; 27 flex: 0 0 auto;
25 inline-size: props.get(vars.$diameter); 28 inline-size: props.get(vars.$diameter);
26 block-size: props.get(vars.$diameter); 29 block-size: props.get(vars.$diameter);
27 margin-block-start: calc(.5em * props.get(core.$font--standard--line-height) - .5 * props.get(vars.$diameter) - props.get(vars.$key-focus--border-offset)); 30 margin-block-start: calc(
28 vertical-align: top; 31 0.5em * props.get(core.$font--standard--line-height) - 0.5 *
29 background-color: props.get(vars.$circle-border-color); 32 props.get(vars.$diameter) - props.get(vars.$key-focus--border-offset)
30 background-clip: padding-box; 33 );
31 border: props.get(vars.$key-focus--border-offset) solid transparent; 34 vertical-align: top;
32 border-radius: 2em; 35 background-color: props.get(vars.$circle-border-color);
36 background-clip: padding-box;
37 border: props.get(vars.$key-focus--border-offset) solid transparent;
38 border-radius: 2em;
33 39
34 &::after { 40 &::after {
35 position: relative; 41 position: relative;
36 inset-block-start: props.get(vars.$border-width); 42 inset-block-start: props.get(vars.$border-width);
37 inset-inline-start: props.get(vars.$border-width); 43 inset-inline-start: props.get(vars.$border-width);
38 display: block; 44 display: block;
39 inline-size: calc(props.get(vars.$diameter) - 2 * props.get(vars.$border-width)); 45 inline-size: calc(props.get(vars.$diameter) - 2 * props.get(vars.$border-width));
40 block-size: calc(props.get(vars.$diameter) - 2 * props.get(vars.$border-width)); 46 block-size: calc(props.get(vars.$diameter) - 2 * props.get(vars.$border-width));
41 content: ''; 47 content: "";
42 background-color: props.get(vars.$circle-bg-color); 48 background-color: props.get(vars.$circle-bg-color);
43 border-radius: props.get(vars.$diameter); 49 border-radius: props.get(vars.$diameter);
44 transition: transform .2s ease; 50 transition: transform 0.2s ease;
45 } 51 }
46 } 52 }
47 53
48 @include bem.elem('label') { 54 @include bem.elem("label") {
49 margin-inline-start: calc(props.get(vars.$label-gap) - props.get(vars.$key-focus--border-offset)); 55 margin-inline-start: calc(
56 props.get(vars.$label-gap) - props.get(vars.$key-focus--border-offset)
57 );
50 } 58 }
51 59
52 @include bem.elem('native') { 60 @include bem.elem("native") {
53 position: absolute; 61 position: absolute;
54 inset-block-start: 0; 62 inset-block-start: 0;
55 inset-inline-start: 0; 63 inset-inline-start: 0;
56 z-index: -1; 64 z-index: -1;
57 inline-size: 100%; 65 inline-size: 100%;
58 block-size: 100%; 66 block-size: 100%;
59 padding: 0; 67 padding: 0;
60 margin: 0; 68 margin: 0;
61 overflow: hidden; 69 overflow: hidden;
62 appearance: none; 70 appearance: none;
63 border-radius: props.get(vars.$rounding); 71 border-radius: props.get(vars.$rounding);
64 72
65 &:hover, 73 &:hover,
66 &:focus-visible { 74 &:focus-visible {
67 @include bem.sibling-elem('label') { 75 @include bem.sibling-elem("label") {
68 color: props.get(vars.$hover--label-color); 76 color: props.get(vars.$hover--label-color);
69 } 77 }
70 78
71 @include bem.sibling-elem('circle') { 79 @include bem.sibling-elem("circle") {
72 background-color: props.get(vars.$hover--circle-border-color); 80 background-color: props.get(vars.$hover--circle-border-color);
73 } 81 }
74 } 82 }
75 83
76 &:checked { 84 &:checked {
77 @include bem.sibling-elem('circle') { 85 @include bem.sibling-elem("circle") {
78 &::after { 86 &::after {
79 transform: scale(.44); 87 transform: scale(0.44);
80 } 88 }
81 } 89 }
82 } 90 }
83 91
84 &:disabled { 92 &:disabled {
85 @include bem.sibling-elem('label') { 93 @include bem.sibling-elem("label") {
86 color: props.get(vars.$disabled--label-color); 94 color: props.get(vars.$disabled--label-color);
87 } 95 }
88 96
89 @include bem.sibling-elem('circle') { 97 @include bem.sibling-elem("circle") {
90 background-color: props.get(vars.$disabled--circle-border-color); 98 background-color: props.get(vars.$disabled--circle-border-color);
91 99
92 &::after { 100 &::after {
@@ -96,45 +104,46 @@
96 } 104 }
97 105
98 &:focus-visible { 106 &:focus-visible {
99 @include bem.sibling-elem('label') { 107 @include bem.sibling-elem("label") {
100 color: props.get(vars.$key-focus--label-color); 108 color: props.get(vars.$key-focus--label-color);
101 } 109 }
102 110
103 @include bem.sibling-elem('circle') { 111 @include bem.sibling-elem("circle") {
104 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 112 outline: props.get(vars.$key-focus--border-color) solid
105 box-shadow: 113 props.get(vars.$key-focus--border-width);
106 0 114 box-shadow: 0 0 0
107 0 115 calc(
108 0 116 props.get(vars.$key-focus--border-width) +
109 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 117 props.get(vars.$key-focus--outline-width)
118 )
110 props.get(vars.$key-focus--outline-color); 119 props.get(vars.$key-focus--outline-color);
111 } 120 }
112 } 121 }
113 } 122 }
114 123
115 @include bem.modifier('standalone') { 124 @include bem.modifier("standalone") {
116 @include bem.elem('circle') { 125 @include bem.elem("circle") {
117 margin-block-start: 0; 126 margin-block-start: 0;
118 } 127 }
119 } 128 }
120 129
121 @include bem.modifier('accent') { 130 @include bem.modifier("accent") {
122 @include bem.elem('native') { 131 @include bem.elem("native") {
123 &:checked { 132 &:checked {
124 @include bem.sibling-elem('circle') { 133 @include bem.sibling-elem("circle") {
125 background-color: props.get(vars.$accent--circle-border-color); 134 background-color: props.get(vars.$accent--circle-border-color);
126 } 135 }
127 136
128 &:hover, 137 &:hover,
129 &:focus-visible { 138 &:focus-visible {
130 @include bem.sibling-elem('circle') { 139 @include bem.sibling-elem("circle") {
131 background-color: props.get(vars.$accent--hover--circle-border-color); 140 background-color: props.get(vars.$accent--hover--circle-border-color);
132 } 141 }
133 } 142 }
134 } 143 }
135 144
136 &:disabled { 145 &:disabled {
137 @include bem.sibling-elem('circle') { 146 @include bem.sibling-elem("circle") {
138 background-color: props.get(vars.$disabled--circle-border-color); 147 background-color: props.get(vars.$disabled--circle-border-color);
139 148
140 &::after { 149 &::after {
@@ -143,7 +152,7 @@
143 } 152 }
144 153
145 &:checked { 154 &:checked {
146 @include bem.sibling-elem('circle') { 155 @include bem.sibling-elem("circle") {
147 background-color: props.get(vars.$disabled--circle-border-color); 156 background-color: props.get(vars.$disabled--circle-border-color);
148 } 157 }
149 } 158 }
diff --git a/src/objects/_radio.vars.scss b/src/objects/_radio.vars.scss
index a5f249d..e7a41a4 100644
--- a/src/objects/_radio.vars.scss
+++ b/src/objects/_radio.vars.scss
@@ -1,33 +1,90 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$diameter: props.def(--o-radio--diameter, props.get(core.$size--200)) !default; 5$diameter: props.def(--o-radio--diameter, props.get(core.$size--200)) !default;
6$label-gap: props.def(--o-radio--label-gap, props.get(core.$size--125)) !default; 6$label-gap: props.def(--o-radio--label-gap, props.get(core.$size--125)) !default;
7$border-width: props.def(--o-radio--border-width, props.get(core.$border-width--medium)) !default; 7$border-width: props.def(--o-radio--border-width, props.get(core.$border-width--medium)) !default;
8$pad-i: props.def(--o-radio--pad-i, props.get(core.$size--65)) !default; 8$pad-i: props.def(--o-radio--pad-i, props.get(core.$size--65)) !default;
9$pad-b: props.def(--o-radio--pad-b, props.get(core.$size--65)) !default; 9$pad-b: props.def(--o-radio--pad-b, props.get(core.$size--65)) !default;
10$rounding: props.def(--o-radio--rounding, props.get(core.$rounding--sm)) !default; 10$rounding: props.def(--o-radio--rounding, props.get(core.$rounding--sm)) !default;
11$spacing-sibling: props.def(--o-radio--spacing-sibling, props.get(core.$size--300)) !default; 11$spacing-sibling: props.def(--o-radio--spacing-sibling, props.get(core.$size--300)) !default;
12 12
13$key-focus--border-width: props.def(--o-radio--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 13$key-focus--border-width: props.def(
14$key-focus--border-offset: props.def(--o-radio--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 14 --o-radio--key-focus--border-width,
15$key-focus--outline-width: props.def(--o-radio--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 15 props.get(core.$key-focus--border-width)
16) !default;
17$key-focus--border-offset: props.def(
18 --o-radio--key-focus--border-offset,
19 props.get(core.$key-focus--border-offset)
20) !default;
21$key-focus--outline-width: props.def(
22 --o-radio--key-focus--outline-width,
23 props.get(core.$key-focus--outline-width)
24) !default;
16 25
17$circle-border-color: props.def(--o-radio--circle-border-color, props.get(core.$theme, --text-mute-more), 'color') !default; 26$circle-border-color: props.def(
18$circle-bg-color: props.def(--o-radio--circle-bg-color, props.get(core.$theme, --base, --75), 'color') !default; 27 --o-radio--circle-border-color,
28 props.get(core.$theme, --text-mute-more),
29 "color"
30) !default;
31$circle-bg-color: props.def(
32 --o-radio--circle-bg-color,
33 props.get(core.$theme, --base, --75),
34 "color"
35) !default;
19 36
20$hover--label-color: props.def(--o-radio--hover--label-color, props.get(core.$theme, --heading), 'color') !default; 37$hover--label-color: props.def(
21$hover--circle-border-color: props.def(--o-radio--hover--circle-border-color, props.get(core.$theme, --text-mute), 'color') !default; 38 --o-radio--hover--label-color,
39 props.get(core.$theme, --heading),
40 "color"
41) !default;
42$hover--circle-border-color: props.def(
43 --o-radio--hover--circle-border-color,
44 props.get(core.$theme, --text-mute),
45 "color"
46) !default;
22 47
23$accent--circle-border-color: props.def(--o-radio--accent--circle-border-color, props.get(core.$theme, --accent, --900), 'color') !default; 48$accent--circle-border-color: props.def(
49 --o-radio--accent--circle-border-color,
50 props.get(core.$theme, --accent, --900),
51 "color"
52) !default;
24 53
25$accent--hover--circle-border-color: props.def(--o-radio--accent--hover--circle-border-color, props.get(core.$theme, --accent, --1000), 'color') !default; 54$accent--hover--circle-border-color: props.def(
55 --o-radio--accent--hover--circle-border-color,
56 props.get(core.$theme, --accent, --1000),
57 "color"
58) !default;
26 59
27$disabled--label-color: props.def(--o-radio--disabled--label-color, props.get(core.$theme, --text-disabled), 'color') !default; 60$disabled--label-color: props.def(
28$disabled--circle-border-color: props.def(--o-radio--disabled--circle-border-color, props.get(core.$theme, --border-strong), 'color') !default; 61 --o-radio--disabled--label-color,
29$disabled--circle-bg-color: props.def(--o-radio--disabled--circle-bg-color, props.get(core.$theme, --base, --75), 'color') !default; 62 props.get(core.$theme, --text-disabled),
63 "color"
64) !default;
65$disabled--circle-border-color: props.def(
66 --o-radio--disabled--circle-border-color,
67 props.get(core.$theme, --border-strong),
68 "color"
69) !default;
70$disabled--circle-bg-color: props.def(
71 --o-radio--disabled--circle-bg-color,
72 props.get(core.$theme, --base, --75),
73 "color"
74) !default;
30 75
31$key-focus--label-color: props.def(--o-radio--key-focus--label-color, props.get(core.$theme, --focus, --text), 'color') !default; 76$key-focus--label-color: props.def(
32$key-focus--border-color: props.def(--o-radio--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 77 --o-radio--key-focus--label-color,
33$key-focus--outline-color: props.def(--o-radio--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 78 props.get(core.$theme, --focus, --text),
79 "color"
80) !default;
81$key-focus--border-color: props.def(
82 --o-radio--key-focus--border-color,
83 props.get(core.$theme, --focus, --border),
84 "color"
85) !default;
86$key-focus--outline-color: props.def(
87 --o-radio--key-focus--outline-color,
88 props.get(core.$theme, --focus, --outline),
89 "color"
90) !default;
diff --git a/src/objects/_side-nav.scss b/src/objects/_side-nav.scss
index 272d38c..ed0f3dc 100644
--- a/src/objects/_side-nav.scss
+++ b/src/objects/_side-nav.scss
@@ -1,76 +1,79 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5@use 'icon.vars' as icon; 5@use "icon.vars" as icon;
6 6
7@forward 'side-nav.vars'; 7@forward "side-nav.vars";
8@use 'side-nav.vars' as vars; 8@use "side-nav.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.object('side-nav') { 13 @include bem.object("side-nav") {
14 display: flex; 14 display: flex;
15 flex-direction: column; 15 flex-direction: column;
16 gap: props.get(vars.$spacing); 16 gap: props.get(vars.$spacing);
17 17
18 @include bem.elem('header') { 18 @include bem.elem("header") {
19 padding-block: props.get(vars.$item--pad-b); 19 padding-block: props.get(vars.$item--pad-b);
20 padding-inline: props.get(vars.$item--pad-i); 20 padding-inline: props.get(vars.$item--pad-i);
21 font-size: props.get(vars.$header--font-size); 21 font-size: props.get(vars.$header--font-size);
22 font-weight: 500; 22 font-weight: 500;
23 color: props.get(vars.$header--label-color); 23 color: props.get(vars.$header--label-color);
24 text-transform: uppercase; 24 text-transform: uppercase;
25 letter-spacing: .5px; 25 letter-spacing: 0.5px;
26 26
27 @include bem.next-twin-elem { 27 @include bem.next-twin-elem {
28 margin-block-start: calc(props.get(vars.$separator) + props.get(vars.$spacing)); 28 margin-block-start: calc(props.get(vars.$separator) + props.get(vars.$spacing));
29 } 29 }
30 } 30 }
31 31
32 @include bem.elem('item') { 32 @include bem.elem("item") {
33 display: block; 33 display: block;
34 padding-block: props.get(vars.$item--pad-b); 34 padding-block: props.get(vars.$item--pad-b);
35 padding-inline: props.get(vars.$item--pad-i); 35 padding-inline: props.get(vars.$item--pad-i);
36 margin: calc(-1 * props.get(vars.$item--key-focus--border-offset)); 36 margin: calc(-1 * props.get(vars.$item--key-focus--border-offset));
37 color: props.get(vars.$item--disabled--label-color); 37 color: props.get(vars.$item--disabled--label-color);
38 background-clip: padding-box; 38 background-clip: padding-box;
39 border: props.get(vars.$item--key-focus--border-offset) solid transparent; 39 border: props.get(vars.$item--key-focus--border-offset) solid transparent;
40 border-radius: calc(props.get(vars.$item--rounding) + props.get(vars.$item--key-focus--border-offset)); 40 border-radius: calc(
41 props.get(vars.$item--rounding) + props.get(vars.$item--key-focus--border-offset)
42 );
41 43
42 &:link, 44 &:link,
43 &:visited, 45 &:visited,
44 &:enabled { 46 &:enabled {
45 color: currentColor; 47 color: currentColor;
46 48
47 @include bem.multi('&:hover, &:focus-visible', 'is' 'selected') { 49 @include bem.multi("&:hover, &:focus-visible", "is" "selected") {
48 color: props.get(vars.$item--hover--label-color); 50 color: props.get(vars.$item--hover--label-color);
49 background-color: props.get(vars.$item--hover--bg-color); 51 background-color: props.get(vars.$item--hover--bg-color);
50 } 52 }
51 53
52 &:active { 54 &:active {
53 color: props.get(vars.$item--active--label-color); 55 color: props.get(vars.$item--active--label-color);
54 background-color: props.get(vars.$item--active--bg-color); 56 background-color: props.get(vars.$item--active--bg-color);
55 } 57 }
56 58
57 &:focus-visible { 59 &:focus-visible {
58 outline: props.get(vars.$item--key-focus--border-color) solid props.get(vars.$item--key-focus--border-width); 60 outline: props.get(vars.$item--key-focus--border-color) solid
59 box-shadow: 61 props.get(vars.$item--key-focus--border-width);
60 0 62 box-shadow: 0 0 0
61 0 63 calc(
62 0 64 props.get(vars.$item--key-focus--border-width) +
63 calc(props.get(vars.$item--key-focus--border-width) + props.get(vars.$item--key-focus--outline-width)) 65 props.get(vars.$item--key-focus--outline-width)
66 )
64 props.get(vars.$item--key-focus--outline-color); 67 props.get(vars.$item--key-focus--outline-color);
65 } 68 }
66 } 69 }
67 70
68 @include bem.next-elem('header') { 71 @include bem.next-elem("header") {
69 margin-block-start: calc(props.get(vars.$separator) + props.get(vars.$spacing)); 72 margin-block-start: calc(props.get(vars.$separator) + props.get(vars.$spacing));
70 } 73 }
71 } 74 }
72 75
73 @include bem.elem('header') { 76 @include bem.elem("header") {
74 &:link, 77 &:link,
75 &:visited, 78 &:visited,
76 &:enabled { 79 &:enabled {
@@ -78,14 +81,14 @@
78 } 81 }
79 } 82 }
80 83
81 @include bem.elem('separator') { 84 @include bem.elem("separator") {
82 block-size: props.get(vars.$separator); 85 block-size: props.get(vars.$separator);
83 } 86 }
84 87
85 @include bem.elem('icon-slot') { 88 @include bem.elem("icon-slot") {
86 display: flex; 89 display: flex;
87 justify-content: center; 90 justify-content: center;
88 inline-size: props.get(icon.$size); 91 inline-size: props.get(icon.$size);
89 } 92 }
90 } 93 }
91} 94}
diff --git a/src/objects/_side-nav.vars.scss b/src/objects/_side-nav.vars.scss
index d6a7de1..8abb0df 100644
--- a/src/objects/_side-nav.vars.scss
+++ b/src/objects/_side-nav.vars.scss
@@ -1,28 +1,72 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$spacing: props.def(--o-side-nav--spacing, props.get(core.$size--50)) !default; 5$spacing: props.def(--o-side-nav--spacing, props.get(core.$size--50)) !default;
6$header--font-size: props.def(--o-side-nav--header--font-size, props.get(core.$font-size--50)) !default; 6$header--font-size: props.def(
7$separator: props.def(--o-side-nav--separator, props.get(core.$size--200)) !default; 7 --o-side-nav--header--font-size,
8 props.get(core.$font-size--50)
9) !default;
10$separator: props.def(--o-side-nav--separator, props.get(core.$size--200)) !default;
8 11
9$item--pad-i: props.def(--o-side-nav--item--pad-i, props.get(core.$size--150)) !default; 12$item--pad-i: props.def(--o-side-nav--item--pad-i, props.get(core.$size--150)) !default;
10$item--pad-b: props.def(--o-side-nav--item--pad-b, props.get(core.$size--75)) !default; 13$item--pad-b: props.def(--o-side-nav--item--pad-b, props.get(core.$size--75)) !default;
11$item--rounding: props.def(--o-side-nav--item--rounding, props.get(core.$rounding--sm)) !default; 14$item--rounding: props.def(--o-side-nav--item--rounding, props.get(core.$rounding--sm)) !default;
12 15
13$item--key-focus--border-width: props.def(--o-side-nav--item--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 16$item--key-focus--border-width: props.def(
14$item--key-focus--border-offset: props.def(--o-side-nav--item--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 17 --o-side-nav--item--key-focus--border-width,
15$item--key-focus--outline-width: props.def(--o-side-nav--item--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 18 props.get(core.$key-focus--border-width)
19) !default;
20$item--key-focus--border-offset: props.def(
21 --o-side-nav--item--key-focus--border-offset,
22 props.get(core.$key-focus--border-offset)
23) !default;
24$item--key-focus--outline-width: props.def(
25 --o-side-nav--item--key-focus--outline-width,
26 props.get(core.$key-focus--outline-width)
27) !default;
16 28
17$header--label-color: props.def(--o-side-nav--header--label-color, props.get(core.$theme, --text-mute-more), 'color') !default; 29$header--label-color: props.def(
30 --o-side-nav--header--label-color,
31 props.get(core.$theme, --text-mute-more),
32 "color"
33) !default;
18 34
19$item--hover--bg-color: props.def(--o-side-nav--item--hover--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 35$item--hover--bg-color: props.def(
20$item--hover--label-color: props.def(--o-side-nav--item--hover--label-color, props.get(core.$theme, --heading), 'color') !default; 36 --o-side-nav--item--hover--bg-color,
37 props.get(core.$theme, --border-mute),
38 "color"
39) !default;
40$item--hover--label-color: props.def(
41 --o-side-nav--item--hover--label-color,
42 props.get(core.$theme, --heading),
43 "color"
44) !default;
21 45
22$item--active--bg-color: props.def(--o-side-nav--item--active--bg-color, props.get(core.$theme, --border), 'color') !default; 46$item--active--bg-color: props.def(
23$item--active--label-color: props.def(--o-side-nav--item--active--label-color, props.get(core.$theme, --heading), 'color') !default; 47 --o-side-nav--item--active--bg-color,
48 props.get(core.$theme, --border),
49 "color"
50) !default;
51$item--active--label-color: props.def(
52 --o-side-nav--item--active--label-color,
53 props.get(core.$theme, --heading),
54 "color"
55) !default;
24 56
25$item--disabled--label-color: props.def(--o-side-nav--item--disabled--label-color, props.get(core.$theme, --text-disabled), 'color') !default; 57$item--disabled--label-color: props.def(
58 --o-side-nav--item--disabled--label-color,
59 props.get(core.$theme, --text-disabled),
60 "color"
61) !default;
26 62
27$item--key-focus--border-color: props.def(--o-side-nav--item--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 63$item--key-focus--border-color: props.def(
28$item--key-focus--outline-color: props.def(--o-side-nav--item--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 64 --o-side-nav--item--key-focus--border-color,
65 props.get(core.$theme, --focus, --border),
66 "color"
67) !default;
68$item--key-focus--outline-color: props.def(
69 --o-side-nav--item--key-focus--outline-color,
70 props.get(core.$theme, --focus, --outline),
71 "color"
72) !default;
diff --git a/src/objects/_status-indicator.scss b/src/objects/_status-indicator.scss
index fe8fe26..8885929 100644
--- a/src/objects/_status-indicator.scss
+++ b/src/objects/_status-indicator.scss
@@ -1,22 +1,22 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:meta'; 2@use "sass:meta";
3@use 'sass:string'; 3@use "sass:string";
4@use 'pkg:iro-sass/src/bem'; 4@use "pkg:iro-sass/bem";
5@use 'pkg:iro-sass/src/props'; 5@use "pkg:iro-sass/props";
6@use '../props' as *; 6@use "../props" as *;
7 7
8@forward 'status-indicator.vars'; 8@forward "status-indicator.vars";
9@use 'status-indicator.vars' as vars; 9@use "status-indicator.vars" as vars;
10 10
11@mixin styles { 11@mixin styles {
12 @include materialize-at-root(meta.module-variables('vars')); 12 @include materialize-at-root(meta.module-variables("vars"));
13 13
14 @include bem.object('status-indicator') { 14 @include bem.object("status-indicator") {
15 display: inline-block; 15 display: inline-block;
16 inline-size: props.get(vars.$size); 16 inline-size: props.get(vars.$size);
17 block-size: props.get(vars.$size); 17 block-size: props.get(vars.$size);
18 background-color: props.get(vars.$default); 18 background-color: props.get(vars.$default);
19 border-radius: 10em; 19 border-radius: 10em;
20 20
21 @each $theme in map.keys(props.get(vars.$themes)) { 21 @each $theme in map.keys(props.get(vars.$themes)) {
22 @include bem.is(string.slice($theme, 3)) { 22 @include bem.is(string.slice($theme, 3)) {
diff --git a/src/objects/_status-indicator.vars.scss b/src/objects/_status-indicator.vars.scss
index dfe628f..66a11e8 100644
--- a/src/objects/_status-indicator.vars.scss
+++ b/src/objects/_status-indicator.vars.scss
@@ -1,26 +1,32 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../config'; 3@use "../config";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6$size: props.def(--o-status-indicator--size, props.get(core.$size--125)) !default; 6$size: props.def(--o-status-indicator--size, props.get(core.$size--125)) !default;
7 7
8$default: props.def(--o-status-indicator--default, props.get(core.$theme, --border-strong), 'color') !default; 8$default: props.def(
9$primary: props.def(--o-status-indicator--primary, props.get(core.$theme, --text), 'color') !default; 9 --o-status-indicator--default,
10 props.get(core.$theme, --border-strong),
11 "color"
12) !default;
13$primary: props.def(
14 --o-status-indicator--primary,
15 props.get(core.$theme, --text),
16 "color"
17) !default;
10 18
11$themes-config: ( 19$themes-config: (
12 accent: --accent, 20 accent: --accent,
13 positive: --positive, 21 positive: --positive,
14 negative: --negative, 22 negative: --negative,
15 warning: --warning, 23 warning: --warning,
16) !default; 24) !default;
17 25
18$themes: props.def(--o-status-indicator, (), 'color'); 26$themes: props.def(--o-status-indicator, (), "color");
19 27
20@each $theme, $key in $themes-config { 28@each $theme, $key in $themes-config {
21 @if $theme != --base { 29 @if $theme != --base {
22 $themes: props.merge($themes, ( 30 $themes: props.merge($themes, (--#{$theme}: props.get(core.$theme, $key, --700)));
23 --#{$theme}: props.get(core.$theme, $key, --700),
24 ));
25 } 31 }
26} 32}
diff --git a/src/objects/_switch.scss b/src/objects/_switch.scss
index 0ef95e6..c1f7411 100644
--- a/src/objects/_switch.scss
+++ b/src/objects/_switch.scss
@@ -1,73 +1,79 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5@use '../core.vars' as core; 5@use "../core.vars" as core;
6 6
7@forward 'switch.vars'; 7@forward "switch.vars";
8@use 'switch.vars' as vars; 8@use "switch.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.object('switch') { 13 @include bem.object("switch") {
14 position: relative; 14 position: relative;
15 display: inline-block; 15 display: inline-block;
16 padding-block: props.get(vars.$pad-b); 16 padding-block: props.get(vars.$pad-b);
17 padding-inline: props.get(vars.$pad-i); 17 padding-inline: props.get(vars.$pad-i);
18 margin-inline: 18 margin-inline: calc(-1 * props.get(vars.$pad-i) - props.get(vars.$key-focus--border-offset))
19 calc(-1 * props.get(vars.$pad-i) - props.get(vars.$key-focus--border-offset)) 19 calc(
20 calc(props.get(vars.$spacing-sibling) - props.get(vars.$pad-i) - props.get(vars.$key-focus--border-offset)); 20 props.get(vars.$spacing-sibling) - props.get(vars.$pad-i) - props.get(
21 vars.$key-focus--border-offset
22 )
23 );
21 24
22 @include bem.elem('indicator') { 25 @include bem.elem("indicator") {
23 display: inline-block; 26 display: inline-block;
24 flex: 0 0 auto; 27 flex: 0 0 auto;
25 inline-size: props.get(vars.$inline-size); 28 inline-size: props.get(vars.$inline-size);
26 block-size: props.get(vars.$block-size); 29 block-size: props.get(vars.$block-size);
27 margin-block-start: calc(.5em * props.get(core.$font--standard--line-height) - .5 * props.get(vars.$block-size) - props.get(vars.$key-focus--border-offset)); 30 margin-block-start: calc(
28 vertical-align: top; 31 0.5em * props.get(core.$font--standard--line-height) - 0.5 *
29 background-color: props.get(vars.$track-bg-color); 32 props.get(vars.$block-size) - props.get(vars.$key-focus--border-offset)
30 background-clip: padding-box; 33 );
31 border: props.get(vars.$key-focus--border-offset) solid transparent; 34 vertical-align: top;
32 border-radius: 2em; 35 background-color: props.get(vars.$track-bg-color);
33 transition: background-color .2s ease; 36 background-clip: padding-box;
37 border: props.get(vars.$key-focus--border-offset) solid transparent;
38 border-radius: 2em;
39 transition: background-color 0.2s ease;
34 40
35 &::after { 41 &::after {
36 display: block; 42 display: block;
37 inline-size: calc(props.get(vars.$block-size) - 2 * props.get(vars.$border-width)); 43 inline-size: calc(props.get(vars.$block-size) - 2 * props.get(vars.$border-width));
38 block-size: calc(props.get(vars.$block-size) - 2 * props.get(vars.$border-width)); 44 block-size: calc(props.get(vars.$block-size) - 2 * props.get(vars.$border-width));
39 content: ''; 45 content: "";
40 background-color: props.get(vars.$handle-bg-color); 46 background-color: props.get(vars.$handle-bg-color);
41 border: props.get(vars.$border-width) solid props.get(vars.$handle-border-color); 47 border: props.get(vars.$border-width) solid props.get(vars.$handle-border-color);
42 border-radius: props.get(vars.$inline-size); 48 border-radius: props.get(vars.$inline-size);
43 transition: transform .2s ease; 49 transition: transform 0.2s ease;
44 } 50 }
45 } 51 }
46 52
47 @include bem.elem('label') { 53 @include bem.elem("label") {
48 margin-inline-start: props.get(vars.$label-gap); 54 margin-inline-start: props.get(vars.$label-gap);
49 } 55 }
50 56
51 @include bem.elem('native') { 57 @include bem.elem("native") {
52 position: absolute; 58 position: absolute;
53 inset-block-start: 0; 59 inset-block-start: 0;
54 inset-inline-start: 0; 60 inset-inline-start: 0;
55 z-index: -1; 61 z-index: -1;
56 inline-size: 100%; 62 inline-size: 100%;
57 block-size: 100%; 63 block-size: 100%;
58 padding: 0; 64 padding: 0;
59 margin: 0; 65 margin: 0;
60 overflow: hidden; 66 overflow: hidden;
61 appearance: none; 67 appearance: none;
62 border-radius: props.get(vars.$rounding); 68 border-radius: props.get(vars.$rounding);
63 69
64 &:hover, 70 &:hover,
65 &:focus-visible { 71 &:focus-visible {
66 @include bem.sibling-elem('label') { 72 @include bem.sibling-elem("label") {
67 color: props.get(vars.$hover--label-color); 73 color: props.get(vars.$hover--label-color);
68 } 74 }
69 75
70 @include bem.sibling-elem('indicator') { 76 @include bem.sibling-elem("indicator") {
71 &::after { 77 &::after {
72 border-color: props.get(vars.$hover--handle-border-color); 78 border-color: props.get(vars.$hover--handle-border-color);
73 } 79 }
@@ -75,18 +81,23 @@
75 } 81 }
76 82
77 &:checked { 83 &:checked {
78 @include bem.sibling-elem('indicator') { 84 @include bem.sibling-elem("indicator") {
79 background-color: props.get(vars.$handle-border-color); 85 background-color: props.get(vars.$handle-border-color);
80 86
81 &::after { 87 &::after {
82 border-color: props.get(vars.$handle-border-color); 88 border-color: props.get(vars.$handle-border-color);
83 transform: translate(calc(props.get(vars.$inline-size) - props.get(vars.$block-size) + .5px), 0); 89 transform: translate(
90 calc(
91 props.get(vars.$inline-size) - props.get(vars.$block-size) + 0.5px
92 ),
93 0
94 );
84 } 95 }
85 } 96 }
86 97
87 &:hover, 98 &:hover,
88 &:focus-visible { 99 &:focus-visible {
89 @include bem.sibling-elem('indicator') { 100 @include bem.sibling-elem("indicator") {
90 background-color: props.get(vars.$hover--handle-border-color); 101 background-color: props.get(vars.$hover--handle-border-color);
91 102
92 &::after { 103 &::after {
@@ -97,21 +108,21 @@
97 } 108 }
98 109
99 &:disabled { 110 &:disabled {
100 @include bem.sibling-elem('label') { 111 @include bem.sibling-elem("label") {
101 color: props.get(vars.$disabled--label-color); 112 color: props.get(vars.$disabled--label-color);
102 } 113 }
103 114
104 @include bem.sibling-elem('indicator') { 115 @include bem.sibling-elem("indicator") {
105 background-color: props.get(vars.$disabled--track-bg-color); 116 background-color: props.get(vars.$disabled--track-bg-color);
106 117
107 &::after { 118 &::after {
108 background-color: props.get(vars.$disabled--handle-bg-color); 119 background-color: props.get(vars.$disabled--handle-bg-color);
109 border-color: props.get(vars.$disabled--handle-border-color); 120 border-color: props.get(vars.$disabled--handle-border-color);
110 } 121 }
111 } 122 }
112 123
113 &:checked { 124 &:checked {
114 @include bem.sibling-elem('indicator') { 125 @include bem.sibling-elem("indicator") {
115 background-color: props.get(vars.$disabled--handle-border-color); 126 background-color: props.get(vars.$disabled--handle-border-color);
116 127
117 &::after { 128 &::after {
@@ -122,32 +133,33 @@
122 } 133 }
123 134
124 &:focus-visible { 135 &:focus-visible {
125 @include bem.sibling-elem('label') { 136 @include bem.sibling-elem("label") {
126 color: props.get(vars.$key-focus--label-color); 137 color: props.get(vars.$key-focus--label-color);
127 } 138 }
128 139
129 @include bem.sibling-elem('indicator') { 140 @include bem.sibling-elem("indicator") {
130 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 141 outline: props.get(vars.$key-focus--border-color) solid
131 box-shadow: 142 props.get(vars.$key-focus--border-width);
132 0 143 box-shadow: 0 0 0
133 0 144 calc(
134 0 145 props.get(vars.$key-focus--border-width) +
135 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 146 props.get(vars.$key-focus--outline-width)
147 )
136 props.get(vars.$key-focus--outline-color); 148 props.get(vars.$key-focus--outline-color);
137 } 149 }
138 } 150 }
139 } 151 }
140 152
141 @include bem.modifier('standalone') { 153 @include bem.modifier("standalone") {
142 @include bem.elem('indicator') { 154 @include bem.elem("indicator") {
143 margin-block-start: 0; 155 margin-block-start: 0;
144 } 156 }
145 } 157 }
146 158
147 @include bem.modifier('accent') { 159 @include bem.modifier("accent") {
148 @include bem.elem('native') { 160 @include bem.elem("native") {
149 &:checked { 161 &:checked {
150 @include bem.sibling-elem('indicator') { 162 @include bem.sibling-elem("indicator") {
151 background-color: props.get(vars.$accent--handle-border-color); 163 background-color: props.get(vars.$accent--handle-border-color);
152 164
153 &::after { 165 &::after {
@@ -157,7 +169,7 @@
157 169
158 &:hover, 170 &:hover,
159 &:focus-visible { 171 &:focus-visible {
160 @include bem.sibling-elem('indicator') { 172 @include bem.sibling-elem("indicator") {
161 background-color: props.get(vars.$accent--hover--handle-border-color); 173 background-color: props.get(vars.$accent--hover--handle-border-color);
162 174
163 &::after { 175 &::after {
@@ -168,12 +180,12 @@
168 } 180 }
169 181
170 &:disabled { 182 &:disabled {
171 @include bem.sibling-elem('label') { 183 @include bem.sibling-elem("label") {
172 color: props.get(vars.$disabled--label-color); 184 color: props.get(vars.$disabled--label-color);
173 } 185 }
174 186
175 &:checked { 187 &:checked {
176 @include bem.sibling-elem('indicator') { 188 @include bem.sibling-elem("indicator") {
177 background-color: props.get(vars.$disabled--handle-border-color); 189 background-color: props.get(vars.$disabled--handle-border-color);
178 190
179 &::after { 191 &::after {
diff --git a/src/objects/_switch.vars.scss b/src/objects/_switch.vars.scss
index 761cacd..6f56ec7 100644
--- a/src/objects/_switch.vars.scss
+++ b/src/objects/_switch.vars.scss
@@ -1,36 +1,101 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$inline-size: props.def(--o-switch--inline-size, props.get(core.$size--350)) !default; 5$inline-size: props.def(--o-switch--inline-size, props.get(core.$size--350)) !default;
6$block-size: props.def(--o-switch--block-size, props.get(core.$size--200)) !default; 6$block-size: props.def(--o-switch--block-size, props.get(core.$size--200)) !default;
7$label-gap: props.def(--o-switch--label-gap, props.get(core.$size--125)) !default; 7$label-gap: props.def(--o-switch--label-gap, props.get(core.$size--125)) !default;
8$border-width: props.def(--o-switch--border-width, props.get(core.$border-width--medium)) !default; 8$border-width: props.def(--o-switch--border-width, props.get(core.$border-width--medium)) !default;
9$pad-i: props.def(--o-switch--pad-i, props.get(core.$size--65)) !default; 9$pad-i: props.def(--o-switch--pad-i, props.get(core.$size--65)) !default;
10$pad-b: props.def(--o-switch--pad-b, props.get(core.$size--65)) !default; 10$pad-b: props.def(--o-switch--pad-b, props.get(core.$size--65)) !default;
11$rounding: props.def(--o-switch--rounding, props.get(core.$rounding--sm)) !default; 11$rounding: props.def(--o-switch--rounding, props.get(core.$rounding--sm)) !default;
12$spacing-sibling: props.def(--o-switch--spacing-sibling, props.get(core.$size--300)) !default; 12$spacing-sibling: props.def(--o-switch--spacing-sibling, props.get(core.$size--300)) !default;
13 13
14$key-focus--border-width: props.def(--o-switch--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 14$key-focus--border-width: props.def(
15$key-focus--border-offset: props.def(--o-switch--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 15 --o-switch--key-focus--border-width,
16$key-focus--outline-width: props.def(--o-switch--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 16 props.get(core.$key-focus--border-width)
17) !default;
18$key-focus--border-offset: props.def(
19 --o-switch--key-focus--border-offset,
20 props.get(core.$key-focus--border-offset)
21) !default;
22$key-focus--outline-width: props.def(
23 --o-switch--key-focus--outline-width,
24 props.get(core.$key-focus--outline-width)
25) !default;
17 26
18$track-bg-color: props.def(--o-switch--track-bg-color, props.get(core.$theme, --border), 'color') !default; 27$track-bg-color: props.def(
19$handle-border-color: props.def(--o-switch--handle-border-color, props.get(core.$theme, --text-mute-more), 'color') !default; 28 --o-switch--track-bg-color,
20$handle-bg-color: props.def(--o-switch--handle-bg-color, props.get(core.$theme, --base, --50), 'color') !default; 29 props.get(core.$theme, --border),
30 "color"
31) !default;
32$handle-border-color: props.def(
33 --o-switch--handle-border-color,
34 props.get(core.$theme, --text-mute-more),
35 "color"
36) !default;
37$handle-bg-color: props.def(
38 --o-switch--handle-bg-color,
39 props.get(core.$theme, --base, --50),
40 "color"
41) !default;
21 42
22$hover--label-color: props.def(--o-switch--hover--label-color, props.get(core.$theme, --heading), 'color') !default; 43$hover--label-color: props.def(
23$hover--handle-border-color: props.def(--o-switch--hover--handle-border-color, props.get(core.$theme, --text-mute), 'color') !default; 44 --o-switch--hover--label-color,
45 props.get(core.$theme, --heading),
46 "color"
47) !default;
48$hover--handle-border-color: props.def(
49 --o-switch--hover--handle-border-color,
50 props.get(core.$theme, --text-mute),
51 "color"
52) !default;
24 53
25$accent--handle-border-color: props.def(--o-switch--accent--handle-border-color, props.get(core.$theme, --accent, --900), 'color') !default; 54$accent--handle-border-color: props.def(
55 --o-switch--accent--handle-border-color,
56 props.get(core.$theme, --accent, --900),
57 "color"
58) !default;
26 59
27$accent--hover--handle-border-color: props.def(--o-switch--accent--hover--handle-border-color, props.get(core.$theme, --accent, --1000), 'color') !default; 60$accent--hover--handle-border-color: props.def(
61 --o-switch--accent--hover--handle-border-color,
62 props.get(core.$theme, --accent, --1000),
63 "color"
64) !default;
28 65
29$disabled--label-color: props.def(--o-switch--disabled--label-color, props.get(core.$theme, --text-disabled), 'color') !default; 66$disabled--label-color: props.def(
30$disabled--track-bg-color: props.def(--o-switch--disabled--track-bg-color, props.get(core.$theme, --border), 'color') !default; 67 --o-switch--disabled--label-color,
31$disabled--handle-border-color: props.def(--o-switch--disabled--handle-border-color, props.get(core.$theme, --border-strong), 'color') !default; 68 props.get(core.$theme, --text-disabled),
32$disabled--handle-bg-color: props.def(--o-switch--disabled--handle-bg-color, props.get(core.$theme, --base, --50), 'color') !default; 69 "color"
70) !default;
71$disabled--track-bg-color: props.def(
72 --o-switch--disabled--track-bg-color,
73 props.get(core.$theme, --border),
74 "color"
75) !default;
76$disabled--handle-border-color: props.def(
77 --o-switch--disabled--handle-border-color,
78 props.get(core.$theme, --border-strong),
79 "color"
80) !default;
81$disabled--handle-bg-color: props.def(
82 --o-switch--disabled--handle-bg-color,
83 props.get(core.$theme, --base, --50),
84 "color"
85) !default;
33 86
34$key-focus--label-color: props.def(--o-switch--key-focus--label-color, props.get(core.$theme, --focus, --text), 'color') !default; 87$key-focus--label-color: props.def(
35$key-focus--border-color: props.def(--o-switch--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 88 --o-switch--key-focus--label-color,
36$key-focus--outline-color: props.def(--o-switch--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 89 props.get(core.$theme, --focus, --text),
90 "color"
91) !default;
92$key-focus--border-color: props.def(
93 --o-switch--key-focus--border-color,
94 props.get(core.$theme, --focus, --border),
95 "color"
96) !default;
97$key-focus--outline-color: props.def(
98 --o-switch--key-focus--outline-color,
99 props.get(core.$theme, --focus, --outline),
100 "color"
101) !default;
diff --git a/src/objects/_tabbar.scss b/src/objects/_tabbar.scss
index d43208f..02519f9 100644
--- a/src/objects/_tabbar.scss
+++ b/src/objects/_tabbar.scss
@@ -1,75 +1,77 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:meta'; 2@use "sass:meta";
3@use 'sass:string'; 3@use "sass:string";
4@use 'pkg:iro-sass/src/bem'; 4@use "pkg:iro-sass/bem";
5@use 'pkg:iro-sass/src/props'; 5@use "pkg:iro-sass/props";
6@use '../props' as *; 6@use "../props" as *;
7 7
8@forward 'tabbar.vars'; 8@forward "tabbar.vars";
9@use 'tabbar.vars' as vars; 9@use "tabbar.vars" as vars;
10 10
11@mixin styles { 11@mixin styles {
12 @include materialize-at-root(meta.module-variables('vars')); 12 @include materialize-at-root(meta.module-variables("vars"));
13 13
14 @include bem.object('tabbar') { 14 @include bem.object("tabbar") {
15 min-inline-size: 0; 15 min-inline-size: 0;
16 block-size: props.get(vars.$block-size); 16 block-size: props.get(vars.$block-size);
17 overflow: hidden; 17 overflow: hidden;
18 18
19 &::after { 19 &::after {
20 display: block; 20 display: block;
21 block-size: props.get(vars.$border--width); 21 block-size: props.get(vars.$border--width);
22 margin-block-start: calc(-1 * props.get(vars.$border--width)); 22 margin-block-start: calc(-1 * props.get(vars.$border--width));
23 content: ''; 23 content: "";
24 background-color: props.get(vars.$railing--bg-color); 24 background-color: props.get(vars.$railing--bg-color);
25 } 25 }
26 26
27 @include bem.elem('tabs') { 27 @include bem.elem("tabs") {
28 display: flex; 28 display: flex;
29 block-size: 100%; 29 block-size: 100%;
30 overflow-inline: auto; 30 overflow-inline: auto;
31 } 31 }
32 32
33 @include bem.modifier('quiet') { 33 @include bem.modifier("quiet") {
34 box-shadow: none; 34 box-shadow: none;
35 } 35 }
36 36
37 @include bem.modifier('adapt') { 37 @include bem.modifier("adapt") {
38 block-size: 100%; 38 block-size: 100%;
39 } 39 }
40 40
41 @include bem.modifier('snap') { 41 @include bem.modifier("snap") {
42 scroll-snap-align: start; 42 scroll-snap-align: start;
43 } 43 }
44 44
45 @include bem.elem('tab') { 45 @include bem.elem("tab") {
46 position: relative; 46 position: relative;
47 display: flex; 47 display: flex;
48 align-items: center; 48 align-items: center;
49 padding-inline: calc(.5 * props.get(vars.$spacing)); 49 padding-inline: calc(0.5 * props.get(vars.$spacing));
50 margin-inline: calc(-.5 * props.get(vars.$spacing)); 50 margin-inline: calc(-0.5 * props.get(vars.$spacing));
51 color: props.get(vars.$tab--text-color); 51 color: props.get(vars.$tab--text-color);
52 white-space: nowrap; 52 white-space: nowrap;
53 53
54 &::before { 54 &::before {
55 position: absolute; 55 position: absolute;
56 inset-block-start: 50%; 56 inset-block-start: 50%;
57 inset-inline: calc(-1 * props.get(vars.$tab--pad-i) + .5 * props.get(vars.$spacing)); 57 inset-inline: calc(
58 z-index: -10; 58 -1 * props.get(vars.$tab--pad-i) + 0.5 * props.get(vars.$spacing)
59 block-size: 1.5em; 59 );
60 content: ''; 60 z-index: -10;
61 border-radius: props.get(vars.$rounding); 61 block-size: 1.5em;
62 transform: translateY(-50%); 62 content: "";
63 border-radius: props.get(vars.$rounding);
64 transform: translateY(-50%);
63 } 65 }
64 66
65 &::after { 67 &::after {
66 position: absolute; 68 position: absolute;
67 inset-block-end: 0; 69 inset-block-end: 0;
68 inset-inline: calc(.5 * props.get(vars.$spacing)); 70 inset-inline: calc(0.5 * props.get(vars.$spacing));
69 z-index: 10; 71 z-index: 10;
70 display: none; 72 display: none;
71 block-size: props.get(vars.$indicator--width); 73 block-size: props.get(vars.$indicator--width);
72 content: ''; 74 content: "";
73 background-color: props.get(vars.$tab--selected--text-color); 75 background-color: props.get(vars.$tab--selected--text-color);
74 } 76 }
75 77
@@ -83,21 +85,25 @@
83 85
84 &:focus-visible { 86 &:focus-visible {
85 &::before { 87 &::before {
86 color: props.get(vars.$key-focus--text-color); 88 color: props.get(vars.$key-focus--text-color);
87 text-decoration: none; 89 text-decoration: none;
88 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 90 outline: props.get(vars.$key-focus--border-color) solid
91 props.get(vars.$key-focus--border-width);
89 box-shadow: 0 0 0 92 box-shadow: 0 0 0
90 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 93 calc(
94 props.get(vars.$key-focus--border-width) +
95 props.get(vars.$key-focus--outline-width)
96 )
91 props.get(vars.$key-focus--outline-color); 97 props.get(vars.$key-focus--outline-color);
92 } 98 }
93 } 99 }
94 } 100 }
95 101
96 @include bem.next-twin-elem { 102 @include bem.next-twin-elem {
97 margin-inline-start: calc(.5 * props.get(vars.$spacing)); 103 margin-inline-start: calc(0.5 * props.get(vars.$spacing));
98 } 104 }
99 105
100 @include bem.is('selected') { 106 @include bem.is("selected") {
101 color: props.get(vars.$tab--selected--text-color); 107 color: props.get(vars.$tab--selected--text-color);
102 108
103 &::after { 109 &::after {
@@ -106,13 +112,13 @@
106 } 112 }
107 } 113 }
108 114
109 @include bem.modifier('accent') { 115 @include bem.modifier("accent") {
110 @include bem.elem('tab') { 116 @include bem.elem("tab") {
111 &::after { 117 &::after {
112 background-color: props.get(vars.$tab--accent--text-color); 118 background-color: props.get(vars.$tab--accent--text-color);
113 } 119 }
114 120
115 @include bem.is('selected') { 121 @include bem.is("selected") {
116 color: props.get(vars.$tab--accent--text-color); 122 color: props.get(vars.$tab--accent--text-color);
117 } 123 }
118 } 124 }
diff --git a/src/objects/_tabbar.vars.scss b/src/objects/_tabbar.vars.scss
index d9cc53e..d26f302 100644
--- a/src/objects/_tabbar.vars.scss
+++ b/src/objects/_tabbar.vars.scss
@@ -1,26 +1,66 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6$block-size: props.def(--o-tabbar--block-size, props.get(core.$size--700)) !default; 6$block-size: props.def(--o-tabbar--block-size, props.get(core.$size--700)) !default;
7$rounding: props.def(--o-tabbar--rounding, props.get(core.$rounding--sm)) !default; 7$rounding: props.def(--o-tabbar--rounding, props.get(core.$rounding--sm)) !default;
8$spacing: props.def(--o-tabbar--spacing, props.get(core.$size--400)) !default; 8$spacing: props.def(--o-tabbar--spacing, props.get(core.$size--400)) !default;
9$tab--pad-i: props.def(--o-tabbar--tab--pad-i, props.get(core.$size--50)) !default; 9$tab--pad-i: props.def(--o-tabbar--tab--pad-i, props.get(core.$size--50)) !default;
10 10
11$border--width: props.def(--o-tabbar--border--width, props.get(core.$border-width--thin)) !default; 11$border--width: props.def(--o-tabbar--border--width, props.get(core.$border-width--thin)) !default;
12$indicator--width: props.def(--o-tabbar--indicator--width, props.get(core.$border-width--medium)) !default; 12$indicator--width: props.def(
13 --o-tabbar--indicator--width,
14 props.get(core.$border-width--medium)
15) !default;
13 16
14$key-focus--border-width: props.def(--o-tabbar--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 17$key-focus--border-width: props.def(
15$key-focus--border-offset: props.def(--o-tabbar--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 18 --o-tabbar--key-focus--border-width,
16$key-focus--outline-width: props.def(--o-tabbar--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 19 props.get(core.$key-focus--border-width)
20) !default;
21$key-focus--border-offset: props.def(
22 --o-tabbar--key-focus--border-offset,
23 props.get(core.$key-focus--border-offset)
24) !default;
25$key-focus--outline-width: props.def(
26 --o-tabbar--key-focus--outline-width,
27 props.get(core.$key-focus--outline-width)
28) !default;
17 29
18$tab--text-color: props.def(--o-tabbar--tab--text-color, props.get(core.$theme, --text-mute), 'color') !default; 30$tab--text-color: props.def(
19$tab--selected--text-color: props.def(--o-tabbar--tab--selected--text-color, props.get(core.$theme, --heading), 'color') !default; 31 --o-tabbar--tab--text-color,
20$tab--accent--text-color: props.def(--o-tabbar--tab--accent--text-color, props.get(core.$theme, --accent, --1100), 'color') !default; 32 props.get(core.$theme, --text-mute),
33 "color"
34) !default;
35$tab--selected--text-color: props.def(
36 --o-tabbar--tab--selected--text-color,
37 props.get(core.$theme, --heading),
38 "color"
39) !default;
40$tab--accent--text-color: props.def(
41 --o-tabbar--tab--accent--text-color,
42 props.get(core.$theme, --accent, --1100),
43 "color"
44) !default;
21 45
22$railing--bg-color: props.def(--o-tabbar--railing--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 46$railing--bg-color: props.def(
47 --o-tabbar--railing--bg-color,
48 props.get(core.$theme, --border-mute),
49 "color"
50) !default;
23 51
24$key-focus--text-color: props.def(--o-tabbar--key-focus--text-color, props.get(core.$theme, --focus, --text), 'color') !default; 52$key-focus--text-color: props.def(
25$key-focus--border-color: props.def(--o-tabbar--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 53 --o-tabbar--key-focus--text-color,
26$key-focus--outline-color: props.def(--o-tabbar--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 54 props.get(core.$theme, --focus, --text),
55 "color"
56) !default;
57$key-focus--border-color: props.def(
58 --o-tabbar--key-focus--border-color,
59 props.get(core.$theme, --focus, --border),
60 "color"
61) !default;
62$key-focus--outline-color: props.def(
63 --o-tabbar--key-focus--outline-color,
64 props.get(core.$theme, --focus, --outline),
65 "color"
66) !default;
diff --git a/src/objects/_table.scss b/src/objects/_table.scss
index effa61f..a985f78 100644
--- a/src/objects/_table.scss
+++ b/src/objects/_table.scss
@@ -1,57 +1,57 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'table.vars'; 6@forward "table.vars";
7@use 'table.vars' as vars; 7@use "table.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.object('table') { 12 @include bem.object("table") {
13 border-spacing: 0; 13 border-spacing: 0;
14 border-collapse: separate; 14 border-collapse: separate;
15 15
16 @include bem.modifier('fixed') { 16 @include bem.modifier("fixed") {
17 table-layout: fixed; 17 table-layout: fixed;
18 } 18 }
19 19
20 @include bem.elem('head-cell') { 20 @include bem.elem("head-cell") {
21 padding-block: props.get(vars.$pad-b); 21 padding-block: props.get(vars.$pad-b);
22 padding-inline: props.get(vars.$pad-i); 22 padding-inline: props.get(vars.$pad-i);
23 font-family: props.get(vars.$heading--font-family); 23 font-family: props.get(vars.$heading--font-family);
24 font-size: props.get(vars.$heading--font-size); 24 font-size: props.get(vars.$heading--font-size);
25 font-weight: props.get(vars.$heading--font-weight); 25 font-weight: props.get(vars.$heading--font-weight);
26 color: props.get(vars.$heading-color); 26 color: props.get(vars.$heading-color);
27 text-align: start; 27 text-align: start;
28 text-transform: props.get(vars.$heading--text-transform); 28 text-transform: props.get(vars.$heading--text-transform);
29 letter-spacing: props.get(vars.$heading--letter-spacing); 29 letter-spacing: props.get(vars.$heading--letter-spacing);
30 } 30 }
31 31
32 @include bem.elem('cell') { 32 @include bem.elem("cell") {
33 padding-block: props.get(vars.$pad-b); 33 padding-block: props.get(vars.$pad-b);
34 padding-inline: props.get(vars.$pad-i); 34 padding-inline: props.get(vars.$pad-i);
35 border-color: props.get(vars.$border-color); 35 border-color: props.get(vars.$border-color);
36 border-style: solid; 36 border-style: solid;
37 border-width: 0; 37 border-width: 0;
38 border-block-start-width: props.get(vars.$border-width); 38 border-block-start-width: props.get(vars.$border-width);
39 39
40 @include bem.modifier('divider') { 40 @include bem.modifier("divider") {
41 border-inline-end-width: props.get(vars.$border-width); 41 border-inline-end-width: props.get(vars.$border-width);
42 } 42 }
43 } 43 }
44 44
45 @include bem.elem('row') { 45 @include bem.elem("row") {
46 &:last-child { 46 &:last-child {
47 @include bem.elem('cell') { 47 @include bem.elem("cell") {
48 border-block-end-width: props.get(vars.$border-width); 48 border-block-end-width: props.get(vars.$border-width);
49 } 49 }
50 } 50 }
51 } 51 }
52 52
53 @include bem.modifier('flush') { 53 @include bem.modifier("flush") {
54 @include bem.elem('head-cell', 'cell') { 54 @include bem.elem("head-cell", "cell") {
55 &:first-child { 55 &:first-child {
56 padding-inline-start: 0; 56 padding-inline-start: 0;
57 } 57 }
@@ -62,8 +62,8 @@
62 } 62 }
63 } 63 }
64 64
65 @include bem.modifier('box') { 65 @include bem.modifier("box") {
66 @include bem.elem('cell') { 66 @include bem.elem("cell") {
67 background-color: props.get(vars.$box--bg-color); 67 background-color: props.get(vars.$box--bg-color);
68 68
69 &:first-child { 69 &:first-child {
@@ -75,9 +75,9 @@
75 } 75 }
76 } 76 }
77 77
78 @include bem.elem('row') { 78 @include bem.elem("row") {
79 &:first-child { 79 &:first-child {
80 @include bem.elem('cell') { 80 @include bem.elem("cell") {
81 &:first-child { 81 &:first-child {
82 border-start-start-radius: props.get(vars.$rounding); 82 border-start-start-radius: props.get(vars.$rounding);
83 } 83 }
@@ -89,7 +89,7 @@
89 } 89 }
90 90
91 &:last-child { 91 &:last-child {
92 @include bem.elem('cell') { 92 @include bem.elem("cell") {
93 &:first-child { 93 &:first-child {
94 border-end-start-radius: props.get(vars.$rounding); 94 border-end-start-radius: props.get(vars.$rounding);
95 } 95 }
@@ -102,35 +102,35 @@
102 } 102 }
103 } 103 }
104 104
105 @include bem.modifier('interactive') { 105 @include bem.modifier("interactive") {
106 @include bem.elem('row') { 106 @include bem.elem("row") {
107 @include bem.elem('cell') { 107 @include bem.elem("cell") {
108 cursor: pointer; 108 cursor: pointer;
109 } 109 }
110 110
111 &:hover { 111 &:hover {
112 @include bem.elem('cell') { 112 @include bem.elem("cell") {
113 background-color: props.get(vars.$hover--bg-color); 113 background-color: props.get(vars.$hover--bg-color);
114 } 114 }
115 } 115 }
116 116
117 &:active { 117 &:active {
118 @include bem.elem('cell') { 118 @include bem.elem("cell") {
119 background-color: props.get(vars.$active--bg-color); 119 background-color: props.get(vars.$active--bg-color);
120 } 120 }
121 } 121 }
122 } 122 }
123 123
124 @include bem.modifier('box') { 124 @include bem.modifier("box") {
125 @include bem.elem('row') { 125 @include bem.elem("row") {
126 &:hover { 126 &:hover {
127 @include bem.elem('cell') { 127 @include bem.elem("cell") {
128 background-color: props.get(vars.$box--hover--bg-color); 128 background-color: props.get(vars.$box--hover--bg-color);
129 } 129 }
130 } 130 }
131 131
132 &:active { 132 &:active {
133 @include bem.elem('cell') { 133 @include bem.elem("cell") {
134 background-color: props.get(vars.$box--active--bg-color); 134 background-color: props.get(vars.$box--active--bg-color);
135 } 135 }
136 } 136 }
@@ -138,8 +138,8 @@
138 } 138 }
139 } 139 }
140 140
141 @include bem.modifier('sm') { 141 @include bem.modifier("sm") {
142 @include bem.elem('head-cell', 'cell') { 142 @include bem.elem("head-cell", "cell") {
143 padding-block: props.get(vars.$pad-b--sm); 143 padding-block: props.get(vars.$pad-b--sm);
144 } 144 }
145 } 145 }
diff --git a/src/objects/_table.vars.scss b/src/objects/_table.vars.scss
index 7c5683c..e00010f 100644
--- a/src/objects/_table.vars.scss
+++ b/src/objects/_table.vars.scss
@@ -1,25 +1,59 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$pad-i: props.def(--o-table--pad-i, props.get(core.$size--175)) !default; 5$pad-i: props.def(--o-table--pad-i, props.get(core.$size--175)) !default;
6$pad-b: props.def(--o-table--pad-b, props.get(core.$size--125)) !default; 6$pad-b: props.def(--o-table--pad-b, props.get(core.$size--125)) !default;
7$rounding: props.def(--o-table--rounding, props.get(core.$rounding--sm)) !default; 7$rounding: props.def(--o-table--rounding, props.get(core.$rounding--sm)) !default;
8$border-width: props.def(--o-table--border-width, props.get(core.$border-width--thin)) !default; 8$border-width: props.def(--o-table--border-width, props.get(core.$border-width--thin)) !default;
9 9
10$heading--font-family: props.def(--o-table--heading--font-family, props.get(core.$font--standard--family)) !default; 10$heading--font-family: props.def(
11$heading--font-size: props.def(--o-table--heading--font-size, props.get(core.$font-size--50)) !default; 11 --o-table--heading--font-family,
12$heading--font-weight: props.def(--o-table--heading--font-weight, bold) !default; 12 props.get(core.$font--standard--family)
13) !default;
14$heading--font-size: props.def(
15 --o-table--heading--font-size,
16 props.get(core.$font-size--50)
17) !default;
18$heading--font-weight: props.def(--o-table--heading--font-weight, bold) !default;
13$heading--text-transform: props.def(--o-table--heading--text-transform, uppercase) !default; 19$heading--text-transform: props.def(--o-table--heading--text-transform, uppercase) !default;
14$heading--letter-spacing: props.def(--o-table--heading--letter-spacing, .5px) !default; 20$heading--letter-spacing: props.def(--o-table--heading--letter-spacing, 0.5px) !default;
15 21
16$pad-b--sm: props.def(--o-table--sm--pad-b, props.get(core.$size--75)) !default; 22$pad-b--sm: props.def(--o-table--sm--pad-b, props.get(core.$size--75)) !default;
17 23
18$border-color: props.def(--o-table--border-color, props.get(core.$theme, --border), 'color') !default; 24$border-color: props.def(
19$heading-color: props.def(--o-table--heading-color, props.get(core.$theme, --heading), 'color') !default; 25 --o-table--border-color,
20$hover--bg-color: props.def(--o-table--hover--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 26 props.get(core.$theme, --border),
21$active--bg-color: props.def(--o-table--active--bg-color, props.get(core.$theme, --border), 'color') !default; 27 "color"
28) !default;
29$heading-color: props.def(
30 --o-table--heading-color,
31 props.get(core.$theme, --heading),
32 "color"
33) !default;
34$hover--bg-color: props.def(
35 --o-table--hover--bg-color,
36 props.get(core.$theme, --border-mute),
37 "color"
38) !default;
39$active--bg-color: props.def(
40 --o-table--active--bg-color,
41 props.get(core.$theme, --border),
42 "color"
43) !default;
22 44
23$box--bg-color: props.def(--o-table--box--bg-color, props.get(core.$theme, --base, --50), 'color') !default; 45$box--bg-color: props.def(
24$box--hover--bg-color: props.def(--o-table--box--hover--bg-color, props.get(core.$theme, --bg-base), 'color') !default; 46 --o-table--box--bg-color,
25$box--active--bg-color: props.def(--o-table--box--active--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 47 props.get(core.$theme, --base, --50),
48 "color"
49) !default;
50$box--hover--bg-color: props.def(
51 --o-table--box--hover--bg-color,
52 props.get(core.$theme, --bg-base),
53 "color"
54) !default;
55$box--active--bg-color: props.def(
56 --o-table--box--active--bg-color,
57 props.get(core.$theme, --border-mute),
58 "color"
59) !default;
diff --git a/src/objects/_text-field.scss b/src/objects/_text-field.scss
index 5a48df3..a8d3ec8 100644
--- a/src/objects/_text-field.scss
+++ b/src/objects/_text-field.scss
@@ -1,84 +1,91 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'text-field.vars'; 6@forward "text-field.vars";
7@use 'text-field.vars' as vars; 7@use "text-field.vars" as vars;
8 8
9@mixin -invalid { 9@mixin -invalid {
10 $focus-border-offset: calc(props.get(vars.$border-width) - props.get(vars.$focus--border-width)); 10 $focus-border-offset: calc(
11 props.get(vars.$border-width) - props.get(vars.$focus--border-width)
12 );
11 13
12 @include bem.sibling-elem('bg') { 14 @include bem.sibling-elem("bg") {
13 inset-block: $focus-border-offset; 15 inset-block: $focus-border-offset;
14 inset-inline: $focus-border-offset; 16 inset-inline: $focus-border-offset;
15 border: props.get(vars.$focus--border-width) solid props.get(vars.$error--border-color); 17 border: props.get(vars.$focus--border-width) solid props.get(vars.$error--border-color);
16 border-radius: calc(props.get(vars.$rounding) - $focus-border-offset); 18 border-radius: calc(props.get(vars.$rounding) - $focus-border-offset);
17 } 19 }
18 20
19 &:hover { 21 &:hover {
20 @include bem.sibling-elem('bg') { 22 @include bem.sibling-elem("bg") {
21 border-color: props.get(vars.$error--hover--border-color); 23 border-color: props.get(vars.$error--hover--border-color);
22 } 24 }
23 } 25 }
24 26
25 &:focus { 27 &:focus {
26 @include bem.sibling-elem('bg') { 28 @include bem.sibling-elem("bg") {
27 border-color: props.get(vars.$error--focus--border-color); 29 border-color: props.get(vars.$error--focus--border-color);
28 } 30 }
29 } 31 }
30} 32}
31 33
32@mixin -keyboard-focus { 34@mixin -keyboard-focus {
33 @include bem.sibling-elem('bg') { 35 @include bem.sibling-elem("bg") {
34 outline: props.get(vars.$key-focus--outline-color) solid props.get(vars.$key-focus--border-width); 36 outline: props.get(vars.$key-focus--outline-color) solid
35 border-color: props.get(vars.$key-focus--border-color); 37 props.get(vars.$key-focus--border-width);
38 border-color: props.get(vars.$key-focus--border-color);
36 //outline-offset: props.get(vars.$focus --border); 39 //outline-offset: props.get(vars.$focus --border);
37 } 40 }
38} 41}
39 42
40@mixin styles { 43@mixin styles {
41 @include materialize-at-root(meta.module-variables('vars')); 44 @include materialize-at-root(meta.module-variables("vars"));
42 45
43 @include bem.object('text-field') { 46 @include bem.object("text-field") {
44 $focus-border-offset: calc(props.get(vars.$border-width) - props.get(vars.$focus--border-width)); 47 $focus-border-offset: calc(
48 props.get(vars.$border-width) - props.get(vars.$focus--border-width)
49 );
45 50
46 position: relative; 51 position: relative;
47 min-inline-size: 0; 52 min-inline-size: 0;
48 background-color: props.get(vars.$bg-color); 53 background-color: props.get(vars.$bg-color);
49 border-radius: props.get(vars.$rounding); 54 border-radius: props.get(vars.$rounding);
50 55
51 @include bem.elem('bg') { 56 @include bem.elem("bg") {
52 position: absolute; 57 position: absolute;
53 inset-block: 0; 58 inset-block: 0;
54 inset-inline: 0; 59 inset-inline: 0;
55 display: block; 60 display: block;
56 pointer-events: none; 61 pointer-events: none;
57 border: props.get(vars.$border-width) solid props.get(vars.$border-color); 62 border: props.get(vars.$border-width) solid props.get(vars.$border-color);
58 border-radius: props.get(vars.$rounding); 63 border-radius: props.get(vars.$rounding);
59 } 64 }
60 65
61 @include bem.elem('native') { 66 @include bem.elem("native") {
62 box-sizing: border-box; 67 box-sizing: border-box;
63 inline-size: 100%; 68 inline-size: 100%;
64 padding-block: calc(props.get(vars.$pad-b) - .5em * (props.get(vars.$line-height) - 1)); 69 padding-block: calc(
65 padding-inline: props.get(vars.$pad-i); 70 props.get(vars.$pad-b) - 0.5em * (props.get(vars.$line-height) - 1)
66 font: inherit; 71 );
67 line-height: props.get(vars.$line-height); 72 padding-inline: props.get(vars.$pad-i);
68 color: props.get(vars.$text-color); 73 font: inherit;
69 appearance: none; 74 line-height: props.get(vars.$line-height);
70 resize: none; 75 color: props.get(vars.$text-color);
76 appearance: none;
77 resize: none;
71 background-color: transparent; 78 background-color: transparent;
72 border: 1px solid transparent; 79 border: 1px solid transparent;
73 80
74 &::placeholder { 81 &::placeholder {
75 font-style: italic; 82 font-style: italic;
76 color: props.get(vars.$placeholder-color); 83 color: props.get(vars.$placeholder-color);
77 opacity: 1; 84 opacity: 1;
78 } 85 }
79 86
80 &:hover { 87 &:hover {
81 @include bem.sibling-elem('bg') { 88 @include bem.sibling-elem("bg") {
82 border-color: props.get(vars.$hover--border-color); 89 border-color: props.get(vars.$hover--border-color);
83 } 90 }
84 } 91 }
@@ -86,10 +93,11 @@
86 &:focus { 93 &:focus {
87 outline: 0; 94 outline: 0;
88 95
89 @include bem.sibling-elem('bg') { 96 @include bem.sibling-elem("bg") {
90 inset-block: $focus-border-offset; 97 inset-block: $focus-border-offset;
91 inset-inline: $focus-border-offset; 98 inset-inline: $focus-border-offset;
92 border: props.get(vars.$focus--border-width) solid props.get(vars.$focus--border-color); 99 border: props.get(vars.$focus--border-width) solid
100 props.get(vars.$focus--border-color);
93 border-radius: calc(props.get(vars.$rounding) - $focus-border-offset); 101 border-radius: calc(props.get(vars.$rounding) - $focus-border-offset);
94 } 102 }
95 } 103 }
@@ -104,46 +112,49 @@
104 } 112 }
105 } 113 }
106 114
107 @include bem.modifier('extended') { 115 @include bem.modifier("extended") {
108 padding: props.get(vars.$extended--pad); 116 padding: props.get(vars.$extended--pad);
109 117
110 @include bem.multi('&', 'elem' 'bg') { 118 @include bem.multi("&", "elem" "bg") {
111 border-radius: calc(props.get(vars.$rounding) + props.get(vars.$extended--pad)); 119 border-radius: calc(props.get(vars.$rounding) + props.get(vars.$extended--pad));
112 } 120 }
113 121
114 @include bem.elem('native') { 122 @include bem.elem("native") {
115 &:focus { 123 &:focus {
116 @include bem.sibling-elem('bg') { 124 @include bem.sibling-elem("bg") {
117 border-radius: calc(props.get(vars.$rounding) + props.get(vars.$extended--pad) - $focus-border-offset); 125 border-radius: calc(
126 props.get(vars.$rounding) + props.get(vars.$extended--pad) -
127 $focus-border-offset
128 );
118 } 129 }
119 } 130 }
120 } 131 }
121 } 132 }
122 133
123 @include bem.modifier('pill') { 134 @include bem.modifier("pill") {
124 @include bem.multi('&', 'elem' 'bg') { 135 @include bem.multi("&", "elem" "bg") {
125 border-radius: 100em; 136 border-radius: 100em;
126 } 137 }
127 138
128 @include bem.elem('native') { 139 @include bem.elem("native") {
129 padding-inline: props.get(vars.$pad-i-pill); 140 padding-inline: props.get(vars.$pad-i-pill);
130 141
131 &:focus { 142 &:focus {
132 @include bem.sibling-elem('bg') { 143 @include bem.sibling-elem("bg") {
133 border-radius: 100em; 144 border-radius: 100em;
134 } 145 }
135 } 146 }
136 } 147 }
137 148
138 @include bem.modifier('extended') { 149 @include bem.modifier("extended") {
139 @include bem.elem('native') { 150 @include bem.elem("native") {
140 padding-inline: props.get(vars.$pad-i); 151 padding-inline: props.get(vars.$pad-i);
141 } 152 }
142 } 153 }
143 } 154 }
144 155
145 @include bem.is('invalid') { 156 @include bem.is("invalid") {
146 @include bem.elem('native') { 157 @include bem.elem("native") {
147 @include -invalid; 158 @include -invalid;
148 159
149 &:focus-visible { 160 &:focus-visible {
@@ -152,10 +163,10 @@
152 } 163 }
153 } 164 }
154 165
155 @include bem.is('disabled') { 166 @include bem.is("disabled") {
156 background-color: props.get(vars.$disabled--bg-color); 167 background-color: props.get(vars.$disabled--bg-color);
157 168
158 @include bem.elem('native') { 169 @include bem.elem("native") {
159 color: props.get(vars.$disabled--text-color); 170 color: props.get(vars.$disabled--text-color);
160 171
161 &::placeholder { 172 &::placeholder {
@@ -163,21 +174,21 @@
163 } 174 }
164 } 175 }
165 176
166 @include bem.elem('bg') { 177 @include bem.elem("bg") {
167 border-color: props.get(vars.$disabled--border-color); 178 border-color: props.get(vars.$disabled--border-color);
168 } 179 }
169 180
170 @include bem.is('invalid') { 181 @include bem.is("invalid") {
171 @include bem.elem('native') { 182 @include bem.elem("native") {
172 @include bem.sibling-elem('bg') { 183 @include bem.sibling-elem("bg") {
173 border-color: props.get(vars.$disabled--border-color); 184 border-color: props.get(vars.$disabled--border-color);
174 } 185 }
175 } 186 }
176 } 187 }
177 188
178 @include bem.elem('native') { 189 @include bem.elem("native") {
179 &:invalid { 190 &:invalid {
180 @include bem.sibling-elem('bg') { 191 @include bem.sibling-elem("bg") {
181 border-color: props.get(vars.$disabled--border-color); 192 border-color: props.get(vars.$disabled--border-color);
182 } 193 }
183 } 194 }
diff --git a/src/objects/_text-field.vars.scss b/src/objects/_text-field.vars.scss
index ef06822..9a2a16a 100644
--- a/src/objects/_text-field.vars.scss
+++ b/src/objects/_text-field.vars.scss
@@ -1,39 +1,108 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../core.vars' as core; 3@use "../core.vars" as core;
4 4
5$line-height: props.def(--o-text-field--line-height, 1.4) !default; 5$line-height: props.def(--o-text-field--line-height, 1.4) !default;
6$pad-i: props.def(--o-text-field--pad-i, props.get(core.$size--125)) !default; 6$pad-i: props.def(--o-text-field--pad-i, props.get(core.$size--125)) !default;
7$pad-i-pill: props.def(--o-text-field--pad-i-pill, props.get(core.$size--175)) !default; 7$pad-i-pill: props.def(--o-text-field--pad-i-pill, props.get(core.$size--175)) !default;
8$pad-b: props.def(--o-text-field--pad-b, props.get(core.$size--125)) !default; 8$pad-b: props.def(--o-text-field--pad-b, props.get(core.$size--125)) !default;
9$border-width: props.def(--o-text-field--border-width, props.get(core.$border-width--thin)) !default; 9$border-width: props.def(
10$rounding: props.def(--o-text-field--rounding, props.get(core.$rounding--sm)) !default; 10 --o-text-field--border-width,
11 props.get(core.$border-width--thin)
12) !default;
13$rounding: props.def(--o-text-field--rounding, props.get(core.$rounding--sm)) !default;
11 14
12$extended--pad: props.def(--o-text-field--extended--pad, props.get(core.$size--50)) !default; 15$extended--pad: props.def(--o-text-field--extended--pad, props.get(core.$size--50)) !default;
13 16
14$focus--border-width: props.def(--o-text-field--focus--border-width, props.get(core.$border-width--medium)) !default; 17$focus--border-width: props.def(
18 --o-text-field--focus--border-width,
19 props.get(core.$border-width--medium)
20) !default;
15 21
16$key-focus--border-width: props.def(--o-text-field--key-focus--border-width, props.get(core.$key-focus--outline-width)) !default; 22$key-focus--border-width: props.def(
23 --o-text-field--key-focus--border-width,
24 props.get(core.$key-focus--outline-width)
25) !default;
17 26
18$bg-color: props.def(--o-text-field--bg-color, props.get(core.$theme, --base, --50), 'color') !default; 27$bg-color: props.def(
19$placeholder-color: props.def(--o-text-field--placeholder-color, props.get(core.$theme, --text-mute-more), 'color') !default; 28 --o-text-field--bg-color,
20$text-color: props.def(--o-text-field--text-color, props.get(core.$theme, --text), 'color') !default; 29 props.get(core.$theme, --base, --50),
21$border-color: props.def(--o-text-field--border-color, props.get(core.$theme, --border-strong), 'color') !default; 30 "color"
31) !default;
32$placeholder-color: props.def(
33 --o-text-field--placeholder-color,
34 props.get(core.$theme, --text-mute-more),
35 "color"
36) !default;
37$text-color: props.def(
38 --o-text-field--text-color,
39 props.get(core.$theme, --text),
40 "color"
41) !default;
42$border-color: props.def(
43 --o-text-field--border-color,
44 props.get(core.$theme, --border-strong),
45 "color"
46) !default;
22 47
23$hover--border-color: props.def(--o-text-field--hover--border-color, props.get(core.$theme, --text-mute-more), 'color') !default; 48$hover--border-color: props.def(
49 --o-text-field--hover--border-color,
50 props.get(core.$theme, --text-mute-more),
51 "color"
52) !default;
24 53
25$focus--border-color: props.def(--o-text-field--focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 54$focus--border-color: props.def(
55 --o-text-field--focus--border-color,
56 props.get(core.$theme, --focus, --border),
57 "color"
58) !default;
26 59
27$key-focus--border-color: props.def(--o-text-field--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 60$key-focus--border-color: props.def(
28$key-focus--outline-color: props.def(--o-text-field--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 61 --o-text-field--key-focus--border-color,
62 props.get(core.$theme, --focus, --border),
63 "color"
64) !default;
65$key-focus--outline-color: props.def(
66 --o-text-field--key-focus--outline-color,
67 props.get(core.$theme, --focus, --outline),
68 "color"
69) !default;
29 70
30$error--border-color: props.def(--o-text-field--error--border-color, props.get(core.$theme, --negative, --700), 'color') !default; 71$error--border-color: props.def(
72 --o-text-field--error--border-color,
73 props.get(core.$theme, --negative, --700),
74 "color"
75) !default;
31 76
32$error--hover--border-color: props.def(--o-text-field--error--hover--border-color, props.get(core.$theme, --negative, --900), 'color') !default; 77$error--hover--border-color: props.def(
78 --o-text-field--error--hover--border-color,
79 props.get(core.$theme, --negative, --900),
80 "color"
81) !default;
33 82
34$error--focus--border-color: props.def(--o-text-field--error--focus--border-color, props.get(core.$theme, --negative, --900), 'color') !default; 83$error--focus--border-color: props.def(
84 --o-text-field--error--focus--border-color,
85 props.get(core.$theme, --negative, --900),
86 "color"
87) !default;
35 88
36$disabled--bg-color: props.def(--o-text-field--disabled--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 89$disabled--bg-color: props.def(
37$disabled--placeholder-color: props.def(--o-text-field--disabled--placeholder-color, props.get(core.$theme, --text-disabled), 'color') !default; 90 --o-text-field--disabled--bg-color,
38$disabled--text-color: props.def(--o-text-field--disabled--text-color, props.get(core.$theme, --text-disabled), 'color') !default; 91 props.get(core.$theme, --border-mute),
39$disabled--border-color: props.def(--o-text-field--disabled--border-color, props.get(core.$theme, --border-mute), 'color') !default; 92 "color"
93) !default;
94$disabled--placeholder-color: props.def(
95 --o-text-field--disabled--placeholder-color,
96 props.get(core.$theme, --text-disabled),
97 "color"
98) !default;
99$disabled--text-color: props.def(
100 --o-text-field--disabled--text-color,
101 props.get(core.$theme, --text-disabled),
102 "color"
103) !default;
104$disabled--border-color: props.def(
105 --o-text-field--disabled--border-color,
106 props.get(core.$theme, --border-mute),
107 "color"
108) !default;
diff --git a/src/objects/_thumbnail.scss b/src/objects/_thumbnail.scss
index 9925dd0..c7a9791 100644
--- a/src/objects/_thumbnail.scss
+++ b/src/objects/_thumbnail.scss
@@ -1,65 +1,66 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:meta'; 2@use "sass:meta";
3@use 'sass:string'; 3@use "sass:string";
4@use 'pkg:iro-sass/src/bem'; 4@use "pkg:iro-sass/bem";
5@use 'pkg:iro-sass/src/props'; 5@use "pkg:iro-sass/props";
6@use '../props' as *; 6@use "../props" as *;
7 7
8@forward 'thumbnail.vars'; 8@forward "thumbnail.vars";
9@use 'thumbnail.vars' as vars; 9@use "thumbnail.vars" as vars;
10 10
11@mixin styles { 11@mixin styles {
12 @include materialize-at-root(meta.module-variables('vars')); 12 @include materialize-at-root(meta.module-variables("vars"));
13 13
14 @include bem.object('thumbnail') { 14 @include bem.object("thumbnail") {
15 position: relative; 15 position: relative;
16 display: block; 16 display: block;
17 flex: 0 0 auto; 17 flex: 0 0 auto;
18 inline-size: props.get(vars.$size); 18 inline-size: props.get(vars.$size);
19 block-size: props.get(vars.$size); 19 block-size: props.get(vars.$size);
20 overflow: hidden; 20 overflow: hidden;
21 outline: props.get(vars.$border-color) solid props.get(vars.$border-width); 21 outline: props.get(vars.$border-color) solid props.get(vars.$border-width);
22 outline-offset: calc(-1 * props.get(vars.$border-width)); 22 outline-offset: calc(-1 * props.get(vars.$border-width));
23 border-radius: props.get(vars.$rounding); 23 border-radius: props.get(vars.$rounding);
24 24
25 &:hover, 25 &:hover,
26 &:active, 26 &:active,
27 &:focus-visible { 27 &:focus-visible {
28 outline-color: props.get(vars.$hover--border-color); 28 outline-color: props.get(vars.$hover--border-color);
29 opacity: 1; 29 opacity: 1;
30 } 30 }
31 31
32 @include bem.elem('image') { 32 @include bem.elem("image") {
33 position: absolute; 33 position: absolute;
34 inset-block-start: 0; 34 inset-block-start: 0;
35 inset-inline-start: 0; 35 inset-inline-start: 0;
36 display: block; 36 display: block;
37 inline-size: 100%; 37 inline-size: 100%;
38 block-size: 100%; 38 block-size: 100%;
39 object-fit: cover; 39 object-fit: cover;
40 object-position: center center; 40 object-position: center center;
41 } 41 }
42 42
43 @include bem.elem('icon') { 43 @include bem.elem("icon") {
44 position: absolute; 44 position: absolute;
45 inset-block-start: 50%; 45 inset-block-start: 50%;
46 inset-inline-start: 50%; 46 inset-inline-start: 50%;
47 transform: translate(-50%, -50%); 47 transform: translate(-50%, -50%);
48 } 48 }
49 49
50 &:focus-visible { 50 &:focus-visible {
51 $focus-border-offset: calc(-1 * props.get(vars.$key-focus--border-offset)); 51 $focus-border-offset: calc(-1 * props.get(vars.$key-focus--border-offset));
52 52
53 margin: $focus-border-offset; 53 margin: $focus-border-offset;
54 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 54 outline: props.get(vars.$key-focus--border-color) solid
55 props.get(vars.$key-focus--border-width);
55 outline-offset: 0; 56 outline-offset: 0;
56 border: props.get(vars.$key-focus--border-offset) solid transparent; 57 border: props.get(vars.$key-focus--border-offset) solid transparent;
57 border-radius: calc(props.get(vars.$rounding) - $focus-border-offset); 58 border-radius: calc(props.get(vars.$rounding) - $focus-border-offset);
58 box-shadow: 59 box-shadow: 0 0 0
59 0 60 calc(
60 0 61 props.get(vars.$key-focus--outline-width) +
61 0 62 props.get(vars.$key-focus--border-width)
62 calc(props.get(vars.$key-focus--outline-width) + props.get(vars.$key-focus--border-width)) 63 )
63 props.get(vars.$key-focus--outline-color); 64 props.get(vars.$key-focus--outline-color);
64 } 65 }
65 66
@@ -73,18 +74,18 @@
73 outline-color: props.get(vars.$static-themes, $theme, --hover, --border); 74 outline-color: props.get(vars.$static-themes, $theme, --hover, --border);
74 } 75 }
75 76
76 @include bem.is('selected') { 77 @include bem.is("selected") {
77 border-color: props.get(vars.$static-themes, $theme, --selected, --border); 78 border-color: props.get(vars.$static-themes, $theme, --selected, --border);
78 } 79 }
79 80
80 &:focus-visible { 81 &:focus-visible {
81 outline-color: props.get(vars.$static-themes, $theme, --key-focus, --border); 82 outline-color: props.get(vars.$static-themes, $theme, --key-focus, --border);
82 border-color: transparent; 83 border-color: transparent;
83 box-shadow: 84 box-shadow: 0 0 0
84 0 85 calc(
85 0 86 props.get(vars.$key-focus--outline-width) +
86 0 87 props.get(vars.$key-focus--border-width)
87 calc(props.get(vars.$key-focus--outline-width) + props.get(vars.$key-focus--border-width)) 88 )
88 props.get(vars.$static-themes, $theme, --key-focus, --outline); 89 props.get(vars.$static-themes, $theme, --key-focus, --outline);
89 } 90 }
90 } 91 }
diff --git a/src/objects/_thumbnail.vars.scss b/src/objects/_thumbnail.vars.scss
index a5625fc..737a626 100644
--- a/src/objects/_thumbnail.vars.scss
+++ b/src/objects/_thumbnail.vars.scss
@@ -1,51 +1,85 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6$size: props.def(--o-thumbnail--size, props.get(core.$size--900)) !default; 6$size: props.def(--o-thumbnail--size, props.get(core.$size--900)) !default;
7$rounding: props.def(--o-thumbnail--rounding, props.get(core.$rounding--sm)) !default; 7$rounding: props.def(--o-thumbnail--rounding, props.get(core.$rounding--sm)) !default;
8$spacing: props.def(--o-thumbnail--spacing, props.get(core.$size--100)) !default; 8$spacing: props.def(--o-thumbnail--spacing, props.get(core.$size--100)) !default;
9$border-width: props.def(--o-thumbnail--border-width, props.get(core.$border-width--thin)) !default; 9$border-width: props.def(--o-thumbnail--border-width, props.get(core.$border-width--thin)) !default;
10 10
11$selected--border-width: props.def(--o-thumbnail--selected--border-width, props.get(core.$border-width--medium)) !default; 11$selected--border-width: props.def(
12 --o-thumbnail--selected--border-width,
13 props.get(core.$border-width--medium)
14) !default;
12 15
13$key-focus--border-width: props.def(--o-thumbnail--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 16$key-focus--border-width: props.def(
14$key-focus--border-offset: props.def(--o-thumbnail--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 17 --o-thumbnail--key-focus--border-width,
15$key-focus--outline-width: props.def(--o-thumbnail--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 18 props.get(core.$key-focus--border-width)
19) !default;
20$key-focus--border-offset: props.def(
21 --o-thumbnail--key-focus--border-offset,
22 props.get(core.$key-focus--border-offset)
23) !default;
24$key-focus--outline-width: props.def(
25 --o-thumbnail--key-focus--outline-width,
26 props.get(core.$key-focus--outline-width)
27) !default;
16 28
17$border-color: props.def(--o-thumbnail--border-color, props.get(core.$theme, --border-strong), 'color') !default; 29$border-color: props.def(
30 --o-thumbnail--border-color,
31 props.get(core.$theme, --border-strong),
32 "color"
33) !default;
18 34
19$hover--border-color: props.def(--o-thumbnail--hover--border-color, props.get(core.$theme, --text-mute-more), 'color') !default; 35$hover--border-color: props.def(
36 --o-thumbnail--hover--border-color,
37 props.get(core.$theme, --text-mute-more),
38 "color"
39) !default;
20 40
21$selected--border-color: props.def(--o-thumbnail--selected--border-color, props.get(core.$theme, --heading), 'color') !default; 41$selected--border-color: props.def(
42 --o-thumbnail--selected--border-color,
43 props.get(core.$theme, --heading),
44 "color"
45) !default;
22 46
23$key-focus--border-color: props.def(--o-thumbnail--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 47$key-focus--border-color: props.def(
24$key-focus--outline-color: props.def(--o-thumbnail--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 48 --o-thumbnail--key-focus--border-color,
49 props.get(core.$theme, --focus, --border),
50 "color"
51) !default;
52$key-focus--outline-color: props.def(
53 --o-thumbnail--key-focus--outline-color,
54 props.get(core.$theme, --focus, --outline),
55 "color"
56) !default;
25 57
26$size--md: props.def(--o-thumbnail--size, props.get(core.$size--600), 'md') !default; 58$size--md: props.def(--o-thumbnail--size, props.get(core.$size--600), "md") !default;
27 59
28$static-themes: props.def(--o-thumbnail, (), 'color'); 60$static-themes: props.def(--o-thumbnail, (), "color");
29 61
30@each $theme in map.keys(props.get(core.$transparent-colors)) { 62@each $theme in map.keys(props.get(core.$transparent-colors)) {
31 $thumbnail-theme: --static-#{string.slice($theme, 3)}; 63 $thumbnail-theme: --static-#{string.slice($theme, 3)};
32 64
33 $static-themes: props.merge($static-themes, ( 65 $static-themes: props.merge(
34 $thumbnail-theme: ( 66 $static-themes,
35 --border: props.get(core.$transparent-colors, $theme, --400), 67 (
68 $thumbnail-theme: (
69 --border: props.get(core.$transparent-colors, $theme, --400),
70 --hover: (
71 --border: props.get(core.$transparent-colors, $theme, --500),
72 ),
36 73
37 --hover: ( 74 --selected: (
38 --border: props.get(core.$transparent-colors, $theme, --500), 75 --border: props.get(core.$transparent-colors, $theme, --900),
39 ), 76 ),
40 77
41 --selected: ( 78 --key-focus: (
42 --border: props.get(core.$transparent-colors, $theme, --900), 79 --border: props.get(core.$transparent-colors, $theme, --900),
43 ), 80 --outline: props.get(core.$transparent-colors, $theme, --300),
44 81 ),
45 --key-focus: ( 82 ),
46 --border: props.get(core.$transparent-colors, $theme, --900),
47 --outline: props.get(core.$transparent-colors, $theme, --300),
48 ),
49 ) 83 )
50 )); 84 );
51} 85}
diff --git a/src/scopes/_blockquotes.scss b/src/scopes/_blockquotes.scss
index 10e6d81..bc4fd39 100644
--- a/src/scopes/_blockquotes.scss
+++ b/src/scopes/_blockquotes.scss
@@ -1,25 +1,27 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'blockquotes.vars'; 6@forward "blockquotes.vars";
7@use 'blockquotes.vars' as vars; 7@use "blockquotes.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.scope('blockquotes') { 12 @include bem.scope("blockquotes") {
13 blockquote { 13 blockquote {
14 padding-inline-start: calc(props.get(vars.$indent) - props.get(vars.$border-width)); 14 padding-inline-start: calc(props.get(vars.$indent) - props.get(vars.$border-width));
15 margin-block: props.get(vars.$margin-bs) 0; 15 margin-block: props.get(vars.$margin-bs) 0;
16 margin-inline: 1px 0; 16 margin-inline: 1px 0;
17 border-inline-start: props.get(vars.$border-width) solid props.get(vars.$border-color); 17 border-inline-start: props.get(vars.$border-width) solid props.get(vars.$border-color);
18 } 18 }
19 19
20 @include bem.modifier('compact') { 20 @include bem.modifier("compact") {
21 blockquote { 21 blockquote {
22 padding-inline-start: calc(props.get(vars.$compact--indent) - props.get(vars.$border-width)); 22 padding-inline-start: calc(
23 props.get(vars.$compact--indent) - props.get(vars.$border-width)
24 );
23 } 25 }
24 } 26 }
25 } 27 }
diff --git a/src/scopes/_blockquotes.vars.scss b/src/scopes/_blockquotes.vars.scss
index 63c40b0..117b4a6 100644
--- a/src/scopes/_blockquotes.vars.scss
+++ b/src/scopes/_blockquotes.vars.scss
@@ -1,11 +1,24 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3@use './implicit.vars' as implicit; 3@use "./implicit.vars" as implicit;
4 4
5$indent: props.def(--s-blockquotes--indent, props.get(core.$list--indent)) !default; 5$indent: props.def(--s-blockquotes--indent, props.get(core.$list--indent)) !default;
6$margin-bs: props.def(--s-blockquotes--margin-bs, props.get(implicit.$paragraph--margin-bs)) !default; 6$margin-bs: props.def(
7$border-width: props.def(--s-blockquotes--border-width, props.get(core.$border-width--thick)) !default; 7 --s-blockquotes--margin-bs,
8 props.get(implicit.$paragraph--margin-bs)
9) !default;
10$border-width: props.def(
11 --s-blockquotes--border-width,
12 props.get(core.$border-width--thick)
13) !default;
8 14
9$compact--indent: props.def(--s-blockquotes--compact--indent, props.get(core.$list--compact-indent)) !default; 15$compact--indent: props.def(
16 --s-blockquotes--compact--indent,
17 props.get(core.$list--compact-indent)
18) !default;
10 19
11$border-color: props.def(--s-blockquotes--border-color, props.get(core.$theme, --border), 'color') !default; 20$border-color: props.def(
21 --s-blockquotes--border-color,
22 props.get(core.$theme, --border),
23 "color"
24) !default;
diff --git a/src/scopes/_body.scss b/src/scopes/_body.scss
index 77a3eb1..6c5ba63 100644
--- a/src/scopes/_body.scss
+++ b/src/scopes/_body.scss
@@ -1,15 +1,15 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'body.vars'; 6@forward "body.vars";
7@use 'body.vars' as vars; 7@use "body.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.scope('body') { 12 @include bem.scope("body") {
13 font-size: props.get(vars.$font-size); 13 font-size: props.get(vars.$font-size);
14 line-height: props.get(vars.$line-height); 14 line-height: props.get(vars.$line-height);
15 15
@@ -30,11 +30,11 @@
30 } 30 }
31 31
32 img { 32 img {
33 display: block; 33 display: block;
34 inline-size: auto; 34 inline-size: auto;
35 max-inline-size: 100%; 35 max-inline-size: 100%;
36 block-size: auto; 36 block-size: auto;
37 max-block-size: props.get(vars.$img--max-block-size); 37 max-block-size: props.get(vars.$img--max-block-size);
38 margin-block-start: props.get(vars.$paragraph--margin-bs); 38 margin-block-start: props.get(vars.$paragraph--margin-bs);
39 } 39 }
40 40
diff --git a/src/scopes/_body.vars.scss b/src/scopes/_body.vars.scss
index 981ef32..414e0c1 100644
--- a/src/scopes/_body.vars.scss
+++ b/src/scopes/_body.vars.scss
@@ -1,12 +1,25 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4@use '../layouts/container.vars' as container; 4@use "../layouts/container.vars" as container;
5 5
6$font-size: props.def(--s-body--font-size, props.get(core.$font-size--150)) !default; 6$font-size: props.def(--s-body--font-size, props.get(core.$font-size--150)) !default;
7$line-height: props.def(--s-body--line-height, calc(props.get(core.$font--standard--line-height) + .1)) !default; 7$line-height: props.def(
8$paragraph--margin-bs: props.def(--s-body--paragraph--margin-bs, props.get(core.$size--300)) !default; 8 --s-body--line-height,
9$paragraph--max-inline-size: props.def(--s-body--paragraph--max-inline-size, props.get(container.$fixed)) !default; 9 calc(props.get(core.$font--standard--line-height) + 0.1)
10$img--max-block-size: props.def(--s-body--img--max-block-size, none) !default; 10) !default;
11$paragraph--margin-bs: props.def(
12 --s-body--paragraph--margin-bs,
13 props.get(core.$size--300)
14) !default;
15$paragraph--max-inline-size: props.def(
16 --s-body--paragraph--max-inline-size,
17 props.get(container.$fixed)
18) !default;
19$img--max-block-size: props.def(--s-body--img--max-block-size, none) !default;
11 20
12$strong--text-color: props.def(--s-body--strong--text-color, props.get(core.$theme, --heading), 'color') !default; 21$strong--text-color: props.def(
22 --s-body--strong--text-color,
23 props.get(core.$theme, --heading),
24 "color"
25) !default;
diff --git a/src/scopes/_code.scss b/src/scopes/_code.scss
index db43de0..d931c22 100644
--- a/src/scopes/_code.scss
+++ b/src/scopes/_code.scss
@@ -1,39 +1,39 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5 5
6@forward 'code.vars'; 6@forward "code.vars";
7@use 'code.vars' as vars; 7@use "code.vars" as vars;
8 8
9@mixin styles { 9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 10 @include materialize-at-root(meta.module-variables("vars"));
11 11
12 @include bem.scope('code') { 12 @include bem.scope("code") {
13 code { 13 code {
14 padding-block: props.get(vars.$inline--pad-b); 14 padding-block: props.get(vars.$inline--pad-b);
15 padding-inline: props.get(vars.$inline--pad-i); 15 padding-inline: props.get(vars.$inline--pad-i);
16 color: props.get(vars.$inline--fg); 16 color: props.get(vars.$inline--fg);
17 background-color: props.get(vars.$inline--bg); 17 background-color: props.get(vars.$inline--bg);
18 border-radius: props.get(vars.$inline--rounding); 18 border-radius: props.get(vars.$inline--rounding);
19 } 19 }
20 20
21 pre { 21 pre {
22 padding-block: props.get(vars.$block--pad-b); 22 padding-block: props.get(vars.$block--pad-b);
23 padding-inline: props.get(vars.$block--pad-i); 23 padding-inline: props.get(vars.$block--pad-i);
24 margin-block: props.get(vars.$block--margin-bs) 0; 24 margin-block: props.get(vars.$block--margin-bs) 0;
25 margin-inline: 0; 25 margin-inline: 0;
26 color: props.get(vars.$block--fg); 26 color: props.get(vars.$block--fg);
27 background-color: props.get(vars.$block--bg); 27 background-color: props.get(vars.$block--bg);
28 border-radius: props.get(vars.$block--rounding); 28 border-radius: props.get(vars.$block--rounding);
29 29
30 code { 30 code {
31 display: inline-block; 31 display: inline-block;
32 padding: 0; 32 padding: 0;
33 margin-inline-end: props.get(vars.$block--pad-i); 33 margin-inline-end: props.get(vars.$block--pad-i);
34 color: currentColor; 34 color: currentColor;
35 background-color: transparent; 35 background-color: transparent;
36 border-radius: 0; 36 border-radius: 0;
37 } 37 }
38 } 38 }
39 } 39 }
diff --git a/src/scopes/_code.vars.scss b/src/scopes/_code.vars.scss
index 329d372..e22421c 100644
--- a/src/scopes/_code.vars.scss
+++ b/src/scopes/_code.vars.scss
@@ -1,18 +1,25 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3@use './implicit.vars' as implicit; 3@use "./implicit.vars" as implicit;
4 4
5$inline--pad-i: props.def(--s-code--inline--pad-i, props.get(core.$size--50)) !default; 5$inline--pad-i: props.def(--s-code--inline--pad-i, props.get(core.$size--50)) !default;
6$inline--pad-b: props.def(--s-code--inline--pad-b, props.get(core.$size--10)) !default; 6$inline--pad-b: props.def(--s-code--inline--pad-b, props.get(core.$size--10)) !default;
7$inline--rounding: props.def(--s-code--inline--rounding, props.get(core.$rounding--sm)) !default; 7$inline--rounding: props.def(--s-code--inline--rounding, props.get(core.$rounding--sm)) !default;
8 8
9$block--pad-i: props.def(--s-code--block--pad-i, props.get(core.$size--150)) !default; 9$block--pad-i: props.def(--s-code--block--pad-i, props.get(core.$size--150)) !default;
10$block--pad-b: props.def(--s-code--block--pad-b, props.get(core.$size--85)) !default; 10$block--pad-b: props.def(--s-code--block--pad-b, props.get(core.$size--85)) !default;
11$block--margin-bs: props.def(--s-code--block--margin-bs, props.get(implicit.$paragraph--margin-bs)) !default; 11$block--margin-bs: props.def(
12$block--rounding: props.def(--s-code--block--rounding, props.get(core.$rounding--sm)) !default; 12 --s-code--block--margin-bs,
13 props.get(implicit.$paragraph--margin-bs)
14) !default;
15$block--rounding: props.def(--s-code--block--rounding, props.get(core.$rounding--sm)) !default;
13 16
14$inline--fg: props.def(--s-code--inline--fg, props.get(core.$theme, --heading), 'color') !default; 17$inline--fg: props.def(--s-code--inline--fg, props.get(core.$theme, --heading), "color") !default;
15$inline--bg: props.def(--s-code--inline--bg, props.get(core.$theme, --base, --200), 'color') !default; 18$inline--bg: props.def(
19 --s-code--inline--bg,
20 props.get(core.$theme, --base, --200),
21 "color"
22) !default;
16 23
17$block--fg: props.def(--s-code--block--fg, props.get(core.$theme, --text), 'color') !default; 24$block--fg: props.def(--s-code--block--fg, props.get(core.$theme, --text), "color") !default;
18$block--bg: props.def(--s-code--block--bg, props.get(core.$theme, --base, --50), 'color') !default; 25$block--bg: props.def(--s-code--block--bg, props.get(core.$theme, --base, --50), "color") !default;
diff --git a/src/scopes/_figures.scss b/src/scopes/_figures.scss
index c993f5a..852ab5a 100644
--- a/src/scopes/_figures.scss
+++ b/src/scopes/_figures.scss
@@ -1,20 +1,20 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../objects/figure.vars' as figure; 4@use "../objects/figure.vars" as figure;
5 5
6@mixin styles { 6@mixin styles {
7 @include bem.scope('figures') { 7 @include bem.scope("figures") {
8 figcaption { 8 figcaption {
9 padding-block: props.get(figure.$pad-b); 9 padding-block: props.get(figure.$pad-b);
10 font-size: props.get(figure.$font-size); 10 font-size: props.get(figure.$font-size);
11 color: props.get(figure.$text-color); 11 color: props.get(figure.$text-color);
12 border-block-end: props.get(figure.$border-width) solid props.get(figure.$border-color); 12 border-block-end: props.get(figure.$border-width) solid props.get(figure.$border-color);
13 13
14 &::before { 14 &::before {
15 display: block; 15 display: block;
16 margin-block: -100em 100em; 16 margin-block: -100em 100em;
17 content: ''; 17 content: "";
18 } 18 }
19 } 19 }
20 } 20 }
diff --git a/src/scopes/_headings.scss b/src/scopes/_headings.scss
index 23623fd..a6a7bbb 100644
--- a/src/scopes/_headings.scss
+++ b/src/scopes/_headings.scss
@@ -1,8 +1,8 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/bem'; 3@use "pkg:iro-sass/bem";
4@use 'pkg:iro-sass/src/props'; 4@use "pkg:iro-sass/props";
5@use '../objects/heading.vars' as heading; 5@use "../objects/heading.vars" as heading;
6 6
7@mixin styles { 7@mixin styles {
8 /* stylelint-disable-next-line scss/dollar-variable-pattern */ 8 /* stylelint-disable-next-line scss/dollar-variable-pattern */
@@ -15,56 +15,62 @@
15 xxl: h1, 15 xxl: h1,
16 ); 16 );
17 17
18 @include bem.scope('headings') { 18 @include bem.scope("headings") {
19 h1, 19 h1,
20 h2, 20 h2,
21 h3, 21 h3,
22 h4, 22 h4,
23 h5, 23 h5,
24 h6 { 24 h6 {
25 display: block; 25 display: block;
26 margin-block-start: props.get(heading.$margin-bs); 26 margin-block-start: props.get(heading.$margin-bs);
27 font-family: props.get(heading.$font-family); 27 font-family: props.get(heading.$font-family);
28 font-weight: props.get(heading.$font-weight); 28 font-weight: props.get(heading.$font-weight);
29 font-feature-settings: props.get(heading.$feature-settings); 29 font-feature-settings: props.get(heading.$feature-settings);
30 line-height: props.get(heading.$line-height); 30 line-height: props.get(heading.$line-height);
31 text-transform: props.get(heading.$text-transform); 31 text-transform: props.get(heading.$text-transform);
32 letter-spacing: normal; 32 letter-spacing: normal;
33 transform: translateX(props.get(heading.$offset)); 33 transform: translateX(props.get(heading.$offset));
34 } 34 }
35 35
36 @include bem.elem('highlight') { 36 @include bem.elem("highlight") {
37 background-image: linear-gradient(to top, 37 background-image: linear-gradient(
38 transparent .15em, 38 to top,
39 props.get(heading.$bg-color) .15em, 39 transparent 0.15em,
40 props.get(heading.$bg-color) .6em, 40 props.get(heading.$bg-color) 0.15em,
41 transparent .6em); 41 props.get(heading.$bg-color) 0.6em,
42 transparent 0.6em
43 );
42 } 44 }
43 45
44 @each $mod, $font-family, $line-height, $font-size, $font-weight, $letter-spacing, $feature-settings, $text-transform, $text-color in heading.$sizes { 46 @each $mod, $font-family, $line-height, $font-size, $font-weight, $letter-spacing,
47 $feature-settings, $text-transform, $text-color in heading.$sizes
48 {
45 #{map.get($-size-map, $mod)} { 49 #{map.get($-size-map, $mod)} {
46 font-family: props.get($font-family); 50 font-family: props.get($font-family);
47 font-size: props.get($font-size); 51 font-size: props.get($font-size);
48 font-weight: props.get($font-weight); 52 font-weight: props.get($font-weight);
49 font-feature-settings: props.get($feature-settings); 53 font-feature-settings: props.get($feature-settings);
50 line-height: props.get($line-height); 54 line-height: props.get($line-height);
51 color: props.get($text-color); 55 color: props.get($text-color);
52 text-transform: props.get($text-transform); 56 text-transform: props.get($text-transform);
53 letter-spacing: props.get($letter-spacing); 57 letter-spacing: props.get($letter-spacing);
54 } 58 }
55 } 59 }
56 60
57 @include bem.modifier('display') { 61 @include bem.modifier("display") {
58 @each $mod, $font-family, $line-height, $font-size, $font-weight, $letter-spacing, $feature-settings, $text-transform, $text-color in heading.$display--sizes { 62 @each $mod, $font-family, $line-height, $font-size, $font-weight, $letter-spacing,
63 $feature-settings, $text-transform, $text-color in heading.$display--sizes
64 {
59 #{map.get($-size-map, $mod)} { 65 #{map.get($-size-map, $mod)} {
60 font-family: props.get($font-family); 66 font-family: props.get($font-family);
61 font-size: props.get($font-size); 67 font-size: props.get($font-size);
62 font-weight: props.get($font-weight); 68 font-weight: props.get($font-weight);
63 font-feature-settings: props.get($feature-settings); 69 font-feature-settings: props.get($feature-settings);
64 line-height: props.get($line-height); 70 line-height: props.get($line-height);
65 color: props.get($text-color); 71 color: props.get($text-color);
66 text-transform: props.get($text-transform); 72 text-transform: props.get($text-transform);
67 letter-spacing: props.get($letter-spacing); 73 letter-spacing: props.get($letter-spacing);
68 } 74 }
69 } 75 }
70 } 76 }
@@ -79,10 +85,16 @@
79 } 85 }
80 } 86 }
81 87
82 @include bem.modifier('display') { 88 @include bem.modifier("display") {
83 @each $mod, $value in heading.$sizes { 89 @each $mod, $value in heading.$sizes {
84 #{map.get($-size-map, $mod)} { 90 #{map.get($-size-map, $mod)} {
85 color: props.get(heading.$static-themes, $theme, --display, --#{$mod}, --text-color); 91 color: props.get(
92 heading.$static-themes,
93 $theme,
94 --display,
95 --#{$mod},
96 --text-color
97 );
86 } 98 }
87 } 99 }
88 } 100 }
diff --git a/src/scopes/_implicit.scss b/src/scopes/_implicit.scss
index 728fd22..f8c575d 100644
--- a/src/scopes/_implicit.scss
+++ b/src/scopes/_implicit.scss
@@ -1,21 +1,21 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:math'; 2@use "sass:math";
3@use 'sass:meta'; 3@use "sass:meta";
4@use 'sass:string'; 4@use "sass:string";
5@use 'pkg:iro-sass/src/bem'; 5@use "pkg:iro-sass/bem";
6@use 'pkg:iro-sass/src/props'; 6@use "pkg:iro-sass/props";
7@use '../props' as *; 7@use "../props" as *;
8@use '../core.vars' as core; 8@use "../core.vars" as core;
9 9
10@forward 'implicit.vars'; 10@forward "implicit.vars";
11@use 'implicit.vars' as vars; 11@use "implicit.vars" as vars;
12 12
13@mixin styles { 13@mixin styles {
14 @include materialize-at-root(meta.module-variables('vars')); 14 @include materialize-at-root(meta.module-variables("vars"));
15 15
16 @layer scope { 16 @layer scope {
17 html { 17 html {
18 accent-color: props.get(core.$theme, --accent, --600); 18 accent-color: props.get(core.$theme, --accent, --600);
19 scrollbar-color: props.get(core.$theme, --text-disabled) transparent; 19 scrollbar-color: props.get(core.$theme, --text-disabled) transparent;
20 20
21 &:has(dialog[open]), 21 &:has(dialog[open]),
@@ -26,31 +26,31 @@
26 } 26 }
27 27
28 body { 28 body {
29 padding: 0; 29 padding: 0;
30 margin: 0; 30 margin: 0;
31 font-family: props.get(vars.$body--font-family); 31 font-family: props.get(vars.$body--font-family);
32 font-size: props.get(vars.$body--font-size); 32 font-size: props.get(vars.$body--font-size);
33 font-feature-settings: props.get(vars.$body--feature-settings); 33 font-feature-settings: props.get(vars.$body--feature-settings);
34 line-height: props.get(vars.$body--line-height); 34 line-height: props.get(vars.$body--line-height);
35 color: props.get(core.$theme, --text); 35 color: props.get(core.$theme, --text);
36 background-color: props.get(core.$theme, --bg-base); 36 background-color: props.get(core.$theme, --bg-base);
37 } 37 }
38 38
39 pre, 39 pre,
40 code { 40 code {
41 font-family: props.get(vars.$code--font-family); 41 font-family: props.get(vars.$code--font-family);
42 font-size: props.get(vars.$code--font-size); 42 font-size: props.get(vars.$code--font-size);
43 font-feature-settings: props.get(vars.$code--feature-settings); 43 font-feature-settings: props.get(vars.$code--feature-settings);
44 line-height: props.get(vars.$code--line-height); 44 line-height: props.get(vars.$code--line-height);
45 } 45 }
46 46
47 pre { 47 pre {
48 margin: 0; 48 margin: 0;
49 overflow-x: auto; 49 overflow-x: auto;
50 50
51 code { 51 code {
52 font-size: 1em; 52 font-size: 1em;
53 color: currentColor; 53 color: currentColor;
54 } 54 }
55 } 55 }
56 56
@@ -60,13 +60,13 @@
60 h4, 60 h4,
61 h5, 61 h5,
62 h6 { 62 h6 {
63 margin-block: props.get(vars.$heading--margin-bs) 0; 63 margin-block: props.get(vars.$heading--margin-bs) 0;
64 font-family: props.get(vars.$heading--font-family); 64 font-family: props.get(vars.$heading--font-family);
65 font-size: props.get(vars.$heading--font-size); 65 font-size: props.get(vars.$heading--font-size);
66 font-weight: props.get(vars.$heading--font-weight); 66 font-weight: props.get(vars.$heading--font-weight);
67 font-feature-settings: props.get(vars.$heading--feature-settings); 67 font-feature-settings: props.get(vars.$heading--feature-settings);
68 line-height: props.get(vars.$heading--line-height); 68 line-height: props.get(vars.$heading--line-height);
69 color: props.get(vars.$heading--color); 69 color: props.get(vars.$heading--color);
70 70
71 & + & { 71 & + & {
72 margin-block-start: props.get(vars.$heading--margin-bs-sibling); 72 margin-block-start: props.get(vars.$heading--margin-bs-sibling);
@@ -91,14 +91,14 @@
91 91
92 ul, 92 ul,
93 ol { 93 ol {
94 padding: 0; 94 padding: 0;
95 margin: 0; 95 margin: 0;
96 list-style: none; 96 list-style: none;
97 } 97 }
98 98
99 li { 99 li {
100 padding: 0; 100 padding: 0;
101 margin: 0; 101 margin: 0;
102 } 102 }
103 103
104 :focus, 104 :focus,
@@ -108,28 +108,27 @@
108 108
109 :link, 109 :link,
110 :visited { 110 :visited {
111 color: currentColor; 111 color: currentColor;
112 text-decoration: none; 112 text-decoration: none;
113 } 113 }
114 114
115
116 button, 115 button,
117 input, 116 input,
118 textarea { 117 textarea {
119 box-sizing: content-box; 118 box-sizing: content-box;
120 padding: 0; 119 padding: 0;
121 margin: 0; 120 margin: 0;
122 font-family: inherit; 121 font-family: inherit;
123 font-size: 1em; 122 font-size: 1em;
124 font-style: inherit; 123 font-style: inherit;
125 font-weight: inherit; 124 font-weight: inherit;
126 line-height: inherit; 125 line-height: inherit;
127 color: currentColor; 126 color: currentColor;
128 text-align: inherit; 127 text-align: inherit;
129 text-transform: inherit; 128 text-transform: inherit;
130 appearance: none; 129 appearance: none;
131 background: none; 130 background: none;
132 border: 0; 131 border: 0;
133 132
134 &::-moz-focus-inner { 133 &::-moz-focus-inner {
135 border: 0; 134 border: 0;
@@ -139,7 +138,7 @@
139 input, 138 input,
140 textarea { 139 textarea {
141 &::placeholder { 140 &::placeholder {
142 color: props.get(core.$theme, --text-mute); 141 color: props.get(core.$theme, --text-mute);
143 opacity: 1; 142 opacity: 1;
144 } 143 }
145 144
@@ -153,15 +152,15 @@
153 } 152 }
154 153
155 hr { 154 hr {
156 block-size: props.get(core.$border-width--thin); 155 block-size: props.get(core.$border-width--thin);
157 margin: 0; 156 margin: 0;
158 background-color: props.get(core.$theme, --border); 157 background-color: props.get(core.$theme, --border);
159 border: 0; 158 border: 0;
160 } 159 }
161 160
162 figure { 161 figure {
163 padding: 0; 162 padding: 0;
164 margin: 0; 163 margin: 0;
165 } 164 }
166 165
167 @each $theme in map.keys(props.get(core.$transparent-colors)) { 166 @each $theme in map.keys(props.get(core.$transparent-colors)) {
diff --git a/src/scopes/_implicit.vars.scss b/src/scopes/_implicit.vars.scss
index 64d4a8f..f0256b0 100644
--- a/src/scopes/_implicit.vars.scss
+++ b/src/scopes/_implicit.vars.scss
@@ -1,26 +1,69 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3 3
4$paragraph--margin-bs: props.def(--s-implicit--paragraph--margin-bs, props.get(core.$size--200)) !default; 4$paragraph--margin-bs: props.def(
5 --s-implicit--paragraph--margin-bs,
6 props.get(core.$size--200)
7) !default;
5 8
6$small--font-size: props.def(--s-implicit--small--font-size, props.get(core.$font-size--75)) !default; 9$small--font-size: props.def(
10 --s-implicit--small--font-size,
11 props.get(core.$font-size--75)
12) !default;
7 13
8$body--font-family: props.def(--s-implicit--body--font-family, props.get(core.$font--standard--family)) !default; 14$body--font-family: props.def(
9$body--line-height: props.def(--s-implicit--body--line-height, props.get(core.$font--standard--line-height)) !default; 15 --s-implicit--body--font-family,
10$body--font-size: props.def(--s-implicit--body--font-size, props.get(core.$font-size--100)); 16 props.get(core.$font--standard--family)
11$body--feature-settings: props.def(--s-implicit--body--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 17) !default;
18$body--line-height: props.def(
19 --s-implicit--body--line-height,
20 props.get(core.$font--standard--line-height)
21) !default;
22$body--font-size: props.def(--s-implicit--body--font-size, props.get(core.$font-size--100));
23$body--feature-settings: props.def(
24 --s-implicit--body--feature-settings,
25 props.get(core.$font--standard--feature-settings)
26) !default;
12 27
13$code--font-family: props.def(--s-implicit--code--font-family, props.get(core.$font--mono--family)) !default; 28$code--font-family: props.def(
14$code--line-height: props.def(--s-implicit--code--line-height, props.get(core.$font--mono--line-height)) !default; 29 --s-implicit--code--font-family,
15$code--font-size: props.def(--s-implicit--code--font-size, .93em); 30 props.get(core.$font--mono--family)
16$code--feature-settings: props.def(--s-implicit--code--feature-settings, props.get(core.$font--mono--feature-settings)) !default; 31) !default;
32$code--line-height: props.def(
33 --s-implicit--code--line-height,
34 props.get(core.$font--mono--line-height)
35) !default;
36$code--font-size: props.def(--s-implicit--code--font-size, 0.93em);
37$code--feature-settings: props.def(
38 --s-implicit--code--feature-settings,
39 props.get(core.$font--mono--feature-settings)
40) !default;
17 41
18$heading--margin-bs: props.def(--s-implicit--heading--margin-bs, props.get(core.$size--700)) !default; 42$heading--margin-bs: props.def(
19$heading--margin-bs-sibling: props.def(--s-implicit--heading--margin-bs-sibling, props.get(core.$size--325)) !default; 43 --s-implicit--heading--margin-bs,
20$heading--font-family: props.def(--s-implicit--heading--font-family, props.get(core.$font--standard--family)) !default; 44 props.get(core.$size--700)
21$heading--line-height: props.def(--s-implicit--heading--line-height, props.get(core.$font--standard--line-height)) !default; 45) !default;
22$heading--font-weight: props.def(--s-implicit--heading--font-weight, bold) !default; 46$heading--margin-bs-sibling: props.def(
23$heading--font-size: props.def(--s-implicit--heading--font-size, props.get(core.$font-size--100)); 47 --s-implicit--heading--margin-bs-sibling,
24$heading--feature-settings: props.def(--s-implicit--heading--feature-settings, props.get(core.$font--standard--feature-settings)) !default; 48 props.get(core.$size--325)
49) !default;
50$heading--font-family: props.def(
51 --s-implicit--heading--font-family,
52 props.get(core.$font--standard--family)
53) !default;
54$heading--line-height: props.def(
55 --s-implicit--heading--line-height,
56 props.get(core.$font--standard--line-height)
57) !default;
58$heading--font-weight: props.def(--s-implicit--heading--font-weight, bold) !default;
59$heading--font-size: props.def(--s-implicit--heading--font-size, props.get(core.$font-size--100));
60$heading--feature-settings: props.def(
61 --s-implicit--heading--feature-settings,
62 props.get(core.$font--standard--feature-settings)
63) !default;
25 64
26$heading--color: props.def(--s-implicit--heading--color, props.get(core.$theme, --heading), 'color') !default; 65$heading--color: props.def(
66 --s-implicit--heading--color,
67 props.get(core.$theme, --heading),
68 "color"
69) !default;
diff --git a/src/scopes/_links.scss b/src/scopes/_links.scss
index 8498487..fea78f1 100644
--- a/src/scopes/_links.scss
+++ b/src/scopes/_links.scss
@@ -1,78 +1,79 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:meta'; 2@use "sass:meta";
3@use 'sass:string'; 3@use "sass:string";
4@use 'pkg:iro-sass/src/bem'; 4@use "pkg:iro-sass/bem";
5@use 'pkg:iro-sass/src/props'; 5@use "pkg:iro-sass/props";
6@use '../props' as *; 6@use "../props" as *;
7 7
8@forward 'links.vars'; 8@forward "links.vars";
9@use 'links.vars' as vars; 9@use "links.vars" as vars;
10 10
11@mixin styles { 11@mixin styles {
12 @include materialize-at-root(meta.module-variables('vars')); 12 @include materialize-at-root(meta.module-variables("vars"));
13 13
14 @include bem.scope('links') { 14 @include bem.scope("links") {
15 :link, 15 :link,
16 :visited { 16 :visited {
17 color: currentColor; 17 color: currentColor;
18 text-decoration: underline; 18 text-decoration: underline;
19 text-decoration-thickness: props.get(vars.$underline-width); 19 text-decoration-thickness: props.get(vars.$underline-width);
20 text-decoration-color: props.get(vars.$underline-color); 20 text-decoration-color: props.get(vars.$underline-color);
21 border-radius: props.get(vars.$rounding-sm); 21 border-radius: props.get(vars.$rounding-sm);
22 box-decoration-break: clone; 22 box-decoration-break: clone;
23 23
24 &:hover { 24 &:hover {
25 text-decoration: underline; 25 text-decoration: underline;
26 text-decoration-thickness: props.get(vars.$hover--underline-width); 26 text-decoration-thickness: props.get(vars.$hover--underline-width);
27 text-decoration-skip-ink: none; 27 text-decoration-skip-ink: none;
28 } 28 }
29 29
30 &:focus-visible { 30 &:focus-visible {
31 color: props.get(vars.$key-focus--text-color); 31 color: props.get(vars.$key-focus--text-color);
32 text-decoration: none; 32 text-decoration: none;
33 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width); 33 outline: props.get(vars.$key-focus--border-color) solid
34 box-shadow: 34 props.get(vars.$key-focus--border-width);
35 0 35 box-shadow: 0 0 0
36 0 36 calc(
37 0 37 props.get(vars.$key-focus--border-width) +
38 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 38 props.get(vars.$key-focus--outline-width)
39 )
39 props.get(vars.$key-focus--outline-color); 40 props.get(vars.$key-focus--outline-color);
40 } 41 }
41 } 42 }
42 43
43 @include bem.modifier('invisible') { 44 @include bem.modifier("invisible") {
44 :link, 45 :link,
45 :visited { 46 :visited {
46 text-decoration: none; 47 text-decoration: none;
47 } 48 }
48 } 49 }
49 50
50 @include bem.modifier('colored') { 51 @include bem.modifier("colored") {
51 :link { 52 :link {
52 color: props.get(vars.$colored--text-color); 53 color: props.get(vars.$colored--text-color);
53 text-decoration-color: props.get(vars.$colored--underline-color); 54 text-decoration-color: props.get(vars.$colored--underline-color);
54 55
55 &:hover { 56 &:hover {
56 color: props.get(vars.$colored--hover--text-color); 57 color: props.get(vars.$colored--hover--text-color);
57 } 58 }
58 } 59 }
59 60
60 :visited { 61 :visited {
61 color: props.get(vars.$colored--visited--text-color); 62 color: props.get(vars.$colored--visited--text-color);
62 text-decoration-color: props.get(vars.$colored--visited--underline-color); 63 text-decoration-color: props.get(vars.$colored--visited--underline-color);
63 64
64 &:hover { 65 &:hover {
65 color: props.get(vars.$colored--visited--hover--text-color); 66 color: props.get(vars.$colored--visited--hover--text-color);
66 } 67 }
67 } 68 }
68 } 69 }
69 70
70 @include bem.modifier('mark-external') { 71 @include bem.modifier("mark-external") {
71 :link, 72 :link,
72 :visited { 73 :visited {
73 &[href^='http'] { 74 &[href^="http"] {
74 &::after { 75 &::after {
75 content: ' ↗'; 76 content: " ↗";
76 } 77 }
77 } 78 }
78 } 79 }
@@ -82,21 +83,30 @@
82 @include bem.modifier(string.slice($theme, 3)) { 83 @include bem.modifier(string.slice($theme, 3)) {
83 :link, 84 :link,
84 :visited { 85 :visited {
85 color: props.get(vars.$static-themes, $theme, --text-color); 86 color: props.get(vars.$static-themes, $theme, --text-color);
86 text-decoration-color: props.get(vars.$static-themes, $theme, --underline-color); 87 text-decoration-color: props.get(
88 vars.$static-themes,
89 $theme,
90 --underline-color
91 );
87 92
88 &:hover { 93 &:hover {
89 color: props.get(vars.$static-themes, $theme, --hover, --text-color); 94 color: props.get(vars.$static-themes, $theme, --hover, --text-color);
90 } 95 }
91 96
92 &:focus-visible { 97 &:focus-visible {
93 color: props.get(vars.$static-themes, $theme, --key-focus, --text-color); 98 color: props.get(vars.$static-themes, $theme, --key-focus, --text-color);
94 outline-color: props.get(vars.$static-themes, $theme, --key-focus, --border-color); 99 outline-color: props.get(
95 box-shadow: 100 vars.$static-themes,
96 0 101 $theme,
97 0 102 --key-focus,
98 0 103 --border-color
99 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 104 );
105 box-shadow: 0 0 0
106 calc(
107 props.get(vars.$key-focus--border-width) +
108 props.get(vars.$key-focus--outline-width)
109 )
100 props.get(vars.$static-themes, $theme, --key-focus, --outline-color); 110 props.get(vars.$static-themes, $theme, --key-focus, --outline-color);
101 } 111 }
102 } 112 }
@@ -106,21 +116,26 @@
106 :has(img) { 116 :has(img) {
107 img { 117 img {
108 margin-inline: calc(-1 * props.get(vars.$key-focus--border-offset)); 118 margin-inline: calc(-1 * props.get(vars.$key-focus--border-offset));
109 border: props.get(vars.$key-focus--border-offset) solid transparent; 119 border: props.get(vars.$key-focus--border-offset) solid transparent;
110 border-radius: calc(props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)); 120 border-radius: calc(
121 props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)
122 );
111 } 123 }
112 124
113 &:link, 125 &:link,
114 &:visited { 126 &:visited {
115 &:focus-visible { 127 &:focus-visible {
116 outline: none; 128 outline: none;
117 box-shadow: none; 129 box-shadow: none;
118 130
119 img { 131 img {
120 outline: props.get(vars.$key-focus--border-color) solid 132 outline: props.get(vars.$key-focus--border-color) solid
121 props.get(vars.$key-focus--border-width); 133 props.get(vars.$key-focus--border-width);
122 box-shadow: 0 0 0 134 box-shadow: 0 0 0
123 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) 135 calc(
136 props.get(vars.$key-focus--border-width) +
137 props.get(vars.$key-focus--outline-width)
138 )
124 props.get(vars.$key-focus--outline-color); 139 props.get(vars.$key-focus--outline-color);
125 } 140 }
126 } 141 }
diff --git a/src/scopes/_links.vars.scss b/src/scopes/_links.vars.scss
index cd80e4c..c06789b 100644
--- a/src/scopes/_links.vars.scss
+++ b/src/scopes/_links.vars.scss
@@ -1,49 +1,106 @@
1@use 'sass:map'; 1@use "sass:map";
2@use 'sass:string'; 2@use "sass:string";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../core.vars' as core; 4@use "../core.vars" as core;
5 5
6$rounding: props.def(--s-links--rounding, props.get(core.$rounding)) !default; 6$rounding: props.def(--s-links--rounding, props.get(core.$rounding)) !default;
7$rounding-sm: props.def(--s-links--rounding-sm, props.get(core.$rounding--sm)) !default; 7$rounding-sm: props.def(--s-links--rounding-sm, props.get(core.$rounding--sm)) !default;
8$underline-width: props.def(--s-links--underline-width, props.get(core.$border-width--thin)) !default; 8$underline-width: props.def(
9$hover--underline-width: props.def(--s-links--hover--underline-width, props.get(core.$border-width--medium)) !default; 9 --s-links--underline-width,
10 props.get(core.$border-width--thin)
11) !default;
12$hover--underline-width: props.def(
13 --s-links--hover--underline-width,
14 props.get(core.$border-width--medium)
15) !default;
10 16
11$key-focus--border-width: props.def(--s-links--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; 17$key-focus--border-width: props.def(
12$key-focus--border-offset: props.def(--s-links--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; 18 --s-links--key-focus--border-width,
13$key-focus--outline-width: props.def(--s-links--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; 19 props.get(core.$key-focus--border-width)
20) !default;
21$key-focus--border-offset: props.def(
22 --s-links--key-focus--border-offset,
23 props.get(core.$key-focus--border-offset)
24) !default;
25$key-focus--outline-width: props.def(
26 --s-links--key-focus--outline-width,
27 props.get(core.$key-focus--outline-width)
28) !default;
14 29
15$underline-color: props.def(--s-links--underline-color, props.get(core.$theme, --text-mute-more), 'color') !default; 30$underline-color: props.def(
31 --s-links--underline-color,
32 props.get(core.$theme, --text-mute-more),
33 "color"
34) !default;
16 35
17$colored--text-color: props.def(--s-links--colored--text-color, props.get(core.$theme, --accent, --1100), 'color') !default; 36$colored--text-color: props.def(
18$colored--underline-color: props.def(--s-links--colored--underline-color, props.get(core.$theme, --accent, --600), 'color') !default; 37 --s-links--colored--text-color,
19$colored--hover--text-color: props.def(--s-links--colored--hover--text-color, props.get(core.$theme, --accent, --1300), 'color') !default; 38 props.get(core.$theme, --accent, --1100),
39 "color"
40) !default;
41$colored--underline-color: props.def(
42 --s-links--colored--underline-color,
43 props.get(core.$theme, --accent, --600),
44 "color"
45) !default;
46$colored--hover--text-color: props.def(
47 --s-links--colored--hover--text-color,
48 props.get(core.$theme, --accent, --1300),
49 "color"
50) !default;
20 51
21$colored--visited--text-color: props.def(--s-links--colored--visited--text-color, props.get(core.$theme, --purple, --1100), 'color') !default; 52$colored--visited--text-color: props.def(
22$colored--visited--underline-color: props.def(--s-links--colored--visited--underline-color, props.get(core.$theme, --purple, --600), 'color') !default; 53 --s-links--colored--visited--text-color,
23$colored--visited--hover--text-color: props.def(--s-links--colored--visited--hover--text-color, props.get(core.$theme, --purple, --1300), 'color') !default; 54 props.get(core.$theme, --purple, --1100),
55 "color"
56) !default;
57$colored--visited--underline-color: props.def(
58 --s-links--colored--visited--underline-color,
59 props.get(core.$theme, --purple, --600),
60 "color"
61) !default;
62$colored--visited--hover--text-color: props.def(
63 --s-links--colored--visited--hover--text-color,
64 props.get(core.$theme, --purple, --1300),
65 "color"
66) !default;
24 67
25$key-focus--text-color: props.def(--s-links--key-focus--text-color, props.get(core.$theme, --focus, --text), 'color') !default; 68$key-focus--text-color: props.def(
26$key-focus--border-color: props.def(--s-links--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 69 --s-links--key-focus--text-color,
27$key-focus--outline-color: props.def(--s-links--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 70 props.get(core.$theme, --focus, --text),
71 "color"
72) !default;
73$key-focus--border-color: props.def(
74 --s-links--key-focus--border-color,
75 props.get(core.$theme, --focus, --border),
76 "color"
77) !default;
78$key-focus--outline-color: props.def(
79 --s-links--key-focus--outline-color,
80 props.get(core.$theme, --focus, --outline),
81 "color"
82) !default;
28 83
29$static-themes: props.def(--s-links, (), 'color'); 84$static-themes: props.def(--s-links, (), "color");
30@each $theme in map.keys(props.get(core.$transparent-colors)) { 85@each $theme in map.keys(props.get(core.$transparent-colors)) {
31 $link-theme: --static-#{string.slice($theme, 3)}; 86 $link-theme: --static-#{string.slice($theme, 3)};
32 87
33 $static-themes: props.merge($static-themes, ( 88 $static-themes: props.merge(
34 $link-theme: ( 89 $static-themes,
35 --text-color: currentColor, 90 (
36 --underline-color: props.get(core.$transparent-colors, $theme, --500), 91 $link-theme: (
92 --text-color: currentColor,
93 --underline-color: props.get(core.$transparent-colors, $theme, --500),
94 --hover: (
95 --text-color: props.get(core.$transparent-colors, $theme, --900),
96 ),
37 97
38 --hover: ( 98 --key-focus: (
39 --text-color: props.get(core.$transparent-colors, $theme, --900), 99 --text-color: props.get(core.$transparent-colors, $theme, --900),
40 ), 100 --border-color: props.get(core.$transparent-colors, $theme, --900),
41 101 --outline-color: props.get(core.$transparent-colors, $theme, --300),
42 --key-focus: ( 102 ),
43 --text-color: props.get(core.$transparent-colors, $theme, --900), 103 ),
44 --border-color: props.get(core.$transparent-colors, $theme, --900),
45 --outline-color: props.get(core.$transparent-colors, $theme, --300),
46 ),
47 ) 104 )
48 )); 105 );
49} 106}
diff --git a/src/scopes/_lists.scss b/src/scopes/_lists.scss
index 0285bb0..7b9ddbc 100644
--- a/src/scopes/_lists.scss
+++ b/src/scopes/_lists.scss
@@ -1,20 +1,20 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5@use '../core.vars' as core; 5@use "../core.vars" as core;
6 6
7@forward 'lists.vars'; 7@forward "lists.vars";
8@use 'lists.vars' as vars; 8@use "lists.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.scope('lists') { 13 @include bem.scope("lists") {
14 ul, 14 ul,
15 ol { 15 ol {
16 padding-inline-start: props.get(vars.$indent); 16 padding-inline-start: props.get(vars.$indent);
17 margin-block-start: props.get(vars.$margin-bs); 17 margin-block-start: props.get(vars.$margin-bs);
18 18
19 ul, 19 ul,
20 ol { 20 ol {
@@ -31,22 +31,22 @@
31 } 31 }
32 32
33 dl { 33 dl {
34 padding: 0; 34 padding: 0;
35 margin-block: props.get(vars.$margin-bs) 0; 35 margin-block: props.get(vars.$margin-bs) 0;
36 margin-inline: 0; 36 margin-inline: 0;
37 } 37 }
38 38
39 dt { 39 dt {
40 font-weight: bold; 40 font-weight: bold;
41 color: props.get(core.$theme, --heading); 41 color: props.get(core.$theme, --heading);
42 } 42 }
43 43
44 dd { 44 dd {
45 margin-block: 0; 45 margin-block: 0;
46 margin-inline: props.get(vars.$indent) 0; 46 margin-inline: props.get(vars.$indent) 0;
47 } 47 }
48 48
49 @include bem.modifier('compact') { 49 @include bem.modifier("compact") {
50 ul, 50 ul,
51 ol { 51 ol {
52 padding-inline-start: calc(props.get(vars.$compact--indent) - 3px); 52 padding-inline-start: calc(props.get(vars.$compact--indent) - 3px);
diff --git a/src/scopes/_lists.vars.scss b/src/scopes/_lists.vars.scss
index e40f194..57fcc54 100644
--- a/src/scopes/_lists.vars.scss
+++ b/src/scopes/_lists.vars.scss
@@ -1,8 +1,11 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use '../core.vars' as core; 2@use "../core.vars" as core;
3@use './implicit.vars' as implicit; 3@use "./implicit.vars" as implicit;
4 4
5$indent: props.def(--s-lists--indent, calc(props.get(core.$list--indent) + 1em)) !default; 5$indent: props.def(--s-lists--indent, calc(props.get(core.$list--indent) + 1em)) !default;
6$margin-bs: props.def(--s-lists--margin-bs, props.get(implicit.$paragraph--margin-bs)) !default; 6$margin-bs: props.def(--s-lists--margin-bs, props.get(implicit.$paragraph--margin-bs)) !default;
7 7
8$compact--indent: props.def(--s-lists--compact--indent, props.get(core.$list--compact-indent)) !default; 8$compact--indent: props.def(
9 --s-lists--compact--indent,
10 props.get(core.$list--compact-indent)
11) !default;
diff --git a/src/scopes/_tables.scss b/src/scopes/_tables.scss
index cb3a10c..7442874 100644
--- a/src/scopes/_tables.scss
+++ b/src/scopes/_tables.scss
@@ -1,40 +1,40 @@
1@use 'sass:meta'; 1@use "sass:meta";
2@use 'pkg:iro-sass/src/bem'; 2@use "pkg:iro-sass/bem";
3@use 'pkg:iro-sass/src/props'; 3@use "pkg:iro-sass/props";
4@use '../props' as *; 4@use "../props" as *;
5@use '../objects/table.vars' as table; 5@use "../objects/table.vars" as table;
6 6
7@forward 'tables.vars'; 7@forward "tables.vars";
8@use 'tables.vars' as vars; 8@use "tables.vars" as vars;
9 9
10@mixin styles { 10@mixin styles {
11 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables("vars"));
12 12
13 @include bem.scope('tables') { 13 @include bem.scope("tables") {
14 table { 14 table {
15 margin-block-start: props.get(vars.$margin-bs); 15 margin-block-start: props.get(vars.$margin-bs);
16 border-spacing: 0; 16 border-spacing: 0;
17 border-collapse: separate; 17 border-collapse: separate;
18 } 18 }
19 19
20 th { 20 th {
21 padding-block: props.get(table.$pad-b); 21 padding-block: props.get(table.$pad-b);
22 padding-inline: props.get(table.$pad-i); 22 padding-inline: props.get(table.$pad-i);
23 font-family: props.get(table.$heading--font-family); 23 font-family: props.get(table.$heading--font-family);
24 font-size: props.get(table.$heading--font-size); 24 font-size: props.get(table.$heading--font-size);
25 font-weight: props.get(table.$heading--font-weight); 25 font-weight: props.get(table.$heading--font-weight);
26 color: props.get(table.$heading-color); 26 color: props.get(table.$heading-color);
27 text-align: start; 27 text-align: start;
28 text-transform: props.get(table.$heading--text-transform); 28 text-transform: props.get(table.$heading--text-transform);
29 letter-spacing: props.get(table.$heading--letter-spacing); 29 letter-spacing: props.get(table.$heading--letter-spacing);
30 } 30 }
31 31
32 td { 32 td {
33 padding-block: props.get(table.$pad-b); 33 padding-block: props.get(table.$pad-b);
34 padding-inline: props.get(table.$pad-i); 34 padding-inline: props.get(table.$pad-i);
35 border-color: props.get(table.$border-color); 35 border-color: props.get(table.$border-color);
36 border-style: solid; 36 border-style: solid;
37 border-width: 0; 37 border-width: 0;
38 border-block-start-width: props.get(table.$border-width); 38 border-block-start-width: props.get(table.$border-width);
39 } 39 }
40 40
@@ -46,7 +46,7 @@
46 } 46 }
47 } 47 }
48 48
49 @include bem.modifier('flush') { 49 @include bem.modifier("flush") {
50 th, 50 th,
51 td { 51 td {
52 &:first-child { 52 &:first-child {
@@ -59,7 +59,7 @@
59 } 59 }
60 } 60 }
61 61
62 @include bem.modifier('box') { 62 @include bem.modifier("box") {
63 td { 63 td {
64 background-color: props.get(table.$box--bg-color); 64 background-color: props.get(table.$box--bg-color);
65 65
diff --git a/src/scopes/_tables.vars.scss b/src/scopes/_tables.vars.scss
index dfb4c76..12d0a0c 100644
--- a/src/scopes/_tables.vars.scss
+++ b/src/scopes/_tables.vars.scss
@@ -1,4 +1,4 @@
1@use 'pkg:iro-sass/src/props'; 1@use "pkg:iro-sass/props";
2@use 'implicit.vars' as implicit; 2@use "implicit.vars" as implicit;
3 3
4$margin-bs: props.def(--s-tables--margin-bs, props.get(implicit.$paragraph--margin-bs)) !default; 4$margin-bs: props.def(--s-tables--margin-bs, props.get(implicit.$paragraph--margin-bs)) !default;
diff --git a/src_demo/components/_box.scss b/src_demo/components/_box.scss
index 20e3bcd..2a88480 100644
--- a/src_demo/components/_box.scss
+++ b/src_demo/components/_box.scss
@@ -1,9 +1,9 @@
1@use 'pkg:iro-sass/src/bem'; 1@use "pkg:iro-sass/bem";
2@use 'pkg:iro-sass/src/props'; 2@use "pkg:iro-sass/props";
3@use '../../src/core.vars'; 3@use "../../src/core.vars";
4 4
5@include bem.component('box') { 5@include bem.component("box") {
6 padding: 2em; 6 padding: 2em;
7 margin-block: 2em; 7 margin-block: 2em;
8 border: 1px solid props.get(core.$theme, --border); 8 border: 1px solid props.get(core.$theme, --border);
9} 9}
diff --git a/src_demo/components/_content.scss b/src_demo/components/_content.scss
index acfccbe..acd32a5 100644
--- a/src_demo/components/_content.scss
+++ b/src_demo/components/_content.scss
@@ -1,6 +1,6 @@
1@use 'pkg:iro-sass/src/bem'; 1@use "pkg:iro-sass/bem";
2 2
3@include bem.component('content') { 3@include bem.component("content") {
4 grid-area: content; 4 grid-area: content;
5 overflow: auto; 5 overflow: auto;
6} 6}
diff --git a/src_demo/components/_sidebar.scss b/src_demo/components/_sidebar.scss
index 7643d07..4542847 100644
--- a/src_demo/components/_sidebar.scss
+++ b/src_demo/components/_sidebar.scss
@@ -1,7 +1,7 @@
1@use 'pkg:iro-sass/src/bem'; 1@use "pkg:iro-sass/bem";
2 2
3@include bem.component('sidebar') { 3@include bem.component("sidebar") {
4 grid-area: sidebar; 4 grid-area: sidebar;
5 min-inline-size: 15em; 5 min-inline-size: 15em;
6 min-block-size: 0; 6 min-block-size: 0;
7} 7}
diff --git a/src_demo/components/_view.scss b/src_demo/components/_view.scss
index 8d80995..7471cdb 100644
--- a/src_demo/components/_view.scss
+++ b/src_demo/components/_view.scss
@@ -1,9 +1,9 @@
1@use 'pkg:iro-sass/src/bem'; 1@use "pkg:iro-sass/bem";
2 2
3@include bem.component('view') { 3@include bem.component("view") {
4 display: none; 4 display: none;
5 5
6 &:target { 6 &:target {
7 display: block; 7 display: block;
8 } 8 }
9} 9}