@celar-ui/svelte 1.8.1 → 2.0.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 (101) hide show
  1. package/dist/buttons/BaseButton.svelte +0 -2
  2. package/dist/buttons/BaseButton.svelte.d.ts +0 -1
  3. package/dist/buttons/ElevatedButton.svelte +1 -3
  4. package/dist/buttons/ElevatedButton.svelte.d.ts +1 -1
  5. package/dist/buttons/ExpandedTextButton.svelte +2 -2
  6. package/dist/buttons/ExpandedTextButton.svelte.d.ts +1 -1
  7. package/dist/buttons/FilledButton.svelte +1 -2
  8. package/dist/buttons/FilledButton.svelte.d.ts +1 -1
  9. package/dist/buttons/IconButton.svelte +1 -1
  10. package/dist/buttons/IconButton.svelte.d.ts +1 -1
  11. package/dist/buttons/OutlinedButton.svelte +1 -3
  12. package/dist/buttons/OutlinedButton.svelte.d.ts +1 -1
  13. package/dist/buttons/TextBaseButton.svelte +15 -46
  14. package/dist/buttons/TextButton.svelte +1 -3
  15. package/dist/buttons/TextButton.svelte.d.ts +1 -1
  16. package/dist/buttons/styles/button_utils.css +37 -0
  17. package/dist/buttons/styles/elevated_button.css +19 -0
  18. package/dist/buttons/styles/expanded_text_button.css +23 -0
  19. package/dist/buttons/styles/filled_button.css +21 -0
  20. package/dist/buttons/styles/icon_button.css +42 -0
  21. package/dist/buttons/styles/outlined_button.css +21 -0
  22. package/dist/buttons/styles/text_button.css +22 -0
  23. package/dist/containment/Avatar.svelte +1 -1
  24. package/dist/containment/Avatar.svelte.d.ts +1 -1
  25. package/dist/containment/Breadcrumb.svelte +1 -23
  26. package/dist/containment/Breadcrumb.svelte.d.ts +1 -0
  27. package/dist/containment/Card.svelte +1 -1
  28. package/dist/containment/Card.svelte.d.ts +1 -1
  29. package/dist/containment/Container.svelte +1 -1
  30. package/dist/containment/Container.svelte.d.ts +1 -1
  31. package/dist/containment/Spacer.svelte +17 -11
  32. package/dist/containment/SurfaceContainer.svelte +1 -1
  33. package/dist/containment/SurfaceContainer.svelte.d.ts +1 -1
  34. package/dist/containment/styles/avatar.css +20 -0
  35. package/dist/containment/styles/breadcrumb.css +27 -0
  36. package/dist/containment/styles/card.css +7 -0
  37. package/dist/containment/styles/container.css +26 -0
  38. package/dist/containment/styles/surface-container.css +29 -0
  39. package/dist/inputs/Checkbox.svelte +43 -45
  40. package/dist/inputs/ColorInput.svelte +63 -51
  41. package/dist/inputs/FileInput.svelte +39 -30
  42. package/dist/inputs/RadioGroup.svelte +1 -2
  43. package/dist/inputs/RadioGroup.svelte.d.ts +1 -1
  44. package/dist/inputs/RadioItem.svelte +38 -36
  45. package/dist/inputs/Slider.svelte +78 -86
  46. package/dist/inputs/Switch.svelte +49 -54
  47. package/dist/inputs/TagInput.svelte +77 -67
  48. package/dist/inputs/TextInput.svelte +83 -76
  49. package/dist/inputs/styles/radio_group.css +6 -0
  50. package/dist/misc/Badge.svelte +48 -40
  51. package/dist/misc/DotSpinner.svelte +8 -4
  52. package/dist/misc/DuckSpinner.svelte +92 -70
  53. package/dist/misc/Gap.svelte +12 -6
  54. package/dist/misc/LinearProgressIndicator.svelte +38 -29
  55. package/dist/navigation/AdaptiveSidebar.svelte +64 -71
  56. package/dist/navigation/AdaptiveSidebar.svelte.d.ts +1 -1
  57. package/dist/navigation/AppBar.svelte +39 -32
  58. package/dist/navigation/NavigationBar.svelte +27 -35
  59. package/dist/navigation/NavigationBarButton.svelte +42 -33
  60. package/dist/navigation/NavigationDrawer.svelte +1 -82
  61. package/dist/navigation/NavigationDrawer.svelte.d.ts +1 -0
  62. package/dist/navigation/styles/navigation_drawer.css +93 -0
  63. package/dist/overlay/CommandDialog.svelte +1 -1
  64. package/dist/overlay/CommandDialog.svelte.d.ts +1 -1
  65. package/dist/overlay/Dialog.svelte +1 -1
  66. package/dist/overlay/Dialog.svelte.d.ts +1 -1
  67. package/dist/overlay/MinimalDialog.svelte +1 -1
  68. package/dist/overlay/MinimalDialog.svelte.d.ts +1 -1
  69. package/dist/overlay/MinimalSurfaceDialog.svelte +3 -3
  70. package/dist/overlay/MinimalSurfaceDialog.svelte.d.ts +3 -3
  71. package/dist/overlay/Popover.svelte +1 -1
  72. package/dist/overlay/Popover.svelte.d.ts +1 -1
  73. package/dist/overlay/styles/command.css +125 -0
  74. package/dist/overlay/styles/dialog.css +64 -0
  75. package/dist/overlay/styles/popover.css +9 -0
  76. package/dist/overlay/styles/surface-dialog.css +21 -0
  77. package/package.json +23 -21
  78. package/src/styles/index.css +6 -0
  79. package/src/styles/theme.css +94 -0
  80. package/dist/buttons/styles/base_button.scss +0 -30
  81. package/dist/buttons/styles/elevated_button.scss +0 -20
  82. package/dist/buttons/styles/expanded_text_button.scss +0 -20
  83. package/dist/buttons/styles/filled_button.scss +0 -17
  84. package/dist/buttons/styles/icon_button.scss +0 -38
  85. package/dist/buttons/styles/outlined_button.scss +0 -18
  86. package/dist/buttons/styles/text_button.scss +0 -17
  87. package/dist/containment/styles/avatar.scss +0 -16
  88. package/dist/containment/styles/card.scss +0 -3
  89. package/dist/containment/styles/container.scss +0 -22
  90. package/dist/containment/styles/surface-container.scss +0 -27
  91. package/dist/inputs/styles/radio_group.scss +0 -3
  92. package/dist/overlay/styles/command.scss +0 -121
  93. package/dist/overlay/styles/dialog.scss +0 -69
  94. package/dist/overlay/styles/popover.scss +0 -5
  95. package/dist/overlay/styles/surface-dialog.scss +0 -17
  96. package/src/styles/colors.scss +0 -43
  97. package/src/styles/config.scss +0 -1
  98. package/src/styles/misc.scss +0 -15
  99. package/src/styles/scheme.scss +0 -80
  100. package/src/styles/spacing.scss +0 -23
  101. package/src/styles/utils.scss +0 -27
