@troshab/slidev-theme-troshab 0.1.0 → 0.1.2
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/README.md +3 -1
- package/components/Background.vue +16 -4
- package/components/Callout.vue +1 -1
- package/components/Card.vue +3 -3
- package/components/CaseStudy.vue +1 -1
- package/components/CodeDiff.vue +2 -2
- package/components/CodeHighlight.vue +2 -2
- package/components/ColorSwatch.vue +3 -3
- package/components/Confetti.vue +7 -7
- package/components/Conversation.vue +10 -10
- package/components/Countdown.vue +10 -10
- package/components/Definition.vue +1 -1
- package/components/DeviceMockup.vue +55 -55
- package/components/Image.vue +2 -2
- package/components/ImageCompare.vue +18 -18
- package/components/MatrixGrid.vue +1 -1
- package/components/MermaidChart.vue +1 -1
- package/components/Metric.vue +1 -1
- package/components/PricingTable.vue +5 -5
- package/components/Progress.vue +1 -1
- package/components/Pyramid.vue +1 -1
- package/components/QRCode.vue +1 -1
- package/components/SpeechBubble.vue +34 -34
- package/components/Stepper.vue +8 -8
- package/components/StyledText.vue +6 -6
- package/components/Testimonial.vue +6 -6
- package/example_dark.md +1 -0
- package/example_white.md +1 -0
- package/package.json +3 -2
- package/setup/mermaid.ts +4 -4
- package/styles/base.css +31 -21
- package/styles/colors.css +2 -2
- package/styles/motion.css +4 -4
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ A minimal, universal [Slidev](https://sli.dev) theme built around one flexible l
|
|
|
10
10
|
|
|
11
11
|
```md
|
|
12
12
|
---
|
|
13
|
-
theme: troshab
|
|
13
|
+
theme: @troshab/slidev-theme-troshab
|
|
14
14
|
---
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -22,6 +22,8 @@ theme: troshab
|
|
|
22
22
|
|
|
23
23
|
**Design system** - 3-layer Dracula/Alucard palette (11 color families × 11 shades), IBM Plex Sans/Mono typography, and a motion system based on IBM Carbon. All tokens are CSS variables - components never hardcode colors.
|
|
24
24
|
|
|
25
|
+
**1920×1080 canvas** - optimized for Full HD projectors and screens. All sizing uses `rem` units that scale automatically from the root font-size, so the layout adapts cleanly if the canvas resolution changes.
|
|
26
|
+
|
|
25
27
|
**v-click auto-registration** - interactive components (AnimatedCounter, Countdown, ImageCompare, Stepper, Conversation, StyledText spoilers) register their own click slots. No `clicks:` frontmatter, no `<v-click>` wrappers needed.
|
|
26
28
|
|
|
27
29
|
**Accessibility** - WCAG AA contrast (target AAA), BDA dyslexia-friendly spacing (word-spacing 0.08em, letter-spacing 0.02em), keyboard focus styles, 5% safe-zone padding.
|
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
* Replaces <div class="bg-primary"></div> and raw  in bg slots.
|
|
5
5
|
*
|
|
6
6
|
* Gradient prop:
|
|
7
|
-
* 1. Presets (string): "
|
|
7
|
+
* 1. Presets (string): "section", "subtle" (alias), "accent", "primary",
|
|
8
|
+
* "success", "warning", "danger", "info"
|
|
8
9
|
* 2. Full control (array): [type, direction, ...colorStops]
|
|
9
10
|
* - type: 'linear' | 'radial' | 'conic'
|
|
10
11
|
* - direction: CSS direction ('135deg', 'to right', 'circle', 'from 45deg')
|
|
11
12
|
* - colorStops: [semanticColor, position] tuples
|
|
12
13
|
*
|
|
13
14
|
* Examples:
|
|
15
|
+
* gradient="section"
|
|
14
16
|
* gradient="accent"
|
|
15
17
|
* :gradient="['linear', '135deg', ['primary', '0%'], ['info', '100%']]"
|
|
16
18
|
* :gradient="['radial', 'circle', ['primary', '0%'], ['soft', '100%']]"
|
|
@@ -48,15 +50,25 @@ function resolveColor(name: string): string {
|
|
|
48
50
|
return colorVarMap[name] || name
|
|
49
51
|
}
|
|
50
52
|
|
|
53
|
+
const gradientPresets: Record<string, string> = {
|
|
54
|
+
primary: 'var(--gradient-primary)',
|
|
55
|
+
success: 'var(--gradient-success)',
|
|
56
|
+
warning: 'var(--gradient-warning)',
|
|
57
|
+
danger: 'var(--gradient-danger)',
|
|
58
|
+
info: 'var(--gradient-info)',
|
|
59
|
+
accent: 'var(--gradient-accent)',
|
|
60
|
+
section: 'var(--gradient-section)',
|
|
61
|
+
subtle: 'var(--gradient-section)',
|
|
62
|
+
}
|
|
63
|
+
|
|
51
64
|
const gradientStyle = computed(() => {
|
|
52
65
|
const g = props.gradient
|
|
53
66
|
if (!g) return undefined
|
|
54
67
|
|
|
55
68
|
// String presets
|
|
56
69
|
if (typeof g === 'string') {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return undefined
|
|
70
|
+
const v = gradientPresets[g]
|
|
71
|
+
return v ? { background: v } : undefined
|
|
60
72
|
}
|
|
61
73
|
|
|
62
74
|
// Array: [type, direction, ...colorStops]
|
package/components/Callout.vue
CHANGED
|
@@ -45,7 +45,7 @@ defineProps<{
|
|
|
45
45
|
padding: 1rem 1rem 1rem 1.25rem;
|
|
46
46
|
margin-block: 1rem;
|
|
47
47
|
background-color: var(--color-bg-soft);
|
|
48
|
-
border-left:
|
|
48
|
+
border-left: var(--border-accent) solid var(--color-info);
|
|
49
49
|
border-radius: 0 0.375rem 0.375rem 0;
|
|
50
50
|
}
|
|
51
51
|
|
package/components/Card.vue
CHANGED
|
@@ -35,7 +35,7 @@ const isPhosphorIcon = computed(() => props.icon?.startsWith('ph-'))
|
|
|
35
35
|
padding: 1.25rem;
|
|
36
36
|
background-color: var(--color-bg-soft);
|
|
37
37
|
border-radius: 0.5rem;
|
|
38
|
-
border:
|
|
38
|
+
border: var(--border-thin) solid var(--color-border);
|
|
39
39
|
transition:
|
|
40
40
|
border-color var(--dur-fast-02) var(--ease-standard),
|
|
41
41
|
box-shadow var(--dur-fast-02) var(--ease-standard);
|
|
@@ -43,11 +43,11 @@ const isPhosphorIcon = computed(() => props.icon?.startsWith('ph-'))
|
|
|
43
43
|
|
|
44
44
|
.card:hover {
|
|
45
45
|
border-color: var(--color-border-strong);
|
|
46
|
-
box-shadow: 0
|
|
46
|
+
box-shadow: 0 0.125rem 0.5rem color-mix(in srgb, var(--color-black) 5%, transparent);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
.dark .card:hover {
|
|
50
|
-
box-shadow: 0
|
|
50
|
+
box-shadow: 0 0.125rem 0.5rem color-mix(in srgb, var(--color-black) 20%, transparent);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
.card-icon {
|
package/components/CaseStudy.vue
CHANGED
package/components/CodeDiff.vue
CHANGED
|
@@ -199,7 +199,7 @@ const afterDiffLines = computed<CodeLine[]>(() =>
|
|
|
199
199
|
display: flex;
|
|
200
200
|
border-radius: 0.5rem;
|
|
201
201
|
overflow: hidden;
|
|
202
|
-
border:
|
|
202
|
+
border: var(--border-thin) solid var(--color-border);
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
.code-diff-split {
|
|
@@ -224,6 +224,6 @@ const afterDiffLines = computed<CodeLine[]>(() =>
|
|
|
224
224
|
|
|
225
225
|
/* Divider between panels */
|
|
226
226
|
.code-diff-split > .code-hl:first-child {
|
|
227
|
-
border-right:
|
|
227
|
+
border-right: var(--border-thin) solid var(--color-border-strong);
|
|
228
228
|
}
|
|
229
229
|
</style>
|
|
@@ -209,7 +209,7 @@ function tokenize(text: string): string {
|
|
|
209
209
|
word-spacing: normal;
|
|
210
210
|
border-radius: 0.5rem;
|
|
211
211
|
overflow: hidden;
|
|
212
|
-
border:
|
|
212
|
+
border: var(--border-thin) solid var(--color-border);
|
|
213
213
|
background-color: var(--shiki-color-background, var(--color-bg-muted));
|
|
214
214
|
}
|
|
215
215
|
|
|
@@ -219,7 +219,7 @@ function tokenize(text: string): string {
|
|
|
219
219
|
align-items: center;
|
|
220
220
|
justify-content: space-between;
|
|
221
221
|
padding: 0.25rem 0.75rem;
|
|
222
|
-
border-bottom:
|
|
222
|
+
border-bottom: var(--border-thin) solid var(--color-border);
|
|
223
223
|
background-color: var(--shiki-color-background, var(--color-bg-muted));
|
|
224
224
|
}
|
|
225
225
|
|
|
@@ -83,7 +83,7 @@ watch(() => [isDark.value, props.name], resolveColor)
|
|
|
83
83
|
display: flex;
|
|
84
84
|
align-items: flex-end;
|
|
85
85
|
padding: 0.5rem;
|
|
86
|
-
border:
|
|
86
|
+
border: var(--border-thin) solid var(--color-border);
|
|
87
87
|
color: var(--color-white);
|
|
88
88
|
}
|
|
89
89
|
|
|
@@ -95,7 +95,7 @@ watch(() => [isDark.value, props.name], resolveColor)
|
|
|
95
95
|
font-size: var(--font-size-small);
|
|
96
96
|
font-family: var(--font-mono);
|
|
97
97
|
line-height: 1.3;
|
|
98
|
-
text-shadow: 0
|
|
98
|
+
text-shadow: 0 0.0625rem 0.1875rem color-mix(in srgb, var(--color-black) 30%, transparent);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
.color-swatch-hex {
|
|
@@ -109,6 +109,6 @@ watch(() => [isDark.value, props.name], resolveColor)
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
.color-swatch-light .color-swatch-label {
|
|
112
|
-
text-shadow: 0
|
|
112
|
+
text-shadow: 0 0.0625rem 0.1875rem color-mix(in srgb, var(--color-white) 40%, transparent);
|
|
113
113
|
}
|
|
114
114
|
</style>
|
package/components/Confetti.vue
CHANGED
|
@@ -274,19 +274,19 @@ defineExpose({ fire })
|
|
|
274
274
|
}
|
|
275
275
|
|
|
276
276
|
.confetti-square {
|
|
277
|
-
width:
|
|
278
|
-
height:
|
|
277
|
+
width: 0.625rem;
|
|
278
|
+
height: 0.625rem;
|
|
279
279
|
}
|
|
280
280
|
|
|
281
281
|
.confetti-circle {
|
|
282
|
-
width:
|
|
283
|
-
height:
|
|
282
|
+
width: 0.5rem;
|
|
283
|
+
height: 0.5rem;
|
|
284
284
|
border-radius: 50%;
|
|
285
285
|
}
|
|
286
286
|
|
|
287
287
|
.confetti-strip {
|
|
288
|
-
width:
|
|
289
|
-
height:
|
|
290
|
-
border-radius:
|
|
288
|
+
width: 0.1875rem;
|
|
289
|
+
height: 0.75rem;
|
|
290
|
+
border-radius: 0.0625rem;
|
|
291
291
|
}
|
|
292
292
|
</style>
|
|
@@ -205,20 +205,20 @@ function getInitials(name: string): string {
|
|
|
205
205
|
.conversation {
|
|
206
206
|
display: flex;
|
|
207
207
|
flex-direction: column;
|
|
208
|
-
gap: var(--space-xs,
|
|
208
|
+
gap: var(--space-xs, 0.5rem);
|
|
209
209
|
max-width: 100%;
|
|
210
|
-
padding: var(--space-sm,
|
|
210
|
+
padding: var(--space-sm, 1rem) 0;
|
|
211
211
|
}
|
|
212
212
|
|
|
213
213
|
/* Row layout */
|
|
214
214
|
.conv-row {
|
|
215
215
|
display: flex;
|
|
216
216
|
align-items: flex-end;
|
|
217
|
-
gap: var(--space-xs,
|
|
217
|
+
gap: var(--space-xs, 0.5rem);
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
.conv-group-continuation {
|
|
221
|
-
margin-top: calc(-1 * var(--space-xs,
|
|
221
|
+
margin-top: calc(-1 * var(--space-xs, 0.5rem) + 0.125rem);
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
.conv-left {
|
|
@@ -273,7 +273,7 @@ function getInitials(name: string): string {
|
|
|
273
273
|
.conv-sender {
|
|
274
274
|
font-size: 0.75rem;
|
|
275
275
|
color: var(--color-text-tertiary);
|
|
276
|
-
margin-bottom:
|
|
276
|
+
margin-bottom: 0.125rem;
|
|
277
277
|
padding: 0 0.75rem;
|
|
278
278
|
}
|
|
279
279
|
|
|
@@ -284,7 +284,7 @@ function getInitials(name: string): string {
|
|
|
284
284
|
/* Bubble */
|
|
285
285
|
.conv-bubble {
|
|
286
286
|
padding: 0.5rem 0.75rem;
|
|
287
|
-
font-size: var(--font-size-small,
|
|
287
|
+
font-size: var(--font-size-small, 1.125rem);
|
|
288
288
|
line-height: var(--line-height-body, 1.35);
|
|
289
289
|
word-wrap: break-word;
|
|
290
290
|
}
|
|
@@ -293,7 +293,7 @@ function getInitials(name: string): string {
|
|
|
293
293
|
.conv-bubble-left {
|
|
294
294
|
background-color: var(--color-bg-soft);
|
|
295
295
|
color: var(--color-text);
|
|
296
|
-
border:
|
|
296
|
+
border: var(--border-thin) solid var(--color-border);
|
|
297
297
|
}
|
|
298
298
|
|
|
299
299
|
.conv-bubble-left.conv-bubble-single {
|
|
@@ -316,7 +316,7 @@ function getInitials(name: string): string {
|
|
|
316
316
|
.conv-bubble-right {
|
|
317
317
|
background-color: var(--color-primary);
|
|
318
318
|
color: var(--color-primary-foreground);
|
|
319
|
-
border:
|
|
319
|
+
border: var(--border-thin) solid transparent;
|
|
320
320
|
}
|
|
321
321
|
|
|
322
322
|
.conv-bubble-right.conv-bubble-single {
|
|
@@ -395,11 +395,11 @@ function getInitials(name: string): string {
|
|
|
395
395
|
|
|
396
396
|
.conv-msg-enter-from {
|
|
397
397
|
opacity: 0;
|
|
398
|
-
transform: translateY(var(--shift-sm,
|
|
398
|
+
transform: translateY(var(--shift-sm, 0.75rem));
|
|
399
399
|
}
|
|
400
400
|
|
|
401
401
|
.conv-msg-leave-to {
|
|
402
402
|
opacity: 0;
|
|
403
|
-
transform: translateY(calc(-1 * var(--shift-xs,
|
|
403
|
+
transform: translateY(calc(-1 * var(--shift-xs, 0.375rem)));
|
|
404
404
|
}
|
|
405
405
|
</style>
|
package/components/Countdown.vue
CHANGED
|
@@ -377,23 +377,23 @@ defineExpose({ start, pause, resume, stop, reset, toggle })
|
|
|
377
377
|
}
|
|
378
378
|
|
|
379
379
|
.countdown-size-sm .countdown-ring {
|
|
380
|
-
width:
|
|
381
|
-
height:
|
|
380
|
+
width: 7.5rem;
|
|
381
|
+
height: 7.5rem;
|
|
382
382
|
}
|
|
383
383
|
|
|
384
384
|
.countdown-size-md .countdown-ring {
|
|
385
|
-
width:
|
|
386
|
-
height:
|
|
385
|
+
width: 10rem;
|
|
386
|
+
height: 10rem;
|
|
387
387
|
}
|
|
388
388
|
|
|
389
389
|
.countdown-size-lg .countdown-ring {
|
|
390
|
-
width:
|
|
391
|
-
height:
|
|
390
|
+
width: 12.5rem;
|
|
391
|
+
height: 12.5rem;
|
|
392
392
|
}
|
|
393
393
|
|
|
394
394
|
.countdown-size-xl .countdown-ring {
|
|
395
|
-
width:
|
|
396
|
-
height:
|
|
395
|
+
width: 16.25rem;
|
|
396
|
+
height: 16.25rem;
|
|
397
397
|
}
|
|
398
398
|
|
|
399
399
|
.countdown-ring-svg {
|
|
@@ -443,8 +443,8 @@ defineExpose({ start, pause, resume, stop, reset, toggle })
|
|
|
443
443
|
|
|
444
444
|
/* Ring text needs smaller font to fit inside circle */
|
|
445
445
|
.countdown-size-sm .countdown-ring .countdown-time { font-size: var(--font-size-base); }
|
|
446
|
-
.countdown-size-md .countdown-ring .countdown-time { font-size:
|
|
447
|
-
.countdown-size-lg .countdown-ring .countdown-time { font-size:
|
|
446
|
+
.countdown-size-md .countdown-ring .countdown-time { font-size: 1.75rem; }
|
|
447
|
+
.countdown-size-lg .countdown-ring .countdown-time { font-size: 2.5rem; }
|
|
448
448
|
.countdown-size-xl .countdown-ring .countdown-time { font-size: var(--font-size-h1); }
|
|
449
449
|
|
|
450
450
|
/* Controls */
|
|
@@ -52,7 +52,7 @@ defineProps<{
|
|
|
52
52
|
.definition-body :deep(h3) {
|
|
53
53
|
color: var(--color-primary);
|
|
54
54
|
font-size: var(--font-size-base);
|
|
55
|
-
border-top:
|
|
55
|
+
border-top: var(--border-medium) solid var(--color-border);
|
|
56
56
|
padding-top: var(--space-sm);
|
|
57
57
|
margin-top: var(--space-md);
|
|
58
58
|
}
|
|
@@ -131,32 +131,32 @@ const displayUrl = computed(() => {
|
|
|
131
131
|
============================================ */
|
|
132
132
|
.iphone-frame {
|
|
133
133
|
position: relative;
|
|
134
|
-
width:
|
|
135
|
-
height:
|
|
134
|
+
width: 17.5rem;
|
|
135
|
+
height: 36.25rem;
|
|
136
136
|
background-color: var(--color-drac-fg-900);
|
|
137
|
-
border-radius:
|
|
138
|
-
padding:
|
|
137
|
+
border-radius: 2.5rem;
|
|
138
|
+
padding: 0.75rem;
|
|
139
139
|
box-shadow:
|
|
140
|
-
0 0 0
|
|
141
|
-
0
|
|
140
|
+
0 0 0 0.125rem var(--color-drac-fg-700),
|
|
141
|
+
0 1.25rem 2.5rem color-mix(in srgb, var(--color-black) 30%, transparent);
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
.dark .iphone-frame {
|
|
145
145
|
background-color: var(--color-drac-fg-800);
|
|
146
146
|
box-shadow:
|
|
147
|
-
0 0 0
|
|
148
|
-
0
|
|
147
|
+
0 0 0 0.125rem var(--color-drac-fg-600),
|
|
148
|
+
0 1.25rem 2.5rem color-mix(in srgb, var(--color-black) 50%, transparent);
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
.iphone-notch {
|
|
152
152
|
position: absolute;
|
|
153
|
-
top:
|
|
153
|
+
top: 0.75rem;
|
|
154
154
|
left: 50%;
|
|
155
155
|
transform: translateX(-50%);
|
|
156
|
-
width:
|
|
157
|
-
height:
|
|
156
|
+
width: 7.5rem;
|
|
157
|
+
height: 1.75rem;
|
|
158
158
|
background-color: var(--color-drac-fg-900);
|
|
159
|
-
border-radius: 0 0
|
|
159
|
+
border-radius: 0 0 1rem 1rem;
|
|
160
160
|
z-index: 10;
|
|
161
161
|
}
|
|
162
162
|
|
|
@@ -168,7 +168,7 @@ const displayUrl = computed(() => {
|
|
|
168
168
|
width: 100%;
|
|
169
169
|
height: 100%;
|
|
170
170
|
background-color: var(--color-bg);
|
|
171
|
-
border-radius:
|
|
171
|
+
border-radius: 1.75rem;
|
|
172
172
|
overflow: hidden;
|
|
173
173
|
}
|
|
174
174
|
|
|
@@ -189,11 +189,11 @@ const displayUrl = computed(() => {
|
|
|
189
189
|
|
|
190
190
|
.macbook-screen {
|
|
191
191
|
position: relative;
|
|
192
|
-
width:
|
|
192
|
+
width: 35rem;
|
|
193
193
|
background-color: var(--color-drac-fg-900);
|
|
194
|
-
border-radius:
|
|
195
|
-
padding:
|
|
196
|
-
box-shadow: 0 -
|
|
194
|
+
border-radius: 0.75rem 0.75rem 0 0;
|
|
195
|
+
padding: 0.5rem 0.5rem 0 0.5rem;
|
|
196
|
+
box-shadow: 0 -0.125rem 1.25rem color-mix(in srgb, var(--color-black) 20%, transparent);
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
.dark .macbook-screen {
|
|
@@ -201,11 +201,11 @@ const displayUrl = computed(() => {
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
.macbook-camera {
|
|
204
|
-
width:
|
|
205
|
-
height:
|
|
204
|
+
width: 0.5rem;
|
|
205
|
+
height: 0.5rem;
|
|
206
206
|
background-color: var(--color-drac-fg-700);
|
|
207
207
|
border-radius: 50%;
|
|
208
|
-
margin:
|
|
208
|
+
margin: 0.25rem auto 0.5rem auto;
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
.dark .macbook-camera {
|
|
@@ -216,7 +216,7 @@ const displayUrl = computed(() => {
|
|
|
216
216
|
width: 100%;
|
|
217
217
|
aspect-ratio: 16 / 10;
|
|
218
218
|
background-color: var(--color-bg);
|
|
219
|
-
border-radius:
|
|
219
|
+
border-radius: 0.25rem 0.25rem 0 0;
|
|
220
220
|
overflow: hidden;
|
|
221
221
|
}
|
|
222
222
|
|
|
@@ -227,10 +227,10 @@ const displayUrl = computed(() => {
|
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
.macbook-base {
|
|
230
|
-
width:
|
|
231
|
-
height:
|
|
230
|
+
width: 38.75rem;
|
|
231
|
+
height: 0.875rem;
|
|
232
232
|
background: linear-gradient(to bottom, var(--color-drac-fg-300) 0%, var(--color-drac-fg-400) 100%);
|
|
233
|
-
border-radius: 0 0
|
|
233
|
+
border-radius: 0 0 0.5rem 0.5rem;
|
|
234
234
|
display: flex;
|
|
235
235
|
justify-content: center;
|
|
236
236
|
align-items: flex-start;
|
|
@@ -241,10 +241,10 @@ const displayUrl = computed(() => {
|
|
|
241
241
|
}
|
|
242
242
|
|
|
243
243
|
.macbook-notch {
|
|
244
|
-
width:
|
|
245
|
-
height:
|
|
244
|
+
width: 5rem;
|
|
245
|
+
height: 0.25rem;
|
|
246
246
|
background-color: var(--color-drac-fg-500);
|
|
247
|
-
border-radius: 0 0
|
|
247
|
+
border-radius: 0 0 0.25rem 0.25rem;
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
.dark .macbook-notch {
|
|
@@ -256,35 +256,35 @@ const displayUrl = computed(() => {
|
|
|
256
256
|
============================================ */
|
|
257
257
|
.browser-frame {
|
|
258
258
|
width: 100%;
|
|
259
|
-
max-width:
|
|
259
|
+
max-width: 40rem;
|
|
260
260
|
background-color: var(--color-bg-soft);
|
|
261
|
-
border:
|
|
262
|
-
border-radius:
|
|
261
|
+
border: var(--border-thin) solid var(--color-border);
|
|
262
|
+
border-radius: 0.5rem;
|
|
263
263
|
overflow: hidden;
|
|
264
|
-
box-shadow: 0
|
|
264
|
+
box-shadow: 0 0.25rem 1.25rem color-mix(in srgb, var(--color-black) 10%, transparent);
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
.dark .browser-frame {
|
|
268
|
-
box-shadow: 0
|
|
268
|
+
box-shadow: 0 0.25rem 1.25rem color-mix(in srgb, var(--color-black) 30%, transparent);
|
|
269
269
|
}
|
|
270
270
|
|
|
271
271
|
.browser-toolbar {
|
|
272
272
|
display: flex;
|
|
273
273
|
align-items: center;
|
|
274
|
-
gap:
|
|
275
|
-
padding:
|
|
274
|
+
gap: 0.75rem;
|
|
275
|
+
padding: 0.625rem 0.75rem;
|
|
276
276
|
background-color: var(--color-bg-muted);
|
|
277
|
-
border-bottom:
|
|
277
|
+
border-bottom: var(--border-thin) solid var(--color-border);
|
|
278
278
|
}
|
|
279
279
|
|
|
280
280
|
.browser-buttons {
|
|
281
281
|
display: flex;
|
|
282
|
-
gap:
|
|
282
|
+
gap: 0.375rem;
|
|
283
283
|
}
|
|
284
284
|
|
|
285
285
|
.browser-btn {
|
|
286
|
-
width:
|
|
287
|
-
height:
|
|
286
|
+
width: 0.75rem;
|
|
287
|
+
height: 0.75rem;
|
|
288
288
|
border-radius: 50%;
|
|
289
289
|
}
|
|
290
290
|
|
|
@@ -304,17 +304,17 @@ const displayUrl = computed(() => {
|
|
|
304
304
|
flex: 1;
|
|
305
305
|
display: flex;
|
|
306
306
|
align-items: center;
|
|
307
|
-
gap:
|
|
308
|
-
padding:
|
|
307
|
+
gap: 0.375rem;
|
|
308
|
+
padding: 0.375rem 0.75rem;
|
|
309
309
|
background-color: var(--color-bg);
|
|
310
|
-
border-radius:
|
|
310
|
+
border-radius: 0.375rem;
|
|
311
311
|
font-size: 0.75rem;
|
|
312
312
|
color: var(--color-text-secondary);
|
|
313
313
|
}
|
|
314
314
|
|
|
315
315
|
.browser-lock {
|
|
316
|
-
width:
|
|
317
|
-
height:
|
|
316
|
+
width: 0.75rem;
|
|
317
|
+
height: 0.75rem;
|
|
318
318
|
opacity: 0.6;
|
|
319
319
|
}
|
|
320
320
|
|
|
@@ -344,30 +344,30 @@ const displayUrl = computed(() => {
|
|
|
344
344
|
============================================ */
|
|
345
345
|
.tablet-frame {
|
|
346
346
|
position: relative;
|
|
347
|
-
width:
|
|
348
|
-
height:
|
|
347
|
+
width: 31.25rem;
|
|
348
|
+
height: 22.5rem;
|
|
349
349
|
background-color: var(--color-drac-fg-900);
|
|
350
|
-
border-radius:
|
|
351
|
-
padding:
|
|
350
|
+
border-radius: 1.25rem;
|
|
351
|
+
padding: 1rem;
|
|
352
352
|
box-shadow:
|
|
353
|
-
0 0 0
|
|
354
|
-
0
|
|
353
|
+
0 0 0 0.125rem var(--color-drac-fg-700),
|
|
354
|
+
0 1.25rem 2.5rem color-mix(in srgb, var(--color-black) 30%, transparent);
|
|
355
355
|
}
|
|
356
356
|
|
|
357
357
|
.dark .tablet-frame {
|
|
358
358
|
background-color: var(--color-drac-fg-800);
|
|
359
359
|
box-shadow:
|
|
360
|
-
0 0 0
|
|
361
|
-
0
|
|
360
|
+
0 0 0 0.125rem var(--color-drac-fg-600),
|
|
361
|
+
0 1.25rem 2.5rem color-mix(in srgb, var(--color-black) 50%, transparent);
|
|
362
362
|
}
|
|
363
363
|
|
|
364
364
|
.tablet-camera {
|
|
365
365
|
position: absolute;
|
|
366
366
|
left: 50%;
|
|
367
|
-
top:
|
|
367
|
+
top: 0.375rem;
|
|
368
368
|
transform: translateX(-50%);
|
|
369
|
-
width:
|
|
370
|
-
height:
|
|
369
|
+
width: 0.5rem;
|
|
370
|
+
height: 0.5rem;
|
|
371
371
|
background-color: var(--color-drac-fg-700);
|
|
372
372
|
border-radius: 50%;
|
|
373
373
|
}
|
|
@@ -380,7 +380,7 @@ const displayUrl = computed(() => {
|
|
|
380
380
|
width: 100%;
|
|
381
381
|
height: 100%;
|
|
382
382
|
background-color: var(--color-bg);
|
|
383
|
-
border-radius:
|
|
383
|
+
border-radius: 0.25rem;
|
|
384
384
|
overflow: hidden;
|
|
385
385
|
}
|
|
386
386
|
|
package/components/Image.vue
CHANGED
|
@@ -49,11 +49,11 @@ defineProps<{
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
.image-border {
|
|
52
|
-
border:
|
|
52
|
+
border: var(--border-thin) solid var(--color-border);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
.image-shadow {
|
|
56
|
-
box-shadow: 0
|
|
56
|
+
box-shadow: 0 0.25rem 0.75rem color-mix(in srgb, var(--color-black) 15%, transparent);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
.image-rounded {
|
|
@@ -368,46 +368,46 @@ onUnmounted(() => {
|
|
|
368
368
|
.image-compare-horizontal .image-compare-slider {
|
|
369
369
|
top: 0;
|
|
370
370
|
bottom: 0;
|
|
371
|
-
width:
|
|
372
|
-
margin-left: -
|
|
371
|
+
width: 0.25rem;
|
|
372
|
+
margin-left: -0.125rem;
|
|
373
373
|
background-color: var(--color-drac-fg-50);
|
|
374
|
-
box-shadow: 0 0
|
|
374
|
+
box-shadow: 0 0 0.25rem color-mix(in srgb, var(--color-black) 30%, transparent);
|
|
375
375
|
}
|
|
376
376
|
|
|
377
377
|
.image-compare-vertical .image-compare-slider {
|
|
378
378
|
left: 0;
|
|
379
379
|
right: 0;
|
|
380
|
-
height:
|
|
381
|
-
margin-top: -
|
|
380
|
+
height: 0.25rem;
|
|
381
|
+
margin-top: -0.125rem;
|
|
382
382
|
background-color: var(--color-drac-fg-50);
|
|
383
|
-
box-shadow: 0 0
|
|
383
|
+
box-shadow: 0 0 0.25rem color-mix(in srgb, var(--color-black) 30%, transparent);
|
|
384
384
|
}
|
|
385
385
|
|
|
386
386
|
/* Handle */
|
|
387
387
|
.image-compare-handle {
|
|
388
388
|
position: absolute;
|
|
389
|
-
width:
|
|
390
|
-
height:
|
|
389
|
+
width: 2.75rem;
|
|
390
|
+
height: 2.75rem;
|
|
391
391
|
background-color: var(--color-drac-fg-50);
|
|
392
392
|
border-radius: 50%;
|
|
393
|
-
box-shadow: 0
|
|
393
|
+
box-shadow: 0 0.125rem 0.5rem color-mix(in srgb, var(--color-black) 30%, transparent);
|
|
394
394
|
display: flex;
|
|
395
395
|
align-items: center;
|
|
396
396
|
justify-content: center;
|
|
397
397
|
}
|
|
398
398
|
|
|
399
399
|
.image-compare-arrow {
|
|
400
|
-
width:
|
|
401
|
-
height:
|
|
400
|
+
width: 1rem;
|
|
401
|
+
height: 1rem;
|
|
402
402
|
color: var(--color-text);
|
|
403
403
|
}
|
|
404
404
|
|
|
405
405
|
.image-compare-horizontal .image-compare-arrow-left {
|
|
406
|
-
margin-right: -
|
|
406
|
+
margin-right: -0.125rem;
|
|
407
407
|
}
|
|
408
408
|
|
|
409
409
|
.image-compare-horizontal .image-compare-arrow-right {
|
|
410
|
-
margin-left: -
|
|
410
|
+
margin-left: -0.125rem;
|
|
411
411
|
}
|
|
412
412
|
|
|
413
413
|
.image-compare-vertical .image-compare-handle {
|
|
@@ -416,21 +416,21 @@ onUnmounted(() => {
|
|
|
416
416
|
|
|
417
417
|
.image-compare-vertical .image-compare-arrow-left {
|
|
418
418
|
transform: rotate(90deg);
|
|
419
|
-
margin-bottom: -
|
|
419
|
+
margin-bottom: -0.125rem;
|
|
420
420
|
}
|
|
421
421
|
|
|
422
422
|
.image-compare-vertical .image-compare-arrow-right {
|
|
423
423
|
transform: rotate(90deg);
|
|
424
|
-
margin-top: -
|
|
424
|
+
margin-top: -0.125rem;
|
|
425
425
|
}
|
|
426
426
|
|
|
427
427
|
/* Focus styles */
|
|
428
428
|
.image-compare-slider:focus {
|
|
429
|
-
outline:
|
|
430
|
-
outline-offset:
|
|
429
|
+
outline: var(--border-thick) solid var(--color-primary);
|
|
430
|
+
outline-offset: var(--border-medium);
|
|
431
431
|
}
|
|
432
432
|
|
|
433
433
|
.image-compare-slider:focus .image-compare-handle {
|
|
434
|
-
border:
|
|
434
|
+
border: var(--border-medium) solid var(--color-primary);
|
|
435
435
|
}
|
|
436
436
|
</style>
|