@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 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 ![](image) in bg slots.
5
5
  *
6
6
  * Gradient prop:
7
- * 1. Presets (string): "accent" (colorful brand), "subtle" (neutral)
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
- if (g === 'accent') return { background: 'var(--gradient-accent)' }
58
- if (g === 'subtle') return { background: 'var(--gradient-section)' }
59
- return undefined
70
+ const v = gradientPresets[g]
71
+ return v ? { background: v } : undefined
60
72
  }
61
73
 
62
74
  // Array: [type, direction, ...colorStops]
@@ -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: 4px solid var(--color-info);
48
+ border-left: var(--border-accent) solid var(--color-info);
49
49
  border-radius: 0 0.375rem 0.375rem 0;
50
50
  }
51
51
 
@@ -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: 1px solid var(--color-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 2px 8px color-mix(in srgb, var(--color-black) 5%, transparent);
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 2px 8px color-mix(in srgb, var(--color-black) 20%, transparent);
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 {
@@ -47,7 +47,7 @@ defineProps<{
47
47
  background: var(--color-bg-soft);
48
48
  border-radius: 0.5rem;
49
49
  padding: var(--space-sm);
50
- border-left: 4px solid var(--section-color);
50
+ border-left: var(--border-accent) solid var(--section-color);
51
51
  }
52
52
 
53
53
  .case-study-title {
@@ -199,7 +199,7 @@ const afterDiffLines = computed<CodeLine[]>(() =>
199
199
  display: flex;
200
200
  border-radius: 0.5rem;
201
201
  overflow: hidden;
202
- border: 1px solid var(--color-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: 1px solid var(--color-border-strong);
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: 1px solid var(--color-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: 1px solid var(--color-border);
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: 1px solid var(--color-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 1px 3px color-mix(in srgb, var(--color-black) 30%, transparent);
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 1px 3px color-mix(in srgb, var(--color-white) 40%, transparent);
112
+ text-shadow: 0 0.0625rem 0.1875rem color-mix(in srgb, var(--color-white) 40%, transparent);
113
113
  }
114
114
  </style>
@@ -274,19 +274,19 @@ defineExpose({ fire })
274
274
  }
275
275
 
276
276
  .confetti-square {
277
- width: 10px;
278
- height: 10px;
277
+ width: 0.625rem;
278
+ height: 0.625rem;
279
279
  }
280
280
 
281
281
  .confetti-circle {
282
- width: 8px;
283
- height: 8px;
282
+ width: 0.5rem;
283
+ height: 0.5rem;
284
284
  border-radius: 50%;
285
285
  }
286
286
 
287
287
  .confetti-strip {
288
- width: 3px;
289
- height: 12px;
290
- border-radius: 1px;
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, 8px);
208
+ gap: var(--space-xs, 0.5rem);
209
209
  max-width: 100%;
210
- padding: var(--space-sm, 16px) 0;
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, 8px);
217
+ gap: var(--space-xs, 0.5rem);
218
218
  }
219
219
 
220
220
  .conv-group-continuation {
221
- margin-top: calc(-1 * var(--space-xs, 8px) + 2px);
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: 2px;
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, 18px);
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: 1px solid var(--color-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: 1px solid transparent;
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, 12px));
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, 6px)));
403
+ transform: translateY(calc(-1 * var(--shift-xs, 0.375rem)));
404
404
  }
405
405
  </style>
@@ -377,23 +377,23 @@ defineExpose({ start, pause, resume, stop, reset, toggle })
377
377
  }
378
378
 
379
379
  .countdown-size-sm .countdown-ring {
380
- width: 120px;
381
- height: 120px;
380
+ width: 7.5rem;
381
+ height: 7.5rem;
382
382
  }
383
383
 
384
384
  .countdown-size-md .countdown-ring {
385
- width: 160px;
386
- height: 160px;
385
+ width: 10rem;
386
+ height: 10rem;
387
387
  }
388
388
 
389
389
  .countdown-size-lg .countdown-ring {
390
- width: 200px;
391
- height: 200px;
390
+ width: 12.5rem;
391
+ height: 12.5rem;
392
392
  }
393
393
 
394
394
  .countdown-size-xl .countdown-ring {
395
- width: 260px;
396
- height: 260px;
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: 28px; }
447
- .countdown-size-lg .countdown-ring .countdown-time { font-size: 40px; }
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: 2px solid var(--color-border);
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: 280px;
135
- height: 580px;
134
+ width: 17.5rem;
135
+ height: 36.25rem;
136
136
  background-color: var(--color-drac-fg-900);
137
- border-radius: 40px;
138
- padding: 12px;
137
+ border-radius: 2.5rem;
138
+ padding: 0.75rem;
139
139
  box-shadow:
140
- 0 0 0 2px var(--color-drac-fg-700),
141
- 0 20px 40px color-mix(in srgb, var(--color-black) 30%, transparent);
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 2px var(--color-drac-fg-600),
148
- 0 20px 40px color-mix(in srgb, var(--color-black) 50%, transparent);
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: 12px;
153
+ top: 0.75rem;
154
154
  left: 50%;
155
155
  transform: translateX(-50%);
156
- width: 120px;
157
- height: 28px;
156
+ width: 7.5rem;
157
+ height: 1.75rem;
158
158
  background-color: var(--color-drac-fg-900);