@@ -105,70 +105,80 @@
105
105
  />
106
106
  </div>
107
107
 
108
- <style>[data-tag-input] {
109
- --color-background: transparent;
110
- display: flex;
111
- align-items: center;
112
- flex-wrap: wrap;
113
- gap: var(--gap--sm);
114
- position: relative;
115
- width: 100%;
116
- box-sizing: border-box;
117
- transition-duration: var(--transition-dur);
118
- transition-property: border-color;
119
- transition-timing-function: ease-in-out;
120
- border: 1px solid var(--color-border);
121
- border-radius: var(--radius);
122
- background-color: var(--color-background);
123
- padding: var(--gap--md);
124
- cursor: text;
125
- }
126
- [data-tag-input]:focus-within {
127
- border: 1px solid var(--color-primary);
128
- }
129
- [data-tag-input] input {
130
- flex: 1;
131
- border: none;
132
- outline: none;
133
- background: transparent;
134
- font-size: inherit;
135
- font-family: inherit;
136
- color: inherit;
137
- }
138
- [data-tag-input] input::-moz-placeholder {
139
- opacity: 1;
140
- color: rgba(var(--color-onSurface--rgb), 0.7);
141
- }
142
- [data-tag-input] input::placeholder {
143
- opacity: 1;
144
- color: rgba(var(--color-onSurface--rgb), 0.7);
145
- }
146
- [data-tag-input] input:disabled {
147
- opacity: 0.5;
148
- cursor: not-allowed;
149
- }
150
- [data-tag-input] [data-tag-remove] {
151
- display: inline-flex;
152
- justify-content: center;
153
- align-items: center;
154
- background-color: transparent;
155
- border: none;
156
- color: inherit;
157
- cursor: pointer;
158
- padding: var(--gap--xs);
159
- border-radius: 50%;
160
- aspect-ratio: 1;
161
- transition-duration: var(--transition-dur);
162
- transition-property: background-color;
163
- transition-timing-function: ease-in-out;
164
- margin-left: var(--gap--sm);
165
- }
166
- [data-tag-input] [data-tag-remove]:hover {
167
- background-color: var(--color-surfaceContainer);
168
- }
169
- [data-tag-input] [data-tag-remove]:focus {
170
- outline: 1px solid var(--color-border);
171
- }
172
- [data-tag-input] [data-tag-remove] svg {
173
- width: var(--gap);
174
- }</style>
108
+ <style>
109
+ @reference '$style/index.css';
110
+
111
+ @layer components {
112
+ [data-tag-input] {
113
+ --color-background: transparent;
114
+
115
+ @apply border-onBackground/20 rounded-2xl border border-solid transition-all;
116
+ display: flex;
117
+ align-items: center;
118
+ flex-wrap: wrap;
119
+ gap: --spacing(1.5);
120
+ position: relative;
121
+ width: 100%;
122
+ box-sizing: border-box;
123
+ background-color: var(--color-background);
124
+ padding: --spacing(2);
125
+ cursor: text;
126
+
127
+ &:focus-within {
128
+ @apply border-primary;
129
+ }
130
+
131
+ input {
132
+ flex: 1;
133
+ border: none;
134
+ outline: none;
135
+ background: transparent;
136
+ font-size: inherit;
137
+ font-family: inherit;
138
+ color: inherit;
139
+
140
+ &::-moz-placeholder {
141
+ @apply text-onBackground/70;
142
+ opacity: 1;
143
+ }
144
+
145
+ &::placeholder {
146
+ @apply text-onBackground/70;
147
+ opacity: 1;
148
+ }
149
+
150
+ &:disabled {
151
+ opacity: 0.5;
152
+ cursor: not-allowed;
153
+ }
154
+ }
155
+
156
+ [data-tag-remove] {
157
+ @apply transition-all;
158
+ display: inline-flex;
159
+ justify-content: center;
160
+ align-items: center;
161
+ background-color: transparent;
162
+ border: none;
163
+ color: inherit;
164
+ cursor: pointer;
165
+ padding: --spacing(1);
166
+ border-radius: 50%;
167
+ aspect-ratio: 1;
168
+ margin-left: --spacing(1.5);
169
+
170
+ &:hover {
171
+ background-color: var(--color-surfaceContainer);
172
+ }
173
+
174
+ &:focus {
175
+ @apply outline-onBackground/20 outline outline-solid;
176
+ }
177
+
178
+ svg {
179
+ width: --spacing(4);
180
+ }
181
+ }
182
+ }
183
+ }
184
+ </style>
@@ -19,79 +19,86 @@
19
19
  <div data-text-input-placeholder>{placeholder}</div>
