summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/_functions.scss6
-rw-r--r--src/_iro-design.scss3
-rw-r--r--src/_layers.scss3
-rw-r--r--src/_themes.scss1
-rw-r--r--src/_utils.scss41
-rw-r--r--src/layouts/_button-group.scss37
-rw-r--r--src/layouts/_button-group.vars.scss14
-rw-r--r--src/layouts/_container.vars.scss12
-rw-r--r--src/layouts/_split-view.scss29
-rw-r--r--src/layouts/_split-view.vars.scss3
-rw-r--r--src/objects/_avatar.scss11
-rw-r--r--src/objects/_avatar.vars.scss6
-rw-r--r--src/objects/_card.scss31
-rw-r--r--src/objects/_divider.scss30
-rw-r--r--src/objects/_divider.vars.scss8
-rw-r--r--src/objects/_figure.scss26
-rw-r--r--src/objects/_figure.vars.scss9
-rw-r--r--src/objects/_heading.scss2
-rw-r--r--src/objects/_navbar.vars.scss2
-rw-r--r--src/objects/_placeholders.scss22
-rw-r--r--src/objects/_placeholders.vars.scss6
-rw-r--r--src/objects/_tabbar.scss64
-rw-r--r--src/scopes/_body.scss1
-rw-r--r--src/scopes/_body.vars.scss1
-rw-r--r--src/scopes/_figures.scss21
-rw-r--r--src/scopes/_figures.vars.scss10
-rw-r--r--src/scopes/_implicit.scss21
-rw-r--r--src/scopes/_links.vars.scss2
28 files changed, 344 insertions, 78 deletions
diff --git a/src/_functions.scss b/src/_functions.scss
index 62caf8c..b41609e 100644
--- a/src/_functions.scss
+++ b/src/_functions.scss
@@ -23,10 +23,14 @@
23 $color: list.nth($level, 1); 23 $color: list.nth($level, 1);
24 $y: 0; 24 $y: 0;
25 $c: 1; 25 $c: 1;
26 $h: 0deg;
26 27
27 @if list.length($level) > 1 { 28 @if list.length($level) > 1 {
28 $c: list.nth($level, 2); 29 $c: list.nth($level, 2);
29 } 30 }
31 @if list.length($level) > 2 {
32 $h: list.nth($level, 3);
33 }
30 34
31 @if meta.type-of($color) != 'color' { 35 @if meta.type-of($color) != 'color' {
32 $y: apca.reverse($color, $ref-y); 36 $y: apca.reverse($color, $ref-y);
@@ -38,7 +42,7 @@
38 $y: $ref-y; 42 $y: $ref-y;
39 } 43 }
40 44
41 $color: oklch($l ($c * color.channel($base-lch, 'chroma')) color.channel($base-lch, 'hue')); 45 $color: oklch($l ($c * color.channel($base-lch, 'chroma')) ($h + color.channel($base-lch, 'hue')));
42 } @else { 46 } @else {
43 $y: apca.sRGB_to_Y($color); 47 $y: apca.sRGB_to_Y($color);
44 } 48 }
diff --git a/src/_iro-design.scss b/src/_iro-design.scss
index 2010a2d..bad29c5 100644
--- a/src/_iro-design.scss
+++ b/src/_iro-design.scss
@@ -23,6 +23,7 @@ $breakpoints: (
23@forward 'config' as config--*; 23@forward 'config' as config--*;
24@forward 'props' as props--*; 24@forward 'props' as props--*;
25@forward 'core' as core--*; 25@forward 'core' as core--*;
26@forward 'layers' as layers--*;
26 27
27@forward 'layouts/button-group' as l-button-group--*; 28@forward 'layouts/button-group' as l-button-group--*;
28@forward 'layouts/card-list' as l-card-list--*; 29@forward 'layouts/card-list' as l-card-list--*;
@@ -53,6 +54,7 @@ $breakpoints: (
53@forward 'objects/checkbox' as o-checkbox--*; 54@forward 'objects/checkbox' as o-checkbox--*;
54@forward 'objects/divider' as o-divider--*; 55@forward 'objects/divider' as o-divider--*;
55@forward 'objects/emoji' as o-emoji--*; 56@forward 'objects/emoji' as o-emoji--*;
57@forward 'objects/figure' as o-figure--*;
56@forward 'objects/field-label' as o-field-label--*; 58@forward 'objects/field-label' as o-field-label--*;
57@forward 'objects/heading' as o-heading--*; 59@forward 'objects/heading' as o-heading--*;
58@forward 'objects/icon' as o-icon--*; 60@forward 'objects/icon' as o-icon--*;
@@ -60,6 +62,7 @@ $breakpoints: (
60@forward 'objects/menu' as o-menu--*; 62@forward 'objects/menu' as o-menu--*;
61@forward 'objects/navbar' as o-navbar--*; 63@forward 'objects/navbar' as o-navbar--*;
62@forward 'objects/palette' as o-palette--*; 64@forward 'objects/palette' as o-palette--*;
65@forward 'objects/placeholders' as o-placeholders--*;
63@forward 'objects/popover' as o-popover--*; 66@forward 'objects/popover' as o-popover--*;
64@forward 'objects/radio' as o-radio--*; 67@forward 'objects/radio' as o-radio--*;
65@forward 'objects/side-nav' as o-side-nav--*; 68@forward 'objects/side-nav' as o-side-nav--*;
diff --git a/src/_layers.scss b/src/_layers.scss
new file mode 100644
index 0000000..cc3bb50
--- /dev/null
+++ b/src/_layers.scss
@@ -0,0 +1,3 @@
1@mixin styles {
2 @layer scope, theme, object, layout, component, utility;
3}
diff --git a/src/_themes.scss b/src/_themes.scss
index 32b617b..caf1e80 100644
--- a/src/_themes.scss
+++ b/src/_themes.scss
@@ -1,4 +1,5 @@
1@use 'sass:map'; 1@use 'sass:map';
2@use 'sass:string';
2@use 'iro-sass/src/bem'; 3@use 'iro-sass/src/bem';
3@use 'iro-sass/src/props'; 4@use 'iro-sass/src/props';
4@use 'include-media/dist/include-media' as media; 5@use 'include-media/dist/include-media' as media;
diff --git a/src/_utils.scss b/src/_utils.scss
index e90aa57..445e5c6 100644
--- a/src/_utils.scss
+++ b/src/_utils.scss
@@ -1,4 +1,5 @@
1@use 'sass:map'; 1@use 'sass:map';
2@use 'sass:string';
2@use 'iro-sass/src/bem'; 3@use 'iro-sass/src/bem';
3@use 'iro-sass/src/props'; 4@use 'iro-sass/src/props';
4@use 'include-media/dist/include-media' as media; 5@use 'include-media/dist/include-media' as media;
@@ -9,12 +10,12 @@
9/* stylelint-disable-next-line scss/dollar-variable-pattern */ 10/* stylelint-disable-next-line scss/dollar-variable-pattern */
10$-dirs: ( 11$-dirs: (
11 '': '', 12 '': '',
13 'b': '-block',
12 'bs': '-block-start', 14 'bs': '-block-start',
13 'be': '-block-end', 15 'be': '-block-end',
14 'b': '-block', 16 'i': '-inline',
15 'is': '-inline-start', 17 'is': '-inline-start',
16 'ie': '-inline-end', 18 'ie': '-inline-end',
17 'i': '-inline',
18) !default; 19) !default;
19 20
20/* stylelint-disable-next-line scss/dollar-variable-pattern */ 21/* stylelint-disable-next-line scss/dollar-variable-pattern */
@@ -132,6 +133,10 @@ $-sizes: (
132 align-items: flex-end; 133 align-items: flex-end;
133 } 134 }
134 135
136 @include bem.utility('ac-center') {
137 align-content: center;
138 }
139
135 @include bem.utility('jc-center') { 140 @include bem.utility('jc-center') {
136 justify-content: center; 141 justify-content: center;
137 } 142 }
@@ -154,18 +159,50 @@ $-sizes: (
154 159
155 @include bem.utility('c-heading') { 160 @include bem.utility('c-heading') {
156 color: props.get(vars.$theme, --heading); 161 color: props.get(vars.$theme, --heading);
162
163 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
164 $theme-name: static-#{string.slice($theme, 3)};
165
166 @include bem.at-theme($theme-name) {
167 color: props.get(vars.$transparent-colors, $theme, --900);
168 }
169 }
157 } 170 }
158 171
159 @include bem.utility('c-text') { 172 @include bem.utility('c-text') {
160 color: props.get(vars.$theme, --text); 173 color: props.get(vars.$theme, --text);
174
175 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
176 $theme-name: static-#{string.slice($theme, 3)};
177
178 @include bem.at-theme($theme-name) {
179 color: props.get(vars.$transparent-colors, $theme, --800);
180 }
181 }
161 } 182 }
162 183
163 @include bem.utility('c-mute') { 184 @include bem.utility('c-mute') {
164 color: props.get(vars.$theme, --text-mute); 185 color: props.get(vars.$theme, --text-mute);
186
187 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
188 $theme-name: static-#{string.slice($theme, 3)};
189
190 @include bem.at-theme($theme-name) {
191 color: props.get(vars.$transparent-colors, $theme, --700);
192 }
193 }
165 } 194 }
166 195
167 @include bem.utility('c-mute-more') { 196 @include bem.utility('c-mute-more') {
168 color: props.get(vars.$theme, --text-mute-more); 197 color: props.get(vars.$theme, --text-mute-more);
198
199 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
200 $theme-name: static-#{string.slice($theme, 3)};
201
202 @include bem.at-theme($theme-name) {
203 color: props.get(vars.$transparent-colors, $theme, --600);
204 }
205 }
169 } 206 }
170 207
171 @each $dir, $prop in (is: inline-size, bs: block-size) { 208 @each $dir, $prop in (is: inline-size, bs: block-size) {
diff --git a/src/layouts/_button-group.scss b/src/layouts/_button-group.scss
index c51ae7e..b0a3c8e 100644
--- a/src/layouts/_button-group.scss
+++ b/src/layouts/_button-group.scss
@@ -5,13 +5,46 @@
5 5
6@forward 'button-group.vars'; 6@forward 'button-group.vars';
7@use 'button-group.vars' as vars; 7@use 'button-group.vars' as vars;
8@use '../objects/action-button.vars' as action-button;
8 9
9@mixin styles { 10@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars')); 11 @include materialize-at-root(meta.module-variables('vars'));
11 12
12 @include bem.layout('button-group') { 13 @include bem.layout('button-group') {
13 display: flex; 14 display: inline-flex;
14 flex-wrap: wrap; 15 flex-wrap: wrap;
15 gap: props.get(vars.$spacing); 16 gap: props.get(vars.$gap);
17
18 @each $mod, $size in vars.$sizes {
19 @include bem.modifier($mod) {
20 gap: props.get($size);
21 }
22 }
23
24 @include bem.modifier('align-block') {
25 margin-inline: calc(-1 * props.get(action-button.$pad-i) - props.get(action-button.$border-width));
26
27 @include bem.modifier('pill') {
28 margin-inline: calc(-1 * props.get(action-button.$pad-i-pill) - props.get(action-button.$border-width));
29 }
30
31 @include bem.modifier('icon') {
32 margin-inline: calc(-1 * props.get(action-button.$pad-b) - props.get(action-button.$border-width) - .5em * (props.get(action-button.$line-height) - 1));
33 }
34
35 @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in action-button.$fixed-sizes {
36 @include bem.modifier('action-#{$mod}') {
37 margin-inline: calc(-1 * props.get($pad-i) - props.get(action-button.$border-width));
38
39 @include bem.modifier('pill') {
40 margin-inline: calc(-1 * props.get($pad-i-pill) - props.get(action-button.$border-width));
41 }
42
43 @include bem.modifier('icon') {
44 margin-inline: calc(-1 * props.get($pad-b) - props.get(action-button.$border-width) - .5em * (props.get(action-button.$line-height) - 1));
45 }
46 }
47 }
48 }
16 } 49 }
17} 50}
diff --git a/src/layouts/_button-group.vars.scss b/src/layouts/_button-group.vars.scss
index 95ac8f8..50c1b53 100644
--- a/src/layouts/_button-group.vars.scss
+++ b/src/layouts/_button-group.vars.scss
@@ -1,4 +1,16 @@
1@use 'iro-sass/src/props'; 1@use 'iro-sass/src/props';
2@use '../core.vars' as core; 2@use '../core.vars' as core;
3 3
4$spacing: props.def(--l-button-group--spacing, props.get(core.$size--150)) !default; 4$gap: props.def(--l-button-group--gap, props.get(core.$size--150)) !default;
5
6$gapless: props.def(--l-button-group--gapless, 0) !default;
7$sm: props.def(--l-button-group--sm, props.get(core.$size--100)) !default;
8$lg: props.def(--l-button-group--lg, props.get(core.$size--300)) !default;
9$xl: props.def(--l-button-group--xl, props.get(core.$size--450)) !default;
10
11$sizes: (
12 'gapless': $gapless,
13 'sm': $sm,
14 'lg': $lg,
15 'xl': $xl,
16) !default;
diff --git a/src/layouts/_container.vars.scss b/src/layouts/_container.vars.scss
index cba7574..56b6c89 100644
--- a/src/layouts/_container.vars.scss
+++ b/src/layouts/_container.vars.scss
@@ -2,14 +2,14 @@
2@use 'iro-sass/src/props'; 2@use 'iro-sass/src/props';
3@use '../core.vars' as core; 3@use '../core.vars' as core;
4 4
5$fixed-125: props.def(--l-container--fixed-125, fn.px-to-rem(720px)) !default; 5$fixed-200: props.def(--l-container--fixed-200, fn.px-to-rem(1300px)) !default;
6$fixed: props.def(--l-container--fixed, fn.px-to-rem(610px)) !default; 6$fixed-150: props.def(--l-container--fixed-150, fn.px-to-rem(860px)) !default;
7$fixed-75: props.def(--l-container--fixed-75, fn.px-to-rem(500px)) !default; 7$fixed: props.def(--l-container--fixed, fn.px-to-rem(680px)) !default;
8 8
9$fixed-sizes: ( 9$fixed-sizes: (
10 'fixed-125': $fixed-125, 10 'fixed-200': $fixed-200,
11 'fixed': $fixed, 11 'fixed-150': $fixed-150,
12 'fixed-75': $fixed-75 12 'fixed': $fixed
13) !default; 13) !default;
14 14
15$pad-i: props.def(--l-container--pad-i, props.get(core.$size--400)) !default; 15$pad-i: props.def(--l-container--pad-i, props.get(core.$size--400)) !default;
diff --git a/src/layouts/_split-view.scss b/src/layouts/_split-view.scss
index 2744510..f522254 100644
--- a/src/layouts/_split-view.scss
+++ b/src/layouts/_split-view.scss
@@ -15,10 +15,6 @@
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.modifier('gapless') {
19 gap: props.get(vars.$gapless);
20 }
21
22 @include bem.elem('panel') { 18 @include bem.elem('panel') {
23 flex: 1 1 auto; 19 flex: 1 1 auto;
24 inline-size: 100%; 20 inline-size: 100%;
@@ -44,6 +40,21 @@
44 position: sticky; 40 position: sticky;
45 inset-block-start: calc(props.get(vars.$panel--sticky-400--inset) + props.get(vars.$panel--sticky-offset)); 41 inset-block-start: calc(props.get(vars.$panel--sticky-400--inset) + props.get(vars.$panel--sticky-offset));
46 } 42 }
43
44 @include bem.modifier('sticky-1200') {
45 position: sticky;
46 inset-block-start: calc(props.get(vars.$panel--sticky-1200--inset) + props.get(vars.$panel--sticky-offset));
47 }
48 }
49
50 @include bem.modifier('gapless') {
51 gap: props.get(vars.$gapless);
52
53 @include bem.elem('panel') {
54 @include bem.modifier('side-25') {
55 min-inline-size: calc(props.get(vars.$panel--side-25--min) + props.get(vars.$col-gap) - props.get(vars.$gapless));
56 }
57 }
47 } 58 }
48 59
49 @include bem.elem('content') { 60 @include bem.elem('content') {
@@ -55,19 +66,23 @@
55 gap: props.get(vars.$row-gap); 66 gap: props.get(vars.$row-gap);
56 align-items: stretch; 67 align-items: stretch;
57 68
69 @include bem.modifier('gapless') {
70 gap: props.get(vars.$gapless);
71 }
72
58 @include bem.modifier('wrap-reverse') { 73 @include bem.modifier('wrap-reverse') {
59 flex-direction: column-reverse; 74 flex-direction: column-reverse;
60 } 75 }
61 76
62 @include bem.elem('panel') { 77 @include bem.elem('panel') {
63 flex: 1 1 auto; 78 inline-size: auto;
64 79
65 @include bem.modifier('side-25') { 80 @include bem.modifier('side-25') {
66 inline-size: auto; 81 inline-size: auto;
67 min-inline-size: 0; 82 min-inline-size: 0;
68 } 83 }
69 84
70 @include bem.modifier('sticky', 'sticky-400') { 85 @include bem.modifier('sticky', 'sticky-400', 'sticky-1200') {
71 position: static; 86 position: static;
72 } 87 }
73 } 88 }
diff --git a/src/layouts/_split-view.vars.scss b/src/layouts/_split-view.vars.scss
index 01562e1..d519939 100644
--- a/src/layouts/_split-view.vars.scss
+++ b/src/layouts/_split-view.vars.scss
@@ -4,9 +4,10 @@
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, 0) !default; 7$gapless: props.def(--l-split-view--gapless, 0rem) !default;
8 8
9$panel--side-25--min: props.def(--l-split-view--panel--side-25--min, props.get(core.$size--3200)) !default; 9$panel--side-25--min: props.def(--l-split-view--panel--side-25--min, props.get(core.$size--3200)) !default;
10$panel--sticky-400--inset: props.def(--l-split-view--panel--sticky-400--inset, props.get(core.$size--400)) !default; 10$panel--sticky-400--inset: props.def(--l-split-view--panel--sticky-400--inset, props.get(core.$size--400)) !default;
11$panel--sticky-1200--inset: props.def(--l-split-view--panel--sticky-1200--inset, props.get(core.$size--1200)) !default;
11 12
12$panel--sticky-offset: props.def(--l-split-view--panel--sticky-offset, props.get(core.$sticky-top-offset)) !default; 13$panel--sticky-offset: props.def(--l-split-view--panel--sticky-offset, props.get(core.$sticky-top-offset)) !default;
diff --git a/src/objects/_avatar.scss b/src/objects/_avatar.scss
index fc4ffcd..81396e3 100644
--- a/src/objects/_avatar.scss
+++ b/src/objects/_avatar.scss
@@ -11,7 +11,7 @@
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.next-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(circle calc(.5 * props.get($indicator-size) + props.get(vars.$indicator-spacing)) at
16 calc(100% - .5 * props.get($indicator-size)) 16 calc(100% - .5 * props.get($indicator-size))
17 calc(100% - .5 * props.get($indicator-size)), 17 calc(100% - .5 * props.get($indicator-size)),
@@ -94,6 +94,15 @@
94 } 94 }
95 } 95 }
96 96
97 @include bem.modifier('colored-gradient') {
98 @include bem.elem('content') {
99 color: #fff;
100 background: linear-gradient(props.get(vars.$bg-angle),
101 hsl(props.get(vars.$bg-color--h), props.get(vars.$bg-color--s), props.get(vars.$bg-color--l)),
102 hsl(props.get(vars.$bg-color-2--h), props.get(vars.$bg-color-2--s), props.get(vars.$bg-color-2--l)));
103 }
104 }
105
97 @each $mod, $size, $font-size, $indicator-size in vars.$sizes { 106 @each $mod, $size, $font-size, $indicator-size in vars.$sizes {
98 @include bem.modifier($mod) { 107 @include bem.modifier($mod) {
99 font-size: props.get($font-size); 108 font-size: props.get($font-size);
diff --git a/src/objects/_avatar.vars.scss b/src/objects/_avatar.vars.scss
index 72fb397..9986de5 100644
--- a/src/objects/_avatar.vars.scss
+++ b/src/objects/_avatar.vars.scss
@@ -39,6 +39,12 @@ $bg-color--h: props.def(--o-avatar--bg-color--h, 354, 'color') !default;
39$bg-color--s: props.def(--o-avatar--bg-color--s, 44%, 'color') !default; 39$bg-color--s: props.def(--o-avatar--bg-color--s, 44%, 'color') !default;
40$bg-color--l: props.def(--o-avatar--bg-color--l, 45%, 'color') !default; 40$bg-color--l: props.def(--o-avatar--bg-color--l, 45%, 'color') !default;
41 41
42$bg-color-2--h: props.def(--o-avatar--bg-color-2--h, 354, 'color') !default;
43$bg-color-2--s: props.def(--o-avatar--bg-color-2--s, 44%, 'color') !default;
44$bg-color-2--l: props.def(--o-avatar--bg-color-2--l, 45%, 'color') !default;
45
46$bg-angle: props.def(--o-avatar--bg-angle, 180deg) !default;
47
42$key-focus--border-color: props.def(--o-avatar--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default; 48$key-focus--border-color: props.def(--o-avatar--key-focus--border-color, props.get(core.$theme, --focus, --border), 'color') !default;
43$key-focus--outline-color: props.def(--o-avatar--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default; 49$key-focus--outline-color: props.def(--o-avatar--key-focus--outline-color, props.get(core.$theme, --focus, --outline), 'color') !default;
44 50
diff --git a/src/objects/_card.scss b/src/objects/_card.scss
index 6628eab..c87e676 100644
--- a/src/objects/_card.scss
+++ b/src/objects/_card.scss
@@ -14,7 +14,7 @@
14 position: relative; 14 position: relative;
15 display: flex; 15 display: flex;
16 flex-direction: column; 16 flex-direction: column;
17 margin-inline: calc(-1 * props.get(vars.$key-focus--border-width)); 17 margin: calc(-1 * props.get(vars.$key-focus--border-width));
18 background-color: props.get(vars.$bg-color); 18 background-color: props.get(vars.$bg-color);
19 background-clip: content-box; 19 background-clip: content-box;
20 border: props.get(vars.$key-focus--border-offset) solid transparent; 20 border: props.get(vars.$key-focus--border-offset) solid transparent;
@@ -61,7 +61,7 @@
61 inline-size: 100%; 61 inline-size: 100%;
62 overflow: hidden; 62 overflow: hidden;
63 object-fit: cover; 63 object-fit: cover;
64 transition: transform .2s, opacity .2s; 64 transition: background-color .2s, transform .2s, opacity .2s;
65 65
66 &:first-child { 66 &:first-child {
67 border-start-start-radius: props.get(vars.$rounding); 67 border-start-start-radius: props.get(vars.$rounding);
@@ -145,7 +145,6 @@
145 } 145 }
146 146
147 @include bem.modifier('quiet') { 147 @include bem.modifier('quiet') {
148 position: relative;
149 margin-inline: 0; 148 margin-inline: 0;
150 background-color: transparent; 149 background-color: transparent;
151 border: 0; 150 border: 0;
@@ -161,6 +160,12 @@
161 opacity: .75; 160 opacity: .75;
162 transform: translateY(props.get(vars.$hover--offset-b)); 161 transform: translateY(props.get(vars.$hover--offset-b));
163 } 162 }
163
164 @include bem.elem('body') {
165 @include bem.modifier('hidden') {
166 transform: translateY(props.get(vars.$hover--offset-b));
167 }
168 }
164 } 169 }
165 170
166 &:focus-visible { 171 &:focus-visible {
@@ -193,6 +198,11 @@
193 @include bem.elem('body') { 198 @include bem.elem('body') {
194 padding: 0; 199 padding: 0;
195 padding-block-start: props.get(vars.$spacing); 200 padding-block-start: props.get(vars.$spacing);
201
202 @include bem.modifier('hidden') {
203 padding-block: props.get(vars.$pad-b);
204 padding-inline: props.get(vars.$pad-i);
205 }
196 } 206 }
197 207
198 @include bem.elem('footer') { 208 @include bem.elem('footer') {
@@ -204,6 +214,21 @@
204 flex-direction: row; 214 flex-direction: row;
205 align-items: center; 215 align-items: center;
206 216
217 @include bem.elem('image') {
218 align-self: stretch;
219 inline-size: auto;
220
221 &:first-child {
222 border-start-end-radius: 0;
223 border-end-start-radius: props.get(vars.$rounding);
224 }
225
226 &:last-child {
227 border-start-end-radius: props.get(vars.$rounding);
228 border-end-start-radius: 0;
229 }
230 }
231
207 @include bem.elem('body') { 232 @include bem.elem('body') {
208 flex: 0 0 auto; 233 flex: 0 0 auto;
209 234
diff --git a/src/objects/_divider.scss b/src/objects/_divider.scss
index 65f1718..4ed8092 100644
--- a/src/objects/_divider.scss
+++ b/src/objects/_divider.scss
@@ -46,10 +46,24 @@
46 46
47 @include bem.modifier('vertical') { 47 @include bem.modifier('vertical') {
48 align-self: stretch; 48 align-self: stretch;
49 inline-size: 1px; 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.$faint--bg-color); 52 background-color: props.get(vars.$strong--bg-color);
53
54 &::before,
55 &::after {
56 display: none;
57 }
58 }
59
60 @include bem.modifier('dot') {
61 align-self: center;
62 inline-size: props.get(vars.$dot--size);
63 block-size: props.get(vars.$dot--size);
64 margin-block: 0;
65 background-color: props.get(vars.$strong--bg-color);
66 border-radius: props.get(vars.$dot--size);
53 67
54 &::before, 68 &::before,
55 &::after { 69 &::after {
@@ -67,6 +81,14 @@
67 block-size: props.get(vars.$medium--border-width); 81 block-size: props.get(vars.$medium--border-width);
68 background-color: props.get(vars.$medium--bg-color); 82 background-color: props.get(vars.$medium--bg-color);
69 } 83 }
84
85 @include bem.modifier('vertical') {
86 background-color: props.get(vars.$medium--bg-color);
87 }
88
89 @include bem.modifier('dot') {
90 background-color: props.get(vars.$medium--bg-color);
91 }
70 } 92 }
71 93
72 @include bem.modifier('faint') { 94 @include bem.modifier('faint') {
@@ -83,6 +105,10 @@
83 @include bem.modifier('vertical') { 105 @include bem.modifier('vertical') {
84 background-color: props.get(vars.$vertical--faint--bg-color); 106 background-color: props.get(vars.$vertical--faint--bg-color);
85 } 107 }
108
109 @include bem.modifier('dot') {
110 background-color: props.get(vars.$dot--faint--bg-color);
111 }
86 } 112 }
87 113
88 @include bem.modifier('labelled') { 114 @include bem.modifier('labelled') {
diff --git a/src/objects/_divider.vars.scss b/src/objects/_divider.vars.scss
index 1117fd5..5cd68c1 100644
--- a/src/objects/_divider.vars.scss
+++ b/src/objects/_divider.vars.scss
@@ -3,7 +3,9 @@
3@use 'iro-sass/src/props'; 3@use 'iro-sass/src/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;
8$dot--size: props.def(--o-divider--dot--size, props.get(core.$size--50)) !default;
7 9
8$strong--border-width: props.def(--o-divider--strong--border-width, props.get(core.$border-width--thick)) !default; 10$strong--border-width: props.def(--o-divider--strong--border-width, props.get(core.$border-width--thick)) !default;
9$strong--label-font-size: props.def(--o-divider--strong--label-font-size, props.get(core.$font-size--100)) !default; 11$strong--label-font-size: props.def(--o-divider--strong--label-font-size, props.get(core.$font-size--100)) !default;
@@ -23,7 +25,9 @@ $medium--label-color: props.def(--o-divider--medium--label-color, props.get(core
23$faint--bg-color: props.def(--o-divider--faint--bg-color, props.get(core.$theme, --border), 'color') !default; 25$faint--bg-color: props.def(--o-divider--faint--bg-color, props.get(core.$theme, --border), 'color') !default;
24$faint--label-color: props.def(--o-divider--faint--label-color, props.get(core.$theme, --text-mute-more), 'color') !default; 26$faint--label-color: props.def(--o-divider--faint--label-color, props.get(core.$theme, --text-mute-more), 'color') !default;
25 27
26$vertical--faint--bg-color: props.def(--o-divider--faint--bg-color, props.get(core.$theme, --border-mute), 'color') !default; 28$vertical--faint--bg-color: props.def(--o-divider--vertical--faint--bg-color, props.get(core.$theme, --border-mute), 'color') !default;
29
30$dot--faint--bg-color: props.def(--o-divider--dot--faint--bg-color, props.get(core.$theme, --border-mute), 'color') !default;
27 31
28$static-themes: props.def(--o-divider, (), 'color'); 32$static-themes: props.def(--o-divider, (), 'color');
29 33
diff --git a/src/objects/_figure.scss b/src/objects/_figure.scss
new file mode 100644
index 0000000..38837be
--- /dev/null
+++ b/src/objects/_figure.scss
@@ -0,0 +1,26 @@
1@use 'sass:meta';
2@use 'iro-sass/src/bem';
3@use 'iro-sass/src/props';
4@use '../props' as *;
5
6@forward 'figure.vars';
7@use 'figure.vars' as vars;
8
9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars'));
11
12 @include bem.object('figure') {
13 @include bem.elem('caption') {
14 padding-block: props.get(vars.$pad-b);
15 font-size: props.get(vars.$font-size);
16 color: props.get(vars.$text-color);
17 border-block-end: props.get(vars.$border-width) solid props.get(vars.$border-color);
18
19 &::before {
20 display: block;
21 margin-block: -100em 100em;
22 content: '';
23 }
24 }
25 }
26}
diff --git a/src/objects/_figure.vars.scss b/src/objects/_figure.vars.scss
new file mode 100644
index 0000000..78f5d15
--- /dev/null
+++ b/src/objects/_figure.vars.scss
@@ -0,0 +1,9 @@
1@use 'iro-sass/src/props';
2@use '../core.vars' as core;
3
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;
6$font-size: props.def(--o-figure--font-size, props.get(core.$font-size--100)) !default;
7
8$text-color: props.def(--o-figure--text-color, props.get(core.$theme, --text-mute-more), 'color') !default;
9$border-color: props.def(--o-figure--border-color, props.get(core.$theme, --border), 'color') !default;
diff --git a/src/objects/_heading.scss b/src/objects/_heading.scss
index f5932f5..bdc7027 100644
--- a/src/objects/_heading.scss
+++ b/src/objects/_heading.scss
@@ -19,7 +19,6 @@
19 color: props.get(vars.$text-color); 19 color: props.get(vars.$text-color);
20 text-transform: none; 20 text-transform: none;
21 letter-spacing: normal; 21 letter-spacing: normal;
22 transform: translateX(props.get(vars.$offset));
23 22
24 & + & { 23 & + & {
25 margin-block-start: props.get(vars.$margin-bs-sibling); 24 margin-block-start: props.get(vars.$margin-bs-sibling);
@@ -53,6 +52,7 @@
53 font-feature-settings: props.get($feature-settings); 52 font-feature-settings: props.get($feature-settings);
54 line-height: props.get($line-height); 53 line-height: props.get($line-height);
55 letter-spacing: props.get($letter-spacing); 54 letter-spacing: props.get($letter-spacing);
55 transform: translateX(props.get(vars.$offset));
56 } 56 }
57 } 57 }
58 } 58 }
diff --git a/src/objects/_navbar.vars.scss b/src/objects/_navbar.vars.scss
index da280fd..fcdac80 100644
--- a/src/objects/_navbar.vars.scss
+++ b/src/objects/_navbar.vars.scss
@@ -7,7 +7,7 @@ $block-size: props.def(--o-navbar--block-size, props.get(core.$size--800)) !defa
7$spacing: props.def(--o-navbar--spacing, props.get(core.$size--200)) !default; 7$spacing: props.def(--o-navbar--spacing, props.get(core.$size--200)) !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-action-button--pad-i-label, props.get(core.$size--25)) !default; 10$item--pad-i-label: props.def(--o-navbar--item--pad-i-label, props.get(core.$size--25)) !default;
11$item--pad-b: props.def(--o-navbar--item--pad-b, props.get(core.$size--40)) !default; 11$item--pad-b: props.def(--o-navbar--item--pad-b, props.get(core.$size--40)) !default;
12$item--font-size: props.def(--o-navbar--item--font-size, props.get(core.$font-size--75)) !default; 12$item--font-size: props.def(--o-navbar--item--font-size, props.get(core.$font-size--75)) !default;
13 13
diff --git a/src/objects/_placeholders.scss b/src/objects/_placeholders.scss
new file mode 100644
index 0000000..e148f21
--- /dev/null
+++ b/src/objects/_placeholders.scss
@@ -0,0 +1,22 @@
1@use 'sass:meta';
2@use 'iro-sass/src/bem';
3@use 'iro-sass/src/props';
4@use '../props' as *;
5
6@forward 'placeholders.vars';
7@use 'placeholders.vars' as vars;
8
9@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars'));
11
12 @include bem.object('placeholders') {
13 @include bem.elem('placeholder') {
14 display: inline-block;
15 min-block-size: props.get(vars.$min-block-size);
16 vertical-align: middle;
17 background-color: currentColor;
18 border-radius: props.get(vars.$rounding);
19 opacity: props.get(vars.$opacity);
20 }
21 }
22}
diff --git a/src/objects/_placeholders.vars.scss b/src/objects/_placeholders.vars.scss
new file mode 100644
index 0000000..a2e41e2
--- /dev/null
+++ b/src/objects/_placeholders.vars.scss
@@ -0,0 +1,6 @@
1@use 'iro-sass/src/props';
2@use '../core.vars' as core;
3
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;
6$opacity: props.def(--o-placeholder--opacity, .5) !default;
diff --git a/src/objects/_tabbar.scss b/src/objects/_tabbar.scss
index 8518525..131c832 100644
--- a/src/objects/_tabbar.scss
+++ b/src/objects/_tabbar.scss
@@ -12,28 +12,27 @@
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 position: relative;
16 display: flex;
17 gap: props.get(vars.$spacing);
18 min-inline-size: 0; 15 min-inline-size: 0;
19 block-size: props.get(vars.$block-size); 16 block-size: props.get(vars.$block-size);
20 margin-inline: calc(-.5 * props.get(vars.$spacing)); 17 overflow: hidden;
21 overflow-inline: auto;
22 18
23 &::after { 19 &::after {
24 display: block; 20 display: block;
25 flex: 1 1 auto;
26 block-size: props.get(vars.$indicator--width); 21 block-size: props.get(vars.$indicator--width);
27 margin-block-start: auto; 22 margin-block-start: calc(-1 * props.get(vars.$indicator--width));
28 margin-inline-end: calc(.5 * props.get(vars.$spacing));
29 content: ''; 23 content: '';
30 background-color: props.get(vars.$railing--bg-color); 24 background-color: props.get(vars.$railing--bg-color);
31 } 25 }
32 26
27 @include bem.elem('tabs') {
28 display: flex;
29 block-size: 100%;
30 margin-inline: calc(-.5 * props.get(vars.$spacing));
31 overflow-inline: auto;
32 }
33
33 @include bem.modifier('quiet') { 34 @include bem.modifier('quiet') {
34 &::after { 35 box-shadow: none;
35 display: none;
36 }
37 } 36 }
38 37
39 @include bem.modifier('adapt') { 38 @include bem.modifier('adapt') {
@@ -41,14 +40,12 @@
41 } 40 }
42 41
43 @include bem.elem('tab') { 42 @include bem.elem('tab') {
44 position: relative; 43 position: relative;
45 display: flex; 44 display: flex;
46 align-items: center; 45 align-items: center;
47 padding-inline: calc(.5 * props.get(vars.$spacing)); 46 padding-inline: calc(.5 * props.get(vars.$spacing));
48 color: props.get(vars.$tab--text-color); 47 color: props.get(vars.$tab--text-color);
49 white-space: nowrap; 48 white-space: nowrap;
50 border-block: props.get(vars.$indicator--width) solid transparent;
51 border-block-end-color: props.get(vars.$railing--bg-color);
52 49
53 &::before { 50 &::before {
54 position: absolute; 51 position: absolute;
@@ -61,6 +58,17 @@
61 transform: translateY(-50%); 58 transform: translateY(-50%);
62 } 59 }
63 60
61 &::after {
62 position: absolute;
63 inset-block-end: 0;
64 inset-inline: calc(.5 * props.get(vars.$spacing));
65 z-index: 10;
66 display: none;
67 block-size: props.get(vars.$indicator--width);
68 content: '';
69 background-color: props.get(vars.$tab--selected--text-color);
70 }
71
64 &:link, 72 &:link,
65 &:visited { 73 &:visited {
66 &:hover, 74 &:hover,
@@ -82,20 +90,22 @@
82 } 90 }
83 91
84 @include bem.is('selected') { 92 @include bem.is('selected') {
85 color: props.get(vars.$tab--selected--text-color); 93 color: props.get(vars.$tab--selected--text-color);
86 border-block-end-color: props.get(vars.$tab--selected--text-color); 94
95 &::after {
96 display: block;
97 }
87 } 98 }
88 } 99 }
89 100
90 @include bem.elem('caret') {
91 display: none;
92 }
93
94 @include bem.modifier('accent') { 101 @include bem.modifier('accent') {
95 @include bem.elem('tab') { 102 @include bem.elem('tab') {
103 &::after {
104 background-color: props.get(vars.$tab--accent--text-color);
105 }
106
96 @include bem.is('selected') { 107 @include bem.is('selected') {
97 color: props.get(vars.$tab--accent--text-color); 108 color: props.get(vars.$tab--accent--text-color);
98 border-block-end-color: props.get(vars.$tab--accent--text-color);
99 } 109 }
100 } 110 }
101 } 111 }
diff --git a/src/scopes/_body.scss b/src/scopes/_body.scss
index 65c6d2f..6d32212 100644
--- a/src/scopes/_body.scss
+++ b/src/scopes/_body.scss
@@ -11,6 +11,7 @@
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 15
15 strong { 16 strong {
16 color: props.get(vars.$strong--text-color); 17 color: props.get(vars.$strong--text-color);
diff --git a/src/scopes/_body.vars.scss b/src/scopes/_body.vars.scss
index 8e77a17..1de2cfd 100644
--- a/src/scopes/_body.vars.scss
+++ b/src/scopes/_body.vars.scss
@@ -4,6 +4,7 @@
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$paragraph--margin-bs: props.def(--s-body--paragraph--margin-bs, props.get(core.$size--300)) !default; 8$paragraph--margin-bs: props.def(--s-body--paragraph--margin-bs, props.get(core.$size--300)) !default;
8$paragraph--max-inline-size: props.def(--s-body--paragraph--max-inline-size, props.get(container.$fixed)) !default; 9$paragraph--max-inline-size: props.def(--s-body--paragraph--max-inline-size, props.get(container.$fixed)) !default;
9$img--max-block-size: props.def(--s-body--img--max-block-size, none) !default; 10$img--max-block-size: props.def(--s-body--img--max-block-size, none) !default;
diff --git a/src/scopes/_figures.scss b/src/scopes/_figures.scss
index f619506..981a8b6 100644
--- a/src/scopes/_figures.scss
+++ b/src/scopes/_figures.scss
@@ -1,20 +1,21 @@
1@use 'sass:meta'; 1@use 'sass:meta';
2@use 'iro-sass/src/bem'; 2@use 'iro-sass/src/bem';
3@use 'iro-sass/src/props'; 3@use 'iro-sass/src/props';
4@use '../props' as *; 4@use '../objects/figure.vars' as figure;
5
6@forward 'figures.vars';
7@use 'figures.vars' as vars;
8 5
9@mixin styles { 6@mixin styles {
10 @include materialize-at-root(meta.module-variables('vars'));
11
12 @include bem.scope('figures') { 7 @include bem.scope('figures') {
13 figcaption { 8 figcaption {
14 padding-block: props.get(vars.$pad-b); 9 padding-block: props.get(figure.$pad-b);
15 font-size: props.get(vars.$font-size); 10 font-size: props.get(figure.$font-size);
16 color: props.get(vars.$text-color); 11 color: props.get(figure.$text-color);
17 border-block-end: props.get(vars.$border-width) solid props.get(vars.$border-color); 12 border-block-end: props.get(figure.$border-width) solid props.get(figure.$border-color);
13
14 &::before {
15 display: block;
16 margin-block: -100em 100em;
17 content: '';
18 }
18 } 19 }
19 } 20 }
20} 21}
diff --git a/src/scopes/_figures.vars.scss b/src/scopes/_figures.vars.scss
deleted file mode 100644
index 1737078..0000000
--- a/src/scopes/_figures.vars.scss
+++ /dev/null
@@ -1,10 +0,0 @@
1@use 'iro-sass/src/props';
2@use '../core.vars' as core;
3@use './implicit.vars' as implicit;
4
5$pad-b: props.def(--s-figures--pad-b, props.get(core.$size--100)) !default;
6$border-width: props.def(--s-figures--border-width, props.get(core.$border-width--thin)) !default;
7$font-size: props.def(--s-figures--font-size, props.get(core.$font-size--100)) !default;
8
9$text-color: props.def(--s-figures--text-color, props.get(core.$theme, --text-mute-more), 'color') !default;
10$border-color: props.def(--s-figures--border-color, props.get(core.$theme, --border-mute), 'color') !default;
diff --git a/src/scopes/_implicit.scss b/src/scopes/_implicit.scss
index 020e311..78f06be 100644
--- a/src/scopes/_implicit.scss
+++ b/src/scopes/_implicit.scss
@@ -1,5 +1,7 @@
1@use 'sass:map';
1@use 'sass:math'; 2@use 'sass:math';
2@use 'sass:meta'; 3@use 'sass:meta';
4@use 'sass:string';
3@use 'iro-sass/src/bem'; 5@use 'iro-sass/src/bem';
4@use 'iro-sass/src/props'; 6@use 'iro-sass/src/props';
5@use '../props' as *; 7@use '../props' as *;
@@ -155,5 +157,24 @@
155 padding: 0; 157 padding: 0;
156 margin: 0; 158 margin: 0;
157 } 159 }
160
161 @each $theme in map.keys(props.get(core.$transparent-colors)) {
162 .t-static-#{string.slice($theme, 3)} {
163 color: props.get(core.$transparent-colors, $theme, --800);
164
165 h1,
166 h2,
167 h3,
168 h4,
169 h5,
170 h6 {
171 color: props.get(core.$transparent-colors, $theme, --900);
172 }
173
174 hr {
175 color: props.get(core.$transparent-colors, $theme, --400);
176 }
177 }
178 }
158 } 179 }
159} 180}
diff --git a/src/scopes/_links.vars.scss b/src/scopes/_links.vars.scss
index 91a73ab..b9bf4d1 100644
--- a/src/scopes/_links.vars.scss
+++ b/src/scopes/_links.vars.scss
@@ -31,7 +31,7 @@ $static-themes: props.def(--s-links, (), 'color');
31 31
32 $static-themes: props.merge($static-themes, ( 32 $static-themes: props.merge($static-themes, (
33 $link-theme: ( 33 $link-theme: (
34 --text-color: props.get(core.$transparent-colors, $theme, --800), 34 --text-color: currentColor,
35 --underline-color: props.get(core.$transparent-colors, $theme, --500), 35 --underline-color: props.get(core.$transparent-colors, $theme, --500),
36 36
37 --hover: ( 37 --hover: (