@lessonkit/themes 1.6.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 +457 -0
  2. package/package.json +3 -3
package/base.css CHANGED
@@ -238,6 +238,82 @@
238
238
  margin: 0.35rem 0.5rem 0.35rem 0;
239
239
  }
240
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
+
241
317
  /* Crossword — square grid cells with block squares */
242
318
  .lk-crossword {
243
319
  --lk-crossword-cell-size: 2.25rem;
@@ -512,3 +588,384 @@
512
588
  color: #92400e;
513
589
  border: 1px solid #fcd34d;
514
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.6.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",