@expressivecss/expressive 0.1.0-alpha.3

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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +82 -0
  3. package/dist/css/expressive.css +9914 -0
  4. package/dist/css/expressive.min.css +1 -0
  5. package/dist/js/components/autocomplete.d.ts +152 -0
  6. package/dist/js/components/buttons.d.ts +66 -0
  7. package/dist/js/components/cards.d.ts +50 -0
  8. package/dist/js/components/carousel.d.ts +131 -0
  9. package/dist/js/components/chips.d.ts +135 -0
  10. package/dist/js/components/collapsible.d.ts +74 -0
  11. package/dist/js/components/datepicker.d.ts +336 -0
  12. package/dist/js/components/dropdown.d.ts +148 -0
  13. package/dist/js/components/index.d.ts +21 -0
  14. package/dist/js/components/materialbox.d.ts +97 -0
  15. package/dist/js/components/modal.d.ts +45 -0
  16. package/dist/js/components/parallax.d.ts +40 -0
  17. package/dist/js/components/pushpin.d.ts +51 -0
  18. package/dist/js/components/scrollspy.d.ts +80 -0
  19. package/dist/js/components/sidenav.d.ts +125 -0
  20. package/dist/js/components/slider.d.ts +101 -0
  21. package/dist/js/components/tabs.d.ts +80 -0
  22. package/dist/js/components/tap-target.d.ts +58 -0
  23. package/dist/js/components/timepicker.d.ts +207 -0
  24. package/dist/js/components/toast.d.ts +93 -0
  25. package/dist/js/components/tooltip.d.ts +117 -0
  26. package/dist/js/components/waves.d.ts +15 -0
  27. package/dist/js/expressive.js +8239 -0
  28. package/dist/js/expressive.js.map +1 -0
  29. package/dist/js/expressive.min.js +2 -0
  30. package/dist/js/expressive.min.js.map +1 -0
  31. package/dist/js/expressive.mjs +8206 -0
  32. package/dist/js/expressive.mjs.map +1 -0
  33. package/dist/js/forms/character-counter.d.ts +36 -0
  34. package/dist/js/forms/forms.d.ts +17 -0
  35. package/dist/js/forms/index.d.ts +4 -0
  36. package/dist/js/forms/range.d.ts +40 -0
  37. package/dist/js/forms/select.d.ts +77 -0
  38. package/dist/js/foundation/component.d.ts +73 -0
  39. package/dist/js/foundation/index.d.ts +2 -0
  40. package/dist/js/foundation/utils.d.ts +122 -0
  41. package/dist/js/index.d.ts +52 -0
  42. package/dist/js/plugins/docked-display.d.ts +34 -0
  43. package/dist/js/plugins/index.d.ts +1 -0
  44. package/package.json +71 -0
  45. package/src/scss/components/_appbar.scss +454 -0
  46. package/src/scss/components/_badges.scss +77 -0
  47. package/src/scss/components/_breadcrumb.scss +27 -0
  48. package/src/scss/components/_buttons.scss +412 -0
  49. package/src/scss/components/_cards.scss +267 -0
  50. package/src/scss/components/_carousel.scss +93 -0
  51. package/src/scss/components/_chips.scss +147 -0
  52. package/src/scss/components/_collapsible.scss +84 -0
  53. package/src/scss/components/_collection.scss +114 -0
  54. package/src/scss/components/_date-picker.scss +268 -0
  55. package/src/scss/components/_dropdown.scss +98 -0
  56. package/src/scss/components/_index.scss +28 -0
  57. package/src/scss/components/_material-box.scss +42 -0
  58. package/src/scss/components/_material-icons.scss +6 -0
  59. package/src/scss/components/_modal.scss +84 -0
  60. package/src/scss/components/_pagination.scss +45 -0
  61. package/src/scss/components/_parallax.scss +26 -0
  62. package/src/scss/components/_preloader.scss +422 -0
  63. package/src/scss/components/_pulse.scss +35 -0
  64. package/src/scss/components/_sidenav.scss +229 -0
  65. package/src/scss/components/_slider.scss +119 -0
  66. package/src/scss/components/_table-of-contents.scss +32 -0
  67. package/src/scss/components/_tabs.scss +176 -0
  68. package/src/scss/components/_tap-target.scss +102 -0
  69. package/src/scss/components/_time-picker.scss +294 -0
  70. package/src/scss/components/_toast.scss +70 -0
  71. package/src/scss/components/_tooltip.scss +49 -0
  72. package/src/scss/components/_transitions.scss +19 -0
  73. package/src/scss/components/_video.scss +15 -0
  74. package/src/scss/expressive.scss +7 -0
  75. package/src/scss/forms/_checkboxes.scss +199 -0
  76. package/src/scss/forms/_file-input.scss +41 -0
  77. package/src/scss/forms/_index.scss +17 -0
  78. package/src/scss/forms/_input-fields.scss +360 -0
  79. package/src/scss/forms/_radio-buttons.scss +114 -0
  80. package/src/scss/forms/_range.scss +148 -0
  81. package/src/scss/forms/_select.scss +108 -0
  82. package/src/scss/forms/_switches.scss +127 -0
  83. package/src/scss/foundation/_base.scss +71 -0
  84. package/src/scss/foundation/_color-palette.scss +402 -0
  85. package/src/scss/foundation/_index.scss +10 -0
  86. package/src/scss/foundation/_mixins.scss +198 -0
  87. package/src/scss/foundation/_motion.scss +70 -0
  88. package/src/scss/foundation/_normalize.scss +349 -0
  89. package/src/scss/foundation/_shape.scss +30 -0
  90. package/src/scss/foundation/_state-layers.scss +68 -0
  91. package/src/scss/foundation/_theme.scss +238 -0
  92. package/src/scss/foundation/_tokens.scss +511 -0
  93. package/src/scss/foundation/_variables.scss +57 -0
  94. package/src/scss/layout/_footer.scss +26 -0
  95. package/src/scss/layout/_grid.scss +172 -0
  96. package/src/scss/layout/_index.scss +3 -0
  97. package/src/scss/layout/_table.scss +119 -0
  98. package/src/scss/utilities/_a11y.scss +77 -0
  99. package/src/scss/utilities/_colors.scss +74 -0
  100. package/src/scss/utilities/_elevation.scss +63 -0
  101. package/src/scss/utilities/_helpers.scss +50 -0
  102. package/src/scss/utilities/_index.scss +7 -0
  103. package/src/scss/utilities/_responsive.scss +62 -0
  104. package/src/scss/utilities/_spacing.scss +38 -0
  105. package/src/scss/utilities/_typography.scss +115 -0