20
20
  </label>
21
21
 
22
- <style>[data-text-input] {
23
- margin: 0;
24
- padding: 0;
25
- display: block;
26
- position: relative;
27
- width: 100%;
28
- pointer-events: all;
29
- }
30
- [data-text-input] input {
31
- box-sizing: border-box;
32
- transition-duration: var(--transition-dur);
33
- transition-property: border-color;
34
- transition-timing-function: ease-in-out;
35
- border: 1px solid var(--color-border);
36
- border-radius: var(--radius);
37
- background-color: transparent;
38
- padding: var(--gap--md) var(--gap);
39
- padding-left: 48px;
40
- width: 100%;
41
- font-size: inherit;
42
- font-family: inherit;
43
- color: inherit;
44
- }
45
- [data-text-input] input:focus {
46
- outline: none;
47
- border: 1px solid var(--color-primary);
48
- caret-color: var(--color-primary);
49
- }
50
- [data-text-input] input:focus + [data-text-input-icon] {
51
- color: var(--color-primary);
52
- }
53
- [data-text-input] input:is(:-moz-placeholder) ~ [data-text-input-placeholder] {
54
- transform: translateY(50%);
55
- visibility: hidden;
56
- opacity: 0;
57
- }
58
- [data-text-input] input:is(:placeholder-shown) ~ [data-text-input-placeholder] {
59
- transform: translateY(50%);
60
- visibility: hidden;
61
- opacity: 0;
62
- }
63
- [data-text-input] input::-moz-placeholder {
64
- opacity: 1;
65
- color: rgba(var(--color-onSurface--rgb), 0.7);
66
- }
67
- [data-text-input] input::placeholder {
68
- opacity: 1;
69
- color: rgba(var(--color-onSurface--rgb), 0.7);
70
- }
71
- [data-text-input] [data-text-input-icon] {
72
- display: flex;
73
- position: absolute;
74
- top: 0;
75
- left: 0;
76
- justify-content: center;
77
- align-items: center;
78
- transition-duration: var(--transition-dur);
79
- transition-property: color;
80
- transition-timing-function: ease-in-out;
81
- width: 48px;
82
- height: 100%;
83
- pointer-events: none;
84
- }
85
- [data-text-input] [data-text-input-placeholder] {
86
- position: absolute;
87
- transition-duration: var(--transition-dur);
88
- transition-property: visibility, opacity, transform;
89
- pointer-events: none;
90
- color: rgba(var(--color-onSurface--rgb), 0.7);
91
- font-size: 0.8em;
92
- top: 0;
93
- right: var(--gap);
94
- transform: translateY(0);
95
- visibility: visible;
96
- opacity: 1;
97
- }</style>
22
+ <style>
23
+ @reference '$style/index.css';
24
+
25
+ @layer components {
26
+ [data-text-input] {
27
+ margin: 0;
28
+ padding: 0;
29
+ display: block;
30
+ position: relative;
31
+ width: 100%;
32
+ pointer-events: all;
33
+
34
+ input {
35
+ @apply border-onBackground/20 rounded-2xl border border-solid transition-all;
36
+ box-sizing: border-box;
37
+ background-color: transparent;
38
+ padding: --spacing(1.5) --spacing(4);
39
+ padding-left: --spacing(14);
40
+ width: 100%;
41
+ font-size: inherit;
42
+ font-family: inherit;
43
+ color: inherit;
44
+
45
+ &:focus {
46
+ @apply border-primary;
47
+ outline: none;
48
+ caret-color: var(--color-primary);
49
+
50
+ + [data-text-input-icon] {
51
+ color: var(--color-primary);
52
+ }
53
+ }
54
+
55
+ &:is(:-moz-placeholder) ~ [data-text-input-placeholder] {
56
+ transform: translateY(50%);
57
+ visibility: hidden;
58
+ opacity: 0;
59
+ }
60
+
61
+ &:is(:placeholder-shown) ~ [data-text-input-placeholder] {
62
+ transform: translateY(50%);
63
+ visibility: hidden;
64
+ opacity: 0;
65
+ }
66
+
67
+ &::-moz-placeholder {
68
+ @apply text-onBackground/70;
69
+ opacity: 1;
70
+ }
71
+
72
+ &::placeholder {
73
+ @apply text-onBackground/70;
74
+ opacity: 1;
75
+ }
76
+ }
77
+
78
+ [data-text-input-icon] {
79
+ @apply transition-all;
80
+ display: flex;
81
+ position: absolute;
82
+ top: 0;
83
+ left: 0;
84
+ justify-content: center;
85
+ align-items: center;
86
+ width: --spacing(14);
87
+ height: 100%;
88
+ pointer-events: none;
89
+ }
90
+
91
+ [data-text-input-placeholder] {
92
+ @apply text-onBackground/70 transition-all;
93
+ position: absolute;
94
+ pointer-events: none;
95
+ font-size: 0.8em;
96
+ top: 0;
97
+ right: --spacing(4);
98
+ transform: translateY(0);
99
+ visibility: visible;
100
+ opacity: 1;
101
+ }
102
+ }
103
+ }
104
+ </style>
@@ -0,0 +1,6 @@
1
+ @reference '$style/index.css';
2
+ @layer components {
3
+ [data-radio-group-root] {
4
+ position: relative;
5
+ }
6
+ }
@@ -13,43 +13,51 @@
13
13
  {@render children?.()}
