@intellectif/lk-react 14.0.0 → 15.0.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 (139) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +5 -2
  3. package/dist/{WrittenResponse-pB1ik8hg.d.cts → WrittenResponse-BPbhERgk.d.cts} +1 -1
  4. package/dist/{WrittenResponse-C0P34En1.d.ts → WrittenResponse-ZAxLR_AU.d.ts} +1 -1
  5. package/dist/{chunk-YEYKJFEC.cjs → chunk-26GQO5I2.cjs} +12 -12
  6. package/dist/{chunk-YEYKJFEC.cjs.map → chunk-26GQO5I2.cjs.map} +1 -1
  7. package/dist/chunk-2HAEQDHQ.js +2330 -0
  8. package/dist/chunk-2HAEQDHQ.js.map +1 -0
  9. package/dist/{chunk-47HHC4GD.js → chunk-33BQNWAQ.js} +5 -5
  10. package/dist/{chunk-47HHC4GD.js.map → chunk-33BQNWAQ.js.map} +1 -1
  11. package/dist/{chunk-SE6WWDVW.cjs → chunk-4H3JTX74.cjs} +13 -13
  12. package/dist/{chunk-SE6WWDVW.cjs.map → chunk-4H3JTX74.cjs.map} +1 -1
  13. package/dist/{chunk-TDJEKXEP.js → chunk-52GXJNQ3.js} +84 -2
  14. package/dist/chunk-52GXJNQ3.js.map +1 -0
  15. package/dist/{chunk-USBANZ7K.cjs → chunk-53YOZOGN.cjs} +5 -5
  16. package/dist/{chunk-USBANZ7K.cjs.map → chunk-53YOZOGN.cjs.map} +1 -1
  17. package/dist/{chunk-LLXCX5KK.js → chunk-AF72QUBI.js} +5 -5
  18. package/dist/{chunk-LLXCX5KK.js.map → chunk-AF72QUBI.js.map} +1 -1
  19. package/dist/{chunk-XUEIUEPI.js → chunk-CE6OGJE6.js} +5 -5
  20. package/dist/{chunk-XUEIUEPI.js.map → chunk-CE6OGJE6.js.map} +1 -1
  21. package/dist/{chunk-RRH7ZPXC.cjs → chunk-DP3DM7FR.cjs} +6 -6
  22. package/dist/{chunk-RRH7ZPXC.cjs.map → chunk-DP3DM7FR.cjs.map} +1 -1
  23. package/dist/{chunk-J2CDPIRC.cjs → chunk-DQ3VVU5T.cjs} +27 -25
  24. package/dist/chunk-DQ3VVU5T.cjs.map +1 -0
  25. package/dist/{chunk-U3APKQ7P.cjs → chunk-EKBEKDWO.cjs} +13 -13
  26. package/dist/{chunk-U3APKQ7P.cjs.map → chunk-EKBEKDWO.cjs.map} +1 -1
  27. package/dist/{chunk-RXS455MR.js → chunk-EVBYEWHO.js} +3 -2
  28. package/dist/chunk-EVBYEWHO.js.map +1 -0
  29. package/dist/{chunk-B2XQLU2E.cjs → chunk-FKGUKFC7.cjs} +24 -6
  30. package/dist/chunk-FKGUKFC7.cjs.map +1 -0
  31. package/dist/{chunk-YMBBM5K7.js → chunk-H6I2JDNW.js} +10 -10
  32. package/dist/{chunk-YMBBM5K7.js.map → chunk-H6I2JDNW.js.map} +1 -1
  33. package/dist/{chunk-XIBOFTOL.js → chunk-HA3VRF6E.js} +22 -4
  34. package/dist/chunk-HA3VRF6E.js.map +1 -0
  35. package/dist/{chunk-I33FOKZ7.js → chunk-I2QGW4GD.js} +14 -12
  36. package/dist/chunk-I2QGW4GD.js.map +1 -0
  37. package/dist/{chunk-72UGRIMM.js → chunk-IE5ZNCWN.js} +5 -5
  38. package/dist/{chunk-72UGRIMM.js.map → chunk-IE5ZNCWN.js.map} +1 -1
  39. package/dist/{chunk-NDQD3ZRY.cjs → chunk-L7NE7PR4.cjs} +13 -13
  40. package/dist/{chunk-NDQD3ZRY.cjs.map → chunk-L7NE7PR4.cjs.map} +1 -1
  41. package/dist/{chunk-D57QZILZ.js → chunk-QEB6O6GU.js} +62 -37
  42. package/dist/chunk-QEB6O6GU.js.map +1 -0
  43. package/dist/{chunk-62AKSD5Y.js → chunk-QM4AV6EG.js} +39 -11
  44. package/dist/chunk-QM4AV6EG.js.map +1 -0
  45. package/dist/{chunk-LGCUOLP6.js → chunk-RT5FTHUU.js} +5 -5
  46. package/dist/{chunk-LGCUOLP6.js.map → chunk-RT5FTHUU.js.map} +1 -1
  47. package/dist/chunk-SRD4KVAP.cjs +2332 -0
  48. package/dist/chunk-SRD4KVAP.cjs.map +1 -0
  49. package/dist/{chunk-BVRUUYYR.cjs → chunk-UAYWLYFW.cjs} +18 -18
  50. package/dist/{chunk-BVRUUYYR.cjs.map → chunk-UAYWLYFW.cjs.map} +1 -1
  51. package/dist/{chunk-D4DQFTA7.cjs → chunk-UCKA22ZJ.cjs} +3 -2
  52. package/dist/chunk-UCKA22ZJ.cjs.map +1 -0
  53. package/dist/{chunk-F4TBCRGI.cjs → chunk-WKOV25NP.cjs} +42 -13
  54. package/dist/chunk-WKOV25NP.cjs.map +1 -0
  55. package/dist/{chunk-WTS34S5E.cjs → chunk-XMJE34FY.cjs} +13 -13
  56. package/dist/{chunk-WTS34S5E.cjs.map → chunk-XMJE34FY.cjs.map} +1 -1
  57. package/dist/{chunk-SWY6PWXK.js → chunk-YWQH35VO.js} +4 -4
  58. package/dist/{chunk-SWY6PWXK.js.map → chunk-YWQH35VO.js.map} +1 -1
  59. package/dist/{chunk-LB3FEV7Z.cjs → chunk-Z6TVOAO5.cjs} +84 -2
  60. package/dist/chunk-Z6TVOAO5.cjs.map +1 -0
  61. package/dist/{chunk-36FTYJWJ.cjs → chunk-ZH5WT2IE.cjs} +80 -55
  62. package/dist/chunk-ZH5WT2IE.cjs.map +1 -0
  63. package/dist/{chunk-BO6P723E.js → chunk-ZJMTHPHY.js} +3 -3
  64. package/dist/{chunk-BO6P723E.js.map → chunk-ZJMTHPHY.js.map} +1 -1
  65. package/dist/components/ActivityPreview.cjs +12 -12
  66. package/dist/components/ActivityPreview.d.cts +2 -2
  67. package/dist/components/ActivityPreview.d.ts +2 -2
  68. package/dist/components/ActivityPreview.js +11 -11
  69. package/dist/components/ActivitySequence.cjs +13 -13
  70. package/dist/components/ActivitySequence.d.cts +14 -7
  71. package/dist/components/ActivitySequence.d.ts +14 -7
  72. package/dist/components/ActivitySequence.js +12 -12
  73. package/dist/components/Dictation.cjs +5 -5
  74. package/dist/components/Dictation.d.cts +1 -1
  75. package/dist/components/Dictation.d.ts +1 -1
  76. package/dist/components/Dictation.js +4 -4
  77. package/dist/components/FillInTheBlanks.cjs +5 -5
  78. package/dist/components/FillInTheBlanks.d.cts +1 -1
  79. package/dist/components/FillInTheBlanks.d.ts +1 -1
  80. package/dist/components/FillInTheBlanks.js +4 -4
  81. package/dist/components/GapSelect.cjs +5 -5
  82. package/dist/components/GapSelect.d.cts +1 -1
  83. package/dist/components/GapSelect.d.ts +1 -1
  84. package/dist/components/GapSelect.js +4 -4
  85. package/dist/components/InteractiveVideo.cjs +26 -0
  86. package/dist/components/InteractiveVideo.cjs.map +1 -0
  87. package/dist/components/InteractiveVideo.d.cts +77 -0
  88. package/dist/components/InteractiveVideo.d.ts +77 -0
  89. package/dist/components/InteractiveVideo.js +17 -0
  90. package/dist/components/InteractiveVideo.js.map +1 -0
  91. package/dist/components/MultipleChoice.cjs +5 -5
  92. package/dist/components/MultipleChoice.d.cts +1 -1
  93. package/dist/components/MultipleChoice.d.ts +1 -1
  94. package/dist/components/MultipleChoice.js +4 -4
  95. package/dist/components/PronunciationFeedback.cjs +4 -4
  96. package/dist/components/PronunciationFeedback.d.cts +5 -2
  97. package/dist/components/PronunciationFeedback.d.ts +5 -2
  98. package/dist/components/PronunciationFeedback.js +3 -3
  99. package/dist/components/ReadAloud.cjs +6 -6
  100. package/dist/components/ReadAloud.d.cts +2 -2
  101. package/dist/components/ReadAloud.d.ts +2 -2
  102. package/dist/components/ReadAloud.js +5 -5
  103. package/dist/components/StimulusPanel.cjs +4 -4
  104. package/dist/components/StimulusPanel.d.cts +1 -1
  105. package/dist/components/StimulusPanel.d.ts +1 -1
  106. package/dist/components/StimulusPanel.js +3 -3
  107. package/dist/components/WrittenResponse.cjs +5 -5
  108. package/dist/components/WrittenResponse.d.cts +3 -3
  109. package/dist/components/WrittenResponse.d.ts +3 -3
  110. package/dist/components/WrittenResponse.js +4 -4
  111. package/dist/i18n/LkIntlProvider.cjs +7 -7
  112. package/dist/i18n/LkIntlProvider.d.cts +2 -2
  113. package/dist/i18n/LkIntlProvider.d.ts +2 -2
  114. package/dist/i18n/LkIntlProvider.js +1 -1
  115. package/dist/index.cjs +44 -39
  116. package/dist/index.cjs.map +1 -1
  117. package/dist/index.d.cts +3 -2
  118. package/dist/index.d.ts +3 -2
  119. package/dist/index.js +15 -14
  120. package/dist/index.js.map +1 -1
  121. package/dist/{strings--ADnHcaA.d.cts → strings-5588Q4Te.d.cts} +118 -1
  122. package/dist/{strings-CtdSf2St.d.ts → strings-D0IWcsUm.d.ts} +118 -1
  123. package/dist/theme/ThemeProvider.cjs +6 -6
  124. package/dist/theme/ThemeProvider.js +1 -1
  125. package/dist/theme/defaults.css +2 -0
  126. package/dist/theme/skin.css +1365 -1
  127. package/package.json +13 -3
  128. package/dist/chunk-36FTYJWJ.cjs.map +0 -1
  129. package/dist/chunk-62AKSD5Y.js.map +0 -1
  130. package/dist/chunk-B2XQLU2E.cjs.map +0 -1
  131. package/dist/chunk-D4DQFTA7.cjs.map +0 -1
  132. package/dist/chunk-D57QZILZ.js.map +0 -1
  133. package/dist/chunk-F4TBCRGI.cjs.map +0 -1
  134. package/dist/chunk-I33FOKZ7.js.map +0 -1
  135. package/dist/chunk-J2CDPIRC.cjs.map +0 -1
  136. package/dist/chunk-LB3FEV7Z.cjs.map +0 -1
  137. package/dist/chunk-RXS455MR.js.map +0 -1
  138. package/dist/chunk-TDJEKXEP.js.map +0 -1
  139. package/dist/chunk-XIBOFTOL.js.map +0 -1
