@lessonkit/themes 1.5.0 → 1.7.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 (2) hide show
  1. package/base.css +941 -0
  2. package/package.json +3 -3
package/base.css CHANGED
@@ -28,3 +28,944 @@
28
28
  opacity: 0.55;
29
29
  cursor: not-allowed;
30
30
  }
31
+
32
+ /* InteractiveVideo — H5P-style cue overlay on the player */
33
+ .lk-interactive-video-stage {
34
+ position: relative;
35
+ width: 100%;
36
+ max-width: 100%;
37
+ overflow: hidden;
38
+ border-radius: var(--lk-radius-lg);
39
+ background: #000;
40
+ }
41
+
42
+ .lk-interactive-video-player {
43
+ display: block;
44
+ width: 100%;
45
+ vertical-align: top;
46
+ }
47
+
48
+ .lk-interactive-video-overlay {
49
+ position: absolute;
50
+ inset: 0;
51
+ z-index: 2;
52
+ display: flex;
53
+ align-items: center;
54
+ justify-content: center;
55
+ padding: var(--lk-space-md);
56
+ visibility: hidden;
57
+ pointer-events: none;
58
+ opacity: 0;
59
+ transition: opacity 0.2s ease;
60
+ }
61
+
62
+ .lk-interactive-video-overlay--active {
63
+ visibility: visible;
64
+ pointer-events: auto;
65
+ opacity: 1;
66
+ }
67
+
68
+ .lk-interactive-video-backdrop {
69
+ position: absolute;
70
+ inset: 0;
71
+ background: rgba(0, 0, 0, 0.72);
72
+ }
73
+
74
+ .lk-interactive-video-overlay-content {
75
+ position: relative;
76
+ z-index: 1;
77
+ display: flex;
78
+ flex-direction: column;
79
+ align-items: stretch;
80
+ gap: var(--lk-space-md);
81
+ width: min(100%, 36rem);
82
+ max-height: 100%;
83
+ overflow: auto;
84
+ }
85
+
86
+ .lk-interactive-video-cues {
87
+ width: 100%;
88
+ }
89
+
90
+ .lk-timed-cue-overlay[hidden] {
91
+ display: none !important;
92
+ }
93
+
94
+ .lk-timed-cue-overlay:not([hidden]) {
95
+ background: var(--lk-color-panel);
96
+ color: var(--lk-color-foreground);
97
+ border-radius: var(--lk-radius-lg);
98
+ padding: var(--lk-space-lg);
99
+ box-shadow: var(--lk-shadow-lg);
100
+ max-height: min(70vh, 28rem);
101
+ overflow: auto;
102
+ }
103
+
104
+ .lk-timed-cue-label {
105
+ margin: 0 0 var(--lk-space-sm);
106
+ font-size: var(--lk-font-size-lg);
107
+ font-weight: var(--lk-font-weight-strong);
108
+ line-height: var(--lk-line-height-tight);
109
+ }
110
+
111
+ .lk-interactive-video-overlay-actions {
112
+ display: flex;
113
+ flex-direction: column;
114
+ align-items: center;
115
+ gap: var(--lk-space-sm);
116
+ width: 100%;
117
+ }
118
+
119
+ .lk-interactive-video-continue {
120
+ min-width: 10rem;
121
+ }
122
+
123
+ /* GameMap — background canvas and stage markers */
124
+ .lk-game-map-canvas {
125
+ position: relative;
126
+ width: 100%;
127
+ max-width: 100%;
128
+ aspect-ratio: 16 / 9;
129
+ overflow: hidden;
130
+ border-radius: var(--lk-radius-lg);
131
+ background: var(--lk-color-panel);
132
+ border: 1px solid var(--lk-color-border);
133
+ }
134
+
135
+ .lk-game-map-background {
136
+ position: absolute;
137
+ inset: 0;
138
+ display: block;
139
+ width: 100%;
140
+ height: 100%;
141
+ object-fit: cover;
142
+ pointer-events: none;
143
+ user-select: none;
144
+ }
145
+
146
+ .lk-game-map-blocked {
147
+ position: absolute;
148
+ inset: 0;
149
+ display: flex;
150
+ align-items: center;
151
+ justify-content: center;
152
+ margin: 0;
153
+ padding: var(--lk-space-md);
154
+ text-align: center;
155
+ background: var(--lk-color-panel);
156
+ color: var(--lk-color-foreground);
157
+ }
158
+
159
+ .lk-game-map-marker {
160
+ position: absolute;
161
+ transform: translate(-50%, -100%);
162
+ padding: 0.35rem 0.65rem;
163
+ border: 2px solid #fff;
164
+ border-radius: 999px;
165
+ background: var(--lk-color-primary);
166
+ color: var(--lk-color-primary-foreground, #fff);
167
+ font-family: var(--lk-font-family);
168
+ font-size: 0.8125rem;
169
+ font-weight: var(--lk-font-weight-strong);
170
+ line-height: 1.2;
171
+ box-shadow: 0 2px 8px rgba(15, 23, 42, 0.35);
172
+ cursor: pointer;
173
+ z-index: 1;
174
+ }
175
+
176
+ .lk-game-map-marker::after {
177
+ content: "";
178
+ position: absolute;
179
+ left: 50%;
180
+ bottom: -8px;
181
+ width: 0;
182
+ height: 0;
183
+ transform: translateX(-50%);
184
+ border-left: 7px solid transparent;
185
+ border-right: 7px solid transparent;
186
+ border-top: 8px solid var(--lk-color-primary);
187
+ }
188
+
189
+ .lk-game-map-marker--active {
190
+ background: var(--lk-color-accent, #f59e0b);
191
+ color: #111827;
192
+ z-index: 2;
193
+ }
194
+
195
+ .lk-game-map-marker--active::after {
196
+ border-top-color: var(--lk-color-accent, #f59e0b);
197
+ }
198
+
199
+ .lk-game-map-marker:disabled {
200
+ opacity: 0.45;
201
+ cursor: not-allowed;
202
+ background: #64748b;
203
+ }
204
+
205
+ .lk-game-map-marker:disabled::after {
206
+ border-top-color: #64748b;
207
+ }
208
+
209
+ .lk-game-map-marker--reachable:not(:disabled) {
210
+ background: var(--lk-color-success, #16a34a);
211
+ animation: lk-map-marker-pulse 1.6s ease-in-out infinite;
212
+ }
213
+
214
+ .lk-game-map-marker--reachable:not(:disabled)::after {
215
+ border-top-color: var(--lk-color-success, #16a34a);
216
+ }
217
+
218
+ @keyframes lk-map-marker-pulse {
219
+ 0%,
220
+ 100% {
221
+ box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.45);
222
+ }
223
+ 50% {
224
+ box-shadow: 0 0 0 8px rgba(22, 163, 74, 0);
225
+ }
226
+ }
227
+
228
+ .lk-game-map-active-stage {
229
+ margin-top: var(--lk-space-md);
230
+ padding: var(--lk-space-md);
231
+ border: 1px solid var(--lk-color-border);
232
+ border-radius: var(--lk-radius-lg);
233
+ background: var(--lk-color-panel);
234
+ }
235
+
236
+ .lk-map-exit {
237
+ display: inline-flex;
238
+ margin: 0.35rem 0.5rem 0.35rem 0;
239
+ }
240
+
241
+ .lk-branch-nav-status {
242
+ margin: 0 0 var(--lk-space-sm);
243
+ font: inherit;
244
+ font-size: 0.875rem;
245
+ color: color-mix(in srgb, var(--lk-color-foreground) 80%, transparent);
246
+ }
247
+
248
+ .lk-branch-path-indicator {
249
+ margin: 0 0 var(--lk-space-md);
250
+ }
251
+
252
+ .lk-branch-path-indicator ol {
253
+ display: flex;
254
+ flex-wrap: wrap;
255
+ gap: var(--lk-space-xs) var(--lk-space-sm);
256
+ margin: 0;
257
+ padding: 0;
258
+ list-style: none;
259
+ }
260
+
261
+ .lk-branch-path-step {
262
+ padding: var(--lk-space-xs) var(--lk-space-sm);
263
+ border: 1px solid var(--lk-color-border);
264
+ border-radius: var(--lk-radius-md);
265
+ background: var(--lk-color-panel);
266
+ font: inherit;
267
+ font-size: 0.875rem;
268
+ }
269
+
270
+ .lk-branch-path-step--current {
271
+ border-color: var(--lk-color-primary, #2563eb);
272
+ background: color-mix(in srgb, var(--lk-color-primary, #2563eb) 12%, var(--lk-color-panel));
273
+ font-weight: var(--lk-font-weight-strong);
274
+ }
275
+
276
+ .lk-branch-terminal-banner {
277
+ margin: 0 0 var(--lk-space-md);
278
+ padding: var(--lk-space-sm) var(--lk-space-md);
279
+ border: 1px solid color-mix(in srgb, var(--lk-color-success, #16a34a) 55%, var(--lk-color-border));
280
+ border-radius: var(--lk-radius-md);
281
+ background: color-mix(in srgb, var(--lk-color-success, #16a34a) 12%, var(--lk-color-panel));
282
+ font: inherit;
283
+ font-weight: var(--lk-font-weight-strong);
284
+ }
285
+
286
+ .lk-branching-scenario-active-node {
287
+ padding: var(--lk-space-md);
288
+ border: 1px solid var(--lk-color-border);
289
+ border-radius: var(--lk-radius-lg);
290
+ background: var(--lk-color-panel);
291
+ }
292
+
293
+ .lk-branch-node--terminal {
294
+ border-left: 4px solid var(--lk-color-success, #16a34a);
295
+ padding-left: var(--lk-space-md);
296
+ }
297
+
298
+ .lk-branch-node--terminal > h4::after {
299
+ content: " · End";
300
+ font-size: 0.75rem;
301
+ font-weight: var(--lk-font-weight-strong);
302
+ color: var(--lk-color-success, #16a34a);
303
+ }
304
+
305
+ .lk-branch-choices {
306
+ display: flex;
307
+ flex-wrap: wrap;
308
+ gap: var(--lk-space-sm);
309
+ margin-top: var(--lk-space-md);
310
+ }
311
+
312
+ .lk-branch-choice {
313
+ display: inline-flex;
314
+ margin: 0;
315
+ }
316
+
317
+ /* Crossword — square grid cells with block squares */
318
+ .lk-crossword {
319
+ --lk-crossword-cell-size: 2.25rem;
320
+ --lk-crossword-block: #0f172a;
321
+ }
322
+
323
+ .lk-crossword-grid {
324
+ display: inline-flex;
325
+ flex-direction: column;
326
+ gap: 1px;
327
+ margin-bottom: var(--lk-space-md);
328
+ border: 2px solid var(--lk-crossword-block);
329
+ background: var(--lk-crossword-block);
330
+ line-height: 0;
331
+ }
332
+
333
+ .lk-crossword-row {
334
+ display: flex;
335
+ gap: 1px;
336
+ }
337
+
338
+ .lk-crossword-cell {
339
+ position: relative;
340
+ width: var(--lk-crossword-cell-size);
341
+ height: var(--lk-crossword-cell-size);
342
+ flex: 0 0 var(--lk-crossword-cell-size);
343
+ box-sizing: border-box;
344
+ }
345
+
346
+ .lk-crossword-cell--block {
347
+ background: var(--lk-crossword-block);
348
+ }
349
+
350
+ .lk-crossword-cell input {
351
+ display: block;
352
+ width: 100%;
353
+ height: 100%;
354
+ margin: 0;
355
+ padding: 0;
356
+ border: none;
357
+ box-sizing: border-box;
358
+ text-align: center;
359
+ text-transform: uppercase;
360
+ font-family: var(--lk-font-family);
361
+ font-size: 1.0625rem;
362
+ font-weight: var(--lk-font-weight-strong);
363
+ line-height: var(--lk-crossword-cell-size);
364
+ background: #fff;
365
+ color: #0f172a;
366
+ cursor: text;
367
+ }
368
+
369
+ .lk-crossword-cell input:focus {
370
+ outline: 2px solid var(--lk-color-primary);
371
+ outline-offset: -2px;
372
+ position: relative;
373
+ z-index: 1;
374
+ }
375
+
376
+ .lk-crossword-cell input:read-only {
377
+ background: #f8fafc;
378
+ cursor: default;
379
+ }
380
+
381
+ .lk-crossword-clue-num {
382
+ position: absolute;
383
+ top: 2px;
384
+ left: 3px;
385
+ z-index: 2;
386
+ font-size: 0.5625rem;
387
+ font-weight: 700;
388
+ line-height: 1;
389
+ color: #334155;
390
+ pointer-events: none;
391
+ user-select: none;
392
+ }
393
+
394
+ .lk-crossword-clues {
395
+ display: grid;
396
+ gap: var(--lk-space-md);
397
+ margin-bottom: var(--lk-space-md);
398
+ }
399
+
400
+ @media (min-width: 36rem) {
401
+ .lk-crossword-clues {
402
+ grid-template-columns: 1fr 1fr;
403
+ }
404
+ }
405
+
406
+ .lk-crossword-clues-heading {
407
+ margin: 0 0 var(--lk-space-xs);
408
+ font-family: var(--lk-font-family);
409
+ font-size: 0.875rem;
410
+ font-weight: var(--lk-font-weight-strong);
411
+ text-transform: uppercase;
412
+ letter-spacing: 0.04em;
413
+ color: var(--lk-color-muted-foreground, #64748b);
414
+ }
415
+
416
+ .lk-crossword-clue-list {
417
+ margin: 0;
418
+ padding-left: 1.25rem;
419
+ font-family: var(--lk-font-family);
420
+ font-size: var(--lk-font-size-base);
421
+ line-height: 1.45;
422
+ }
423
+
424
+ .lk-crossword-clue-label {
425
+ font-weight: var(--lk-font-weight-strong);
426
+ }
427
+
428
+ /* DragAndDrop — draggable chips and drop zones */
429
+ .lk-drag-pool {
430
+ display: flex;
431
+ flex-wrap: wrap;
432
+ align-items: center;
433
+ gap: 0.35rem;
434
+ min-height: 2.25rem;
435
+ margin-bottom: var(--lk-space-md);
436
+ padding: 0.35rem 0.45rem;
437
+ border: 1px dashed var(--lk-color-border);
438
+ border-radius: var(--lk-radius-md);
439
+ background: var(--lk-color-panel);
440
+ transition:
441
+ border-color 0.15s ease,
442
+ background-color 0.15s ease,
443
+ padding 0.15s ease;
444
+ }
445
+
446
+ .lk-drag-pool--hover {
447
+ border-color: var(--lk-color-primary);
448
+ background: color-mix(in srgb, var(--lk-color-primary) 8%, var(--lk-color-panel));
449
+ }
450
+
451
+ .lk-drag-pool-placeholder {
452
+ padding: 0.3rem 0.55rem;
453
+ color: var(--lk-color-muted-foreground, #64748b);
454
+ font-family: var(--lk-font-family);
455
+ font-size: 0.8125rem;
456
+ line-height: 1.2;
457
+ white-space: nowrap;
458
+ transition: opacity 0.12s ease;
459
+ }
460
+
461
+ .lk-drag-item {
462
+ appearance: none;
463
+ margin: 0;
464
+ padding: 0.35rem 0.7rem;
465
+ border: 1px solid var(--lk-color-border);
466
+ border-radius: 999px;
467
+ background: var(--lk-color-background, #fff);
468
+ color: var(--lk-color-foreground);
469
+ font-family: var(--lk-font-family);
470
+ font-size: 0.875rem;
471
+ font-weight: var(--lk-font-weight-strong);
472
+ cursor: grab;
473
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);
474
+ }
475
+
476
+ .lk-drag-item:active {
477
+ cursor: grabbing;
478
+ }
479
+
480
+ .lk-drag-item[aria-pressed="true"] {
481
+ outline: 2px solid var(--lk-color-primary);
482
+ outline-offset: 2px;
483
+ }
484
+
485
+ .lk-drag-item--in-flight {
486
+ opacity: 0;
487
+ pointer-events: none;
488
+ }
489
+
490
+ .lk-drag-flyer {
491
+ position: fixed;
492
+ z-index: 9999;
493
+ margin: 0;
494
+ padding: 0.35rem 0.7rem;
495
+ border: 1px solid var(--lk-color-border);
496
+ border-radius: 999px;
497
+ background: var(--lk-color-background, #fff);
498
+ color: var(--lk-color-foreground);
499
+ font-family: var(--lk-font-family);
500
+ font-size: 0.875rem;
501
+ font-weight: var(--lk-font-weight-strong);
502
+ box-shadow: 0 4px 14px rgba(15, 23, 42, 0.18);
503
+ pointer-events: none;
504
+ transform: translate(-50%, -50%);
505
+ }
506
+
507
+ .lk-drag-item--ghost {
508
+ opacity: 0.6;
509
+ border-style: dashed;
510
+ cursor: default;
511
+ pointer-events: none;
512
+ box-shadow: none;
513
+ }
514
+
515
+ .lk-drag-target-row {
516
+ margin-bottom: 0.5rem;
517
+ }
518
+
519
+ .lk-drag-target {
520
+ display: inline-flex;
521
+ align-items: center;
522
+ justify-content: center;
523
+ width: fit-content;
524
+ max-width: 100%;
525
+ padding: 0.1rem;
526
+ border: 1px dashed var(--lk-color-border);
527
+ border-radius: var(--lk-radius-md);
528
+ background: color-mix(in srgb, var(--lk-color-panel) 80%, transparent);
529
+ vertical-align: middle;
530
+ transition:
531
+ width 0.15s ease,
532
+ min-width 0.15s ease,
533
+ padding 0.15s ease,
534
+ border-color 0.15s ease,
535
+ background-color 0.15s ease;
536
+ }
537
+
538
+ .lk-drag-target--hover {
539
+ border-color: var(--lk-color-primary);
540
+ background: color-mix(in srgb, var(--lk-color-primary) 8%, var(--lk-color-panel));
541
+ }
542
+
543
+ .lk-drag-target-placeholder {
544
+ display: inline-block;
545
+ padding: 0.3rem 0.55rem;
546
+ color: var(--lk-color-muted-foreground, #64748b);
547
+ font-family: var(--lk-font-family);
548
+ font-size: 0.8125rem;
549
+ line-height: 1.2;
550
+ white-space: nowrap;
551
+ transition: opacity 0.12s ease;
552
+ }
553
+
554
+ .lk-crossword-cell--correct input {
555
+ background: #dcfce7;
556
+ color: #166534;
557
+ }
558
+
559
+ .lk-crossword-cell--incorrect input {
560
+ background: #fee2e2;
561
+ color: #991b1b;
562
+ }
563
+
564
+ .lk-crossword-actions {
565
+ display: flex;
566
+ flex-wrap: wrap;
567
+ gap: var(--lk-space-sm);
568
+ margin-bottom: var(--lk-space-sm);
569
+ }
570
+
571
+ .lk-crossword-feedback {
572
+ margin: 0 0 var(--lk-space-sm);
573
+ padding: 0.65rem 0.85rem;
574
+ border-radius: var(--lk-radius-md);
575
+ font-family: var(--lk-font-family);
576
+ font-size: var(--lk-font-size-base);
577
+ font-weight: var(--lk-font-weight-strong);
578
+ }
579
+
580
+ .lk-crossword-feedback--success {
581
+ background: #dcfce7;
582
+ color: #166534;
583
+ border: 1px solid #86efac;
584
+ }
585
+
586
+ .lk-crossword-feedback--retry {
587
+ background: #fef3c7;
588
+ color: #92400e;
589
+ border: 1px solid #fcd34d;
590
+ }
591
+
592
+ /* Word search — square grid cells with drag selection */
593
+ .lk-word-search {
594
+ --lk-word-search-cell-size: 2.25rem;
595
+ --lk-word-search-grid-border: #0f172a;
596
+ }
597
+
598
+ .lk-word-search-grid {
599
+ display: inline-flex;
600
+ flex-direction: column;
601
+ gap: 1px;
602
+ margin-bottom: var(--lk-space-md);
603
+ border: 2px solid var(--lk-word-search-grid-border);
604
+ background: var(--lk-word-search-grid-border);
605
+ line-height: 0;
606
+ user-select: none;
607
+ }
608
+
609
+ .lk-word-search-row {
610
+ display: flex;
611
+ gap: 1px;
612
+ }
613
+
614
+ .lk-word-search-cell {
615
+ display: block;
616
+ width: var(--lk-word-search-cell-size);
617
+ height: var(--lk-word-search-cell-size);
618
+ flex: 0 0 var(--lk-word-search-cell-size);
619
+ box-sizing: border-box;
620
+ margin: 0;
621
+ padding: 0;
622
+ border: none;
623
+ text-align: center;
624
+ text-transform: uppercase;
625
+ font-family: var(--lk-font-family);
626
+ font-size: 1.0625rem;
627
+ font-weight: var(--lk-font-weight-strong);
628
+ line-height: var(--lk-word-search-cell-size);
629
+ background: #fff;
630
+ color: #0f172a;
631
+ cursor: pointer;
632
+ }
633
+
634
+ .lk-word-search-cell:focus {
635
+ outline: 2px solid var(--lk-color-primary);
636
+ outline-offset: -2px;
637
+ position: relative;
638
+ z-index: 1;
639
+ }
640
+
641
+ .lk-word-search-cell--selecting {
642
+ background: #dbeafe;
643
+ color: #1e40af;
644
+ outline: 2px solid var(--lk-color-primary);
645
+ outline-offset: -2px;
646
+ position: relative;
647
+ z-index: 1;
648
+ }
649
+
650
+ .lk-word-search-cell--found {
651
+ background: #dcfce7;
652
+ color: #166534;
653
+ }
654
+
655
+ .lk-word-search-bank {
656
+ display: flex;
657
+ flex-wrap: wrap;
658
+ gap: var(--lk-space-sm);
659
+ margin: 0 0 var(--lk-space-md);
660
+ padding: 0;
661
+ list-style: none;
662
+ font-family: var(--lk-font-family);
663
+ font-size: var(--lk-font-size-base);
664
+ font-weight: var(--lk-font-weight-strong);
665
+ }
666
+
667
+ .lk-word-search-bank-item--found {
668
+ color: var(--lk-color-muted-foreground, #64748b);
669
+ text-decoration: line-through;
670
+ }
671
+
672
+ /* ParallaxSlideshow — readable text overlay on background imagery */
673
+ .lk-parallax-slideshow {
674
+ display: flex;
675
+ flex-direction: column;
676
+ gap: var(--lk-space-md);
677
+ }
678
+
679
+ .lk-parallax-slide {
680
+ position: relative;
681
+ display: flex;
682
+ flex-direction: column;
683
+ min-height: 12rem;
684
+ border-radius: var(--lk-radius-lg);
685
+ overflow: hidden;
686
+ border: 1px solid var(--lk-color-border);
687
+ background: var(--lk-color-panel);
688
+ }
689
+
690
+ .lk-parallax-slide--parallax {
691
+ background-position: center;
692
+ background-size: cover;
693
+ background-attachment: fixed;
694
+ }
695
+
696
+ .lk-parallax-slide-scrim {
697
+ position: absolute;
698
+ inset: 0;
699
+ pointer-events: none;
700
+ }
701
+
702
+ [data-lk-theme="light"] .lk-parallax-slide-scrim {
703
+ background: linear-gradient(
704
+ 180deg,
705
+ color-mix(in srgb, var(--lk-color-foreground) 20%, transparent) 0%,
706
+ color-mix(in srgb, var(--lk-color-foreground) 62%, transparent) 52%,
707
+ color-mix(in srgb, var(--lk-color-foreground) 88%, transparent) 100%
708
+ );
709
+ }
710
+
711
+ [data-lk-theme="dark"] .lk-parallax-slide-scrim {
712
+ background: linear-gradient(
713
+ 180deg,
714
+ color-mix(in srgb, var(--lk-color-background) 28%, transparent) 0%,
715
+ color-mix(in srgb, var(--lk-color-background) 68%, transparent) 52%,
716
+ color-mix(in srgb, var(--lk-color-background) 92%, transparent) 100%
717
+ );
718
+ }
719
+
720
+ .lk-parallax-slide-content {
721
+ position: relative;
722
+ z-index: 1;
723
+ margin-top: auto;
724
+ padding: var(--lk-space-lg);
725
+ color: var(--lk-color-foreground);
726
+ }
727
+
728
+ .lk-parallax-slide--has-image .lk-parallax-slide-content {
729
+ color: var(--lk-color-primary-foreground, #f8fafc);
730
+ }
731
+
732
+ .lk-parallax-slide-content h3 {
733
+ margin: 0 0 var(--lk-space-sm);
734
+ font-family: var(--lk-font-family);
735
+ font-size: 1.125rem;
736
+ font-weight: var(--lk-font-weight-strong);
737
+ line-height: 1.3;
738
+ }
739
+
740
+ .lk-parallax-slide-content p {
741
+ margin: 0;
742
+ font-family: var(--lk-font-family);
743
+ font-size: var(--lk-font-size-base);
744
+ line-height: var(--lk-line-height-base, 1.55);
745
+ }
746
+
747
+ .lk-parallax-slide-image {
748
+ display: block;
749
+ width: 100%;
750
+ max-width: 100%;
751
+ height: auto;
752
+ }
753
+
754
+ .lk-parallax-nav {
755
+ display: flex;
756
+ flex-wrap: wrap;
757
+ align-items: center;
758
+ gap: var(--lk-space-sm);
759
+ font-family: var(--lk-font-family);
760
+ font-size: var(--lk-font-size-base);
761
+ color: var(--lk-color-foreground);
762
+ }
763
+
764
+ .lk-parallax-nav button {
765
+ appearance: none;
766
+ border: 1px solid var(--lk-color-border);
767
+ border-radius: var(--lk-radius-md);
768
+ background: var(--lk-color-panel);
769
+ color: var(--lk-color-foreground);
770
+ padding: var(--lk-space-sm) var(--lk-space-md);
771
+ font: inherit;
772
+ font-weight: var(--lk-font-weight-strong);
773
+ cursor: pointer;
774
+ }
775
+
776
+ .lk-parallax-nav button:disabled {
777
+ opacity: 0.55;
778
+ cursor: not-allowed;
779
+ }
780
+
781
+ .lk-image-slider-viewport {
782
+ touch-action: pan-y pinch-zoom;
783
+ cursor: grab;
784
+ user-select: none;
785
+ }
786
+
787
+ .lk-image-slider-viewport:active {
788
+ cursor: grabbing;
789
+ }
790
+
791
+ .lk-image-slider-viewport img {
792
+ display: block;
793
+ max-width: 100%;
794
+ pointer-events: none;
795
+ }
796
+
797
+ .lk-find-hotspot {
798
+ display: inline-block;
799
+ max-width: 100%;
800
+ }
801
+
802
+ .lk-find-hotspot-stage {
803
+ position: relative;
804
+ display: block;
805
+ max-width: 100%;
806
+ }
807
+
808
+ .lk-find-hotspot-image {
809
+ display: block;
810
+ max-width: 100%;
811
+ height: auto;
812
+ }
813
+
814
+ .lk-find-hotspot-target {
815
+ position: absolute;
816
+ transform: translate(-50%, -50%);
817
+ z-index: 1;
818
+ appearance: none;
819
+ border: 1px solid var(--lk-color-border);
820
+ border-radius: var(--lk-radius-md);
821
+ background: color-mix(in srgb, var(--lk-color-panel) 88%, transparent);
822
+ color: var(--lk-color-foreground);
823
+ padding: var(--lk-space-xs) var(--lk-space-sm);
824
+ font: inherit;
825
+ font-size: 0.875rem;
826
+ cursor: pointer;
827
+ }
828
+
829
+ .lk-find-hotspot-target[aria-pressed="true"] {
830
+ border-color: var(--lk-color-primary, #2563eb);
831
+ background: color-mix(in srgb, var(--lk-color-primary, #2563eb) 18%, var(--lk-color-panel));
832
+ font-weight: var(--lk-font-weight-strong);
833
+ }
834
+
835
+ .lk-find-hotspot-toolbar {
836
+ position: absolute;
837
+ left: 0;
838
+ right: 0;
839
+ bottom: 0;
840
+ z-index: 2;
841
+ display: flex;
842
+ flex-wrap: wrap;
843
+ align-items: center;
844
+ gap: var(--lk-space-sm) var(--lk-space-md);
845
+ padding: var(--lk-space-sm) var(--lk-space-md);
846
+ background: color-mix(in srgb, var(--lk-color-panel) 94%, transparent);
847
+ backdrop-filter: blur(4px);
848
+ border-top: 1px solid var(--lk-color-border);
849
+ }
850
+
851
+ .lk-find-hotspot-toolbar button[data-testid="check-hotspot"] {
852
+ appearance: none;
853
+ border: 1px solid var(--lk-color-primary, #2563eb);
854
+ border-radius: var(--lk-radius-md);
855
+ background: var(--lk-color-primary, #2563eb);
856
+ color: var(--lk-color-primary-foreground, #f8fafc);
857
+ padding: var(--lk-space-sm) var(--lk-space-md);
858
+ font: inherit;
859
+ font-weight: var(--lk-font-weight-strong);
860
+ cursor: pointer;
861
+ }
862
+
863
+ .lk-find-hotspot-toolbar button[data-testid="check-hotspot"]:disabled {
864
+ opacity: 0.55;
865
+ cursor: not-allowed;
866
+ }
867
+
868
+ .lk-find-hotspot-toolbar--ready button[data-testid="check-hotspot"]:not(:disabled) {
869
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--lk-color-primary, #2563eb) 35%, transparent);
870
+ }
871
+
872
+ .lk-find-hotspot-feedback {
873
+ margin: 0;
874
+ font: inherit;
875
+ font-weight: var(--lk-font-weight-strong);
876
+ }
877
+
878
+ @media (max-width: 480px) {
879
+ .lk-find-hotspot-toolbar {
880
+ flex-direction: column;
881
+ align-items: stretch;
882
+ }
883
+
884
+ .lk-find-hotspot-toolbar button[data-testid="check-hotspot"] {
885
+ width: 100%;
886
+ }
887
+ }
888
+
889
+ .lk-combination-lock {
890
+ display: flex;
891
+ flex-direction: column;
892
+ gap: var(--lk-space-sm);
893
+ max-width: 100%;
894
+ }
895
+
896
+ .lk-combination-lock-label {
897
+ margin: 0;
898
+ font: inherit;
899
+ font-weight: var(--lk-font-weight-strong);
900
+ }
901
+
902
+ .lk-combination-lock-hint {
903
+ margin: 0;
904
+ font: inherit;
905
+ font-size: 0.875rem;
906
+ color: color-mix(in srgb, var(--lk-color-foreground) 72%, transparent);
907
+ }
908
+
909
+ .lk-combination-lock-digits {
910
+ display: flex;
911
+ flex-wrap: wrap;
912
+ gap: var(--lk-space-sm);
913
+ }
914
+
915
+ .lk-combination-lock-digit {
916
+ width: 2.75rem;
917
+ height: 2.75rem;
918
+ padding: 0;
919
+ border: 1px solid var(--lk-color-border);
920
+ border-radius: var(--lk-radius-md);
921
+ background: var(--lk-color-panel);
922
+ color: var(--lk-color-foreground);
923
+ font: inherit;
924
+ font-size: 1.25rem;
925
+ font-weight: var(--lk-font-weight-strong);
926
+ line-height: 1;
927
+ text-align: center;
928
+ }
929
+
930
+ .lk-combination-lock-digit::placeholder {
931
+ color: color-mix(in srgb, var(--lk-color-foreground) 35%, transparent);
932
+ }
933
+
934
+ .lk-combination-lock-digit:focus {
935
+ outline: none;
936
+ border-color: var(--lk-color-primary, #2563eb);
937
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--lk-color-primary, #2563eb) 30%, transparent);
938
+ }
939
+
940
+ .lk-combination-lock-digit:not(:placeholder-shown) {
941
+ border-color: color-mix(in srgb, var(--lk-color-primary, #2563eb) 55%, var(--lk-color-border));
942
+ }
943
+
944
+ .lk-combination-lock-actions {
945
+ display: flex;
946
+ flex-wrap: wrap;
947
+ gap: var(--lk-space-sm);
948
+ }
949
+
950
+ .lk-combination-lock-actions button[data-testid="lock-check"] {
951
+ appearance: none;
952
+ border: 1px solid var(--lk-color-primary, #2563eb);
953
+ border-radius: var(--lk-radius-md);
954
+ background: var(--lk-color-primary, #2563eb);
955
+ color: var(--lk-color-primary-foreground, #f8fafc);
956
+ padding: var(--lk-space-sm) var(--lk-space-md);
957
+ font: inherit;
958
+ font-weight: var(--lk-font-weight-strong);
959
+ cursor: pointer;
960
+ }
961
+
962
+ .lk-combination-lock-actions button[data-testid="lock-check"]:disabled {
963
+ opacity: 0.55;
964
+ cursor: not-allowed;
965
+ }
966
+
967
+ .lk-combination-lock-feedback {
968
+ margin: 0;
969
+ font: inherit;
970
+ font-weight: var(--lk-font-weight-strong);
971
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lessonkit/themes",
3
- "version": "1.5.0",
3
+ "version": "1.7.0",
4
4
  "private": false,
5
5
  "description": "Theme primitives and tokens for LessonKit.",
6
6
  "license": "Apache-2.0",
@@ -39,8 +39,8 @@
39
39
  "base.css"
40
40
  ],
41
41
  "scripts": {
42
- "build": "tsup src/index.ts --format esm,cjs --dts",
43
- "dev": "tsup src/index.ts --format esm,cjs --dts --watch",
42
+ "build": "tsup src/index.ts --format esm,cjs --dts --tsconfig tsconfig.build.json",
43
+ "dev": "tsup src/index.ts --format esm,cjs --dts --watch --tsconfig tsconfig.build.json",
44
44
  "prepublishOnly": "npm run build",
45
45
  "typecheck": "tsc -p tsconfig.json",
46
46
  "test": "vitest run",