14
14
  </span>
15
15
 
16
- <style>[data-badge] {
17
- box-sizing: border-box;
18
- border-radius: var(--gap);
19
- line-height: 1;
20
- display: inline-flex;
21
- align-items: center;
22
- justify-content: center;
23
- }
24
- [data-badge][data-color=surface] {
25
- background-color: var(--color-surfaceContainerHighest);
26
- color: var(--color-onSurface);
27
- }
28
- [data-badge][data-color=info] {
29
- background-color: var(--color-info);
30
- color: var(--color-onInfo);
31
- }
32
- [data-badge][data-color=success] {
33
- background-color: var(--color-success);
34
- color: var(--color-onSuccess);
35
- }
36
- [data-badge][data-color=warning] {
37
- background-color: var(--color-warning);
38
- color: var(--color-onWarning);
39
- }
40
- [data-badge][data-color=error] {
41
- background-color: var(--color-error);
42
- color: var(--color-onError);
43
- }
44
- [data-badge][data-size=small] {
45
- font-size: 0.8em;
46
- padding: var(--gap--sm) var(--gap--half);
47
- }
48
- [data-badge][data-size=medium] {
49
- font-size: 0.9em;
50
- padding: var(--gap--sm) var(--gap--half);
51
- }
52
- [data-badge][data-size=large] {
53
- font-size: 1em;
54
- padding: var(--gap--sm) var(--gap--md);
55
- }</style>
16
+ <style>
17
+ @reference '$style/index.css';
18
+
19
+ @layer components {
20
+ [data-badge] {
21
+ box-sizing: border-box;
22
+ border-radius: var(--radius-2xl);
23
+ line-height: 1;
24
+ display: inline-flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+
28
+ &[data-color='surface'] {
29
+ background-color: var(--color-surfaceContainerHighest);
30
+ color: var(--color-onSurface);
31
+ }
32
+ &[data-color='info'] {
33
+ background-color: var(--color-info);
34
+ color: var(--color-onInfo);
35
+ }
36
+ &[data-color='success'] {
37
+ background-color: var(--color-success);
38
+ color: var(--color-onSuccess);
39
+ }
40
+ &[data-color='warning'] {
41
+ background-color: var(--color-warning);
42
+ color: var(--color-onWarning);
43
+ }
44
+ &[data-color='error'] {
45
+ background-color: var(--color-error);
46
+ color: var(--color-onError);
47
+ }
48
+
49
+ &[data-size='small'] {
50
+ font-size: 0.8em;
51
+ padding: --spacing(1.5) --spacing(2);
52
+ }
53
+ &[data-size='medium'] {
54
+ font-size: 0.9em;
55
+ padding: --spacing(1.5) --spacing(2);
56
+ }
57
+ &[data-size='large'] {
58
+ font-size: 1em;
59
+ padding: --spacing(1.5) --spacing(3);
60
+ }
61
+ }
62
+ }
63
+ </style>
@@ -69,7 +69,11 @@
69
69
  </g>