@@ -1567,6 +1567,20 @@
1567
1567
  inline-size: 100%;
1568
1568
  }
1569
1569
 
1570
+ /*
1571
+ * What stands in the take's place when the page will not play it — a
1572
+ * `media-src` that refuses `blob:`, most often. A note, styled as the
1573
+ * panel's notes are: nothing is wrong with the take itself.
1574
+ */
1575
+ .lk-ra-take-unavailable,
1576
+ .lk-pf-audio-unavailable {
1577
+ margin: 0;
1578
+ padding-inline-start: var(--lk-spacing-sm);
1579
+ border-inline-start: 3px solid var(--lk-color-warning);
1580
+ font-size: var(--lk-font-size-sm);
1581
+ color: var(--lk-color-text-muted);
1582
+ }
1583
+
1570
1584
  /* ── What came back ────────────────────────────────────────────────── */
1571
1585
  .lk-ra-alert {
1572
1586
  margin: 0;
@@ -1905,7 +1919,9 @@
1905
1919
  .lk-pf-dimension,
1906
1920
  .lk-pf-word-detail,
1907
1921
  .lk-pf-break,
1908
- .lk-pf-monotone {
1922
+ .lk-pf-monotone,
1923
+ .lk-ra-take-unavailable,
1924
+ .lk-pf-audio-unavailable {
1909
1925
  forced-color-adjust: none;
1910
1926
  border-color: CanvasText;
1911
1927
  color: CanvasText;
@@ -1919,3 +1935,1351 @@
1919
1935
  }
1920
1936
  }
1921
1937
  }
