@wwtdev/bsds-css 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,107 @@
1
+ .bs-accordion {
2
+ --accordion-link-color: var(--bs-purple-400);
3
+ --accordion-link-outline-color: var(--bs-blue-400);
4
+ --accordion-outline-color: transparent;
5
+ --accordion-padding-inline: 0;
6
+ --accordion-text-size: var(--bs-text-sm);
7
+ border-block: 1px solid var(--bs-border);
8
+ display: block;
9
+ }
10
+
11
+ @media (min-width: 957px) {
12
+ .bs-accordion {
13
+ --accordion-padding-inline: var(--bs-space-2);
14
+ --accordion-text-size: var(--bs-text-base);
15
+ }
16
+ }
17
+
18
+ /* Accordion Panel (Icon, Title, Caret) */
19
+
20
+ .bs-accordion :where(header button) {
21
+ align-items: center;
22
+ background-color: var(--bs-bg-base);
23
+ border: 0px solid transparent;
24
+ border-radius: .25rem;
25
+ color: var(--bs-ink-base);
26
+ cursor: pointer;
27
+ display: grid;
28
+ font-size: var(--accordion-text-size);
29
+ font-weight: var(--bs-font-normal);
30
+ grid-template-columns: minmax(0px, auto) minmax(0px, 1fr) minmax(0px, auto);
31
+ grid-template-areas: "start main end";
32
+ line-height: 1.5;
33
+ outline: 2px solid var(--accordion-outline-color);
34
+ padding-block: var(--bs-space-f-2);
35
+ padding-inline: var(--accordion-padding-inline);
36
+ width: 100%;
37
+ }
38
+
39
+ .bs-accordion :where(header button:focus-visible) {
40
+ --accordion-outline-color: var(--bs-blue-400);
41
+ }
42
+
43
+ .bs-accordion :where(header button) > * {
44
+ font-size: inherit;
45
+ font-weight: inherit;
46
+ line-height: inherit;
47
+ }
48
+
49
+ .bs-accordion :where(header button) :where([data-position]) {
50
+ width: var(--accordion-text-size);
51
+ }
52
+
53
+ .bs-accordion :where(header button) > :where([data-position="start"]) {
54
+ grid-area: start;
55
+ margin-right: var(--bs-space-2);
56
+ }
57
+
58
+ .bs-accordion :where(header button) > :where([data-position="end"]) {
59
+ grid-area: end;
60
+ transform: rotate(0);
61
+ transition: transform 250ms ease-out;
62
+ }
63
+
64
+ .bs-accordion :where(header[data-open]:not([data-open="false"])) :where([data-position="end"]) {
65
+ transform: rotate(180deg);
66
+ }
67
+
68
+ .bs-accordion :where(header button) > :where(h2, h3, h4, h5) {
69
+ grid-area: main;
70
+ margin-right: var(--bs-space-2);
71
+ text-align: left;
72
+ }
73
+
74
+ .bs-accordion :where(header button) > :where(h2, h3, h4, h5) :where(*) {
75
+ vertical-align: middle;
76
+ }
77
+
78
+ @media (min-width: 957px) {
79
+ .bs-accordion :where(header button) > :where(h2, h3, h4, h5) {
80
+ margin-right: var(--bs-space-3);
81
+ }
82
+ }
83
+
84
+ /* Accordion Content (the collapsible / expandible part) */
85
+
86
+ .bs-accordion :where(.bs-accordion-content) {
87
+ display: grid;
88
+ font-size: var(--accordion-text-size);
89
+ grid-template-rows: 0fr;
90
+ overflow: hidden;
91
+ padding-inline: var(--accordion-padding-inline);
92
+ transition: grid-template-rows 250ms ease-out;
93
+ }
94
+
95
+ .bs-accordion :where(.bs-accordion-content) > :where(:first-child) {
96
+ overflow: hidden;
97
+ }
98
+
99
+ .bs-accordion :where(.bs-accordion-content[data-open]:not([data-open="false"])) {
100
+ grid-template-rows: 1fr;
101
+ padding-block-end: var(--bs-space-f-2);
102
+ }
103
+
104
+ /* Accordion Group */
105
+ :where(.bs-accordion[data-stacked]) + .bs-accordion:where([data-stacked]) {
106
+ border-block-start-color: transparent;
107
+ }
@@ -0,0 +1,62 @@
1
+ .bs-banner {
2
+ background-color: var(--bs-bg-invert-subtle);
3
+ color: var(--bs-gray-100);
4
+ display: flex;
5
+ justify-content: center;
6
+ padding-bottom: 1rem;
7
+ padding-left: 1.25rem;
8
+ padding-right: 1.25rem;
9
+ padding-top: 1rem;
10
+ }
11
+
12
+ .bs-banner:where([data-dismissed]) {
13
+ display: none;
14
+ }
15
+
16
+ :where(.dark) .bs-banner {
17
+ color: var(--bs-black);
18
+ }
19
+
20
+ .bs-banner :where(.bs-banner-content) {
21
+ align-items: center;
22
+ display: flex;
23
+ /* Content locks at globally configured width */
24
+ max-width: var(--bs-content-max-width);
25
+ width: 100%;
26
+ }
27
+
28
+ .bs-banner :where(.bs-banner-content .bs-banner-warning-icon) {
29
+ /* Do not display warning icon on smaller screens */
30
+ display: none;
31
+ margin-right: 0.625rem;
32
+ }
33
+
34
+ .bs-banner :where(.bs-banner-content p) {
35
+ flex-grow: 1;
36
+ padding-right: 1.25rem;
37
+ }
38
+
39
+ .bs-banner :where(.bs-banner-content p a) {
40
+ color: var(--bs-pink-200);
41
+ text-decoration: none;
42
+ }
43
+
44
+ :where(.dark) .bs-banner :where(.bs-banner-content p a) {
45
+ color: var(--bs-pink-500);
46
+ }
47
+
48
+ .bs-banner :where(.bs-banner-content p a:hover) {
49
+ text-decoration: underline;
50
+ }
51
+
52
+ .bs-banner :where(.bs-banner-content button) {
53
+ background-color: inherit;
54
+ color: inherit;
55
+ cursor: pointer;
56
+ }
57
+
58
+ @media (min-width: 957px) {
59
+ .bs-banner :where(.bs-banner-content .bs-banner-warning-icon) {
60
+ display: inline-flex;
61
+ }
62
+ }
@@ -4,7 +4,6 @@
4
4
  align-items: center;