@@ -0,0 +1,454 @@
1
+ @use '../foundation/variables' as *;
2
+ @use '../utilities/elevation' as *;
3
+
4
+ // ==========================================================================
5
+ // App Bar (Top) — M3 Expressive
6
+ // ==========================================================================
7
+ //
8
+ // Implements Material Design 3 Expressive top app bar.
9
+ // Reference: https://m3.material.io/components/app-bars
10
+ //
11
+ // Variants:
12
+ // .appbar — Small (default, 64dp)
13
+ // .appbar.appbar-medium — Medium flexible (112dp expanded)
14
+ // .appbar.appbar-large — Large flexible (152dp expanded)
15
+ //
16
+ // Structure:
17
+ // <header class="appbar" role="banner">
18
+ // <div class="appbar-row">
19
+ // <a class="sidenav-trigger" aria-label="Open navigation">
20
+ // <i class="material-symbols-outlined">menu</i>
21
+ // </a>
22
+ // <a class="appbar-title">Title</a>
23
+ // <ul class="right" role="toolbar" aria-label="Actions">
24
+ // <li><a href="#" aria-label="Search"><i>search</i></a></li>
25
+ // </ul>
26
+ // </div>
27
+ // </header>
28
+ //
29
+ // Accessibility:
30
+ // - Use role="banner" on the root element (or <header>)
31
+ // - Use role="toolbar" + aria-label on action item containers
32
+ // - All icon-only actions require aria-label
33
+ // - Navigation icon needs aria-label (e.g., "Open navigation menu")
34
+ // - Minimum touch target: 48x48dp for all interactive elements
35
+ // - Keyboard: Tab to enter toolbar, Arrow keys between items (roving tabindex)
36
+ // ==========================================================================
37
+
38
+ :root {
39
+ // App bar dimensions
40
+ --appbar-height: 64px;
41
+ --appbar-height-mobile: 56px;
42
+ --appbar-medium-height: 112px;
43
+ --appbar-large-height: 152px;
44
+ // App bar color tokens (M3 Expressive)
45
+ --appbar-container-color: var(--md-sys-color-surface);
46
+ --appbar-on-container-color: var(--md-sys-color-on-surface);
47
+ --appbar-action-icon-color: var(--md-sys-color-on-surface-variant);
48
+ --appbar-scrolled-container-color: var(--md-sys-color-surface-container);
49
+ // App bar title typography (M3 titleLarge)
50
+ --appbar-title-size: 1.375rem; // 22sp
51
+ --appbar-title-line-height: 1.75rem; // 28sp
52
+ --appbar-title-weight: 400;
53
+ // App bar headline typography for medium/large (M3 headlineSmall)
54
+ --appbar-headline-size: 1.5rem; // 24sp
55
+ --appbar-headline-line-height: 2rem; // 32sp
56
+ --appbar-headline-weight: 400;
57
+ // Minimum interactive target for accessibility
58
+ --appbar-min-touch-target: 48px;
59
+ // Horizontal padding
60
+ --appbar-padding-inline: 4px;
61
+ --appbar-title-padding-inline: 16px;
62
+ }
63
+
64
+ // ==========================================================================
65
+ // Small App Bar (default)
66
+ // ==========================================================================
67
+
68
+ .appbar {
69
+ background-color: var(--appbar-container-color);
70
+ color: var(--appbar-on-container-color);
71
+ width: 100%;
72
+ height: var(--appbar-height-mobile);
73
+ line-height: var(--appbar-height-mobile);
74
+ transition: background-color 0.2s ease, box-shadow 0.2s ease;
75
+ position: relative;
76
+ z-index: 1;
77
+
78
+ // Scrolled / lifted state — add via JS or :has() when content scrolls
79
+ &.appbar-scrolled {
80
+ background-color: var(--appbar-scrolled-container-color);
81
+ @extend .z-depth-2;
82
+ }
83
+
84
+ // Links inherit container text color
85
+ a {
86
+ color: var(--appbar-on-container-color);
87
+ }
88
+
89
+ // Icons
90
+ i,
91
+ [class^="mdi-"], [class*="mdi-"],
92
+ i.material-icons, i.material-symbols-outlined,
93
+ i.material-symbols-rounded, i.material-symbols-sharp {
94
+ display: block;
95
+ font-size: 24px;
96
+ height: var(--appbar-height-mobile);
97
+ line-height: var(--appbar-height-mobile);
98
+ }
99
+
100
+ // ------------------------------------------------------------------
101
+ // App Bar Row — primary layout container
102
+ // ------------------------------------------------------------------
103
+ .appbar-row {
104
+ position: relative;
105
+ height: 100%;
106
+ padding-inline: var(--appbar-padding-inline);
107
+ display: flex;
108
+ align-items: center;
109
+ }
110
+
111
+ // ------------------------------------------------------------------
112
+ // Navigation icon (sidenav trigger)
113
+ // ------------------------------------------------------------------
114
+ @media #{$large-and-up} {
115
+ a.sidenav-trigger {
116
+ display: none;
117
+ }
118
+ }
119
+
120
+ .sidenav-trigger {
121
+ float: left;
122
+ position: relative;
123
+ z-index: 1;
124
+ height: var(--appbar-height-mobile);
125
+ min-width: var(--appbar-min-touch-target);
126
+ min-height: var(--appbar-min-touch-target);
127
+ margin: 0 18px;
128
+ display: inline-flex;
129
+ align-items: center;
130
+ justify-content: center;
131
+ border-radius: 50%;
132
+
133
+ &:focus-visible {
134
+ outline: 2px solid var(--md-sys-color-primary);
135
+ outline-offset: 2px;
136
+ }
137
+
138
+ i {
139
+ height: var(--appbar-height-mobile);
140
+ line-height: var(--appbar-height-mobile);
141
+ }
142
+ }
143
+
144
+ // ------------------------------------------------------------------
145
+ // App Bar Title (M3 titleLarge)
146
+ // ------------------------------------------------------------------
147
+ .appbar-title {
148
+ font-size: var(--appbar-title-size);
149
+ font-weight: var(--appbar-title-weight);
150
+ line-height: var(--appbar-title-line-height);
151
+ color: var(--appbar-on-container-color);
152
+ overflow: hidden;
153
+ text-overflow: ellipsis;
154
+ white-space: nowrap;
155
+ padding-inline: var(--appbar-title-padding-inline);
156
+ flex: 1;
157
+
158
+ &.center {
159
+ text-align: center;
160
+ position: absolute;
161
+ left: 50%;
162
+ transform: translateX(-50%);
163
+ }
164
+
165
+ @media #{$medium-and-down} {
166
+ text-align: center;
167
+ position: absolute;
168
+ left: 50%;
169
+ transform: translateX(-50%);
170
+ max-width: 60%;
171
+
172
+ &.left, &.right {
173
+ position: relative;
174
+ left: auto;
175
+ transform: none;
176
+ text-align: left;
177
+ max-width: none;
178
+ }
179
+
180
+ &.left {
181
+ margin-left: 0.5rem;
182
+ }
183
+ &.right {
184
+ margin-left: auto;
185
+ margin-right: 0.5rem;
186
+ }
187
+ }
188
+
189
+ &.right {
190
+ margin-left: auto;
191
+ margin-right: 0.5rem;
192
+ text-align: right;
193
+ flex: none;
194
+ }
195
+
196
+ // Icon within title
197
+ i,
198
+ [class^="mdi-"], [class*="mdi-"],
199
+ i.material-icons, i.material-symbols-outlined,
200
+ i.material-symbols-rounded, i.material-symbols-sharp {
201
+ float: left;
202
+ margin-right: 15px;
203
+ }
204
+ }
205
+
206
+ // ------------------------------------------------------------------
207
+ // Action items (navigation list)
208
+ // ------------------------------------------------------------------
209
+ ul:not(.dropdown-content) {
210
+ list-style-type: none;
211
+ margin: 0;
212
+ display: flex;
213
+ align-items: center;
214
+
215
+ & > li {
216
+ transition: background-color 0.2s ease;
217
+ padding: 0;
218
+
219
+ & > a {
220
+ transition: background-color 0.2s ease;
221
+ font-size: 1rem;
222
+ color: var(--appbar-on-container-color);
223
+ display: flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ padding: 0 15px;
227
+ cursor: pointer;
228
+ min-width: var(--appbar-min-touch-target);
229
+ min-height: var(--appbar-min-touch-target);
230
+
231
+ &:focus-visible {
232
+ outline: 2px solid var(--md-sys-color-primary);
233
+ outline-offset: -2px;
234
+ border-radius: 4px;
235
+ }
236
+
237
+ &.active {
238
+ background-color: rgba(var(--md-sys-color-on-surface-rgb, 0, 0, 0), 0.12);
239
+ }
240
+
241
+ &:hover:not(.active) {
242
+ background-color: rgba(var(--md-sys-color-on-surface-rgb, 0, 0, 0), 0.08);
243
+ }
244
+
245
+ &.btn, &.btn-large, &.btn-flat, &.btn-floating {
246
+ margin-top: -2px;
247
+ margin-left: 15px;
248
+ margin-right: 15px;
249
+ display: inline-flex;
250
+
251
+ & > .material-icons, & > .material-symbols-outlined,
252
+ & > .material-symbols-rounded, & > .material-symbols-sharp {
253
+ height: inherit;
254
+ line-height: inherit;
255
+ }
256
+ }
257
+
258
+ // Action icons use on-surface-variant per M3 spec
259
+ i,
260
+ [class^="mdi-"], [class*="mdi-"],
261
+ i.material-icons, i.material-symbols-outlined,
262
+ i.material-symbols-rounded, i.material-symbols-sharp {
263
+ color: var(--appbar-action-icon-color);
264
+ }
265
+ }
266
+ }
267
+
268
+ &.left {
269
+ float: left;
270
+ }
271
+ }
272
+
273
+ // ------------------------------------------------------------------
274
+ // Search form integration
275
+ // ------------------------------------------------------------------
276
+ form {
277
+ height: 100%;
278
+ }
279
+
280
+ .input-field {
281
+ margin: 0;
282
+ height: 100%;
283
+
284
+ input[type=search] {
285
+ height: 100%;
286
+ font-size: 1.2rem;
287
+ border: none;
288
+ padding-left: 2rem;
289
+ color: var(--appbar-on-container-color);
290
+ background-color: transparent;
291
+
292
+ &:focus, &[type=text]:valid, &[type=password]:valid,
293
+ &[type=email]:valid, &[type=url]:valid, &[type=date]:valid {
294
+ border: none;
295
+ box-shadow: none;
296
+ }
297
+ }
298
+
299
+ label {
300
+ top: 0;
301
+ left: 0;
302
+
303
+ i {
304
+ color: var(--appbar-action-icon-color);
305
+ transition: color 0.2s ease;
306
+ }
307
+
308
+ &.active i {
309
+ color: var(--appbar-on-container-color);
310
+ }
311
+ }
312
+ }
313
+
314
+ // ==========================================================================
315
+ // Medium Flexible App Bar (M3 Expressive)
316
+ // ==========================================================================
317
+ &.appbar-medium {
318
+ height: auto;
319
+ min-height: var(--appbar-medium-height);
320
+
321
+ .appbar-row {
322
+ min-height: var(--appbar-height-mobile);
323
+ height: auto;
324
+ }
325
+
326
+ .appbar-content {
327
+ position: relative;
328
+ padding: 0 var(--appbar-title-padding-inline) 20px;
329
+ line-height: normal;
330
+ }
331
+
332
+ .appbar-headline {
333
+ display: block;
334
+ font-size: var(--appbar-headline-size);
335
+ font-weight: var(--appbar-headline-weight);
336
+ line-height: var(--appbar-headline-line-height);
337
+ color: var(--appbar-on-container-color);
338
+ padding: 0 var(--appbar-title-padding-inline);
339
+ }
340
+ }
341
+
342
+ // ==========================================================================
343
+ // Large Flexible App Bar (M3 Expressive)
344
+ // ==========================================================================
345
+ &.appbar-large {
346
+ height: auto;
347
+ min-height: var(--appbar-large-height);
348
+
349
+ .appbar-row {
350
+ min-height: var(--appbar-height-mobile);
351
+ height: auto;
352
+ }
353
+
354
+ .appbar-content {
355
+ position: relative;
356
+ padding: 0 var(--appbar-title-padding-inline) 28px;
357
+ line-height: normal;
358
+ }
359
+
360
+ .appbar-headline {
361
+ display: block;
362
+ font-size: 1.75rem; // 28sp — M3 headlineMedium
363
+ font-weight: 400;
364
+ line-height: 2.25rem; // 36sp
365
+ color: var(--appbar-on-container-color);
366
+ padding: 0 var(--appbar-title-padding-inline);
367
+ }
368
+ }
369
+
370
+ // ==========================================================================
371
+ // Subtitle support (M3 Expressive)
372
+ // ==========================================================================
373
+ .appbar-subtitle {
374
+ display: block;
375
+ font-size: 0.875rem; // 14sp — M3 titleSmall
376
+ font-weight: 400;
377
+ line-height: 1.25rem; // 20sp
378
+ color: var(--appbar-action-icon-color);
379
+ padding: 0 var(--appbar-title-padding-inline);
380
+ }
381
+
382
+ // ==========================================================================
383
+ // Responsive — Desktop (nested inside .appbar)
384
+ // ==========================================================================
385
+ @media #{$medium-and-up} {
386
+ &,
387
+ .appbar-row i,
388
+ a.sidenav-trigger,
389
+ a.sidenav-trigger i {
390
+ height: var(--appbar-height);
391
+ line-height: var(--appbar-height);
392
+ }
393
+
394
+ &.appbar-medium .appbar-row,
395
+ &.appbar-large .appbar-row {
396
+ min-height: var(--appbar-height);
397
+ }
398
+ }
399
+ }
400
+
401
+ // ==========================================================================
402
+ // Fixed App Bar
403
+ // ==========================================================================
404
+
405
+ .appbar-fixed {
406
+ position: relative;
407
+ height: var(--appbar-height-mobile);
408
+ z-index: 997;
409
+
410
+ .appbar {
411
+ position: fixed;
412
+ right: 0;
413
+ left: 0;
414
+ top: 0;
415
+ }
416
+
417
+ @media #{$medium-and-up} {
418
+ height: var(--appbar-height);
419
+ }
420
+ }
421
+
422
+ // ==========================================================================
423
+ // Backward compatibility aliases (deprecated — will be removed in v3)
424
+ // ==========================================================================
425
+ // Allows existing markup using .navbar classes to continue working.
426
+ // Migrate to .appbar equivalents.
427
+
428
+ .navbar {
429
+ @extend .appbar;
430
+ }
431
+
432
+ .navbar-fixed {
433
+ @extend .appbar-fixed;
434
+ }
435
+
436
+ .nav-wrapper {
437
+ @extend .appbar-row;
438
+ }
439
+
440
+ .nav-extended {
441
+ @extend .appbar-medium;
442
+ }
443
+
444
+ .nav-content {
445
+ @extend .appbar-content;
446
+ }
447
+
448
+ .brand-logo {
449
+ @extend .appbar-title;
450
+ }
451
+
452
+ .nav-title {
453
+ @extend .appbar-headline;
454
+ }
@@ -0,0 +1,77 @@
1
+ // TODO: Make better structure
2
+ :root {
3
+ --bagde-height: 22px;
4
+ }
5
+
6
+ span.badge {
7
+ min-width: 3rem;
8
+ padding: 0 6px;
9
+ margin-left: 14px;
10
+ text-align: center;
11
+ font-size: 1rem;
12
+ line-height: var(--bagde-height);
13
+ height: var(--bagde-height);
14
+ color: var(--md-sys-color-on-surface-variant);
15
+ float: right;
16
+ box-sizing: border-box;
17
+
18
+ &.new {
19
+ font-weight: 300;
20
+ font-size: 0.8rem;
21
+ color: var(--md-sys-color-on-primary);
22
+ background-color: var(--md-sys-color-primary);
23
+ border-radius: 2px;
24
+
25
+ &:after {
26
+ content: " new";
27
+ }
28
+ }
29
+
30
+ &[data-badge-caption]::after {
31
+ content: " " attr(data-badge-caption);
32
+ }
33
+
34
+ // Context-specific overrides
35
+ .active & {
36
+ color: var(--md-sys-color-on-primary);
37
+ }
38
+
39
+ .appbar ul a &,
40
+ .navbar ul a & {
41
+ display: inline-block;
42
+ float: none;
43
+ margin-left: 4px;
44
+ line-height: var(--bagde-height);
45
+ height: var(--bagde-height);
46
+ -webkit-font-smoothing: auto;
47
+ }
48
+
49
+ .collection-item & {
50
+ margin-top: calc(calc(1.5rem * 0.5) - calc(var(--bagde-height) * 0.5));
51
+ }
52
+
53
+ .sidenav & {
54
+ margin-top: calc(calc(var(--sidenav-line-height) * 0.5) - calc(22px * 0.5));
55
+ }
56
+
57
+ table & {
58
+ display: inline-block;
59
+ float: none;
60
+ margin-left: auto;
61
+ }
62
+ }
63
+
64
+ .collapsible {
65
+ span.badge {
66
+ margin-left: auto;
67
+
68
+ &.leading {
69
+ margin-right: 7px;
70
+ order: -1;
71
+ }
72
+ }
73
+
74
+ .active span.badge:not(.new) {
75
+ color: var(--md-sys-color-on-surface-variant);
76
+ }
77
+ }
@@ -0,0 +1,27 @@
1
+ .breadcrumb-wrapper {
2
+ display: flex;
3
+ align-items: center;
4
+ }
5
+
6
+ .breadcrumb {
7
+ display: inline-flex;
8
+ align-items: center;
9
+
10
+ i,
11
+ i.material-icons, i.material-symbols-outlined,
12
+ i.material-symbols-rounded, i.material-symbols-sharp,
13
+ &:before {
14
+ font-weight: normal;
15
+ font-style: normal;
16
+ font-size: 24px;
17
+ }
18
+
19
+ &:before {
20
+ content: '\E5CC';
21
+ font-family: 'Material Symbols Outlined', 'Material Symbols Rounded', 'Material Symbols Sharp', 'Material Icons';
22
+ }
23
+
24
+ &:first-child:before {
25
+ visibility: hidden;
26
+ }
27
+ }