@kwtv/components 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +35 -0
  2. package/package.json +2 -2
  3. package/src/astro/Accordion.astro +10 -6
  4. package/src/astro/AccordionItem.astro +47 -43
  5. package/src/astro/ActiveFilterTags.astro +29 -25
  6. package/src/astro/Alert.astro +46 -41
  7. package/src/astro/Badge.astro +80 -76
  8. package/src/astro/Band.astro +104 -58
  9. package/src/astro/Breadcrumb.astro +33 -29
  10. package/src/astro/Button.astro +132 -128
  11. package/src/astro/Card.astro +64 -60
  12. package/src/astro/CartLine.astro +59 -55
  13. package/src/astro/Checkbox.astro +37 -32
  14. package/src/astro/Chip.astro +68 -64
  15. package/src/astro/DotGrid.astro +50 -46
  16. package/src/astro/EmptyState.astro +26 -22
  17. package/src/astro/FilterGroup.astro +29 -25
  18. package/src/astro/Filters.astro +50 -46
  19. package/src/astro/Footer.astro +179 -175
  20. package/src/astro/FooterColumn.astro +39 -35
  21. package/src/astro/Header.astro +67 -63
  22. package/src/astro/Icon.astro +1 -1
  23. package/src/astro/IconButton.astro +64 -60
  24. package/src/astro/Marquee.astro +33 -29
  25. package/src/astro/NavDropdown.astro +120 -116
  26. package/src/astro/NavLink.astro +59 -55
  27. package/src/astro/Newsletter.astro +58 -54
  28. package/src/astro/Pager.astro +43 -39
  29. package/src/astro/PickCard.astro +72 -68
  30. package/src/astro/ProductCard.astro +120 -116
  31. package/src/astro/Radio.astro +36 -32
  32. package/src/astro/Skeleton.astro +43 -39
  33. package/src/astro/Social.astro +26 -22
  34. package/src/astro/StepIndicator.astro +55 -51
  35. package/src/astro/Sticker.astro +50 -46
  36. package/src/astro/Swatch.astro +44 -40
  37. package/src/astro/Table.astro +58 -54
  38. package/src/astro/TableCard.astro +39 -35
  39. package/src/astro/TextField.astro +92 -88
  40. package/src/astro/Totals.astro +39 -35
  41. package/src/react/Drawer.css +60 -56
  42. package/src/react/Modal.css +97 -93
  43. package/src/react/NewsCarousel.css +108 -104
  44. package/src/react/QuantityStepper.css +84 -80
  45. package/src/react/Select.css +159 -155
  46. package/src/react/Toast.css +128 -124
  47. package/src/styles/base.css +30 -26
  48. package/src/styles/controls.css +183 -179
  49. package/src/styles/motion.css +203 -199
@@ -44,82 +44,86 @@ const classes = ["ui-header", className].filter(Boolean).join(" ");
44
44
  </header>
45
45
 
46
46
  <style>
47
- .ui-header {
48
- display: flex;
49
- align-items: center;
50
- justify-content: space-between;
51
- gap: var(--space-6);
52
- min-height: 73px;
53
- padding: var(--space-5) var(--space-10);
54
- background: var(--bg);
55
- border-bottom: 1px solid var(--border);
56
- }
47
+ @layer reset, tokens, base, components, motion, utilities;
57
48
 