5
5
  font-size: var(--bs-text-base);
6
6
  font-weight: 400;
7
- gap: 0.5em;
8
7
  line-height: 115%;
9
8
  }
10
9
 
@@ -20,6 +19,15 @@
20
19
  width: auto;
21
20
  }
22
21
 
22
+ /* not using gap on .bs-boolean due to dead click zone */
23
+ .bs-boolean label {
24
+ padding-inline-end: 0.5em;
25
+ }
26
+
27
+ .bs-boolean input + label {
28
+ padding-inline: 0.5em 0;
29
+ }
30
+
23
31
  .bs-boolean:where([data-size='sm']),
24
32
  .bs-boolean:where([data-size='sm']) label {
25
33
  font-size: var(--bs-text-xs);
@@ -28,7 +36,7 @@
28
36
 
29
37
  /* Checkbox & Radio Input */
30
38
 
31
- :where(input[type^='checkbox'], input[type^='radio']) {
39
+ :where(input[type='checkbox'], input[type='radio']) {
32
40
  --box-shadow: var(--bs-ink-base);
33
41
 
34
42
  appearance: none;
@@ -42,20 +50,22 @@
42
50
  width: 1rem;
43
51
  }
44
52
 
45
- :where(input[type^='checkbox'], input[type^='radio']):focus {
53
+ :where(input[type='checkbox'], input[type='radio']):focus-visible {
46
54
  box-shadow: inset 0 0 0 0.125rem var(--box-shadow),
47
55
  0 0 0 2px var(--offset-color, var(--bs-bg-base)),
48
56
  0 0 0 4px var(--outline-color, var(--bs-blue-400));
57
+ outline: 2px solid transparent;
49
58
  }
50
59
 
51
- :where(input[type^='checkbox']) {
60
+ :where(input[type='checkbox']) {
52
61
  border-radius: 0.125rem;
53
62
  }
54
63
 
55
- :where(input[type^='radio']) {
64
+ :where(input[type='radio']) {
56
65
  border-radius: 50%;
57
66
  }
58
67
 
68
+ /* Checkbox's checkmark */
59
69
  input:where([type='checkbox'])::before {
60
70
  --filled-size: 1rem;
61
71
  --check-fill-color: var(--bs-blue-400);
@@ -68,7 +78,7 @@ input:where([type='checkbox'])::before {
68
78
  width: var(--filled-size);
69
79
  }
70
80
 
71
- input:where([type^='checkbox'])::after {
81
+ input:where([type='checkbox'])::after {
72
82
  border: solid var(--bs-white);
73
83
  border-width: 0 0.125rem 0.125rem 0;
74
84
  content: '';
@@ -82,6 +92,15 @@ input:where([type^='checkbox'])::after {
82
92
  width: 0.375em;
83
93
  }
84
94
 
95
+ input:where([type='checkbox']):where(:indeterminate)::after {
96
+ border: none;
97
+ background-color: var(--bs-white);
98
+ height: 0.125rem;
99
+ transform: translate(-50%, -0.0625rem) rotate(0deg);
100
+ width: 0.625em;
101
+ }
102
+
103
+ /* Radio's dot */
85
104
  input:where([type='radio'])::before {
86
105
  --filled-size: 1rem;
87
106
  --radio-fill-color: var(--bs-blue-400);
@@ -112,8 +131,8 @@ input:where([type='radio'])::after {
112
131
  width: var(--inner-size);
113
132
  }
114
133
 
115
- input:where([type='checkbox']:checked, [type='radio']:checked)::before,
116
- input:where([type='checkbox']:checked, [type='radio']:checked)::after {
134
+ input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='radio']:checked)::before,
135
+ input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='radio']:checked)::after {
117
136
  visibility: visible;
118
137
  }
119
138
 
@@ -126,6 +145,11 @@ input:where([type='checkbox']:checked, [type='radio']:checked)::after {
126
145
  width: 0.3125rem;
127
146
  }
128
147
 
148
+ .bs-boolean:where([data-size='sm']) input[type='checkbox']:where(:indeterminate)::after {
149
+ height: 0.125rem;
150
+ width: .75em;
151
+ }
152
+
129
153
  .bs-boolean:where([data-size='sm']) input[type='radio']::after {
130
154
  --inner-size: 0.25rem;
131
155
  }
@@ -138,7 +162,8 @@ input:where([type='checkbox'], [type='radio']):disabled {
138
162
  background-color: transparent;
139
163
  }
140
164
 
141
- input:where([type='checkbox']):checked:disabled::before {
165
+ input:where([type='checkbox']):checked:disabled::before,
166
+ input:where([type='checkbox']):indeterminate:disabled::before {
142
167
  --check-fill-color: var(--bs-gray-400);
143
168
  }
144
169
 
@@ -149,6 +174,6 @@ input:where([type='radio']):checked:disabled::before {
149
174
 
150
175
  /* Error state */
151
176
 
152
- input:where([type^='checkbox'], [type^='radio'])[data-error] {
177
+ input:where([type='checkbox'], [type='radio'])[data-error] {
153
178
  --box-shadow: var(--bs-red-400);
154
179
  }
@@ -1,18 +1,19 @@
1
1
  :where([data-required]) {
2
- color: var(--bs-red-400);
2
+ color: var(--bs-red-500);
3
+ font-weight: var(--bs-font-bold, 600);
3
4
  }
4
5
 
5
6
  :where([data-disabled], [data-disabled] [data-required]) {
6
7
  color: var(--bs-gray-400);
7
8
  }
8
9
 
9
- :where(label + input, label > input):not([type^='checkbox'], [type^='radio']),
10
+ :where(label + input, label > input):where(:not([type='checkbox'], [type='radio'])),
10
11
  :where(label + textarea, label > textarea),
11
12
  :where(label + select, label > select) {
12
13
  margin-top: 0.25rem;
13
14
  }
14
15
 
15
- input:not([type^='checkbox'], [type^='radio'], [type^='file'], [type^='range']),
16
+ input:where(:not([type='checkbox'], [type='radio'], [type='file'], [type='range'])),
16
17
  textarea, select {
17
18
  appearance: none;
18
19
  background-color: var(--input-bg, var(--bs-bg-base));
@@ -21,27 +22,35 @@ textarea, select {
21
22
  color: var(--bs-ink-base);
22
23
  font-size: var(--bs-text-base);
23
24
  font-weight: 400;
25
+ height: 2.5rem;
24
26
  line-height: var(--bs-leading-base);
25
- min-height: 40px;
26
- padding: 0.5rem 0.75rem;
27
+ min-height: 2.5rem;
28
+ padding-inline: 0.75rem;
27
29
  width: 100%;
28
30
  }
29
31
 
32
+ textarea {
33
+ height: auto;
34
+ padding-block: 0.5rem;
35
+ resize: vertical;
36
+ }
37
+
30
38
  /* Generally applicable (all input types) */
31
39
  :is(input, textarea, select)::placeholder {
32
40
  color: var(--bs-violet-200);
33
41
  opacity: 1;
34
42
  }
35
43
 
36
- :is(input, textarea, select):focus {
44
+
45
+ :is(input:where(:not([type='checkbox'], [type='radio']), textarea, select):where(:focus)) {
37
46
  box-shadow: 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
38
47
  0 0 0 4px var(--outline-color, var(--bs-blue-400));
39
48
  outline: 2px solid transparent;
40
49
  }
41
- :where(.box) :is(input, textarea, select):focus {
50
+ :where(.box) :is(input, textarea, select):where(:focus) {
42
51
  --offset-color: var(--bs-bg-subtle);
43
52
  }
44
- :where(.box[data-invert]) :is(input, textarea, select):focus {
53
+ :where(.box[data-invert]) :is(input, textarea, select):where(:focus) {
45
54
  --offset-color: var(--bs-bg-invert);
46
55
  }
47
56
 
@@ -49,7 +58,7 @@ textarea, select {
49
58
  --outline-color: var(--bs-red-200);
50
59
  }
51
60
 
52
- :is(input, textarea, select):disabled {
61
+ :is(input:where(:not([type='checkbox'],[type='radio'])), textarea, select):where(:disabled) {
53
62
  background-color: var(--bs-gray-200);
54
63
  border-color: var(--bs-gray-400);
55
64
  color: var(--bs-gray-400);
@@ -10,7 +10,7 @@
10
10
  }
11
11
 
12
12
  :where([data-required]) {
13
- color: var(--bs-red-400);
13
+ color: var(--bs-red-500);
14
14
  }
15
15
 
16
16
  :where(label[data-disabled], [data-disabled] [data-required], [data-disabled] label) {
@@ -20,10 +20,6 @@
20
20
  --inner-text-padding: 0.375rem;
21
21
  }
22
22
 
23
- :where(.dark) .bs-switch:where(:not([data-disabled])) {
24
- --switch-background: var(--bs-blue-400);
25
- }
26
-
27
23
  .bs-switch input,
28
24
  .bs-switch:where([data-size="sm"]) input {
29
25
  cursor: pointer;
@@ -47,6 +43,11 @@
47
43
  height: calc(var(--ball-diameter) + var(--offset) * 2);
48
44
  }
49
45
 
46
+ .bs-switch input:where(:checked) ~ span,
47
+ .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span {
48
+ --switch-background: var(--bs-blue-400);
49
+ }
50
+
50
51
  /* Toggle "ball" */
51
52
  .bs-switch span::before {
52
53
  background-color: var(--ball-background);
@@ -68,7 +69,6 @@
68
69
  transform: translate(var(--ball-diameter), -50%);
69
70
  }
70
71
 
71
-
72
72
  .bs-switch input:where(:checked) ~ span:where([data-inner-on-label][data-inner-off-label])::before,
73
73
  .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span:where([data-inner-on-label][data-inner-off-label])::before {
74
74
  transform: translate(calc(var(--ball-diameter) + var(--inner-text-width)), -50%);
@@ -109,15 +109,15 @@
109
109
 
110
110
  /* Focus state */
111
111
 
112
- .bs-switch:where(:focus-within) span {
112
+ .bs-switch :where(input:focus-visible) + span {
113
113
  box-shadow: 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
114
114
  0 0 0 4px var(--outline-color, var(--bs-blue-400));
115
115
  outline: 2px solid transparent;
116
116
  }
117
- :where(.box) .bs-switch:where(:focus-within) span {
117
+ :where(.box) .bs-switch :where(input:focus-visible) + span {
118
118
  --offset-color: var(--bs-bg-subtle);
119
119
  }
120
- :where(.box[data-invert]) .bs-switch:where(:focus-within) span {
120
+ :where(.box[data-invert]) .bs-switch :where(input:focus-visible) + span {
121
121
  --offset-color: var(--bs-bg-invert);
122
122
  }
123
123
 
@@ -0,0 +1,200 @@
1
+ /* Base Toast Styles */
2
+ .bs-toast {
3
+ background-color: var(--bs-white);
4
+ border-top: 4px solid var(--bs-blue-400);
5
+ bottom: 1.5rem;
6
+ box-shadow: var(--bs-shadow-contentMedium);
7
+ left: 0;
8
+ margin-left: 1.5rem;
9
+ margin-right: 1.5rem;
10
+ opacity: 0;
11
+ position: fixed;
12
+ right: 0;
13
+ transform: translateY(calc(100% + 1.5rem));
14
+ /* Clamp width for mobile -> full screen */
15
+ width: clamp(17rem, calc(100vw - 3rem), 25rem);
16
+ z-index: 999;
17
+ }
18
+
19
+ .bs-toast[data-stacked] {
20
+ bottom: auto;
21
+ left: auto;
22
+ position: static;
23
+ right: auto;
24
+ z-index: auto;
25
+ }
26
+
27
+ /* Mobile - Toast comes up from bottom */
28
+ @keyframes slideDown {
29
+ 0% {
30
+ opacity: 1;
31
+ transform: translateY(0);
32
+ }
33
+ 100% {
34
+ opacity: 0;
35
+ transform: translateY(calc(100% + 1.5rem));
36
+ }
37
+ }
38
+
39
+ @keyframes slideUp {
40
+ 0% {
41
+ opacity: 0;
42
+ transform: translateY(calc(100% + 1.5rem));
43
+ }
44
+ 100% {
45
+ opacity: 1;
46
+ transform: translateY(0);
47
+ }
48
+ }
49
+
50
+ /* Dark mode toast */
51
+ :where(.dark) .bs-toast {
52
+ background-color: var(--bs-navy-400);
53
+ }
54
+
55
+ .bs-toast:where([data-shown]) {
56
+ /* Small delay on load to alow for HTML element to exist */
57
+ animation-delay: 10ms;
58
+ animation-duration: 200ms;
59
+ animation-fill-mode: forwards;
60
+ animation-name: slideUp;
61
+ animation-timing-function: ease;
62
+ }
63
+
64
+ .bs-toast:where([data-dismissed]) {
65
+ animation-duration: 200ms;
66
+ animation-fill-mode: forwards;
67
+ animation-name: slideDown;
68
+ animation-timing-function: ease;
69
+ }
70
+
71
+ .bs-toast :where(.bs-toast-header) {
72
+ align-items: center;
73
+ color: var(--bs-ink-base);
74
+ display: flex;
75
+ gap: 0.5rem;
76
+ padding-left: 1rem;
77
+ padding-right: 1rem;
78
+ padding-top: 1rem;
79
+ }
80
+
81
+ .bs-toast :where(.bs-toast-header .bs-toast-header-icon) {
82
+ color: var(--bs-blue-400);
83
+ }
84
+
85
+ .bs-toast :where(h5) {
86
+ font-weight: 400;
87
+ }
88
+
89
+ .bs-toast :where(.bs-toast-content) {
90
+ border-bottom: 1px solid var(--bs-border);
91
+ color: var(--bs-ink-light);
92
+ padding-bottom: 1rem;
93
+ padding-left: 1rem;
94
+ padding-right: 1rem;
95
+ padding-top: 0.25rem;
96
+ }
97
+
98
+ .bs-toast :where(.bs-toast-actions) {
99
+ /* Mobile - Buttons will be stacked */
100
+ display: flex;
101
+ flex-direction: column-reverse;
102
+ gap: 1rem;
103
+ padding-bottom: 0.5rem;
104
+ padding-left: 1rem;
105
+ padding-right: 1rem;
106
+ padding-top: 0.5rem;
107
+ }
108
+
109
+ /* Warning Toast Styles */
110
+ .bs-toast:where([data-variant^='warning']) {
111
+ border-top: 4px solid var(--bs-orange-warning);
112
+ }
113
+
114
+ .bs-toast:where([data-variant^='warning']) :where(.bs-toast-header .bs-toast-header-icon) {
115
+ color: var(--bs-orange-warning);
116
+ }
117
+
118
+ /* Positive Toast Styles */
119
+ .bs-toast:where([data-variant^='positive']) {
120
+ border-top: 4px solid var(--bs-purple-400);
121
+ }
122
+
123
+ .bs-toast:where([data-variant^='positive']) :where(.bs-toast-header .bs-toast-header-icon) {
124
+ color: var(--bs-purple-400);
125
+ }
126
+
127
+ :where(.dark) .bs-toast:where([data-variant^='positive']) {
128
+ border-top: 4px solid var(--bs-purple-200);
129
+ }
130
+
131
+ :where(.dark) .bs-toast:where([data-variant^='positive']) :where(.bs-toast-header .bs-toast-header-icon) {
132
+ color: var(--bs-purple-200);
133
+ }
134
+
135
+ /* Negative Toast Styles */
136
+ .bs-toast:where([data-variant^='negative']) {
137
+ border-top: 4px solid var(--bs-red-400);
138
+ }
139
+
140
+ .bs-toast:where([data-variant^='negative']) :where(.bs-toast-header .bs-toast-header-icon) {
141
+ color: var(--bs-red-400);
142
+ }
143
+
144
+ @media (min-width: 440px) {
145
+
146
+ .bs-toast {
147
+ left: auto;
148
+ margin-left: 0;
149
+ margin-right: 0;
150
+ opacity: 0;
151
+ right: 1.5rem;
152
+ transform: translateX(calc(100% + 1.5rem));
153
+ }
154
+
155
+ .bs-toast:where([data-shown]) {
156
+ /* Small delay on load to alow for HTML element to exist */
157
+ animation-delay: 10ms;
158
+ animation-duration: 200ms;
159
+ animation-fill-mode: forwards;
160
+ animation-name: slideLeft;
161
+ animation-timing-function: ease;
162
+ }
163
+
164
+ .bs-toast:where([data-dismissed]) {
165
+ animation-duration: 200ms;
166
+ animation-fill-mode: forwards;
167
+ animation-name: slideRight;
168
+ animation-timing-function: ease;
169
+ }
170
+
171
+ /* Non-mobile toasts come in from the right */
172
+ @keyframes slideRight {
173
+ 0% {
174
+ opacity: 1;
175
+ transform: translateX(0);
176
+ }
177
+ 100% {
178
+ opacity: 0;
179
+ transform: translateX(calc(100% + 1.5rem));
180
+ }
181
+ }
182
+
183
+ @keyframes slideLeft {
184
+ 0% {
185
+ opacity: 0;
186
+ transform: translateX(calc(100% + 1.5rem));
187
+ }
188
+ 100% {
189
+ opacity: 1;
190
+ transform: translateX(0);
191
+ }
192
+ }
193
+
194
+ .bs-toast :where(.bs-toast-actions) {
195
+ /* Non-mobile - Buttons will be side-by-side */
196
+ flex-direction: row;
197
+ justify-content: flex-end;
198
+ }
199
+
200
+ }
@@ -0,0 +1,23 @@
1
+ /* Container for holding all toasts that will be visible */
2
+ .bs-toaster {
3
+ /* Mobile - Center the toasts on the screen */
4
+ align-items: center;
5
+ bottom: 1.5rem;
6
+ display: flex;
7
+ flex-direction: column-reverse;
8
+ gap: 0.5rem;
9
+ left: 0;
10
+ position: fixed;
11
+ right: 0;
12
+ z-index: 999;
13
+ }
14
+
15
+ @media (min-width: 440px) {
16
+
17
+ .bs-toaster {
18
+ /* Non-mobile - Toasts will live on right side of the screen */
19
+ left: auto;
20
+ right: 1.5rem;
21
+ }
22
+
23
+ }