@stackonward/cli 1.5.2 → 1.6.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.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/components/nuxt/site-source/app/assets/css/site-shell.css +112 -56
- package/dist/resources/components/nuxt/site-source/app/assets/icons/brand/android.svg +10 -0
- package/dist/resources/components/nuxt/site-source/app/assets/icons/brand/apple.svg +3 -0
- package/dist/resources/components/nuxt/site-source/app/assets/icons/brand/whatsapp.svg +5 -0
- package/dist/resources/components/nuxt/site-source/app/components/app/Sidebar.vue +1 -1
- package/dist/resources/components/nuxt/site-source/app/components/checkout/Status.vue +3 -3
- package/dist/resources/components/nuxt/site-source/app/components/consent/Banner.vue +23 -8
- package/dist/resources/components/nuxt/site-source/app/components/content/CallToAction.vue +59 -0
- package/dist/resources/components/nuxt/site-source/app/components/content/Card.vue +35 -0
- package/dist/resources/components/nuxt/site-source/app/components/content/Compatibility.vue +10 -0
- package/dist/resources/components/nuxt/site-source/app/components/content/Faq.vue +56 -0
- package/dist/resources/components/nuxt/site-source/app/components/content/Features.vue +8 -0
- package/dist/resources/components/nuxt/site-source/app/components/content/List.vue +1 -8
- package/dist/resources/components/nuxt/site-source/app/components/content/Reviews.vue +93 -0
- package/dist/resources/components/nuxt/site-source/app/components/countdown/Timer.vue +112 -0
- package/dist/resources/components/nuxt/site-source/app/components/locale/Menu.vue +3 -3
- package/dist/resources/components/nuxt/site-source/app/components/site/BackToTop.vue +30 -23
- package/dist/resources/components/nuxt/site-source/app/components/site/Header.vue +2 -2
- package/dist/resources/components/nuxt/site-source/app/components/steps/Progress.vue +36 -0
- package/dist/resources/components/nuxt/site-source/app/components/steps/Showcase.vue +340 -0
- package/dist/resources/components/nuxt/site-source/app/components/theme/Menu.vue +4 -4
- package/dist/resources/components/nuxt/site-source/app/components/ui/Button.vue +28 -2
- package/dist/resources/components/nuxt/site-source/app/components/ui/GradientBorder.vue +5 -5
- package/dist/resources/components/nuxt/site-source/app/components/ui/Icon.vue +14 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/Image.vue +126 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/Marquee.vue +99 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/Modal.vue +26 -88
- package/dist/resources/components/nuxt/site-source/app/components/ui/Popover.vue +87 -93
- package/dist/resources/components/nuxt/site-source/app/components/ui/Text.vue +84 -12
- package/dist/resources/components/nuxt/site-source/app/components/ui/Video.vue +105 -0
- package/dist/resources/components/nuxt/site-source/app/components/whatsapp/Chat.vue +126 -0
- package/dist/resources/components/nuxt/site-source/app/components/youtube/Embed.vue +286 -73
- package/dist/resources/components/nuxt/site-source/app/composables/useFloatingBottomStack.ts +44 -0
- package/dist/resources/components/nuxt/site-source/app/composables/useNavigation.ts +6 -8
- package/dist/resources/components/nuxt/site-source/app/consent/types.ts +1 -4
- package/dist/resources/components/nuxt/site-source/app/content/types.ts +3 -0
- package/dist/resources/components/nuxt/site-source/app/theme/accordion.ts +5 -4
- package/dist/resources/components/nuxt/site-source/app/theme/breadcrumb.ts +14 -4
- package/dist/resources/components/nuxt/site-source/app/theme/button.ts +138 -28
- package/dist/resources/components/nuxt/site-source/app/theme/carousel.ts +11 -7
- package/dist/resources/components/nuxt/site-source/app/theme/checkbox.ts +9 -3
- package/dist/resources/components/nuxt/site-source/app/theme/drawer.ts +6 -0
- package/dist/resources/components/nuxt/site-source/app/theme/form-field.ts +8 -0
- package/dist/resources/components/nuxt/site-source/app/theme/icon.ts +6 -0
- package/dist/resources/components/nuxt/site-source/app/theme/index.ts +8 -1
- package/dist/resources/components/nuxt/site-source/app/theme/input.ts +34 -18
- package/dist/resources/components/nuxt/site-source/app/theme/modal.ts +9 -5
- package/dist/resources/components/nuxt/site-source/app/theme/pagination.ts +9 -2
- package/dist/resources/components/nuxt/site-source/app/theme/radio-group.ts +7 -0
- package/dist/resources/components/nuxt/site-source/app/theme/select.ts +19 -7
- package/dist/resources/components/nuxt/site-source/app/theme/stepper.ts +15 -6
- package/dist/resources/components/nuxt/site-source/app/theme/textarea.ts +6 -0
- package/dist/resources/components/nuxt/site-source/app/theme/toast.ts +1 -4
- package/dist/resources/components/nuxt/site-source/app/theme/tooltip.ts +5 -1
- package/dist/resources/components/registry.json +133 -45
- package/dist/resources/components/vue/ui/BottomSheet.vue +5 -1
- package/dist/resources/components/vue/ui/ScrollArea.vue +2 -1
- package/dist/resources/registry.json +4 -4
- package/dist/resources/templates/base/.claude/docs/architecture-template.md +2 -1
- package/dist/resources/templates/base/AGENTS.md +7 -0
- package/dist/resources/templates/base/CLAUDE.md +7 -0
- package/dist/resources/templates/nuxt/.claude/docs/stack.md +14 -1
- package/dist/resources/templates/nuxt/.vscode/extensions.json +9 -0
- package/dist/resources/templates/nuxt/.vscode/settings.json +21 -0
- package/dist/resources/templates/nuxt/.zed/settings.json +42 -0
- package/dist/resources/templates/nuxt/DESIGN.md +146 -0
- package/dist/resources/templates/nuxt/README.md +10 -0
- package/dist/resources/templates/nuxt/app/app.config.ts +2 -0
- package/dist/resources/templates/nuxt/app/pages/app/index.vue +9 -7
- package/dist/resources/templates/nuxt/app/pages/index.vue +12 -27
- package/dist/resources/templates/nuxt/app/pages/ui/index.vue +219 -3
- package/dist/resources/templates/nuxt/nuxt.config.ts +2 -4
- package/dist/resources/templates/nuxt/package.json +4 -3
- package/dist/resources/templates/nuxt/stylelint.config.mjs +12 -0
- package/package.json +2 -2
- package/dist/resources/components/nuxt/site-source/app/assets/icons/common/.gitkeep +0 -0
|
@@ -1,40 +1,61 @@
|
|
|
1
1
|
@import "tailwindcss";
|
|
2
2
|
@import "@nuxt/ui";
|
|
3
3
|
|
|
4
|
-
@theme {
|
|
4
|
+
@theme inline {
|
|
5
|
+
--spacing-icon-xs: var(--site-icon-xs);
|
|
6
|
+
--spacing-icon-sm: var(--site-icon-sm);
|
|
7
|
+
--spacing-icon-md: var(--site-icon-md);
|
|
8
|
+
--spacing-icon-lg: var(--site-icon-lg);
|
|
9
|
+
--spacing-icon-xl: var(--site-icon-xl);
|
|
10
|
+
--spacing-icon-2xl: var(--site-icon-2xl);
|
|
11
|
+
--spacing-icon-3xl: var(--site-icon-3xl);
|
|
5
12
|
--font-sans:
|
|
6
13
|
"Inter", "SF Pro Display", "SF Pro Text", ui-sans-serif, system-ui, -apple-system,
|
|
7
14
|
"BlinkMacSystemFont", "Segoe UI", sans-serif;
|
|
8
15
|
--ease-fluid: cubic-bezier(0.3, 0, 0, 1);
|
|
9
16
|
--ease-snappy: cubic-bezier(0.2, 0, 0, 1);
|
|
10
|
-
--color-
|
|
11
|
-
--color-primary
|
|
12
|
-
--color-primary-
|
|
13
|
-
--color-primary-
|
|
14
|
-
--color-
|
|
17
|
+
--color-brand: var(--site-color-brand);
|
|
18
|
+
--color-primary: var(--site-color-primary);
|
|
19
|
+
--color-primary-hover: var(--site-color-primary-hover);
|
|
20
|
+
--color-primary-active: var(--site-color-primary-active);
|
|
21
|
+
--color-primary-contrast: var(--site-color-primary-contrast);
|
|
22
|
+
--color-secondary: var(--site-color-accent);
|
|
15
23
|
--color-secondary-hover: #285f59;
|
|
16
24
|
--color-secondary-active: #214f4a;
|
|
17
|
-
--color-success:
|
|
25
|
+
--color-success: var(--site-color-success);
|
|
18
26
|
--color-info: #2563eb;
|
|
19
|
-
--color-warning:
|
|
20
|
-
--color-error:
|
|
27
|
+
--color-warning: var(--site-color-warning);
|
|
28
|
+
--color-error: var(--site-color-danger);
|
|
21
29
|
--color-neutral: #111827;
|
|
22
|
-
--color-bg:
|
|
23
|
-
--color-surface:
|
|
24
|
-
--color-surface-muted:
|
|
25
|
-
--color-surface-elevated:
|
|
26
|
-
--color-text:
|
|
27
|
-
--color-muted:
|
|
28
|
-
--color-dimmed:
|
|
29
|
-
--color-border:
|
|
30
|
-
--color-border-strong:
|
|
31
|
-
--radius-ml:
|
|
32
|
-
--radius-2ml:
|
|
30
|
+
--color-bg: var(--site-color-bg);
|
|
31
|
+
--color-surface: var(--site-color-surface);
|
|
32
|
+
--color-surface-muted: var(--site-color-surface-muted);
|
|
33
|
+
--color-surface-elevated: var(--site-color-surface-elevated);
|
|
34
|
+
--color-text: var(--site-color-text);
|
|
35
|
+
--color-muted: var(--site-color-muted);
|
|
36
|
+
--color-dimmed: var(--site-color-dimmed);
|
|
37
|
+
--color-border: var(--site-color-border);
|
|
38
|
+
--color-border-strong: var(--site-color-border-strong);
|
|
39
|
+
--radius-ml: 10px;
|
|
40
|
+
--radius-2ml: 20px;
|
|
41
|
+
--shadow-accordion:
|
|
42
|
+
0 4px 16px color-mix(in srgb, var(--site-color-border) 40%, transparent),
|
|
43
|
+
0 11px 24px color-mix(in srgb, var(--site-color-border) 20%, transparent);
|
|
44
|
+
--color-success-hover: color-mix(in srgb, var(--site-color-success) 80%, black);
|
|
45
|
+
--color-success-active: color-mix(in srgb, var(--site-color-success) 60%, black);
|
|
46
|
+
--color-success-contrast: #fff;
|
|
33
47
|
--breakpoint-xs: 480px;
|
|
34
48
|
--breakpoint-3xl: 1760px;
|
|
35
49
|
}
|
|
36
50
|
|
|
37
51
|
:root {
|
|
52
|
+
--site-icon-xs: 0.75rem;
|
|
53
|
+
--site-icon-sm: 1rem;
|
|
54
|
+
--site-icon-md: 1.25rem;
|
|
55
|
+
--site-icon-lg: 1.5rem;
|
|
56
|
+
--site-icon-xl: 2rem;
|
|
57
|
+
--site-icon-2xl: 2.5rem;
|
|
58
|
+
--site-icon-3xl: 3rem;
|
|
38
59
|
--site-font-sans:
|
|
39
60
|
"Inter", "SF Pro Display", "SF Pro Text", ui-sans-serif, system-ui, -apple-system,
|
|
40
61
|
"BlinkMacSystemFont", "Segoe UI", sans-serif;
|
|
@@ -48,6 +69,7 @@
|
|
|
48
69
|
--site-color-dimmed: #7a8790;
|
|
49
70
|
--site-color-border: #dbe3e8;
|
|
50
71
|
--site-color-border-strong: #c4d2da;
|
|
72
|
+
--site-color-brand: var(--site-color-primary);
|
|
51
73
|
--site-color-primary: #a86550;
|
|
52
74
|
--site-color-primary-hover: #945541;
|
|
53
75
|
--site-color-primary-active: #7f4635;
|
|
@@ -58,8 +80,8 @@
|
|
|
58
80
|
--site-color-danger: #ff6b5f;
|
|
59
81
|
--site-color-success: #16a34a;
|
|
60
82
|
--site-radius-sm: 4px;
|
|
61
|
-
--site-radius-md:
|
|
62
|
-
--site-radius-lg:
|
|
83
|
+
--site-radius-md: 10px;
|
|
84
|
+
--site-radius-lg: 20px;
|
|
63
85
|
--site-shadow-soft: 0 18px 44px rgb(17 24 39 / 10%);
|
|
64
86
|
--site-shadow-strong: 0 30px 70px rgb(17 24 39 / 16%);
|
|
65
87
|
--site-shell-header-height: 68px;
|
|
@@ -123,21 +145,32 @@ html {
|
|
|
123
145
|
body {
|
|
124
146
|
margin: 0;
|
|
125
147
|
background:
|
|
126
|
-
linear-gradient(
|
|
127
|
-
|
|
148
|
+
linear-gradient(
|
|
149
|
+
180deg,
|
|
150
|
+
color-mix(in srgb, var(--site-color-primary) 4.5%, transparent),
|
|
151
|
+
transparent 360px
|
|
152
|
+
),
|
|
153
|
+
linear-gradient(
|
|
154
|
+
180deg,
|
|
155
|
+
color-mix(in srgb, var(--site-color-primary) 2.5%, transparent),
|
|
156
|
+
transparent 520px
|
|
157
|
+
),
|
|
158
|
+
var(--site-color-bg);
|
|
128
159
|
overflow-x: clip;
|
|
129
160
|
}
|
|
130
161
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
162
|
+
@layer base {
|
|
163
|
+
a {
|
|
164
|
+
color: inherit;
|
|
165
|
+
text-decoration: none;
|
|
166
|
+
}
|
|
135
167
|
|
|
136
|
-
button,
|
|
137
|
-
input,
|
|
138
|
-
textarea,
|
|
139
|
-
select {
|
|
140
|
-
|
|
168
|
+
button,
|
|
169
|
+
input,
|
|
170
|
+
textarea,
|
|
171
|
+
select {
|
|
172
|
+
font: inherit;
|
|
173
|
+
}
|
|
141
174
|
}
|
|
142
175
|
|
|
143
176
|
button,
|
|
@@ -146,9 +179,11 @@ summary {
|
|
|
146
179
|
-webkit-tap-highlight-color: transparent;
|
|
147
180
|
}
|
|
148
181
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
182
|
+
@layer base {
|
|
183
|
+
:focus-visible {
|
|
184
|
+
outline: 2px solid var(--site-color-primary);
|
|
185
|
+
outline-offset: 3px;
|
|
186
|
+
}
|
|
152
187
|
}
|
|
153
188
|
|
|
154
189
|
.site-root {
|
|
@@ -205,7 +240,7 @@ summary {
|
|
|
205
240
|
border-color: var(--site-color-primary);
|
|
206
241
|
background: var(--site-color-primary);
|
|
207
242
|
color: var(--site-color-primary-contrast);
|
|
208
|
-
box-shadow: 0 10px 24px
|
|
243
|
+
box-shadow: 0 10px 24px color-mix(in srgb, var(--site-color-primary) 18%, transparent);
|
|
209
244
|
}
|
|
210
245
|
|
|
211
246
|
.base-button--primary:hover {
|
|
@@ -213,29 +248,29 @@ summary {
|
|
|
213
248
|
}
|
|
214
249
|
|
|
215
250
|
.base-button--secondary {
|
|
216
|
-
border-color:
|
|
251
|
+
border-color: color-mix(in srgb, var(--site-color-primary) 34%, transparent);
|
|
217
252
|
background: color-mix(in srgb, var(--site-color-surface) 82%, transparent);
|
|
218
253
|
color: var(--site-color-primary);
|
|
219
254
|
}
|
|
220
255
|
|
|
221
256
|
.base-button--secondary:hover {
|
|
222
|
-
border-color:
|
|
223
|
-
background:
|
|
257
|
+
border-color: color-mix(in srgb, var(--site-color-primary) 48%, transparent);
|
|
258
|
+
background: color-mix(in srgb, var(--site-color-primary) 6%, transparent);
|
|
224
259
|
color: var(--site-color-primary-hover);
|
|
225
260
|
}
|
|
226
261
|
|
|
227
262
|
.icon-button {
|
|
228
263
|
width: 44px;
|
|
229
264
|
height: 44px;
|
|
230
|
-
border-color:
|
|
265
|
+
border-color: color-mix(in srgb, var(--site-color-primary) 22%, transparent);
|
|
231
266
|
border-radius: var(--site-radius-md);
|
|
232
267
|
background: color-mix(in srgb, var(--site-color-surface) 78%, transparent);
|
|
233
268
|
color: var(--site-color-primary);
|
|
234
269
|
}
|
|
235
270
|
|
|
236
271
|
.icon-button:hover {
|
|
237
|
-
border-color:
|
|
238
|
-
background:
|
|
272
|
+
border-color: color-mix(in srgb, var(--site-color-primary) 34%, transparent);
|
|
273
|
+
background: color-mix(in srgb, var(--site-color-primary) 6%, transparent);
|
|
239
274
|
color: var(--site-color-primary-hover);
|
|
240
275
|
}
|
|
241
276
|
|
|
@@ -252,13 +287,13 @@ summary {
|
|
|
252
287
|
width: 34px;
|
|
253
288
|
height: 34px;
|
|
254
289
|
place-items: center;
|
|
255
|
-
border: 1px solid
|
|
290
|
+
border: 1px solid color-mix(in srgb, var(--site-color-primary) 18%, transparent);
|
|
256
291
|
border-radius: var(--site-radius-md);
|
|
257
292
|
background:
|
|
258
293
|
linear-gradient(135deg, rgb(255 255 255 / 22%), transparent 52%), var(--site-color-primary);
|
|
259
294
|
color: var(--site-color-primary-contrast);
|
|
260
295
|
text-transform: uppercase;
|
|
261
|
-
box-shadow: 0 10px 22px
|
|
296
|
+
box-shadow: 0 10px 22px color-mix(in srgb, var(--site-color-primary) 16%, transparent);
|
|
262
297
|
}
|
|
263
298
|
|
|
264
299
|
.site-brand__text {
|
|
@@ -273,8 +308,17 @@ summary {
|
|
|
273
308
|
display: flex;
|
|
274
309
|
flex-direction: column;
|
|
275
310
|
background:
|
|
276
|
-
linear-gradient(
|
|
277
|
-
|
|
311
|
+
linear-gradient(
|
|
312
|
+
180deg,
|
|
313
|
+
color-mix(in srgb, var(--site-color-primary) 4.5%, transparent),
|
|
314
|
+
transparent 340px
|
|
315
|
+
),
|
|
316
|
+
linear-gradient(
|
|
317
|
+
180deg,
|
|
318
|
+
color-mix(in srgb, var(--site-color-primary) 2.5%, transparent),
|
|
319
|
+
transparent 520px
|
|
320
|
+
),
|
|
321
|
+
var(--site-color-bg);
|
|
278
322
|
}
|
|
279
323
|
|
|
280
324
|
.site-shell__main {
|
|
@@ -326,8 +370,8 @@ summary {
|
|
|
326
370
|
|
|
327
371
|
.site-nav-link:hover,
|
|
328
372
|
.site-nav-menu > summary:hover {
|
|
329
|
-
border-color:
|
|
330
|
-
background:
|
|
373
|
+
border-color: color-mix(in srgb, var(--site-color-primary) 18%, transparent);
|
|
374
|
+
background: color-mix(in srgb, var(--site-color-primary) 7%, transparent);
|
|
331
375
|
color: var(--site-color-text);
|
|
332
376
|
}
|
|
333
377
|
|
|
@@ -366,7 +410,7 @@ summary {
|
|
|
366
410
|
}
|
|
367
411
|
|
|
368
412
|
.site-nav-menu__item:hover {
|
|
369
|
-
background:
|
|
413
|
+
background: color-mix(in srgb, var(--site-color-primary) 7%, transparent);
|
|
370
414
|
}
|
|
371
415
|
|
|
372
416
|
.site-nav-menu__item small {
|
|
@@ -837,7 +881,13 @@ summary {
|
|
|
837
881
|
.application-shell__sidebar {
|
|
838
882
|
min-height: 0;
|
|
839
883
|
border-right: 1px solid var(--site-color-border);
|
|
840
|
-
background:
|
|
884
|
+
background:
|
|
885
|
+
linear-gradient(
|
|
886
|
+
180deg,
|
|
887
|
+
color-mix(in srgb, var(--site-color-primary) 4%, transparent),
|
|
888
|
+
transparent
|
|
889
|
+
),
|
|
890
|
+
var(--site-color-surface);
|
|
841
891
|
overflow-y: auto;
|
|
842
892
|
}
|
|
843
893
|
|
|
@@ -882,8 +932,8 @@ summary {
|
|
|
882
932
|
|
|
883
933
|
.application-sidebar__link:hover,
|
|
884
934
|
.application-sidebar__link.router-link-active {
|
|
885
|
-
border-color:
|
|
886
|
-
background:
|
|
935
|
+
border-color: color-mix(in srgb, var(--site-color-primary) 20%, transparent);
|
|
936
|
+
background: color-mix(in srgb, var(--site-color-primary) 7%, transparent);
|
|
887
937
|
color: var(--site-color-text);
|
|
888
938
|
}
|
|
889
939
|
|
|
@@ -951,13 +1001,19 @@ summary {
|
|
|
951
1001
|
min-height: 200px;
|
|
952
1002
|
border: 1px solid var(--site-color-border);
|
|
953
1003
|
border-radius: var(--site-radius-lg);
|
|
954
|
-
background:
|
|
1004
|
+
background:
|
|
1005
|
+
linear-gradient(
|
|
1006
|
+
180deg,
|
|
1007
|
+
color-mix(in srgb, var(--site-color-primary) 4%, transparent),
|
|
1008
|
+
transparent
|
|
1009
|
+
),
|
|
1010
|
+
var(--site-color-surface);
|
|
955
1011
|
padding: 20px;
|
|
956
1012
|
box-shadow: 0 1px 0 rgb(17 24 39 / 4%);
|
|
957
1013
|
}
|
|
958
1014
|
|
|
959
1015
|
.content-card:hover {
|
|
960
|
-
border-color:
|
|
1016
|
+
border-color: color-mix(in srgb, var(--site-color-primary) 32%, transparent);
|
|
961
1017
|
box-shadow: var(--site-shadow-soft);
|
|
962
1018
|
}
|
|
963
1019
|
|
|
@@ -1118,7 +1174,7 @@ summary {
|
|
|
1118
1174
|
|
|
1119
1175
|
.mobile-nav__link:hover,
|
|
1120
1176
|
.mobile-nav__group > summary:hover {
|
|
1121
|
-
background:
|
|
1177
|
+
background: color-mix(in srgb, var(--site-color-primary) 7%, transparent);
|
|
1122
1178
|
}
|
|
1123
1179
|
|
|
1124
1180
|
.mobile-nav__group > summary {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg width="17" height="15" viewBox="0 0 17 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g clip-path="url(#clip0_72_1104)">
|
|
3
|
+
<path d="M3.33234 4.85879C3.07397 4.85879 2.85444 4.94887 2.67421 5.12925C2.49398 5.30957 2.40381 5.52589 2.40381 5.77826V9.65469C2.40381 9.91294 2.49395 10.1323 2.67421 10.3126C2.85444 10.493 3.07385 10.5829 3.33225 10.5829C3.59072 10.5829 3.80855 10.4929 3.9858 10.3126C4.16319 10.1323 4.25182 9.91294 4.25182 9.65469V5.77826C4.25182 5.52579 4.16161 5.30948 3.98138 5.12925C3.80113 4.94896 3.58468 4.85879 3.33234 4.85879ZM4.61258 11.0339C4.61258 11.3103 4.70876 11.5446 4.90105 11.737C5.09336 11.9291 5.32768 12.0253 5.6042 12.0253H6.2713L6.2804 14.0716C6.2804 14.33 6.37054 14.5493 6.5508 14.7296C6.73102 14.9099 6.94743 15.0001 7.19981 15.0001C7.45834 15.0001 7.67762 14.9099 7.85794 14.7296C8.03826 14.5493 8.12834 14.33 8.12834 14.0716V12.0253H9.37227V14.0716C9.37227 14.33 9.46238 14.5493 9.64261 14.7296C9.82306 14.9099 10.0424 15.0001 10.3009 15.0001C10.5591 15.0001 10.7785 14.9099 10.9587 14.7296C11.1389 14.5493 11.2289 14.33 11.2289 14.0716V12.0253H11.9051C12.1754 12.0253 12.4068 11.9293 12.5991 11.737C12.7915 11.5446 12.8877 11.3103 12.8877 11.0339V5.03005H4.61258V11.0339ZM10.7964 1.37925L11.4363 0.198274C11.4784 0.12016 11.4633 0.0600741 11.3913 0.0180488C11.3131 -0.0180406 11.253 -1.16908e-05 11.2111 0.072167L10.5619 1.26204C9.991 1.00964 9.38721 0.883435 8.75007 0.883435C8.11309 0.883435 7.50908 1.00964 6.93812 1.26204L6.28908 0.0721986C6.24715 1.98811e-05 6.18697 -0.018009 6.10885 0.0180803C6.03671 0.0601056 6.02177 0.120191 6.06383 0.198306L6.70387 1.37925C6.05474 1.70973 5.53806 2.171 5.15332 2.76295C4.76872 3.35494 4.57637 4.00253 4.57637 4.70556H12.915C12.915 4.00253 12.7226 3.35491 12.338 2.76295C11.9532 2.171 11.4397 1.7097 10.7964 1.37925ZM7.0959 3.09644C7.02684 3.16559 6.94425 3.20013 6.84807 3.20013C6.7519 3.20013 6.67081 3.16562 6.60463 3.09644C6.53861 3.02739 6.50549 2.94473 6.50549 2.84858C6.50549 2.75241 6.53861 2.66975 6.60463 2.6006C6.67072 2.53145 6.75193 2.49697 6.84807 2.49697C6.94412 2.49697 7.02675 2.53142 7.0959 2.6006C7.16504 2.66975 7.19959 2.75241 7.19959 2.84858C7.19959 2.94476 7.16504 3.02729 7.0959 3.09644ZM10.8957 3.09644C10.8295 3.16559 10.7483 3.20013 10.6522 3.20013C10.556 3.20013 10.4735 3.16562 10.4044 3.09644C10.3352 3.02739 10.3008 2.94473 10.3008 2.84858C10.3008 2.75241 10.3352 2.66975 10.4044 2.6006C10.4735 2.53145 10.556 2.49697 10.6522 2.49697C10.7483 2.49697 10.8295 2.53142 10.8957 2.6006C10.9616 2.66975 10.9948 2.75241 10.9948 2.84858C10.9948 2.94476 10.9617 3.02729 10.8957 3.09644ZM14.8259 5.12471C14.6457 4.94745 14.4263 4.85879 14.1679 4.85879C13.9156 4.85879 13.6992 4.94745 13.519 5.12471C13.3387 5.30203 13.2485 5.51992 13.2485 5.77826V9.65469C13.2485 9.91294 13.3387 10.1323 13.519 10.3126C13.6992 10.493 13.9156 10.5829 14.1679 10.5829C14.4263 10.5829 14.6457 10.4929 14.8259 10.3126C15.0063 10.1323 15.0964 9.91294 15.0964 9.65469V5.77826C15.0964 5.51989 15.0063 5.302 14.8259 5.12471Z" fill="currentColor"/>
|
|
4
|
+
</g>
|
|
5
|
+
<defs>
|
|
6
|
+
<clipPath id="clip0_72_1104">
|
|
7
|
+
<rect width="16" height="15" fill="white" transform="translate(0.75)"/>
|
|
8
|
+
</clipPath>
|
|
9
|
+
</defs>
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="17" height="15" viewBox="0 0 17 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M9.38281 1.30664C10.3672 0.00585929 11.7383 0 11.7383 0C11.7383 0 11.9434 1.22168 10.9619 2.39648C9.91602 3.65332 8.72949 3.44824 8.72949 3.44824C8.72949 3.44824 8.50684 2.46094 9.38281 1.30664ZM8.85547 4.30371C9.3623 4.30371 10.3027 3.60645 11.5273 3.60645C13.6367 3.60645 14.4658 5.10645 14.4658 5.10645C14.4658 5.10645 12.8428 5.93555 12.8428 7.94824C12.8428 10.2188 14.8643 11.001 14.8643 11.001C14.8643 11.001 13.4521 14.9766 11.5449 14.9766C10.6689 14.9766 9.98633 14.3848 9.06348 14.3848C8.12305 14.3848 7.18848 14.9971 6.5791 14.9971C4.83594 14.9971 2.63574 11.2266 2.63574 8.19434C2.63574 5.21191 4.49902 3.64746 6.24512 3.64746C7.38184 3.64746 8.26367 4.30371 8.85547 4.30371Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg width="54" height="54" viewBox="0 0 54 54" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<circle cx="27" cy="27" r="27" fill="#3AC34C"/>
|
|
3
|
+
<path d="M10 44L12.402 35.2698C10.918 32.7088 10.1386 29.8036 10.1423 26.847C10.1459 17.5572 17.7405 10 27.0711 10C31.5998 10.0021 35.8496 11.7567 39.0457 14.9406C40.6222 16.5026 41.8718 18.3604 42.7222 20.4065C43.5726 22.4525 44.0069 24.6462 43.9999 26.8605C43.9957 36.1495 36.4011 43.7082 27.0711 43.7082H27.064C24.2308 43.7068 21.4467 42.9998 18.9742 41.6575L10 44Z" fill="white"/>
|
|
4
|
+
<path d="M22.3214 19.742C21.9823 18.9158 21.6375 19.0278 21.3807 19.0143C21.1366 19.0021 20.8579 19 20.5786 19C20.2993 19 19.8469 19.1056 19.4634 19.5301C19.08 19.9547 18 20.9807 18 23.0677C18 25.1554 19.4986 27.1717 19.7076 27.4543C19.9166 27.7375 22.657 32.0207 26.8531 33.8572C27.8508 34.2939 28.6297 34.555 29.2376 34.7505C30.2395 35.073 31.1513 35.0281 31.8718 34.9189C32.6753 34.7969 34.3463 33.8929 34.6952 32.9025C35.0435 31.9115 35.0435 31.0624 34.9394 30.8855C34.8346 30.7092 34.5559 30.6029 34.1373 30.3903C33.7194 30.1784 31.6628 29.1524 31.2794 29.0111C30.8959 28.8691 30.6173 28.7985 30.338 29.223C30.0594 29.6476 29.258 30.6029 29.0138 30.8855C28.7697 31.1687 28.5256 31.2044 28.1076 30.9925C27.689 30.7799 26.3416 30.3318 24.7445 28.8877C23.5006 27.7632 22.6612 26.374 22.4171 25.9495C22.1729 25.525 22.391 25.2959 22.6 25.084C22.7886 24.8942 23.0186 24.5888 23.2276 24.342C23.4373 24.0937 23.5069 23.9167 23.6462 23.6342C23.7855 23.3509 23.7159 23.1033 23.6111 22.8907C23.5069 22.6788 22.6704 20.5918 22.3214 19.7428V19.742Z" fill="#3AC34C"/>
|
|
5
|
+
</svg>
|
|
@@ -72,7 +72,7 @@ const statusMeta = computed(() => {
|
|
|
72
72
|
|
|
73
73
|
<template>
|
|
74
74
|
<section v-if="visible" class="checkout-status" :data-tone="statusMeta.tone" role="status">
|
|
75
|
-
<
|
|
75
|
+
<UiIcon :name="statusMeta.icon" class="checkout-status__icon" />
|
|
76
76
|
<div>
|
|
77
77
|
<UiText as="h3" size="lg" weight="bold">{{ statusMeta.title }}</UiText>
|
|
78
78
|
<UiText as="p" tone="muted">{{ statusMeta.description }}</UiText>
|
|
@@ -93,8 +93,8 @@ const statusMeta = computed(() => {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
.checkout-status__icon {
|
|
96
|
-
width:
|
|
97
|
-
height:
|
|
96
|
+
width: var(--site-icon-xl);
|
|
97
|
+
height: var(--site-icon-xl);
|
|
98
98
|
margin-top: 2px;
|
|
99
99
|
color: var(--site-color-muted);
|
|
100
100
|
}
|
|
@@ -4,6 +4,17 @@ defineOptions({ inheritAttrs: false });
|
|
|
4
4
|
const site = useSiteShell();
|
|
5
5
|
const consent = useConsent();
|
|
6
6
|
const { t } = useI18n();
|
|
7
|
+
const element = ref<HTMLElement | null>(null);
|
|
8
|
+
const { height } = useElementSize(element, undefined, { box: "border-box" });
|
|
9
|
+
const { setLayer, clearLayer } = useFloatingBottomStack();
|
|
10
|
+
watch(
|
|
11
|
+
[consent.visible, height],
|
|
12
|
+
([visible, height]) => {
|
|
13
|
+
setLayer("consent", { visible, height, order: 0 });
|
|
14
|
+
},
|
|
15
|
+
{ immediate: true },
|
|
16
|
+
);
|
|
17
|
+
onBeforeUnmount(() => clearLayer("consent"));
|
|
7
18
|
|
|
8
19
|
const storageMessage = computed(() => {
|
|
9
20
|
if (consent.state.value.error === "read-failed") {
|
|
@@ -26,6 +37,7 @@ const storageMessage = computed(() => {
|
|
|
26
37
|
<ClientOnly>
|
|
27
38
|
<section
|
|
28
39
|
v-if="consent.visible.value"
|
|
40
|
+
ref="element"
|
|
29
41
|
v-bind="$attrs"
|
|
30
42
|
class="site-consent"
|
|
31
43
|
role="region"
|
|
@@ -33,15 +45,18 @@ const storageMessage = computed(() => {
|
|
|
33
45
|
>
|
|
34
46
|
<div class="site-consent__header">
|
|
35
47
|
<h2>{{ t("consent.title") }}</h2>
|
|
36
|
-
<
|
|
48
|
+
<UiButton
|
|
37
49
|
v-if="consent.state.value.decision"
|
|
38
|
-
|
|
50
|
+
color="neutral"
|
|
51
|
+
variant="ghost"
|
|
52
|
+
size="xs"
|
|
53
|
+
square
|
|
39
54
|
class="site-consent__close"
|
|
40
55
|
:aria-label="t('consent.close')"
|
|
41
56
|
@click="consent.closeSettings"
|
|
42
57
|
>
|
|
43
|
-
<
|
|
44
|
-
</
|
|
58
|
+
<UiIcon name="i-lucide-x" aria-hidden="true" />
|
|
59
|
+
</UiButton>
|
|
45
60
|
</div>
|
|
46
61
|
<p class="site-consent__message">{{ t("consent.message") }}</p>
|
|
47
62
|
<NuxtLink class="site-consent__policy" :to="site.consent.policyPath">
|
|
@@ -51,12 +66,12 @@ const storageMessage = computed(() => {
|
|
|
51
66
|
{{ storageMessage }}
|
|
52
67
|
</p>
|
|
53
68
|
<div class="site-consent__actions">
|
|
54
|
-
<
|
|
69
|
+
<UiButton color="neutral" variant="outline" size="sm" @click="consent.reject">
|
|
55
70
|
{{ t("consent.decline") }}
|
|
56
|
-
</
|
|
57
|
-
<
|
|
71
|
+
</UiButton>
|
|
72
|
+
<UiButton size="sm" @click="consent.accept">
|
|
58
73
|
{{ t("consent.allow") }}
|
|
59
|
-
</
|
|
74
|
+
</UiButton>
|
|
60
75
|
</div>
|
|
61
76
|
</section>
|
|
62
77
|
</ClientOnly>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
defineProps<{
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
buttonLabel: string;
|
|
6
|
+
to: string;
|
|
7
|
+
logo?: { src: string; alt: string };
|
|
8
|
+
decoration?: string;
|
|
9
|
+
}>();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<section class="call-to-action relative overflow-hidden px-4 py-15">
|
|
14
|
+
<UiImage
|
|
15
|
+
v-if="decoration"
|
|
16
|
+
:src="decoration"
|
|
17
|
+
alt=""
|
|
18
|
+
class="absolute start-0 top-0 h-[166px] w-[223px] rotate-180 max-md:h-[83px] max-md:w-[110px]"
|
|
19
|
+
/>
|
|
20
|
+
<div class="relative z-10 mx-auto flex max-w-7xl flex-col items-center text-center">
|
|
21
|
+
<UiImage
|
|
22
|
+
v-if="logo"
|
|
23
|
+
:src="logo.src"
|
|
24
|
+
:alt="logo.alt"
|
|
25
|
+
:width="164"
|
|
26
|
+
:height="62"
|
|
27
|
+
fit="contain"
|
|
28
|
+
class="mb-10 h-[62px] w-auto max-lg:h-12"
|
|
29
|
+
/>
|
|
30
|
+
<h2 class="mb-5 max-w-[882px] text-[40px] leading-none font-bold max-md:text-[26px]/[34px]">
|
|
31
|
+
{{ title }}
|
|
32
|
+
</h2>
|
|
33
|
+
<p class="mb-10 max-w-[900px] text-base leading-6 font-medium text-muted max-md:mb-7.5">
|
|
34
|
+
{{ description }}
|
|
35
|
+
</p>
|
|
36
|
+
<slot name="action"
|
|
37
|
+
><UiButton :to="to" size="lg">{{ buttonLabel }}</UiButton></slot
|
|
38
|
+
>
|
|
39
|
+
</div>
|
|
40
|
+
<UiImage
|
|
41
|
+
v-if="decoration"
|
|
42
|
+
:src="decoration"
|
|
43
|
+
alt=""
|
|
44
|
+
class="absolute end-0 bottom-0 h-[166px] w-[223px] max-md:h-[83px] max-md:w-[110px]"
|
|
45
|
+
/>
|
|
46
|
+
</section>
|
|
47
|
+
</template>
|
|
48
|
+
|
|
49
|
+
<style scoped>
|
|
50
|
+
.call-to-action {
|
|
51
|
+
background: linear-gradient(
|
|
52
|
+
270.88deg,
|
|
53
|
+
color-mix(in srgb, var(--site-color-primary) 28%, var(--site-color-surface)) 0.75%,
|
|
54
|
+
color-mix(in srgb, var(--site-color-primary) 12%, var(--site-color-surface)) 28.3%,
|
|
55
|
+
color-mix(in srgb, var(--site-color-primary) 6%, var(--site-color-surface)) 67.73%,
|
|
56
|
+
color-mix(in srgb, var(--site-color-primary) 18%, var(--site-color-surface)) 99.99%
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
</style>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { ListItem } from "~/content/types";
|
|
3
|
+
withDefaults(defineProps<{ item: ListItem; preload?: boolean }>(), { preload: false });
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<template>
|
|
7
|
+
<article
|
|
8
|
+
class="flex h-full flex-col gap-5 overflow-hidden rounded-ml bg-surface/60 px-2.5 pt-3.5 pb-7.5 transition duration-300 hover:-translate-y-1 hover:shadow-lg"
|
|
9
|
+
>
|
|
10
|
+
<NuxtLinkLocale v-if="item.image" :to="item.to" tabindex="-1" aria-hidden="true">
|
|
11
|
+
<UiImage
|
|
12
|
+
:src="item.image.src"
|
|
13
|
+
:alt="item.image.alt"
|
|
14
|
+
:preload="preload"
|
|
15
|
+
:width="323"
|
|
16
|
+
:height="198"
|
|
17
|
+
class="aspect-[323/198] h-60 w-full rounded-lg object-cover max-lg:h-auto"
|
|
18
|
+
/>
|
|
19
|
+
</NuxtLinkLocale>
|
|
20
|
+
<div class="flex flex-1 flex-col text-sm">
|
|
21
|
+
<NuxtLinkLocale :to="item.to"
|
|
22
|
+
><h3 class="mb-2.5 line-clamp-2 text-lg font-bold">{{ item.title }}</h3></NuxtLinkLocale
|
|
23
|
+
>
|
|
24
|
+
<p v-if="item.description" class="mb-5 line-clamp-3 text-dimmed">{{ item.description }}</p>
|
|
25
|
+
<p v-if="item.author || item.category" class="mt-auto flex flex-wrap gap-2">
|
|
26
|
+
<span v-if="item.author">{{ item.author }}</span>
|
|
27
|
+
<NuxtLinkLocale v-if="item.categoryTo" :to="item.categoryTo" class="text-primary">{{
|
|
28
|
+
item.category
|
|
29
|
+
}}</NuxtLinkLocale>
|
|
30
|
+
<span v-else-if="item.category" class="text-primary">{{ item.category }}</span>
|
|
31
|
+
</p>
|
|
32
|
+
<time v-if="item.date" :datetime="item.dateTime" class="mt-2.5">{{ item.date }}</time>
|
|
33
|
+
</div>
|
|
34
|
+
</article>
|
|
35
|
+
</template>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
defineProps<{ icons: string[]; label: string }>();
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<template>
|
|
6
|
+
<div class="flex items-center gap-2.5">
|
|
7
|
+
<UiIcon v-for="icon in icons" :key="icon" :name="icon" class="size-icon-sm text-dimmed" />
|
|
8
|
+
<span class="text-[10px] font-medium">{{ label }}</span>
|
|
9
|
+
</div>
|
|
10
|
+
</template>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface FaqItem {
|
|
3
|
+
question: string;
|
|
4
|
+
answer: string;
|
|
5
|
+
}
|
|
6
|
+
const props = defineProps<{ title: string; items: FaqItem[]; buttonLabel?: string; to?: string }>();
|
|
7
|
+
const emit = defineEmits<{ "button-click": [event: MouseEvent] }>();
|
|
8
|
+
const columns = computed(() =>
|
|
9
|
+
[0, 1].map((column) =>
|
|
10
|
+
props.items
|
|
11
|
+
.map((item, index) => ({
|
|
12
|
+
...item,
|
|
13
|
+
label: item.question,
|
|
14
|
+
content: item.answer,
|
|
15
|
+
value: String(index),
|
|
16
|
+
index,
|
|
17
|
+
}))
|
|
18
|
+
.filter((item) => item.index % 2 === column),
|
|
19
|
+
),
|
|
20
|
+
);
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<section class="bg-gradient-to-b from-primary/10 to-surface px-4 py-15">
|
|
25
|
+
<div class="mx-auto w-full max-w-7xl">
|
|
26
|
+
<h2 class="mb-10 text-center text-3xl font-bold">{{ title }}</h2>
|
|
27
|
+
<div
|
|
28
|
+
class="grid grid-cols-2 items-start gap-7.5 max-xl:gap-4.5 max-md:grid-cols-1 max-md:gap-2.5"
|
|
29
|
+
>
|
|
30
|
+
<UAccordion
|
|
31
|
+
v-for="(columnItems, column) in columns"
|
|
32
|
+
:key="column"
|
|
33
|
+
type="multiple"
|
|
34
|
+
:items="columnItems"
|
|
35
|
+
trailing-icon="i-lucide-plus"
|
|
36
|
+
:ui="{
|
|
37
|
+
root: 'space-y-7.5 max-xl:space-y-4.5 max-md:space-y-2.5',
|
|
38
|
+
trailingIcon: 'text-primary group-data-[state=open]:rotate-45',
|
|
39
|
+
}"
|
|
40
|
+
>
|
|
41
|
+
<template #body="{ item }"
|
|
42
|
+
><slot name="answer" :item="item" :index="item.index">{{ item.answer }}</slot></template
|
|
43
|
+
>
|
|
44
|
+
</UAccordion>
|
|
45
|
+
</div>
|
|
46
|
+
<UiButton
|
|
47
|
+
v-if="buttonLabel"
|
|
48
|
+
:to="to"
|
|
49
|
+
size="lg"
|
|
50
|
+
class="mx-auto mt-12.5 flex max-md:mt-7.5"
|
|
51
|
+
@click="emit('button-click', $event)"
|
|
52
|
+
>{{ buttonLabel }}</UiButton
|
|
53
|
+
>
|
|
54
|
+
</div>
|
|
55
|
+
</section>
|
|
56
|
+
</template>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
const props = defineProps<{ title: string; description: string }>();
|
|
3
|
+
useSeoMeta({ title: () => props.title, description: () => props.description });
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<template>
|
|
7
|
+
<div class="relative w-full"><slot name="banner" /><slot /></div>
|
|
8
|
+
</template>
|
|
@@ -17,14 +17,7 @@ defineProps<{
|
|
|
17
17
|
</header>
|
|
18
18
|
|
|
19
19
|
<div class="content-list__grid">
|
|
20
|
-
<
|
|
21
|
-
<small v-if="item.category">{{ item.category }}</small>
|
|
22
|
-
<h2>{{ item.title }}</h2>
|
|
23
|
-
<p v-if="item.description">{{ item.description }}</p>
|
|
24
|
-
<span v-if="item.date || item.author">
|
|
25
|
-
{{ [item.author, item.date].filter(Boolean).join(" · ") }}
|
|
26
|
-
</span>
|
|
27
|
-
</NuxtLinkLocale>
|
|
20
|
+
<ContentCard v-for="item in items" :key="item.to" :item="item" />
|
|
28
21
|
</div>
|
|
29
22
|
</section>
|
|
30
23
|
</template>
|