1938
+
1939
+ /* ── Interactive video ─────────────────────────────────────────────────────
1940
+ The player's own chrome is always dark: it sits on moving pictures, and a
1941
+ light bar over a video is unreadable on half of them. So the chrome is drawn
1942
+ in literals, and only its accent is a token (`--lk-color-media-accent`). The
1943
+ quiz panel, the end card and the panel below the video are content: they
1944
+ take the theme like any activity. */
1945
+ @layer lk-skin {
1946
+ .lk-iv {
1947
+ display: flex;
1948
+ flex-direction: column;
1949
+ gap: var(--lk-spacing-md);
1950
+ font-family: var(--lk-font-family-base);
1951
+ font-size: var(--lk-font-size-base);
1952
+ line-height: var(--lk-line-height-base);
1953
+ color: var(--lk-color-text);
1954
+ }
1955
+
1956
+ .lk-iv *,
1957
+ .lk-iv *::before,
1958
+ .lk-iv *::after {
1959
+ box-sizing: border-box;
1960
+ }
1961
+
1962
+ /* The shell takes focus only to catch shortcuts; it draws no ring. */
1963
+ .lk-iv:focus {
1964
+ outline: none;
1965
+ }
1966
+
1967
+ .lk-iv-icon {
1968
+ display: block;
1969
+ flex: none;
1970
+ }
1971
+
1972
+ /* One grid cell holds the video and every layer over it. A layer in the flow
1973
+ — the quiz, the end card — can make the cell taller than the video: a long
1974
+ question grows the player instead of hiding behind a scroll bar. */
1975
+ .lk-iv-stage {
1976
+ position: relative;
1977
+ display: grid;
1978
+ grid-template: minmax(0, auto) / minmax(0, 1fr);
1979
+ container-type: inline-size;
1980
+ overflow: hidden;
1981
+ isolation: isolate;
1982
+ border-radius: var(--lk-radius-lg);
1983
+ background: #000;
1984
+ color: #fff;
1985
+ }
1986
+
1987
+ .lk-iv-stage > * {
1988
+ grid-area: 1 / 1;
1989
+ }
1990
+
1991
+ .lk-iv[data-chrome="hidden"] .lk-iv-stage {
1992
+ cursor: none;
1993
+ }
1994
+
1995
+ .lk-iv-video {
1996
+ display: block;
1997
+ align-self: center;
1998
+ inline-size: 100%;
1999
+ block-size: auto;
2000
+ aspect-ratio: 16 / 9;
2001
+ object-fit: contain;
2002
+ background: #000;
2003
+ transition: filter var(--lk-transition-base);
2004
+ }
2005
+
2006
+ /* Behind a quiz or the end card the frame stays, dimmed: the learner keeps
2007
+ their place in the picture without it competing with the question. */
2008
+ .lk-iv[data-quiz-open] .lk-iv-video,
2009
+ .lk-iv-stage:has(> .lk-iv-end) .lk-iv-video {
2010
+ filter: brightness(0.35) blur(3px);
2011
+ }
2012
+
2013
+ .lk-iv-label {
2014
+ z-index: 1;
2015
+ align-self: start;
2016
+ justify-self: start;
2017
+ margin: 12px;
2018
+ padding: 2px 10px;
2019
+ border-radius: 999px;
2020
+ background: rgb(0 0 0 / 0.55);
2021
+ font-size: 12px;
2022
+ font-weight: 600;
2023
+ letter-spacing: 0.02em;
2024
+ pointer-events: none;
2025
+ transition: opacity var(--lk-transition-base);
2026
+ }
2027
+
2028
+ .lk-iv[data-chrome="hidden"] .lk-iv-label,
2029
+ .lk-iv[data-quiz-open] .lk-iv-label {
2030
+ opacity: 0;
2031
+ }
2032
+
2033
+ .lk-iv-big-play {
2034
+ z-index: 1;
2035
+ place-self: center;
2036
+ display: grid;
2037
+ place-items: center;
2038
+ inline-size: 72px;
2039
+ block-size: 72px;
2040
+ padding: 0;
2041
+ border: 0;
2042
+ border-radius: 50%;
2043
+ background: rgb(0 0 0 / 0.5);
2044
+ color: #fff;
2045
+ cursor: pointer;
2046
+ backdrop-filter: blur(6px);
2047
+ transition:
2048
+ transform var(--lk-transition-fast),
2049
+ background-color var(--lk-transition-fast);
2050
+ }
2051
+
2052
+ .lk-iv-big-play .lk-iv-icon {
2053
+ inline-size: 32px;
2054
+ block-size: 32px;
2055
+ margin-inline-start: 3px;
2056
+ }
2057
+
2058
+ .lk-iv-big-play:hover {
2059
+ background: rgb(0 0 0 / 0.68);
2060
+ transform: scale(1.05);
2061
+ }
2062
+
2063
+ .lk-iv-spinner {
2064
+ z-index: 1;
2065
+ place-self: center;
2066
+ inline-size: 44px;
2067
+ block-size: 44px;
2068
+ border: 3px solid rgb(255 255 255 / 0.25);
2069
+ border-block-start-color: #fff;
2070
+ border-radius: 50%;
2071
+ pointer-events: none;
2072
+ animation: lk-iv-spin 0.9s linear infinite;
2073
+ }
2074
+
2075
+ @keyframes lk-iv-spin {
2076
+ to {
2077
+ transform: rotate(360deg);
2078
+ }
2079
+ }
2080
+
2081
+ .lk-iv-error {
2082
+ z-index: 3;
2083
+ place-self: center;
2084
+ display: flex;
2085
+ flex-direction: column;
2086
+ align-items: center;
2087
+ gap: 12px;
2088
+ max-inline-size: 36ch;
2089
+ padding: var(--lk-spacing-lg);
2090
+ text-align: center;
2091
+ }
2092
+
2093
+ .lk-iv-error p {
2094
+ margin: 0;
2095
+ }
2096
+
2097
+ .lk-iv-error .lk-iv-icon {
2098
+ inline-size: 32px;
2099
+ block-size: 32px;
2100
+ }
2101
+
2102
+ /* ── Captions ──────────────────────────────────────────────────────────
2103
+ Drawn by the player, sized to the player (not the page), and lifted
2104
+ clear of the controls while they show. */
2105
+ .lk-iv-caption {
2106
+ z-index: 1;
2107
+ align-self: end;
2108
+ justify-self: center;
2109
+ max-inline-size: min(88%, 42em);
2110
+ margin-block-end: max(16px, 4cqw);
2111
+ font-size: clamp(14px, 2.4cqw, 30px);
2112
+ line-height: 1.45;
2113
+ text-align: center;
2114
+ pointer-events: none;
2115
+ transition: margin-block-end var(--lk-transition-base);
2116
+ }
2117
+
2118
+ .lk-iv-caption[data-size="small"] {
2119
+ font-size: clamp(12px, 1.9cqw, 24px);
2120
+ }
2121
+
2122
+ .lk-iv-caption[data-size="large"] {
2123
+ font-size: clamp(16px, 3.1cqw, 38px);
2124
+ }
2125
+
2126
+ .lk-iv[data-chrome="shown"] .lk-iv-caption {
2127
+ margin-block-end: 84px;
2128
+ }
2129
+
2130
+ .lk-iv-caption span {
2131
+ padding: 0.1em 0.4em;
2132
+ border-radius: 4px;
2133
+ color: #fff;
2134
+ text-shadow:
2135
+ 0 0 4px rgb(0 0 0 / 0.9),
2136
+ 0 1px 2px #000;
2137
+ -webkit-box-decoration-break: clone;
2138
+ box-decoration-break: clone;
2139
+ }
2140
+
2141
+ .lk-iv-caption[data-background] span {
2142
+ background: rgb(0 0 0 / 0.75);
2143
+ text-shadow: none;
2144
+ }
2145
+
2146
+ /* ── Controls ────────────────────────────────────────────────────────── */
2147
+ .lk-iv-chrome {
2148
+ z-index: 2;
2149
+ align-self: end;
2150
+ display: flex;
2151
+ flex-direction: column;
2152
+ padding: 36px 10px 6px;
2153
+ background: linear-gradient(to top, rgb(0 0 0 / 0.74), rgb(0 0 0 / 0.36) 55%, transparent);
2154
+ transition: opacity var(--lk-transition-base);
2155
+ }
2156
+
2157
+ /* Hidden, it lets a tap through to the video, which brings it back. */
2158
+ .lk-iv[data-chrome="hidden"] .lk-iv-chrome {
2159
+ opacity: 0;
2160
+ pointer-events: none;
2161
+ }
2162
+
2163
+ .lk-iv[data-quiz-open] .lk-iv-chrome {
2164
+ visibility: hidden;
2165
+ }
2166
+
2167
+ .lk-iv-bar {
2168
+ display: flex;
2169
+ align-items: center;
2170
+ justify-content: space-between;
2171
+ gap: 4px;
2172
+ }
2173
+
2174
+ .lk-iv-bar-group {
2175
+ display: flex;
2176
+ align-items: center;
2177
+ gap: 2px;
2178
+ min-inline-size: 0;
2179
+ }
2180
+
2181
+ .lk-iv-button {
2182
+ position: relative;
2183
+ display: inline-grid;
2184
+ place-items: center;
2185
+ flex: none;
2186
+ inline-size: 40px;
2187
+ block-size: 40px;
2188
+ padding: 0;
2189
+ border: 0;
2190
+ border-radius: 999px;
2191
+ background: transparent;
2192
+ color: #fff;
2193
+ font: inherit;
2194
+ cursor: pointer;
2195
+ transition:
2196
+ background-color var(--lk-transition-fast),
2197
+ transform var(--lk-transition-fast);
2198
+ }
2199
+
2200
+ .lk-iv-button:hover {
2201
+ background: rgb(255 255 255 / 0.14);
2202
+ }
2203
+
2204
+ .lk-iv-button:active {
2205
+ transform: scale(0.94);
2206
+ }
2207
+
2208
+ /* A toggle that is on carries a short bar under its icon. */
2209
+ .lk-iv-bar .lk-iv-button[aria-pressed="true"]:not(.lk-iv-volume .lk-iv-button)::after {
2210
+ content: "";
2211
+ position: absolute;
2212
+ inset-block-end: 5px;
2213
+ inline-size: 14px;
2214
+ block-size: 2px;
2215
+ border-radius: 1px;
2216
+ background: var(--lk-color-media-accent);
2217
+ }
2218
+
2219
+ .lk-iv-speed {
2220
+ inline-size: auto;
2221
+ min-inline-size: 40px;
2222
+ padding-inline: 8px;
2223
+ font-size: 13px;
2224
+ font-weight: 600;
2225
+ font-variant-numeric: tabular-nums;
2226
+ }
2227
+
2228
+ .lk-iv-time {
2229
+ display: inline-flex;
2230
+ align-items: center;
2231
+ block-size: 40px;
2232
+ padding: 0 8px;
2233
+ border: 0;
2234
+ border-radius: 999px;
2235
+ background: none;
2236
+ color: #fff;
2237
+ font: inherit;
2238
+ font-size: 13px;
2239
+ font-variant-numeric: tabular-nums;
2240
+ white-space: nowrap;
2241
+ cursor: pointer;
2242
+ }
2243
+
2244
+ .lk-iv-time:hover {
2245
+ background: rgb(255 255 255 / 0.14);
2246
+ }
2247
+
2248
+ .lk-iv-time-total {
2249
+ color: rgb(255 255 255 / 0.7);
2250
+ }
2251
+
2252
+ .lk-iv-volume {
2253
+ display: flex;
2254
+ align-items: center;
2255
+ }
2256
+
2257
+ .lk-iv-volume-slider {
2258
+ inline-size: 0;
2259
+ margin: 0;
2260
+ opacity: 0;
2261
+ accent-color: var(--lk-color-media-accent);
2262
+ cursor: pointer;
2263
+ transition:
2264
+ inline-size var(--lk-transition-base),
2265
+ opacity var(--lk-transition-base),
2266
+ margin var(--lk-transition-base);
2267
+ }
2268
+
2269
+ .lk-iv-volume:hover .lk-iv-volume-slider,
2270
+ .lk-iv-volume:focus-within .lk-iv-volume-slider {
2271
+ inline-size: 72px;
2272
+ margin-inline: 4px 8px;
2273
+ opacity: 1;
2274
+ }
2275
+
2276
+ /* ── The progress bar ────────────────────────────────────────────────── */
2277
+ .lk-iv-scrubber {
2278
+ position: relative;
2279
+ display: flex;
2280
+ align-items: center;
2281
+ block-size: 20px;
2282
+ margin-inline: 6px;
2283
+ cursor: pointer;
2284
+ touch-action: none;
2285
+ }
2286
+
2287
+ .lk-iv-scrubber-track {
2288
+ position: relative;
2289
+ inline-size: 100%;
2290
+ block-size: 4px;
2291
+ border-radius: 2px;
2292
+ background: rgb(255 255 255 / 0.24);
2293
+ transition: block-size var(--lk-transition-fast);
2294
+ }
2295
+
2296
+ .lk-iv-scrubber:hover .lk-iv-scrubber-track,
2297
+ .lk-iv-scrubber[data-dragging] .lk-iv-scrubber-track,
2298
+ .lk-iv-scrubber:focus-visible .lk-iv-scrubber-track {
2299
+ block-size: 6px;
2300
+ }
2301
+
2302
+ .lk-iv-scrubber-buffered,
2303
+ .lk-iv-scrubber-played {
2304
+ position: absolute;
2305
+ inset-block: 0;
2306
+ inset-inline-start: 0;
2307
+ border-radius: inherit;
2308
+ }
2309
+
2310
+ .lk-iv-scrubber-buffered {
2311
+ background: rgb(255 255 255 / 0.36);
2312
+ }
2313
+
2314
+ .lk-iv-scrubber-played {
2315
+ background: var(--lk-color-media-accent);
2316
+ }
2317
+
2318
+ .lk-iv-scrubber-gap {
2319
+ position: absolute;
2320
+ inset-block: 0;
2321
+ inline-size: 3px;
2322
+ margin-inline-start: -1.5px;
2323
+ background: rgb(0 0 0 / 0.7);
2324
+ }
2325
+
2326
+ .lk-iv-scrubber-thumb {
2327
+ position: absolute;
2328
+ inset-block-start: 50%;
2329
+ inline-size: 14px;
2330
+ block-size: 14px;
2331
+ margin-block-start: -7px;
2332
+ margin-inline-start: -7px;
2333
+ border-radius: 50%;
2334
+ background: var(--lk-color-media-accent);
2335
+ box-shadow: 0 1px 4px rgb(0 0 0 / 0.5);
2336
+ transform: scale(0);
2337
+ pointer-events: none;
2338
+ transition: transform var(--lk-transition-fast);
2339
+ }
2340
+
2341
+ .lk-iv-scrubber:hover .lk-iv-scrubber-thumb,
2342
+ .lk-iv-scrubber[data-dragging] .lk-iv-scrubber-thumb,
2343
+ .lk-iv-scrubber:focus-visible .lk-iv-scrubber-thumb {
2344
+ transform: scale(1);
2345
+ }
2346
+
2347
+ /* A quiz on the bar. Each state has its own shape, never colour alone:
2348
+ a ring not yet reached, half filled when begun, filled when answered,
2349
+ a diamond when wrong, dashed while a grade is pending. */
2350
+ .lk-iv-marker {
2351
+ position: absolute;
2352
+ inset-block-start: 50%;
2353
+ inline-size: 12px;
2354
+ block-size: 12px;
2355
+ margin-block-start: -6px;
2356
+ margin-inline-start: -6px;
2357
+ border: 2px solid #fff;
2358
+ border-radius: 50%;
2359
+ background: #18181b;
2360
+ box-shadow: 0 0 0 1.5px rgb(0 0 0 / 0.55);
2361
+ pointer-events: none;
2362
+ }
2363
+
2364
+ .lk-iv-marker[data-state="open"] {
2365
+ background: linear-gradient(to right, #fff 50%, #18181b 50%);
2366
+ }
2367
+
2368
+ .lk-iv-marker[data-state="answered"] {
2369
+ background: #fff;
2370
+ }
2371
+
2372
+ .lk-iv-marker[data-state="correct"] {
2373
+ background: #22c55e;
2374
+ }
2375
+
2376
+ .lk-iv-marker[data-state="partial"] {
2377
+ background: linear-gradient(to right, #f59e0b 50%, #18181b 50%);
2378
+ }
2379
+
2380
+ .lk-iv-marker[data-state="incorrect"] {
2381
+ border-radius: 2px;
2382
+ background: #ef4444;
2383
+ transform: rotate(45deg) scale(0.9);
2384
+ }
2385
+
2386
+ .lk-iv-marker[data-state="pending"] {
2387
+ border-style: dashed;
2388
+ }
2389
+
2390
+ .lk-iv-bubble {
2391
+ position: absolute;
2392
+ inset-block-end: calc(100% + 10px);
2393
+ display: flex;
2394
+ flex-direction: column;
2395
+ gap: 2px;
2396
+ inline-size: max-content;
2397
+ max-inline-size: 240px;
2398
+ padding: 6px 10px;
2399
+ border-radius: 8px;
2400
+ background: rgb(15 15 17 / 0.92);
2401
+ box-shadow: 0 4px 16px rgb(0 0 0 / 0.35);
2402
+ color: #fff;
2403
+ font-size: 12px;
2404
+ line-height: 1.35;
2405
+ text-align: center;
2406
+ translate: -50% 0;
2407
+ pointer-events: none;
2408
+ }
2409
+
2410
+ .lk-iv-bubble:dir(rtl) {
2411
+ translate: 50% 0;
2412
+ }
2413
+
2414
+ .lk-iv-bubble-time {
2415
+ font-weight: 600;
2416
+ font-variant-numeric: tabular-nums;
2417
+ }
2418
+
2419
+ .lk-iv-bubble-chapter {
2420
+ font-weight: 400;
2421
+ color: rgb(255 255 255 / 0.75);
2422
+ }
2423
+
2424
+ .lk-iv-bubble-quiz {
2425
+ font-weight: 600;
2426
+ }
2427
+
2428
+ .lk-iv-bubble-caption {
2429
+ display: -webkit-box;
2430
+ overflow: hidden;
2431
+ color: rgb(255 255 255 / 0.88);
2432
+ -webkit-box-orient: vertical;
2433
+ -webkit-line-clamp: 3;
2434
+ }
2435
+
2436
+ /* ── Menus and the shortcut list ─────────────────────────────────────── */
2437
+ .lk-iv-menu-anchor {
2438
+ position: relative;
2439
+ }
2440
+
2441
+ .lk-iv-menu {
2442
+ position: absolute;
2443
+ z-index: 4;
2444
+ inset-block-end: calc(100% + 8px);
2445
+ inset-inline-end: 0;
2446
+ display: flex;
2447
+ flex-direction: column;
2448
+ min-inline-size: 200px;
2449
+ max-block-size: 232px;
2450
+ overflow-y: auto;
2451
+ padding: 6px;
2452
+ border-radius: 12px;
2453
+ background: rgb(24 24 27 / 0.96);
2454
+ box-shadow: 0 12px 32px rgb(0 0 0 / 0.45);
2455
+ color: #fff;
2456
+ }
2457
+
2458
+ .lk-iv-menu-item {
2459
+ display: flex;
2460
+ flex: none;
2461
+ align-items: center;
2462
+ justify-content: space-between;
2463
+ gap: 16px;
2464
+ min-block-size: 36px;
2465
+ padding: 6px 10px;
2466
+ border: 0;
2467
+ border-radius: 8px;
2468
+ background: transparent;
2469
+ color: inherit;
2470
+ font: inherit;
2471
+ font-size: 14px;
2472
+ text-align: start;
2473
+ white-space: nowrap;
2474
+ cursor: pointer;
2475
+ }
2476
+
2477
+ .lk-iv-menu-item:hover,
2478
+ .lk-iv-menu-item:focus-visible {
2479
+ background: rgb(255 255 255 / 0.1);
2480
+ }
2481
+
2482
+ .lk-iv-menu-item[aria-checked="true"] {
2483
+ font-weight: 600;
2484
+ }
2485
+
2486
+ .lk-iv-menu-item .lk-iv-icon {
2487
+ inline-size: 16px;
2488
+ block-size: 16px;
2489
+ }
2490
+
2491
+ .lk-iv-menu-back {
2492
+ justify-content: flex-start;
2493
+ gap: 6px;
2494
+ margin-block-end: 4px;
2495
+ border-block-end: 1px solid rgb(255 255 255 / 0.12);
2496
+ border-end-start-radius: 0;
2497
+ border-end-end-radius: 0;
2498
+ font-weight: 600;
2499
+ }
2500
+
2501
+ .lk-iv-menu-value {
2502
+ display: inline-flex;
2503
+ align-items: center;
2504
+ gap: 4px;
2505
+ color: rgb(255 255 255 / 0.7);
2506
+ }
2507
+
2508
+ .lk-iv-menu-note {
2509
+ margin: 4px 10px;
2510
+ font-size: 12px;
2511
+ color: #fca5a5;
2512
+ }
2513
+
2514
+ .lk-iv-kbd {
2515
+ display: inline-block;
2516
+ min-inline-size: 22px;
2517
+ padding: 1px 6px;
2518
+ border: 1px solid rgb(255 255 255 / 0.3);
2519
+ border-radius: 5px;
2520
+ background: rgb(255 255 255 / 0.08);
2521
+ color: #fff;
2522
+ font:
2523
+ 12px / 1.6 ui-monospace,
2524
+ SFMono-Regular,
2525
+ Menlo,
2526
+ Consolas,
2527
+ monospace;
2528
+ text-align: center;
2529
+ white-space: nowrap;
2530
+ }
2531
+
2532
+ /* Over the video and scrolled inside it: a reference, not a place. */
2533
+ .lk-iv-sheet {
2534
+ position: absolute;
2535
+ z-index: 5;
2536
+ inset: 12px;
2537
+ overflow-y: auto;
2538
+ padding: 16px 20px;
2539
+ border-radius: 12px;
2540
+ background: rgb(15 15 17 / 0.95);
2541
+ color: #fff;
2542
+ }
2543
+
2544
+ .lk-iv-sheet-head {
2545
+ display: flex;
2546
+ align-items: center;
2547
+ justify-content: space-between;
2548
+ margin-block-end: 8px;
2549
+ }
2550
+
2551
+ .lk-iv-sheet-title {
2552
+ margin: 0;
2553
+ font-size: var(--lk-font-size-base);
2554
+ font-weight: 600;
2555
+ }
2556
+
2557
+ .lk-iv-shortcuts {
2558
+ display: grid;
2559
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
2560
+ gap: 2px 24px;
2561
+ margin: 0;
2562
+ }
2563
+
2564
+ .lk-iv-shortcut {
2565
+ display: flex;
2566
+ align-items: center;
2567
+ gap: 12px;
2568
+ padding-block: 4px;
2569
+ }
2570
+
2571
+ .lk-iv-shortcut dt {
2572
+ flex: 0 0 104px;
2573
+ }
2574
+
2575
+ .lk-iv-shortcut dd {
2576
+ margin: 0;
2577
+ font-size: 14px;
2578
+ color: rgb(255 255 255 / 0.85);
2579
+ }
2580
+
2581
+ /* ── The quiz ────────────────────────────────────────────────────────── */
2582
+ .lk-iv-quiz {
2583
+ z-index: 3;
2584
+ display: flex;
2585
+ flex-direction: column;
2586
+ min-block-size: 0;
2587
+ margin: 12px;
2588
+ border-radius: var(--lk-radius-lg);
2589
+ background: var(--lk-color-surface);
2590
+ box-shadow: 0 24px 64px rgb(0 0 0 / 0.5);
2591
+ color: var(--lk-color-text);
2592
+ animation: lk-iv-rise var(--lk-transition-base) both;
2593
+ }
2594
+
2595
+ .lk-iv-quiz[hidden],
2596
+ .lk-iv-question[hidden] {
2597
+ display: none;
2598
+ }
2599
+
2600
+ @keyframes lk-iv-rise {
2601
+ from {
2602
+ opacity: 0;
2603
+ transform: translateY(8px) scale(0.99);
2604
+ }
2605
+ }
2606
+
2607
+ .lk-iv-quiz-head {
2608
+ display: flex;
2609
+ flex-wrap: wrap;
2610
+ align-items: center;
2611
+ justify-content: space-between;
2612
+ gap: 8px 16px;
2613
+ padding: 14px 20px;
2614
+ border-block-end: 1px solid var(--lk-color-border);
2615
+ }
2616
+
2617
+ .lk-iv-quiz-title {
2618
+ display: flex;
2619
+ flex-wrap: wrap;
2620
+ align-items: center;
2621
+ gap: 4px 8px;
2622
+ margin: 0;
2623
+ font-size: var(--lk-font-size-base);
2624
+ font-weight: var(--lk-font-weight-bold);
2625
+ }
2626
+
2627
+ .lk-iv-quiz-title:focus {
2628
+ outline: none;
2629
+ }
2630
+
2631
+ .lk-iv-quiz-time {
2632
+ margin-inline-start: -4px;
2633
+ font-weight: var(--lk-font-weight-normal);
2634
+ color: var(--lk-color-text-muted);
2635
+ font-variant-numeric: tabular-nums;
2636
+ }
2637
+
2638
+ .lk-iv-tag {
2639
+ display: inline-flex;
2640
+ padding: 0 8px;
2641
+ border: 1px solid var(--lk-color-border);
2642
+ border-radius: 999px;
2643
+ color: var(--lk-color-text-muted);
2644
+ font-size: 12px;
2645
+ font-weight: 600;
2646
+ line-height: 1.6;
2647
+ }
2648
+
2649
+ .lk-iv-steps {
2650
+ display: flex;
2651
+ align-items: center;
2652
+ gap: 12px;
2653
+ }
2654
+
2655
+ .lk-iv-steps-label {
2656
+ color: var(--lk-color-text-muted);
2657
+ font-size: var(--lk-font-size-sm);
2658
+ font-variant-numeric: tabular-nums;
2659
+ }
2660
+
2661
+ .lk-iv-steps-dots {
2662
+ display: flex;
2663
+ align-items: center;
2664
+ gap: 6px;
2665
+ margin: 0;
2666
+ padding: 0;
2667
+ list-style: none;
2668
+ }
2669
+
2670
+ .lk-iv-steps-dots li {
2671
+ display: flex;
2672
+ }
2673
+
2674
+ .lk-iv-step {
2675
+ position: relative;
2676
+ inline-size: 8px;
2677
+ block-size: 8px;
2678
+ padding: 0;
2679
+ border: 0;
2680
+ border-radius: 999px;
2681
+ background: var(--lk-color-border);
2682
+ cursor: pointer;
2683
+ transition:
2684
+ inline-size var(--lk-transition-fast),
2685
+ background-color var(--lk-transition-fast);
2686
+ }
2687
+
2688
+ /* A 24 px target around an 8 px dot. */
2689
+ .lk-iv-step::after {
2690
+ content: "";
2691
+ position: absolute;
2692
+ inset: -8px;
2693
+ }
2694
+
2695
+ .lk-iv-step[data-answered] {
2696
+ background: var(--lk-color-text-muted);
2697
+ }
2698
+
2699
+ .lk-iv-step[data-current] {
2700
+ inline-size: 22px;
2701
+ background: var(--lk-color-primary);
2702
+ }
2703
+
2704
+ .lk-iv-quiz-body {
2705
+ display: flex;
2706
+ flex: 1 1 auto;
2707
+ flex-direction: column;
2708
+ padding: 20px;
2709
+ }
2710
+
2711
+ /* Centred in the panel while it fits, top-aligned once it does not. */
2712
+ .lk-iv-question {
2713
+ inline-size: 100%;
2714
+ max-inline-size: 760px;
2715
+ margin: auto;
2716
+ }
2717
+
2718
+ /* One box, not a box in a box: the panel is the question's card. */
2719
+ .lk-iv-question :is(.lk-mc, .lk-fib, .lk-dc, .lk-ra) {
2720
+ padding: 0;
2721
+ border: 0;
2722
+ border-radius: 0;
2723
+ background: none;
2724
+ }
2725
+
2726
+ .lk-iv-quiz-foot {
2727
+ display: flex;
2728
+ flex-wrap: wrap;
2729
+ align-items: center;
2730
+ justify-content: space-between;
2731
+ gap: 8px 16px;
2732
+ padding: 12px 20px;
2733
+ border-block-start: 1px solid var(--lk-color-border);
2734
+ }
2735
+
2736
+ .lk-iv-quiz-foot-start,
2737
+ .lk-iv-quiz-foot-end {
2738
+ display: flex;
2739
+ align-items: center;
2740
+ gap: 8px;
2741
+ }
2742
+
2743
+ .lk-iv-quiz-foot-end {
2744
+ margin-inline-start: auto;
2745
+ }
2746
+
2747
+ .lk-iv-link {
2748
+ display: inline-flex;
2749
+ align-items: center;
2750
+ gap: 6px;
2751
+ padding: 8px 10px;
2752
+ border: 0;
2753
+ border-radius: var(--lk-radius-base);
2754
+ background: none;
2755
+ color: var(--lk-color-text-muted);
2756
+ font: inherit;
2757
+ font-size: var(--lk-font-size-sm);
2758
+ font-weight: 600;
2759
+ cursor: pointer;
2760
+ }
2761
+
2762
+ .lk-iv-link:hover {
2763
+ background: var(--lk-color-surface-raised);
2764
+ color: var(--lk-color-text);
2765
+ }
2766
+
2767
+ .lk-iv-link .lk-iv-icon,
2768
+ .lk-iv-action .lk-iv-icon {
2769
+ inline-size: 16px;
2770
+ block-size: 16px;
2771
+ }
2772
+
2773
+ .lk-iv-action {
2774
+ display: inline-flex;
2775
+ align-items: center;
2776
+ justify-content: center;
2777
+ gap: 8px;
2778
+ min-block-size: 40px;
2779
+ padding: 8px 18px;
2780
+ border: 1px solid var(--lk-color-border);
2781
+ border-radius: var(--lk-radius-base);
2782
+ background: var(--lk-color-surface);
2783
+ color: var(--lk-color-text);
2784
+ font: inherit;
2785
+ font-weight: var(--lk-font-weight-bold);
2786
+ cursor: pointer;
2787
+ transition: var(--lk-transition-fast);
2788
+ }
2789
+
2790
+ .lk-iv-action:hover {
2791
+ border-color: var(--lk-color-primary);
2792
+ }
2793
+
2794
+ .lk-iv-action-primary {
2795
+ border-color: var(--lk-color-primary);
2796
+ background: var(--lk-color-primary);
2797
+ color: var(--lk-color-surface);
2798
+ }
2799
+
2800
+ .lk-iv-action-primary:hover {
2801
+ background: var(--lk-color-primary-hover);
2802
+ }
2803
+
2804
+ .lk-iv-action[aria-disabled="true"] {
2805
+ opacity: 0.45;
2806
+ cursor: not-allowed;
2807
+ }
2808
+
2809
+ .lk-iv-error .lk-iv-action {
2810
+ border-color: #fff;
2811
+ background: #fff;
2812
+ color: #000;
2813
+ }
2814
+
2815
+ .lk-iv-saved {
2816
+ color: var(--lk-color-success);
2817
+ font-size: var(--lk-font-size-sm);
2818
+ font-weight: 600;
2819
+ }
2820
+
2821
+ /* ── The end ─────────────────────────────────────────────────────────
2822
+ Clear of the controls, so the learner can still scrub back. */
2823
+ .lk-iv-end {
2824
+ z-index: 3;
2825
+ display: grid;
2826
+ place-items: center;
2827
+ margin: 12px 12px 76px;
2828
+ animation: lk-iv-rise var(--lk-transition-base) both;
2829
+ }
2830
+
2831
+ .lk-iv-end-card {
2832
+ display: flex;
2833
+ flex-direction: column;
2834
+ gap: var(--lk-spacing-md);
2835
+ inline-size: min(100%, 520px);
2836
+ padding: var(--lk-spacing-lg);
2837
+ border-radius: var(--lk-radius-lg);
2838
+ background: var(--lk-color-surface);
2839
+ box-shadow: 0 24px 64px rgb(0 0 0 / 0.5);
2840
+ color: var(--lk-color-text);
2841
+ }
2842
+
2843
+ .lk-iv-end-title {
2844
+ margin: 0;
2845
+ font-size: var(--lk-font-size-lg);
2846
+ font-weight: var(--lk-font-weight-bold);
2847
+ }
2848
+
2849
+ .lk-iv-end-title:focus {
2850
+ outline: none;
2851
+ }
2852
+
2853
+ .lk-iv-end-summary {
2854
+ margin: 0;
2855
+ color: var(--lk-color-text-muted);
2856
+ }
2857
+
2858
+ .lk-iv-end-list,
2859
+ .lk-iv-contents {
2860
+ margin: 0;
2861
+ padding: 0;
2862
+ list-style: none;
2863
+ }
2864
+
2865
+ .lk-iv-end-list {
2866
+ max-block-size: 240px;
2867
+ overflow-y: auto;
2868
+ border: 1px solid var(--lk-color-border);
2869
+ border-radius: var(--lk-radius-base);
2870
+ }
2871
+
2872
+ .lk-iv-end-list li + li,
2873
+ .lk-iv-contents li + li {
2874
+ border-block-start: 1px solid var(--lk-color-border);
2875
+ }
2876
+
2877
+ .lk-iv-end-actions {
2878
+ display: flex;
2879
+ flex-wrap: wrap;
2880
+ justify-content: flex-end;
2881
+ gap: var(--lk-spacing-sm);
2882
+ }
2883
+
2884
+ /* ── Rows: the contents list and the end card ───────────────────────── */
2885
+ .lk-iv-row {
2886
+ display: flex;
2887
+ align-items: center;
2888
+ gap: 12px;
2889
+ inline-size: 100%;
2890
+ padding: 10px 12px;
2891
+ border: 0;
2892
+ background: none;
2893
+ color: inherit;
2894
+ font: inherit;
2895
+ text-align: start;
2896
+ cursor: pointer;
2897
+ }
2898
+
2899
+ .lk-iv-row:hover {
2900
+ background: var(--lk-color-surface-raised);
2901
+ }
2902
+
2903
+ .lk-iv-row-time {
2904
+ flex: none;
2905
+ min-inline-size: 3.25em;
2906
+ color: var(--lk-color-text-muted);
2907
+ font-size: var(--lk-font-size-sm);
2908
+ font-variant-numeric: tabular-nums;
2909
+ }
2910
+
2911
+ .lk-iv-row-title {
2912
+ display: flex;
2913
+ flex: 1 1 auto;
2914
+ flex-wrap: wrap;
2915
+ align-items: center;
2916
+ gap: 4px 8px;
2917
+ min-inline-size: 0;
2918
+ }
2919
+
2920
+ .lk-iv-row-status {
2921
+ flex: none;
2922
+ color: var(--lk-color-text-muted);
2923
+ font-size: var(--lk-font-size-sm);
2924
+ }
2925
+
2926
+ .lk-iv-contents-chapter .lk-iv-row-title {
2927
+ font-weight: 600;
2928
+ }
2929
+
2930
+ /* The quiz's state in a list: the marker's shapes, in the theme's colours. */
2931
+ .lk-iv-marker-dot {
2932
+ flex: none;
2933
+ inline-size: 10px;
2934
+ block-size: 10px;
2935
+ border: 2px solid var(--lk-color-text-muted);
2936
+ border-radius: 50%;
2937
+ }
2938
+
2939
+ .lk-iv-marker-dot[data-state="open"] {
2940
+ background: linear-gradient(to right, var(--lk-color-text-muted) 50%, transparent 50%);
2941
+ }
2942
+
2943
+ .lk-iv-marker-dot[data-state="answered"] {
2944
+ border-color: var(--lk-color-text);
2945
+ background: var(--lk-color-text);
2946
+ }
2947
+
2948
+ .lk-iv-marker-dot[data-state="correct"] {
2949
+ border-color: var(--lk-color-success);
2950
+ background: var(--lk-color-success);
2951
+ }
2952
+
2953
+ .lk-iv-marker-dot[data-state="partial"] {
2954
+ border-color: var(--lk-color-warning);
2955
+ background: linear-gradient(to right, var(--lk-color-warning) 50%, transparent 50%);
2956
+ }
2957
+
2958
+ .lk-iv-marker-dot[data-state="incorrect"] {
2959
+ border-color: var(--lk-color-error);
2960
+ border-radius: 2px;
2961
+ background: var(--lk-color-error);
2962
+ transform: rotate(45deg) scale(0.85);
2963
+ }
2964
+
2965
+ .lk-iv-marker-dot[data-state="pending"] {
2966
+ border-style: dashed;
2967
+ }
2968
+
2969
+ /* ── The panel below the video ─────────────────────────────────────── */
2970
+ .lk-iv-panel {
2971
+ display: flex;
2972
+ flex-direction: column;
2973
+ overflow: hidden;
2974
+ border: 1px solid var(--lk-color-border);
2975
+ border-radius: var(--lk-radius-lg);
2976
+ background: var(--lk-color-surface);
2977
+ }
2978
+
2979
+ .lk-iv-tabs {
2980
+ display: flex;
2981
+ gap: 4px;
2982
+ padding: 4px 8px 0;
2983
+ border-block-end: 1px solid var(--lk-color-border);
2984
+ }
2985
+
2986
+ .lk-iv-tab {
2987
+ margin-block-end: -1px;
2988
+ padding: 8px 12px;
2989
+ border: 0;
2990
+ border-block-end: 2px solid transparent;
2991
+ background: none;
2992
+ color: var(--lk-color-text-muted);
2993
+ font: inherit;
2994
+ font-size: var(--lk-font-size-sm);
2995
+ font-weight: 600;
2996
+ cursor: pointer;
2997
+ }
2998
+
2999
+ .lk-iv-tab[aria-selected="true"] {
3000
+ border-block-end-color: var(--lk-color-primary);
3001
+ color: var(--lk-color-text);
3002
+ }
3003
+
3004
+ .lk-iv-contents {
3005
+ max-block-size: 320px;
3006
+ overflow-y: auto;
3007
+ }
3008
+
3009
+ .lk-iv-transcript {
3010
+ display: flex;
3011
+ flex-direction: column;
3012
+ min-block-size: 0;
3013
+ }
3014
+
3015
+ .lk-iv-search {
3016
+ margin: 8px;
3017
+ padding: 8px 12px;
3018
+ border: 1px solid var(--lk-color-border);
3019
+ border-radius: var(--lk-radius-base);
3020
+ background: var(--lk-color-surface);
3021
+ color: var(--lk-color-text);
3022
+ font: inherit;
3023
+ font-size: var(--lk-font-size-sm);
3024
+ }
3025
+
3026
+ .lk-iv-lines {
3027
+ position: relative;
3028
+ max-block-size: 300px;
3029
+ overflow-y: auto;
3030
+ padding: 0 4px 4px;
3031
+ }
3032
+
3033
+ .lk-iv-line {
3034
+ display: flex;
3035
+ gap: 12px;
3036
+ inline-size: 100%;
3037
+ padding: 6px 8px;
3038
+ border: 0;
3039
+ border-inline-start: 3px solid transparent;
3040
+ border-radius: var(--lk-radius-sm);
3041
+ background: none;
3042
+ color: var(--lk-color-text-muted);
3043
+ font: inherit;
3044
+ text-align: start;
3045
+ cursor: pointer;
3046
+ }
3047
+
3048
+ .lk-iv-line:hover {
3049
+ background: var(--lk-color-surface-raised);
3050
+ color: var(--lk-color-text);
3051
+ }
3052
+
3053
+ .lk-iv-line[data-active] {
3054
+ border-inline-start-color: var(--lk-color-primary);
3055
+ background: var(--lk-color-surface-raised);
3056
+ color: var(--lk-color-text);
3057
+ }
3058
+
3059
+ .lk-iv-line mark {
3060
+ border-radius: 2px;
3061
+ background: color-mix(in srgb, var(--lk-color-warning) 28%, transparent);
3062
+ color: inherit;
3063
+ }
3064
+
3065
+ .lk-iv-empty {
3066
+ margin: 0;
3067
+ padding: var(--lk-spacing-md);
3068
+ color: var(--lk-color-text-muted);
3069
+ font-size: var(--lk-font-size-sm);
3070
+ }
3071
+
3072
+ .lk-iv-live {
3073
+ position: absolute;
3074
+ inline-size: 1px;
3075
+ block-size: 1px;
3076
+ margin: -1px;
3077
+ padding: 0;
3078
+ overflow: hidden;
3079
+ clip-path: inset(50%);
3080
+ border: 0;
3081
+ white-space: nowrap;
3082
+ }
3083
+
3084
+ /* ── Focus ──────────────────────────────────────────────────────────── */
3085
+ .lk-iv :focus-visible {
3086
+ outline: 2px solid var(--lk-color-focus-ring);
3087
+ outline-offset: 2px;
3088
+ }
3089
+
3090
+ /* On the dark chrome the ring takes the chrome's accent. */
3091
+ .lk-iv-chrome :focus-visible,
3092
+ .lk-iv-big-play:focus-visible,
3093
+ .lk-iv-sheet :focus-visible,
3094
+ .lk-iv-error :focus-visible {
3095
+ outline-color: var(--lk-color-media-accent);
3096
+ }
3097
+
3098
+ .lk-iv-menu-item:focus-visible,
3099
+ .lk-iv-row:focus-visible,
3100
+ .lk-iv-line:focus-visible {
3101
+ outline-offset: -2px;
3102
+ }
3103
+
3104
+ .lk-iv-scrubber:focus-visible {
3105
+ border-radius: 4px;
3106
+ outline-offset: 2px;
3107
+ }
3108
+
3109
+ /* ── Fullscreen: the video fills the screen; the panel, if open and there
3110
+ is room, becomes a column beside it. A quiz scrolls inside the screen. */
3111
+ .lk-iv[data-fullscreen] {
3112
+ flex-direction: row;
3113
+ gap: 0;
3114
+ background: #000;
3115
+ }
3116
+
3117
+ .lk-iv[data-fullscreen] .lk-iv-stage {
3118
+ flex: 1 1 auto;
3119
+ grid-template-rows: minmax(0, 1fr);
3120
+ block-size: 100%;
3121
+ border-radius: 0;
3122
+ }
3123
+
3124
+ .lk-iv[data-fullscreen] .lk-iv-video {
3125
+ block-size: 100%;
3126
+ aspect-ratio: auto;
3127
+ }
3128
+
3129
+ .lk-iv[data-fullscreen] .lk-iv-quiz,
3130
+ .lk-iv[data-fullscreen] .lk-iv-end {
3131
+ overflow-y: auto;
3132
+ }
3133
+
3134
+ .lk-iv[data-fullscreen] .lk-iv-panel {
3135
+ flex: 0 0 360px;
3136
+ border: 0;
3137
+ border-inline-start: 1px solid var(--lk-color-border);
3138
+ border-radius: 0;
3139
+ }
3140
+
3141
+ .lk-iv[data-fullscreen] .lk-iv-contents,
3142
+ .lk-iv[data-fullscreen] .lk-iv-lines {
3143
+ flex: 1 1 auto;
3144
+ max-block-size: none;
3145
+ }
3146
+
3147
+ @media (max-width: 899px) {
3148
+ .lk-iv[data-fullscreen] .lk-iv-panel {
3149
+ display: none;
3150
+ }
3151
+ }
3152
+
3153
+ /* ── Small players ──────────────────────────────────────────────────── */
3154
+ @container (max-width: 479px) {
3155
+ .lk-iv-wide,
3156
+ .lk-iv-time-total {
3157
+ display: none;
3158
+ }
3159
+
3160
+ .lk-iv-big-play {
3161
+ inline-size: 56px;
3162
+ block-size: 56px;
3163
+ }
3164
+
3165
+ .lk-iv-menu {
3166
+ max-block-size: 156px;
3167
+ }
3168
+
3169
+ .lk-iv-quiz {
3170
+ margin: 8px;
3171
+ }
3172
+
3173
+ .lk-iv-quiz-head,
3174
+ .lk-iv-quiz-foot {
3175
+ padding-inline: 14px;
3176
+ }
3177
+
3178
+ .lk-iv-quiz-body {
3179
+ padding: 14px;
3180
+ }
3181
+
3182
+ .lk-iv-end {
3183
+ margin: 8px 8px 72px;
3184
+ }
3185
+
3186
+ .lk-iv-end-card {
3187
+ padding: var(--lk-spacing-md);
3188
+ }
3189
+ }
3190
+
3191
+ /* A finger needs a bigger target, and a phone has volume keys. */
3192
+ @media (pointer: coarse) {
3193
+ .lk-iv-button {
3194
+ inline-size: 44px;
3195
+ block-size: 44px;
3196
+ }
3197
+
3198
+ .lk-iv-volume-slider {
3199
+ display: none;
3200
+ }
3201
+ }
3202
+
3203
+ /* ── Reduced motion (WCAG 2.3.3) ─────────────────────────────────────── */
3204
+ @media (prefers-reduced-motion: reduce) {
3205
+ .lk-iv *,
3206
+ .lk-iv *::before,
3207
+ .lk-iv *::after {
3208
+ transition: none;
3209
+ animation: none;
3210
+ }
3211
+ }
3212
+
3213
+ /* ── Forced colours (Windows High Contrast) ─────────────────────────────
3214
+ The system palette replaces the chrome's literals; what must survive is
3215
+ that the bar shows progress and that each quiz marker keeps its shape. */
3216
+ @media (forced-colors: active) {
3217
+ .lk-iv-chrome,
3218
+ .lk-iv-menu,
3219
+ .lk-iv-sheet,
3220
+ .lk-iv-bubble,
3221
+ .lk-iv-label,
3222
+ .lk-iv-caption span {
3223
+ forced-color-adjust: none;
3224
+ background: Canvas;
3225
+ color: CanvasText;
3226
+ }
3227
+
3228
+ .lk-iv-chrome .lk-iv-button,
3229
+ .lk-iv-chrome .lk-iv-time,
3230
+ .lk-iv-menu-item {
3231
+ color: ButtonText;
3232
+ }
3233
+
3234
+ .lk-iv-scrubber-track {
3235
+ background: Canvas;
3236
+ outline: 1px solid CanvasText;
3237
+ }
3238
+
3239
+ .lk-iv-scrubber-buffered {
3240
+ background: GrayText;
3241
+ }
3242
+
3243
+ .lk-iv-scrubber-played,
3244
+ .lk-iv-scrubber-thumb {
3245
+ background: Highlight;
3246
+ }
3247
+
3248
+ .lk-iv-marker,
3249
+ .lk-iv-marker-dot,
3250
+ .lk-iv-step {
3251
+ forced-color-adjust: none;
3252
+ border-color: CanvasText;
3253
+ background: Canvas;
3254
+ }
3255
+
3256
+ .lk-iv-marker:is([data-state="answered"], [data-state="correct"], [data-state="incorrect"]),
3257
+ .lk-iv-marker-dot:is([data-state="answered"], [data-state="correct"], [data-state="incorrect"]),
3258
+ .lk-iv-step[data-answered] {
3259
+ background: CanvasText;
3260
+ }
3261
+
3262
+ .lk-iv-marker:is([data-state="open"], [data-state="partial"]),
3263
+ .lk-iv-marker-dot:is([data-state="open"], [data-state="partial"]) {
3264
+ background: linear-gradient(to right, CanvasText 50%, Canvas 50%);
3265
+ }
3266
+
3267
+ .lk-iv-step {
3268
+ outline: 1px solid CanvasText;
3269
+ }
3270
+
3271
+ .lk-iv-step[data-current] {
3272
+ background: Highlight;
3273
+ }
3274
+
3275
+ .lk-iv-quiz,
3276
+ .lk-iv-end-card,
3277
+ .lk-iv-panel {
3278
+ border: 1px solid CanvasText;
3279
+ }
3280
+
3281
+ .lk-iv-line[data-active] {
3282
+ border-inline-start-color: Highlight;
3283
+ }
3284
+ }
3285
+ }