70
70
  </svg>
71
71
 
72
- <style>svg {
73
- display: inline-block;
74
- aspect-ratio: 1;
75
- }</style>
72
+ <style>
73
+ @layer components {
74
+ svg {
75
+ display: inline-block;
76
+ aspect-ratio: 1;
77
+ }
78
+ }
79
+ </style>
@@ -137,73 +137,95 @@
137
137
  </g>
138
138
  </svg>
139
139
 
140
- <style>[data-duck-spinner] .line {
141
- fill: none;
142
- stroke: var(--color-onSurface);
143
- stroke-width: 1.2;
144
- stroke-linecap: round;
145
- stroke-linejoin: round;
146
- stroke-dasharray: none;
147
- transition-duration: var(--transition-duration);
148
- transition-property: stroke;
149
- }
150
- [data-duck-spinner] .spinner {
151
- transform-origin: center;
152
- scale: 1.1;
153
- }
154
- [data-duck-spinner] .spinner > * {
155
- transform-origin: center;
156
- opacity: 0.64;
157
- animation-duration: 3s;
158
- animation-timing-function: linear;
159
- animation-iteration-count: infinite;
160
- animation-name: spin;
161
- }
162
- [data-duck-spinner] .spinner .circle-1 {
163
- scale: 0.85;
164
- opacity: 0.32;
165
- animation-direction: reverse;
166
- }
167
- @keyframes spin {
168
- from {
169
- rotate: 0;
170
- }
171
- to {
172
- rotate: 359deg;
173
- }
174
- }
175
- [data-duck-spinner] .duck {
176
- transform-origin: center;
177
- scale: 1.2;
178
- animation-duration: 2s;
179
- animation-timing-function: ease;
180
- animation-iteration-count: infinite;
181
- animation-name: slay;
182
- }
183
- @keyframes slay {
184
- 0% {
185
- rotate: -24deg;
186
- }
187
- 50% {
188
- rotate: 24deg;
189
- }
190
- 100% {
191
- rotate: -24deg;
192
- }
193
- }
194
- [data-duck-spinner] .duck .body {
195
- stroke-width: 1.5;
196
- }
197
- [data-duck-spinner] .duck .eye {
198
- stroke-width: 1;
199
- }
200
-
201
- [data-thin=true] .line {
202
- stroke-width: 0.5;
203
- }
204
- [data-thin=true] .duck .body {
205
- stroke-width: 1;
206
- }
207
- [data-thin=true] .duck .eye {
208
- stroke-width: 0.8;
209
- }</style>
140
+ <style>
141
+ @reference '$style/index.css';
142
+
143
+ @layer components {
144
+ [data-duck-spinner] {
145
+ .line {
146
+ fill: none;
147
+ stroke: var(--color-onSurface);
148
+ stroke-width: 1.2;
149
+ stroke-linecap: round;
150
+ stroke-linejoin: round;
151
+ stroke-dasharray: none;
152
+ transition-duration: var(--tw-duration, 150ms);
153
+ transition-property: stroke;
154
+ }
155
+
156
+ .spinner {
157
+ transform-origin: center;
158
+ scale: 1.1;
159
+
160
+ & > * {
161
+ transform-origin: center;
162
+ opacity: 0.64;
163
+ animation-duration: 3s;
164
+ animation-timing-function: linear;
165
+ animation-iteration-count: infinite;
166
+ animation-name: spin;
167
+ }
168
+
169
+ .circle-1 {
170
+ scale: 0.85;
171
+ opacity: 0.32;
172
+ animation-direction: reverse;
173
+ }
174
+
175
+ @keyframes spin {
176
+ from {
177
+ rotate: 0;
178
+ }
179
+ to {
180
+ rotate: 359deg;
181
+ }
182
+ }
183
+ }
184
+
185
+ .duck {
186
+ transform-origin: center;
187
+ scale: 1.2;
188
+ animation-duration: 2s;
189
+ animation-timing-function: ease;
190
+ animation-iteration-count: infinite;
191
+ animation-name: slay;
192
+
193
+ @keyframes slay {
194
+ 0% {
195
+ rotate: -24deg;
196
+ }
197
+ 50% {
198
+ rotate: 24deg;
199
+ }
200
+ 100% {
201
+ rotate: -24deg;
202
+ }
203
+ }
204
+
205
+ .body {
206
+ stroke-width: 1.5;
207
+ }
208
+
209
+ .eye {
210
+ stroke-width: 1;
211
+ }
212
+ }
213
+ }
214
+
215
+ [data-thin='true'] {
216
+ .line {
217
+ stroke-width: 0.5;
218
+ }
219
+
220
+ .duck {
221
+ .body {
222
+ stroke-width: 1;
223
+ }
224
+
225
+ .eye {
226
+ stroke-width: 0.8;
227
+ }
228
+ }
229
+ }
230
+ }
231
+ </style>
@@ -8,9 +8,15 @@
8
8
 
9
9
  <div data-gap style:width={size}></div>
10
10
 
11
- <style>[data-gap] {
12
- display: block;
13
- aspect-ratio: 1;
14
- width: 1rem;
15
- height: auto;
16
- }</style>
11
+ <style>
12
+ @reference '$style/index.css';
13
+
14
+ @layer components {
15
+ [data-gap] {
16
+ display: block;
17
+ aspect-ratio: 1;
18
+ width: 1rem;
19
+ height: auto;
20
+ }
21
+ }
22
+ </style>