58
- .ui-brand {
59
- display: inline-flex;
60
- align-items: center;
61
- gap: var(--space-2-5, var(--space-2));
62
- text-decoration: none;
63
- color: var(--text);
64
- }
65
- .ui-brand:focus-visible {
66
- outline: 2px solid var(--focus);
67
- outline-offset: 2px;
68
- border-radius: var(--radius-sm);
69
- }
49
+ @layer components {
50
+ .ui-header {
51
+ display: flex;
52
+ align-items: center;
53
+ justify-content: space-between;
54
+ gap: var(--space-6);
55
+ min-height: 73px;
56
+ padding: var(--space-5) var(--space-10);
57
+ background: var(--bg);
58
+ border-bottom: 1px solid var(--border);
59
+ }
70
60
 
71
- .ui-brand__mark {
72
- display: inline-flex;
73
- align-items: center;
74
- justify-content: center;
75
- }
61
+ .ui-brand {
62
+ display: inline-flex;
63
+ align-items: center;
64
+ gap: var(--space-2-5, var(--space-2));
65
+ text-decoration: none;
66
+ color: var(--text);
67
+ }
68
+ .ui-brand:focus-visible {
69
+ outline: 2px solid var(--focus);
70
+ outline-offset: 2px;
71
+ border-radius: var(--radius-sm);
72
+ }
76
73
 
77
- .ui-brand__name {
78
- font-family: var(--font-sans);
79
- font-size: var(--text-lg);
80
- font-weight: var(--weight-bold);
81
- letter-spacing: var(--tracking-tight);
82
- }
83
- /* The shop wordmark: a lighter "shop" after the name. */
84
- .ui-brand__name :global(span) {
85
- font-weight: var(--weight-regular);
86
- color: var(--text-muted);
87
- }
74
+ .ui-brand__mark {
75
+ display: inline-flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ }
88
79
 
89
- .ui-nav {
90
- display: flex;
91
- align-items: center;
92
- gap: var(--space-6);
93
- }
80
+ .ui-brand__name {
81
+ font-family: var(--font-sans);
82
+ font-size: var(--text-lg);
83
+ font-weight: var(--weight-bold);
84
+ letter-spacing: var(--tracking-tight);
85
+ }
86
+ /* The shop wordmark: a lighter "shop" after the name. */
87
+ .ui-brand__name :global(span) {
88
+ font-weight: var(--weight-regular);
89
+ color: var(--text-muted);
90
+ }
94
91
 
95
- .ui-header__mobile {
96
- display: none;
97
- gap: var(--space-2);
98
- }
92
+ .ui-nav {
93
+ display: flex;
94
+ align-items: center;
95
+ gap: var(--space-6);
96
+ }
99
97
 
100
- /* Pin the compact state in component explorers and other constrained shells. */
101
- .ui-header--mobile {
102
- padding-inline: var(--space-4);
103
- }
104
- .ui-header--mobile .ui-nav {
105
- display: none;
106
- }
107
- .ui-header--mobile .ui-header__mobile {
108
- display: flex;
109
- }
98
+ .ui-header__mobile {
99
+ display: none;
100
+ gap: var(--space-2);
101
+ }
110
102
 
111
- /* Below 900 px the links collapse. The consumer fills the mobile slot with
112
- the menu and cart buttons and opens the Drawer from there. */
113
- @media (max-width: 900px) {
114
- .ui-header,
103
+ /* Pin the compact state in component explorers and other constrained shells. */
115
104
  .ui-header--mobile {
116
105
  padding-inline: var(--space-4);
117
106
  }
118
- .ui-header:not(.ui-header--mobile) .ui-nav {
107
+ .ui-header--mobile .ui-nav {
119
108
  display: none;
120
109
  }
121
- .ui-header:not(.ui-header--mobile) .ui-header__mobile {
110
+ .ui-header--mobile .ui-header__mobile {
122
111
  display: flex;
123
112
  }
113
+
114
+ /* Below 900 px the links collapse. The consumer fills the mobile slot with */
115
+ /* the menu and cart buttons and opens the Drawer from there. */
116
+ @media (max-width: 900px) {
117
+ .ui-header,
118
+ .ui-header--mobile {
119
+ padding-inline: var(--space-4);
120
+ }
121
+ .ui-header:not(.ui-header--mobile) .ui-nav {
122
+ display: none;
123
+ }
124
+ .ui-header:not(.ui-header--mobile) .ui-header__mobile {
125
+ display: flex;
126
+ }
127
+ }
124
128
  }
125
129
  </style>
@@ -51,7 +51,7 @@ const paths: Record<Props["name"], string> = {
51
51
  instagram:
52
52
  '<rect x="4" y="4" width="16" height="16" rx="5"/><circle cx="12" cy="12" r="3.6"/><path d="M17 7.2v.01"/>',
53
53
  facebook:
54
- '<path d="M14.5 8.5h2M14.5 8.5c0-2 .8-3 2.5-3M14.5 8.5V19M11 12h6"/>',
54
+ '<path d="M17 3.5h-2.5a4 4 0 0 0-4 4v3H8v3.5h2.5v6.5H14V14h2.6l.6-3.5H14v-2.2a1 1 0 0 1 1-1h2z"/>',
55
55
  youtube:
56
56
  '<rect x="3.5" y="6.5" width="17" height="11" rx="3.2"/><path d="M11 10.2l3.4 1.8-3.4 1.8z"/>',
57
57
  };
@@ -48,72 +48,76 @@ const classes = ["ui-iconbtn", className].filter(Boolean).join(" ");
48
48
  </button>
49
49
 
50
50
  <style>
51
- .ui-iconbtn {
52
- position: relative;
53
- display: inline-flex;
54
- align-items: center;
55
- justify-content: center;
56
- width: 44px;
57
- height: 44px;
58
- padding: 0;
59
- background: transparent;
60
- border: 1px solid transparent;
61
- border-radius: var(--radius-md);
62
- color: var(--text);
63
- cursor: pointer;
64
- transition:
65
- background-color var(--duration-fast) var(--ease-standard),
66
- border-color var(--duration-fast) var(--ease-standard);
67
- }
51
+ @layer reset, tokens, base, components, motion, utilities;
68
52
 
69
- .ui-iconbtn:hover,
70
- .ui-iconbtn.is-hover {
71
- background: var(--surface-hover);
72
- border-color: var(--border-strong);
73
- }
53
+ @layer components {
54
+ .ui-iconbtn {
55
+ position: relative;
56
+ display: inline-flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ width: 44px;
60
+ height: 44px;
61
+ padding: 0;
62
+ background: transparent;
63
+ border: 1px solid transparent;
64
+ border-radius: var(--radius-md);
65
+ color: var(--text);
66
+ cursor: pointer;
67
+ transition:
68
+ background-color var(--duration-fast) var(--ease-standard),
69
+ border-color var(--duration-fast) var(--ease-standard);
70
+ }
74
71
 
75
- .ui-iconbtn:focus-visible,
76
- .ui-iconbtn.is-focus {
77
- outline: 2px solid var(--focus);
78
- outline-offset: 2px;
79
- box-shadow: 0 0 0 4px var(--focus-outer);
80
- }
72
+ .ui-iconbtn:hover,
73
+ .ui-iconbtn.is-hover {
74
+ background: var(--surface-hover);
75
+ border-color: var(--border-strong);
76
+ }
81
77
 
82
- .ui-iconbtn:active,
83
- .ui-iconbtn.is-active {
84
- background: var(--surface-hover);
85
- }
78
+ .ui-iconbtn:focus-visible,
79
+ .ui-iconbtn.is-focus {
80
+ outline: 2px solid var(--focus);
81
+ outline-offset: 2px;
82
+ box-shadow: 0 0 0 4px var(--focus-outer);
83
+ }
86
84
 
87
- .ui-iconbtn:disabled,
88
- .ui-iconbtn.is-disabled {
89
- opacity: 0.5;
90
- cursor: not-allowed;
91
- pointer-events: none;
92
- }
85
+ .ui-iconbtn:active,
86
+ .ui-iconbtn.is-active {
87
+ background: var(--surface-hover);
88
+ }
93
89
 
94
- /* Count pill: 19 px, accent fill, top-right. */
95
- .ui-iconbtn__count {
96
- position: absolute;
97
- top: 3px;
98
- right: 3px;
99
- display: inline-flex;
100
- align-items: center;
101
- justify-content: center;
102
- min-width: 19px;
103
- height: 19px;
104
- padding: 0 var(--space-1);
105
- background: var(--accent);
106
- color: var(--accent-fg);
107
- border-radius: var(--radius-full);
108
- font-family: var(--font-sans);
109
- font-size: var(--text-2xs);
110
- font-weight: var(--weight-semibold);
111
- line-height: 1;
112
- }
90
+ .ui-iconbtn:disabled,
91
+ .ui-iconbtn.is-disabled {
92
+ opacity: 0.5;
93
+ cursor: not-allowed;
94
+ pointer-events: none;
95
+ }
113
96
 
114
- @media (prefers-reduced-motion: reduce) {
115
- .ui-iconbtn {
116
- transition: none;
97
+ /* Count pill: 19 px, accent fill, top-right. */
98
+ .ui-iconbtn__count {
99
+ position: absolute;
100
+ top: 3px;
101
+ right: 3px;
102
+ display: inline-flex;
103
+ align-items: center;
104
+ justify-content: center;
105
+ min-width: 19px;
106
+ height: 19px;
107
+ padding: 0 var(--space-1);
108
+ background: var(--accent);
109
+ color: var(--accent-fg);
110
+ border-radius: var(--radius-full);
111
+ font-family: var(--font-sans);
112
+ font-size: var(--text-2xs);
113
+ font-weight: var(--weight-semibold);
114
+ line-height: 1;
115
+ }
116
+
117
+ @media (prefers-reduced-motion: reduce) {
118
+ .ui-iconbtn {
119
+ transition: none;
120
+ }
117
121
  }
118
122
  }
119
123
  </style>
@@ -35,36 +35,40 @@ const { items, divider = "✦", class: className } = Astro.props;
35
35
  </div>
36
36
 
37
37
  <style>
38
- .ui-marquee {
39
- background: var(--surface-banner);
40
- color: var(--surface-inverse-fg);
41
- overflow: hidden;
42
- padding-block: var(--space-3);
43
- border-block: 1px solid var(--surface-inverse-border);
44
- transform: rotate(-1.2deg) scale(1.02);
45
- }
46
- .ui-marquee__track {
47
- display: flex;
48
- width: max-content;
49
- animation: pl-marquee 22s linear infinite;
50
- font-size: var(--text-sm);
51
- font-weight: var(--weight-semibold);
52
- letter-spacing: var(--tracking-wider);
53
- text-transform: uppercase;
54
- }
55
- .ui-marquee__group {
56
- display: flex;
57
- align-items: center;
58
- gap: var(--space-6);
59
- padding-right: var(--space-6);
60
- white-space: nowrap;
61
- }
62
- .ui-marquee__div {
63
- color: var(--sage-light);
64
- }
65
- @media (prefers-reduced-motion: reduce) {
38
+ @layer reset, tokens, base, components, motion, utilities;
39
+
40
+ @layer components {
41
+ .ui-marquee {
42
+ background: var(--surface-banner);
43
+ color: var(--surface-inverse-fg);
44
+ overflow: hidden;
45
+ padding-block: var(--space-3);
46
+ border-block: 1px solid var(--surface-inverse-border);
47
+ transform: rotate(-1.2deg) scale(1.02);
48
+ }
66
49
  .ui-marquee__track {
67
- animation: none;
50
+ display: flex;
51
+ width: max-content;
52
+ animation: pl-marquee 22s linear infinite;
53
+ font-size: var(--text-sm);
54
+ font-weight: var(--weight-semibold);
55
+ letter-spacing: var(--tracking-wider);
56
+ text-transform: uppercase;
57
+ }
58
+ .ui-marquee__group {
59
+ display: flex;
60
+ align-items: center;
61
+ gap: var(--space-6);
62
+ padding-right: var(--space-6);
63
+ white-space: nowrap;
64
+ }
65
+ .ui-marquee__div {
66
+ color: var(--sage-light);
67
+ }
68
+ @media (prefers-reduced-motion: reduce) {
69
+ .ui-marquee__track {
70
+ animation: none;
71
+ }
68
72
  }
69
73
  }
70
74
  </style>
@@ -96,132 +96,136 @@ const classes = ["ui-navgroup", open && "is-open", className]
96
96
  </script>
97
97
 
98
98
  <style>
99
- .ui-navgroup {
100
- position: relative;
101
- display: inline-block;
102
- }
99
+ @layer reset, tokens, base, components, motion, utilities;
103
100
 
104
- /* The trigger carries .ui-navlink, but that class is styled in NavLink.astro
105
- and Astro scopes styles per component: NavLink's rules only match NavLink's
106
- own markup. Without this block the button falls back to the browser default
107
- chrome, a grey fill and a border. Restated here so the trigger matches the
108
- sibling links it sits next to. */
109
- .ui-navlink {
110
- position: relative;
111
- display: inline-flex;
112
- align-items: center;
113
- gap: var(--space-1-5);
114
- padding: 7px 10px;
115
- margin: -7px -10px;
116
- border-radius: var(--radius-sm);
117
- font-family: var(--font-sans);
118
- font-size: var(--text-sm);
119
- font-weight: var(--weight-medium);
120
- line-height: 1;
121
- color: var(--text);
122
- text-decoration: none;
123
- background: none;
124
- border: 0;
125
- cursor: pointer;
126
- transition: color var(--duration-fast) var(--ease-standard);
127
- }
101
+ @layer components {
102
+ .ui-navgroup {
103
+ position: relative;
104
+ display: inline-block;
105
+ }
128
106
 
129
- .ui-navlink::after {
130
- content: "";
131
- position: absolute;
132
- left: 10px;
133
- right: 10px;
134
- bottom: 2px;
135
- height: 2px;
136
- background: currentColor;
137
- opacity: 0;
138
- transition: opacity var(--duration-fast) var(--ease-standard);
139
- }
107
+ /* The trigger carries .ui-navlink, but that class is styled in NavLink.astro */
108
+ /* and Astro scopes styles per component: NavLink's rules only match NavLink's */
109
+ /* own markup. Without this block the button falls back to the browser default */
110
+ /* chrome, a grey fill and a border. Restated here so the trigger matches the */
111
+ /* sibling links it sits next to. */
112
+ .ui-navlink {
113
+ position: relative;
114
+ display: inline-flex;
115
+ align-items: center;
116
+ gap: var(--space-1-5);
117
+ padding: 7px 10px;
118
+ margin: -7px -10px;
119
+ border-radius: var(--radius-sm);
120
+ font-family: var(--font-sans);
121
+ font-size: var(--text-sm);
122
+ font-weight: var(--weight-medium);
123
+ line-height: 1;
124
+ color: var(--text);
125
+ text-decoration: none;
126
+ background: none;
127
+ border: 0;
128
+ cursor: pointer;
129
+ transition: color var(--duration-fast) var(--ease-standard);
130
+ }
140
131
 
141
- .ui-navlink:hover,
142
- .ui-navlink.is-hover {
143
- color: var(--link-hover);
144
- }
145
- .ui-navlink:hover::after,
146
- .ui-navlink.is-hover::after {
147
- opacity: 1;
148
- }
132
+ .ui-navlink::after {
133
+ content: "";
134
+ position: absolute;
135
+ left: 10px;
136
+ right: 10px;
137
+ bottom: 2px;
138
+ height: 2px;
139
+ background: currentColor;
140
+ opacity: 0;
141
+ transition: opacity var(--duration-fast) var(--ease-standard);
142
+ }
149
143
 
150
- /* While the panel is open the trigger reads as active, the same way the
151
- current page does. */
152
- .ui-navgroup:hover > .ui-navlink::after,
153
- .ui-navgroup:focus-within > .ui-navlink::after,
154
- .ui-navgroup.is-open > .ui-navlink::after {
155
- opacity: 1;
156
- }
144
+ .ui-navlink:hover,
145
+ .ui-navlink.is-hover {
146
+ color: var(--link-hover);
147
+ }
148
+ .ui-navlink:hover::after,
149
+ .ui-navlink.is-hover::after {
150
+ opacity: 1;
151
+ }
157
152
 
158
- .ui-navlink:focus-visible,
159
- .ui-navlink.is-focus {
160
- outline: 2px solid var(--focus);
161
- outline-offset: 2px;
162
- box-shadow: 0 0 0 4px var(--focus-outer);
163
- }
153
+ /* While the panel is open the trigger reads as active, the same way the */
154
+ /* current page does. */
155
+ .ui-navgroup:hover > .ui-navlink::after,
156
+ .ui-navgroup:focus-within > .ui-navlink::after,
157
+ .ui-navgroup.is-open > .ui-navlink::after {
158
+ opacity: 1;
159
+ }
164
160
 
165
- /* The chevron turns over when the panel is open. */
166
- .ui-navlink > span {
167
- display: inline-flex;
168
- line-height: 0;
169
- transition: transform var(--duration-fast) var(--ease-standard);
170
- }
171
- .ui-navgroup:hover > .ui-navlink > span,
172
- .ui-navgroup:focus-within > .ui-navlink > span,
173
- .ui-navgroup.is-open > .ui-navlink > span {
174
- transform: rotate(180deg);
175
- }
161
+ .ui-navlink:focus-visible,
162
+ .ui-navlink.is-focus {
163
+ outline: 2px solid var(--focus);
164
+ outline-offset: 2px;
165
+ box-shadow: 0 0 0 4px var(--focus-outer);
166
+ }
176
167
 
177
- .ui-navpanel {
178
- position: absolute;
179
- top: 100%;
180
- left: -10px;
181
- z-index: var(--z-dropdown);
182
- min-width: 216px;
183
- margin-top: var(--space-2);
184
- padding: var(--space-2);
185
- display: none;
186
- flex-direction: column;
187
- gap: var(--space-px);
188
- background: var(--surface);
189
- border: 1px solid var(--border);
190
- border-radius: var(--radius-lg);
191
- box-shadow: var(--shadow-lg);
192
- }
168
+ /* The chevron turns over when the panel is open. */
169
+ .ui-navlink > span {
170
+ display: inline-flex;
171
+ line-height: 0;
172
+ transition: transform var(--duration-fast) var(--ease-standard);
173
+ }
174
+ .ui-navgroup:hover > .ui-navlink > span,
175
+ .ui-navgroup:focus-within > .ui-navlink > span,
176
+ .ui-navgroup.is-open > .ui-navlink > span {
177
+ transform: rotate(180deg);
178
+ }
193
179
 
194
- /* Opens on hover and when any child holds focus. */
195
- .ui-navgroup:hover .ui-navpanel,
196
- .ui-navgroup:focus-within .ui-navpanel,
197
- .ui-navgroup.is-open .ui-navpanel {
198
- display: flex;
199
- }
180
+ .ui-navpanel {
181
+ position: absolute;
182
+ top: 100%;
183
+ left: -10px;
184
+ z-index: var(--z-dropdown);
185
+ min-width: 216px;
186
+ margin-top: var(--space-2);
187
+ padding: var(--space-2);
188
+ display: none;
189
+ flex-direction: column;
190
+ gap: var(--space-px);
191
+ background: var(--surface);
192
+ border: 1px solid var(--border);
193
+ border-radius: var(--radius-lg);
194
+ box-shadow: var(--shadow-lg);
195
+ }
200
196
 
201
- .ui-navpanel :global(a) {
202
- display: block;
203
- padding: var(--space-2) var(--space-3);
204
- border-radius: var(--radius-sm);
205
- font-size: var(--text-sm);
206
- color: var(--text);
207
- text-decoration: none;
208
- transition: background-color var(--duration-fast) var(--ease-standard);
209
- }
210
- .ui-navpanel :global(a:hover) {
211
- background: var(--surface-hover);
212
- color: var(--link-hover);
213
- }
214
- .ui-navpanel :global(a:focus-visible) {
215
- outline: 2px solid var(--focus);
216
- outline-offset: -2px;
217
- }
197
+ /* Opens on hover and when any child holds focus. */
198
+ .ui-navgroup:hover .ui-navpanel,
199
+ .ui-navgroup:focus-within .ui-navpanel,
200
+ .ui-navgroup.is-open .ui-navpanel {
201
+ display: flex;
202
+ }
218
203
 
219
- @media (prefers-reduced-motion: reduce) {
220
- .ui-navpanel :global(a),
221
- .ui-navlink,
222
- .ui-navlink::after,
223
- .ui-navlink > span {
224
- transition: none;
204
+ .ui-navpanel :global(a) {
205
+ display: block;
206
+ padding: var(--space-2) var(--space-3);
207
+ border-radius: var(--radius-sm);
208
+ font-size: var(--text-sm);
209
+ color: var(--text);
210
+ text-decoration: none;
211
+ transition: background-color var(--duration-fast) var(--ease-standard);
212
+ }
213
+ .ui-navpanel :global(a:hover) {
214
+ background: var(--surface-hover);
215
+ color: var(--link-hover);
216
+ }
217
+ .ui-navpanel :global(a:focus-visible) {
218
+ outline: 2px solid var(--focus);
219
+ outline-offset: -2px;
220
+ }
221
+
222
+ @media (prefers-reduced-motion: reduce) {
223
+ .ui-navpanel :global(a),
224
+ .ui-navlink,
225
+ .ui-navlink::after,
226
+ .ui-navlink > span {
227
+ transition: none;
228
+ }
225
229
  }
226
230
  }
227
231
  </style>