@lessonkit/themes 1.6.0 → 1.7.1

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 +626 -6
  2. package/package.json +3 -3
package/base.css CHANGED
@@ -3,6 +3,11 @@
3
3
  Import: @import "@lessonkit/themes/base.css";
4
4
  */
5
5
 
6
+ :root {
7
+ --lk-touch-target-min: 2.75rem;
8
+ --lk-touch-spacing: var(--lk-space-sm, 0.5rem);
9
+ }
10
+
6
11
  .lk-panel {
7
12
  border: 1px solid var(--lk-color-border);
8
13
  border-radius: var(--lk-radius-lg);
@@ -22,6 +27,16 @@
22
27
  font-size: var(--lk-font-size-base);
23
28
  font-weight: var(--lk-font-weight-strong);
24
29
  cursor: pointer;
30
+ min-height: var(--lk-touch-target-min);
31
+ touch-action: manipulation;
32
+ }
33
+
34
+ .lk-button--icon {
35
+ display: inline-flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ min-width: var(--lk-touch-target-min);
39
+ padding-inline: var(--lk-space-sm);
25
40
  }
26
41
 
27
42
  .lk-button:disabled {
@@ -29,6 +44,16 @@
29
44
  cursor: not-allowed;
30
45
  }
31
46
 
47
+ .lk-touch-hint {
48
+ margin: 0 0 var(--lk-space-md);
49
+ padding: var(--lk-space-sm) var(--lk-space-md);
50
+ border-radius: var(--lk-radius-md);
51
+ background: color-mix(in srgb, var(--lk-color-primary, #2563eb) 10%, var(--lk-color-panel));
52
+ font-family: var(--lk-font-family);
53
+ font-size: 0.875rem;
54
+ line-height: 1.4;
55
+ }
56
+
32
57
  /* InteractiveVideo — H5P-style cue overlay on the player */
33
58
  .lk-interactive-video-stage {
34
59
  position: relative;
@@ -117,7 +142,8 @@
117
142
  }
118
143
 
119
144
  .lk-interactive-video-continue {
120
- min-width: 10rem;
145
+ min-width: max(10rem, var(--lk-touch-target-min, 2.75rem));
146
+ min-height: var(--lk-touch-target-min, 2.75rem);
121
147
  }
122
148
 
123
149
  /* GameMap — background canvas and stage markers */
@@ -159,7 +185,10 @@
159
185
  .lk-game-map-marker {
160
186
  position: absolute;
161
187
  transform: translate(-50%, -100%);
188
+ min-height: var(--lk-touch-target-min);
189
+ min-width: var(--lk-touch-target-min);
162
190
  padding: 0.35rem 0.65rem;
191
+ touch-action: manipulation;
163
192
  border: 2px solid #fff;
164
193
  border-radius: 999px;
165
194
  background: var(--lk-color-primary);
@@ -238,9 +267,85 @@
238
267
  margin: 0.35rem 0.5rem 0.35rem 0;
239
268
  }
240
269
 
270
+ .lk-branch-nav-status {
271
+ margin: 0 0 var(--lk-space-sm);
272
+ font: inherit;
273
+ font-size: 0.875rem;
274
+ color: color-mix(in srgb, var(--lk-color-foreground) 80%, transparent);
275
+ }
276
+
277
+ .lk-branch-path-indicator {
278
+ margin: 0 0 var(--lk-space-md);
279
+ }
280
+
281
+ .lk-branch-path-indicator ol {
282
+ display: flex;
283
+ flex-wrap: wrap;
284
+ gap: var(--lk-space-xs) var(--lk-space-sm);
285
+ margin: 0;
286
+ padding: 0;
287
+ list-style: none;
288
+ }
289
+
290
+ .lk-branch-path-step {
291
+ padding: var(--lk-space-xs) var(--lk-space-sm);
292
+ border: 1px solid var(--lk-color-border);
293
+ border-radius: var(--lk-radius-md);
294
+ background: var(--lk-color-panel);
295
+ font: inherit;
296
+ font-size: 0.875rem;
297
+ }
298
+
299
+ .lk-branch-path-step--current {
300
+ border-color: var(--lk-color-primary, #2563eb);
301
+ background: color-mix(in srgb, var(--lk-color-primary, #2563eb) 12%, var(--lk-color-panel));
302
+ font-weight: var(--lk-font-weight-strong);
303
+ }
304
+
305
+ .lk-branch-terminal-banner {
306
+ margin: 0 0 var(--lk-space-md);
307
+ padding: var(--lk-space-sm) var(--lk-space-md);
308
+ border: 1px solid color-mix(in srgb, var(--lk-color-success, #16a34a) 55%, var(--lk-color-border));
309
+ border-radius: var(--lk-radius-md);
310
+ background: color-mix(in srgb, var(--lk-color-success, #16a34a) 12%, var(--lk-color-panel));
311
+ font: inherit;
312
+ font-weight: var(--lk-font-weight-strong);
313
+ }
314
+
315
+ .lk-branching-scenario-active-node {
316
+ padding: var(--lk-space-md);
317
+ border: 1px solid var(--lk-color-border);
318
+ border-radius: var(--lk-radius-lg);
319
+ background: var(--lk-color-panel);
320
+ }
321
+
322
+ .lk-branch-node--terminal {
323
+ border-left: 4px solid var(--lk-color-success, #16a34a);
324
+ padding-left: var(--lk-space-md);
325
+ }
326
+
327
+ .lk-branch-node--terminal > h4::after {
328
+ content: " · End";
329
+ font-size: 0.75rem;
330
+ font-weight: var(--lk-font-weight-strong);
331
+ color: var(--lk-color-success, #16a34a);
332
+ }
333
+
334
+ .lk-branch-choices {
335
+ display: flex;
336
+ flex-wrap: wrap;
337
+ gap: var(--lk-space-sm);
338
+ margin-top: var(--lk-space-md);
339
+ }
340
+
341
+ .lk-branch-choice {
342
+ display: inline-flex;
343
+ margin: 0;
344
+ }
345
+
241
346
  /* Crossword — square grid cells with block squares */
242
347
  .lk-crossword {
243
- --lk-crossword-cell-size: 2.25rem;
348
+ --lk-crossword-cell-size: var(--lk-touch-target-min, 2.75rem);
244
349
  --lk-crossword-block: #0f172a;
245
350
  }
246
351
 
@@ -354,8 +459,9 @@
354
459
  display: flex;
355
460
  flex-wrap: wrap;
356
461
  align-items: center;
357
- gap: 0.35rem;
358
- min-height: 2.25rem;
462
+ gap: var(--lk-touch-spacing, 0.35rem);
463
+ min-height: var(--lk-touch-target-min, 2.75rem);
464
+ touch-action: manipulation;
359
465
  margin-bottom: var(--lk-space-md);
360
466
  padding: 0.35rem 0.45rem;
361
467
  border: 1px dashed var(--lk-color-border);
@@ -385,7 +491,8 @@
385
491
  .lk-drag-item {
386
492
  appearance: none;
387
493
  margin: 0;
388
- padding: 0.35rem 0.7rem;
494
+ padding: 0.5rem 0.85rem;
495
+ min-height: var(--lk-touch-target-min, 2.75rem);
389
496
  border: 1px solid var(--lk-color-border);
390
497
  border-radius: 999px;
391
498
  background: var(--lk-color-background, #fff);
@@ -395,6 +502,7 @@
395
502
  font-weight: var(--lk-font-weight-strong);
396
503
  cursor: grab;
397
504
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);
505
+ touch-action: none;
398
506
  }
399
507
 
400
508
  .lk-drag-item:active {
@@ -446,7 +554,9 @@
446
554
  justify-content: center;
447
555
  width: fit-content;
448
556
  max-width: 100%;
449
- padding: 0.1rem;
557
+ min-height: var(--lk-touch-target-min, 2.75rem);
558
+ padding: 0.25rem;
559
+ touch-action: manipulation;
450
560
  border: 1px dashed var(--lk-color-border);
451
561
  border-radius: var(--lk-radius-md);
452
562
  background: color-mix(in srgb, var(--lk-color-panel) 80%, transparent);
@@ -512,3 +622,513 @@
512
622
  color: #92400e;
513
623
  border: 1px solid #fcd34d;
514
624
  }
625
+
626
+ /* Word search — square grid cells with drag selection */
627
+ .lk-word-search {
628
+ --lk-word-search-cell-size: var(--lk-touch-target-min, 2.75rem);
629
+ --lk-word-search-grid-border: #0f172a;
630
+ }
631
+
632
+ .lk-word-search-grid {
633
+ display: inline-flex;
634
+ flex-direction: column;
635
+ gap: 1px;
636
+ margin-bottom: var(--lk-space-md);
637
+ border: 2px solid var(--lk-word-search-grid-border);
638
+ background: var(--lk-word-search-grid-border);
639
+ line-height: 0;
640
+ user-select: none;
641
+ touch-action: none;
642
+ }
643
+
644
+ .lk-word-search-row {
645
+ display: flex;
646
+ gap: 1px;
647
+ }
648
+
649
+ .lk-word-search-cell {
650
+ display: block;
651
+ width: var(--lk-word-search-cell-size);
652
+ height: var(--lk-word-search-cell-size);
653
+ flex: 0 0 var(--lk-word-search-cell-size);
654
+ box-sizing: border-box;
655
+ margin: 0;
656
+ padding: 0;
657
+ border: none;
658
+ text-align: center;
659
+ text-transform: uppercase;
660
+ font-family: var(--lk-font-family);
661
+ font-size: 1.0625rem;
662
+ font-weight: var(--lk-font-weight-strong);
663
+ line-height: var(--lk-word-search-cell-size);
664
+ background: #fff;
665
+ color: #0f172a;
666
+ cursor: pointer;
667
+ }
668
+
669
+ .lk-word-search-cell:focus {
670
+ outline: 2px solid var(--lk-color-primary);
671
+ outline-offset: -2px;
672
+ position: relative;
673
+ z-index: 1;
674
+ }
675
+
676
+ .lk-word-search-cell--selecting {
677
+ background: #dbeafe;
678
+ color: #1e40af;
679
+ outline: 2px solid var(--lk-color-primary);
680
+ outline-offset: -2px;
681
+ position: relative;
682
+ z-index: 1;
683
+ }
684
+
685
+ .lk-word-search-cell--found {
686
+ background: #dcfce7;
687
+ color: #166534;
688
+ }
689
+
690
+ .lk-word-search-bank {
691
+ display: flex;
692
+ flex-wrap: wrap;
693
+ gap: var(--lk-space-sm);
694
+ margin: 0 0 var(--lk-space-md);
695
+ padding: 0;
696
+ list-style: none;
697
+ font-family: var(--lk-font-family);
698
+ font-size: var(--lk-font-size-base);
699
+ font-weight: var(--lk-font-weight-strong);
700
+ }
701
+
702
+ .lk-word-search-bank-item--found {
703
+ color: var(--lk-color-muted-foreground, #64748b);
704
+ text-decoration: line-through;
705
+ }
706
+
707
+ /* ParallaxSlideshow — readable text overlay on background imagery */
708
+ .lk-parallax-slideshow {
709
+ display: flex;
710
+ flex-direction: column;
711
+ gap: var(--lk-space-md);
712
+ }
713
+
714
+ .lk-parallax-slide {
715
+ position: relative;
716
+ display: flex;
717
+ flex-direction: column;
718
+ min-height: 12rem;
719
+ border-radius: var(--lk-radius-lg);
720
+ overflow: hidden;
721
+ border: 1px solid var(--lk-color-border);
722
+ background: var(--lk-color-panel);
723
+ }
724
+
725
+ .lk-parallax-slide--parallax {
726
+ background-position: center;
727
+ background-size: cover;
728
+ background-attachment: fixed;
729
+ }
730
+
731
+ .lk-parallax-slide-scrim {
732
+ position: absolute;
733
+ inset: 0;
734
+ pointer-events: none;
735
+ }
736
+
737
+ [data-lk-theme="light"] .lk-parallax-slide-scrim {
738
+ background: linear-gradient(
739
+ 180deg,
740
+ color-mix(in srgb, var(--lk-color-foreground) 20%, transparent) 0%,
741
+ color-mix(in srgb, var(--lk-color-foreground) 62%, transparent) 52%,
742
+ color-mix(in srgb, var(--lk-color-foreground) 88%, transparent) 100%
743
+ );
744
+ }
745
+
746
+ [data-lk-theme="dark"] .lk-parallax-slide-scrim {
747
+ background: linear-gradient(
748
+ 180deg,
749
+ color-mix(in srgb, var(--lk-color-background) 28%, transparent) 0%,
750
+ color-mix(in srgb, var(--lk-color-background) 68%, transparent) 52%,
751
+ color-mix(in srgb, var(--lk-color-background) 92%, transparent) 100%
752
+ );
753
+ }
754
+
755
+ .lk-parallax-slide-content {
756
+ position: relative;
757
+ z-index: 1;
758
+ margin-top: auto;
759
+ padding: var(--lk-space-lg);
760
+ color: var(--lk-color-foreground);
761
+ }
762
+
763
+ .lk-parallax-slide--has-image .lk-parallax-slide-content {
764
+ color: var(--lk-color-primary-foreground, #f8fafc);
765
+ }
766
+
767
+ .lk-parallax-slide-content h3 {
768
+ margin: 0 0 var(--lk-space-sm);
769
+ font-family: var(--lk-font-family);
770
+ font-size: 1.125rem;
771
+ font-weight: var(--lk-font-weight-strong);
772
+ line-height: 1.3;
773
+ }
774
+
775
+ .lk-parallax-slide-content p {
776
+ margin: 0;
777
+ font-family: var(--lk-font-family);
778
+ font-size: var(--lk-font-size-base);
779
+ line-height: var(--lk-line-height-base, 1.55);
780
+ }
781
+
782
+ .lk-parallax-slide-image {
783
+ display: block;
784
+ width: 100%;
785
+ max-width: 100%;
786
+ height: auto;
787
+ }
788
+
789
+ .lk-parallax-nav {
790
+ display: flex;
791
+ flex-wrap: wrap;
792
+ align-items: center;
793
+ gap: var(--lk-space-sm);
794
+ font-family: var(--lk-font-family);
795
+ font-size: var(--lk-font-size-base);
796
+ color: var(--lk-color-foreground);
797
+ }
798
+
799
+ .lk-parallax-nav button {
800
+ appearance: none;
801
+ border: 1px solid var(--lk-color-border);
802
+ border-radius: var(--lk-radius-md);
803
+ background: var(--lk-color-panel);
804
+ color: var(--lk-color-foreground);
805
+ padding: var(--lk-space-sm) var(--lk-space-md);
806
+ font: inherit;
807
+ font-weight: var(--lk-font-weight-strong);
808
+ cursor: pointer;
809
+ }
810
+
811
+ .lk-parallax-nav button:disabled {
812
+ opacity: 0.55;
813
+ cursor: not-allowed;
814
+ }
815
+
816
+ .lk-image-slider-viewport {
817
+ touch-action: pan-y pinch-zoom;
818
+ cursor: grab;
819
+ user-select: none;
820
+ }
821
+
822
+ .lk-image-slider-viewport:active {
823
+ cursor: grabbing;
824
+ }
825
+
826
+ .lk-image-slider-viewport img {
827
+ display: block;
828
+ max-width: 100%;
829
+ pointer-events: none;
830
+ }
831
+
832
+ .lk-find-hotspot {
833
+ display: inline-block;
834
+ max-width: 100%;
835
+ }
836
+
837
+ .lk-find-hotspot-stage {
838
+ position: relative;
839
+ display: block;
840
+ max-width: 100%;
841
+ }
842
+
843
+ .lk-find-hotspot-image {
844
+ display: block;
845
+ max-width: 100%;
846
+ height: auto;
847
+ }
848
+
849
+ .lk-find-hotspot-target {
850
+ position: absolute;
851
+ transform: translate(-50%, -50%);
852
+ z-index: 1;
853
+ appearance: none;
854
+ border: 1px solid var(--lk-color-border);
855
+ border-radius: var(--lk-radius-md);
856
+ background: color-mix(in srgb, var(--lk-color-panel) 88%, transparent);
857
+ color: var(--lk-color-foreground);
858
+ min-width: var(--lk-touch-target-min, 2.75rem);
859
+ min-height: var(--lk-touch-target-min, 2.75rem);
860
+ padding: var(--lk-space-xs) var(--lk-space-sm);
861
+ font: inherit;
862
+ font-size: 0.875rem;
863
+ cursor: pointer;
864
+ touch-action: manipulation;
865
+ }
866
+
867
+ [data-lk-check-id] input,
868
+ [data-lk-check-id] textarea,
869
+ [data-lk-check-id] select {
870
+ font-size: max(1rem, 16px);
871
+ }
872
+
873
+ .lk-image-hotspot-trigger {
874
+ position: absolute;
875
+ display: inline-flex;
876
+ align-items: center;
877
+ justify-content: center;
878
+ min-width: var(--lk-touch-target-min, 2.75rem);
879
+ min-height: var(--lk-touch-target-min, 2.75rem);
880
+ border: 2px solid var(--lk-color-primary, #2563eb);
881
+ border-radius: 999px;
882
+ background: color-mix(in srgb, var(--lk-color-primary, #2563eb) 88%, #fff);
883
+ color: var(--lk-color-primary-foreground, #fff);
884
+ font-size: 1.25rem;
885
+ font-weight: var(--lk-font-weight-strong);
886
+ line-height: 1;
887
+ cursor: pointer;
888
+ touch-action: manipulation;
889
+ box-shadow: 0 2px 8px rgba(15, 23, 42, 0.25);
890
+ }
891
+
892
+ .lk-mark-the-words-token {
893
+ display: inline-flex;
894
+ align-items: center;
895
+ min-height: var(--lk-touch-target-min, 2.75rem);
896
+ padding: 0.15rem 0.45rem;
897
+ margin: 0.1rem 0.05rem;
898
+ touch-action: manipulation;
899
+ }
900
+
901
+ .lk-summary-statement {
902
+ display: block;
903
+ width: 100%;
904
+ min-height: var(--lk-touch-target-min, 2.75rem);
905
+ margin-bottom: var(--lk-touch-spacing, 0.5rem);
906
+ text-align: left;
907
+ touch-action: manipulation;
908
+ }
909
+
910
+ .lk-quiz-choice {
911
+ display: flex;
912
+ align-items: center;
913
+ gap: var(--lk-space-sm, 0.5rem);
914
+ min-height: var(--lk-touch-target-min, 2.75rem);
915
+ padding: 0.25rem 0;
916
+ touch-action: manipulation;
917
+ }
918
+
919
+ .lk-quiz-choice input {
920
+ width: 1.25rem;
921
+ height: 1.25rem;
922
+ flex-shrink: 0;
923
+ }
924
+
925
+ .lk-drag-words-bank {
926
+ display: flex;
927
+ flex-wrap: wrap;
928
+ gap: var(--lk-touch-spacing, 0.5rem);
929
+ margin-bottom: var(--lk-space-md);
930
+ }
931
+
932
+ .lk-drag-words-item {
933
+ appearance: none;
934
+ margin: 0;
935
+ padding: 0.5rem 0.85rem;
936
+ min-height: var(--lk-touch-target-min, 2.75rem);
937
+ border: 1px solid var(--lk-color-border);
938
+ border-radius: 999px;
939
+ background: var(--lk-color-background, #fff);
940
+ font-family: var(--lk-font-family);
941
+ font-size: 0.875rem;
942
+ font-weight: var(--lk-font-weight-strong);
943
+ cursor: grab;
944
+ touch-action: none;
945
+ }
946
+
947
+ .lk-drag-words-item[aria-pressed="true"] {
948
+ outline: 2px solid var(--lk-color-primary, #2563eb);
949
+ outline-offset: 2px;
950
+ }
951
+
952
+ .lk-drag-words-zone {
953
+ display: inline-flex;
954
+ align-items: center;
955
+ justify-content: center;
956
+ min-width: 6em;
957
+ min-height: var(--lk-touch-target-min, 2.75rem);
958
+ border: 1px dashed currentColor;
959
+ padding: 0.25rem 0.5rem;
960
+ margin: 0 0.2em;
961
+ vertical-align: middle;
962
+ touch-action: manipulation;
963
+ }
964
+
965
+ .lk-advent-calendar-grid {
966
+ display: grid;
967
+ grid-template-columns: repeat(auto-fill, minmax(var(--lk-touch-target-min, 2.75rem), 1fr));
968
+ gap: var(--lk-touch-spacing, 0.5rem);
969
+ }
970
+
971
+ .lk-advent-door-button {
972
+ width: 100%;
973
+ min-height: var(--lk-touch-target-min, 2.75rem);
974
+ touch-action: manipulation;
975
+ }
976
+
977
+ @media (pointer: coarse) {
978
+ .lk-summary-statement {
979
+ padding: var(--lk-space-sm) var(--lk-space-md);
980
+ border: 1px solid var(--lk-color-border);
981
+ border-radius: var(--lk-radius-md);
982
+ background: var(--lk-color-panel);
983
+ }
984
+
985
+ .lk-parallax-nav button {
986
+ min-height: var(--lk-touch-target-min, 2.75rem);
987
+ min-width: var(--lk-touch-target-min, 2.75rem);
988
+ }
989
+ }
990
+
991
+ .lk-find-hotspot-target[aria-pressed="true"] {
992
+ border-color: var(--lk-color-primary, #2563eb);
993
+ background: color-mix(in srgb, var(--lk-color-primary, #2563eb) 18%, var(--lk-color-panel));
994
+ font-weight: var(--lk-font-weight-strong);
995
+ }
996
+
997
+ .lk-find-hotspot-toolbar {
998
+ position: absolute;
999
+ left: 0;
1000
+ right: 0;
1001
+ bottom: 0;
1002
+ z-index: 2;
1003
+ display: flex;
1004
+ flex-wrap: wrap;
1005
+ align-items: center;
1006
+ gap: var(--lk-space-sm) var(--lk-space-md);
1007
+ padding: var(--lk-space-sm) var(--lk-space-md);
1008
+ background: color-mix(in srgb, var(--lk-color-panel) 94%, transparent);
1009
+ backdrop-filter: blur(4px);
1010
+ border-top: 1px solid var(--lk-color-border);
1011
+ }
1012
+
1013
+ .lk-find-hotspot-toolbar button[data-testid="check-hotspot"] {
1014
+ appearance: none;
1015
+ border: 1px solid var(--lk-color-primary, #2563eb);
1016
+ border-radius: var(--lk-radius-md);
1017
+ background: var(--lk-color-primary, #2563eb);
1018
+ color: var(--lk-color-primary-foreground, #f8fafc);
1019
+ padding: var(--lk-space-sm) var(--lk-space-md);
1020
+ font: inherit;
1021
+ font-weight: var(--lk-font-weight-strong);
1022
+ cursor: pointer;
1023
+ }
1024
+
1025
+ .lk-find-hotspot-toolbar button[data-testid="check-hotspot"]:disabled {
1026
+ opacity: 0.55;
1027
+ cursor: not-allowed;
1028
+ }
1029
+
1030
+ .lk-find-hotspot-toolbar--ready button[data-testid="check-hotspot"]:not(:disabled) {
1031
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--lk-color-primary, #2563eb) 35%, transparent);
1032
+ }
1033
+
1034
+ .lk-find-hotspot-feedback {
1035
+ margin: 0;
1036
+ font: inherit;
1037
+ font-weight: var(--lk-font-weight-strong);
1038
+ }
1039
+
1040
+ @media (max-width: 480px) {
1041
+ .lk-find-hotspot-toolbar {
1042
+ flex-direction: column;
1043
+ align-items: stretch;
1044
+ }
1045
+
1046
+ .lk-find-hotspot-toolbar button[data-testid="check-hotspot"] {
1047
+ width: 100%;
1048
+ }
1049
+ }
1050
+
1051
+ .lk-combination-lock {
1052
+ display: flex;
1053
+ flex-direction: column;
1054
+ gap: var(--lk-space-sm);
1055
+ max-width: 100%;
1056
+ }
1057
+
1058
+ .lk-combination-lock-label {
1059
+ margin: 0;
1060
+ font: inherit;
1061
+ font-weight: var(--lk-font-weight-strong);
1062
+ }
1063
+
1064
+ .lk-combination-lock-hint {
1065
+ margin: 0;
1066
+ font: inherit;
1067
+ font-size: 0.875rem;
1068
+ color: color-mix(in srgb, var(--lk-color-foreground) 72%, transparent);
1069
+ }
1070
+
1071
+ .lk-combination-lock-digits {
1072
+ display: flex;
1073
+ flex-wrap: wrap;
1074
+ gap: var(--lk-space-sm);
1075
+ }
1076
+
1077
+ .lk-combination-lock-digit {
1078
+ width: var(--lk-touch-target-min, 2.75rem);
1079
+ height: var(--lk-touch-target-min, 2.75rem);
1080
+ font-size: max(1rem, 16px);
1081
+ padding: 0;
1082
+ border: 1px solid var(--lk-color-border);
1083
+ border-radius: var(--lk-radius-md);
1084
+ background: var(--lk-color-panel);
1085
+ color: var(--lk-color-foreground);
1086
+ font: inherit;
1087
+ font-size: 1.25rem;
1088
+ font-weight: var(--lk-font-weight-strong);
1089
+ line-height: 1;
1090
+ text-align: center;
1091
+ }
1092
+
1093
+ .lk-combination-lock-digit::placeholder {
1094
+ color: color-mix(in srgb, var(--lk-color-foreground) 35%, transparent);
1095
+ }
1096
+
1097
+ .lk-combination-lock-digit:focus {
1098
+ outline: none;
1099
+ border-color: var(--lk-color-primary, #2563eb);
1100
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--lk-color-primary, #2563eb) 30%, transparent);
1101
+ }
1102
+
1103
+ .lk-combination-lock-digit:not(:placeholder-shown) {
1104
+ border-color: color-mix(in srgb, var(--lk-color-primary, #2563eb) 55%, var(--lk-color-border));
1105
+ }
1106
+
1107
+ .lk-combination-lock-actions {
1108
+ display: flex;
1109
+ flex-wrap: wrap;
1110
+ gap: var(--lk-space-sm);
1111
+ }
1112
+
1113
+ .lk-combination-lock-actions button[data-testid="lock-check"] {
1114
+ appearance: none;
1115
+ border: 1px solid var(--lk-color-primary, #2563eb);
1116
+ border-radius: var(--lk-radius-md);
1117
+ background: var(--lk-color-primary, #2563eb);
1118
+ color: var(--lk-color-primary-foreground, #f8fafc);
1119
+ padding: var(--lk-space-sm) var(--lk-space-md);
1120
+ font: inherit;
1121
+ font-weight: var(--lk-font-weight-strong);
1122
+ cursor: pointer;
1123
+ }
1124
+
1125
+ .lk-combination-lock-actions button[data-testid="lock-check"]:disabled {
1126
+ opacity: 0.55;
1127
+ cursor: not-allowed;
1128
+ }
1129
+
1130
+ .lk-combination-lock-feedback {
1131
+ margin: 0;
1132
+ font: inherit;
1133
+ font-weight: var(--lk-font-weight-strong);
1134
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lessonkit/themes",
3
- "version": "1.6.0",
3
+ "version": "1.7.1",
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",