159
- border-radius: 0 0 16px 16px;
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: 28px;
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: 560px;
192
+ width: 35rem;
193
193
  background-color: var(--color-drac-fg-900);
194
- border-radius: 12px 12px 0 0;
195
- padding: 8px 8px 0 8px;
196
- box-shadow: 0 -2px 20px color-mix(in srgb, var(--color-black) 20%, transparent);
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: 8px;
205
- height: 8px;
204
+ width: 0.5rem;
205
+ height: 0.5rem;
206
206
  background-color: var(--color-drac-fg-700);
207
207
  border-radius: 50%;
208
- margin: 4px auto 8px auto;
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: 4px 4px 0 0;
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: 620px;
231
- height: 14px;
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 8px 8px;
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: 80px;
245
- height: 4px;
244
+ width: 5rem;
245
+ height: 0.25rem;
246
246
  background-color: var(--color-drac-fg-500);
247
- border-radius: 0 0 4px 4px;
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: 640px;
259
+ max-width: 40rem;
260
260
  background-color: var(--color-bg-soft);
261
- border: 1px solid var(--color-border);
262
- border-radius: 8px;
261
+ border: var(--border-thin) solid var(--color-border);
262
+ border-radius: 0.5rem;
263
263
  overflow: hidden;
264
- box-shadow: 0 4px 20px color-mix(in srgb, var(--color-black) 10%, transparent);
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 4px 20px color-mix(in srgb, var(--color-black) 30%, transparent);
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: 12px;
275
- padding: 10px 12px;
274
+ gap: 0.75rem;
275
+ padding: 0.625rem 0.75rem;
276
276
  background-color: var(--color-bg-muted);
277
- border-bottom: 1px solid var(--color-border);
277
+ border-bottom: var(--border-thin) solid var(--color-border);
278
278
  }
279
279
 
280
280
  .browser-buttons {
281
281
  display: flex;
282
- gap: 6px;
282
+ gap: 0.375rem;
283
283
  }
284
284
 
285
285
  .browser-btn {
286
- width: 12px;
287
- height: 12px;
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: 6px;
308
- padding: 6px 12px;
307
+ gap: 0.375rem;
308
+ padding: 0.375rem 0.75rem;
309
309
  background-color: var(--color-bg);
310
- border-radius: 6px;
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: 12px;
317
- height: 12px;
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: 500px;
348
- height: 360px;
347
+ width: 31.25rem;
348
+ height: 22.5rem;
349
349
  background-color: var(--color-drac-fg-900);
350
- border-radius: 20px;
351
- padding: 16px;
350
+ border-radius: 1.25rem;
351
+ padding: 1rem;
352
352
  box-shadow:
353
- 0 0 0 2px var(--color-drac-fg-700),
354
- 0 20px 40px color-mix(in srgb, var(--color-black) 30%, transparent);
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 2px var(--color-drac-fg-600),
361
- 0 20px 40px color-mix(in srgb, var(--color-black) 50%, transparent);
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: 6px;
367
+ top: 0.375rem;
368
368
  transform: translateX(-50%);
369
- width: 8px;
370
- height: 8px;
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: 4px;
383
+ border-radius: 0.25rem;
384
384
  overflow: hidden;
385
385
  }
386
386
 
@@ -49,11 +49,11 @@ defineProps<{
49
49
  }
50
50
 
51
51
  .image-border {
52
- border: 1px solid var(--color-border);
52
+ border: var(--border-thin) solid var(--color-border);
53
53
  }
54
54
 
55
55
  .image-shadow {
56
- box-shadow: 0 4px 12px color-mix(in srgb, var(--color-black) 15%, transparent);
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: 4px;
372
- margin-left: -2px;
371
+ width: 0.25rem;
372
+ margin-left: -0.125rem;
373
373
  background-color: var(--color-drac-fg-50);
374
- box-shadow: 0 0 4px color-mix(in srgb, var(--color-black) 30%, transparent);
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: 4px;
381
- margin-top: -2px;
380
+ height: 0.25rem;
381
+ margin-top: -0.125rem;
382
382
  background-color: var(--color-drac-fg-50);
383
- box-shadow: 0 0 4px color-mix(in srgb, var(--color-black) 30%, transparent);
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: 44px;
390
- height: 44px;
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 2px 8px color-mix(in srgb, var(--color-black) 30%, transparent);
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: 16px;
401
- height: 16px;
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: -2px;
406
+ margin-right: -0.125rem;
407
407
  }
408
408
 
409
409
  .image-compare-horizontal .image-compare-arrow-right {
410
- margin-left: -2px;
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: -2px;
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: -2px;
424
+ margin-top: -0.125rem;
425
425
  }
426
426
 
427
427
  /* Focus styles */
428
428
  .image-compare-slider:focus {
429
- outline: 3px solid var(--color-primary);
430
- outline-offset: 2px;
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: 2px solid var(--color-primary);
434
+ border: var(--border-medium) solid var(--color-primary);
435
435
  }
436
436
  </style>
@@ -58,7 +58,7 @@ defineProps<{
58
58
  }
59
59
 
60
60
  .matrix-cell {
61
- border: 1px solid var(--color-border);
61
+ border: var(--border-thin) solid var(--color-border);
62
62
  border-radius: 0.5rem;
63
63
  padding: var(--space-xs);
64
64
  }