@intellectif/lk-react 14.1.0 → 16.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 (131) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +5 -2
  3. package/dist/{WrittenResponse-rRpOr9W1.d.cts → WrittenResponse-C2zw-1jK.d.cts} +1 -1
  4. package/dist/{WrittenResponse-DrzI89Wg.d.ts → WrittenResponse-CTiNpSCC.d.ts} +1 -1
  5. package/dist/{chunk-KIO6QXGT.cjs → chunk-2WM2KSO7.cjs} +25 -25
  6. package/dist/{chunk-KIO6QXGT.cjs.map → chunk-2WM2KSO7.cjs.map} +1 -1
  7. package/dist/{chunk-WC4OD3EE.cjs → chunk-2YZZL5FV.cjs} +13 -13
  8. package/dist/{chunk-WC4OD3EE.cjs.map → chunk-2YZZL5FV.cjs.map} +1 -1
  9. package/dist/chunk-3IHVDQRC.js +2683 -0
  10. package/dist/chunk-3IHVDQRC.js.map +1 -0
  11. package/dist/{chunk-5CP2Z6IS.js → chunk-4AQ4SWJ3.js} +5 -5
  12. package/dist/{chunk-5CP2Z6IS.js.map → chunk-4AQ4SWJ3.js.map} +1 -1
  13. package/dist/{chunk-UDQS5INQ.js → chunk-4X7NFEDB.js} +5 -5
  14. package/dist/{chunk-UDQS5INQ.js.map → chunk-4X7NFEDB.js.map} +1 -1
  15. package/dist/chunk-A2CPCOJA.cjs +2686 -0
  16. package/dist/chunk-A2CPCOJA.cjs.map +1 -0
  17. package/dist/{chunk-U432HTUW.js → chunk-AEUP63CZ.js} +5 -5
  18. package/dist/{chunk-U432HTUW.js.map → chunk-AEUP63CZ.js.map} +1 -1
  19. package/dist/{chunk-MZITNWZ2.cjs → chunk-ALDGRDYD.cjs} +24 -24
  20. package/dist/{chunk-MZITNWZ2.cjs.map → chunk-ALDGRDYD.cjs.map} +1 -1
  21. package/dist/{chunk-YM64MS4G.cjs → chunk-BO64SLHL.cjs} +8 -8
  22. package/dist/{chunk-YM64MS4G.cjs.map → chunk-BO64SLHL.cjs.map} +1 -1
  23. package/dist/{chunk-JG4DWAUJ.cjs → chunk-DMCFARGP.cjs} +13 -13
  24. package/dist/{chunk-JG4DWAUJ.cjs.map → chunk-DMCFARGP.cjs.map} +1 -1
  25. package/dist/{chunk-TUVEJLOT.js → chunk-HJLVWZOM.js} +4 -4
  26. package/dist/{chunk-TUVEJLOT.js.map → chunk-HJLVWZOM.js.map} +1 -1
  27. package/dist/{chunk-B4BCEQNO.js → chunk-ICAYWVNF.js} +3 -3
  28. package/dist/{chunk-B4BCEQNO.js.map → chunk-ICAYWVNF.js.map} +1 -1
  29. package/dist/{chunk-4Y5TELVU.cjs → chunk-JYC2VV3Y.cjs} +12 -12
  30. package/dist/{chunk-4Y5TELVU.cjs.map → chunk-JYC2VV3Y.cjs.map} +1 -1
  31. package/dist/{chunk-D4DQFTA7.cjs → chunk-K63VPFOV.cjs} +10 -2
  32. package/dist/chunk-K63VPFOV.cjs.map +1 -0
  33. package/dist/{chunk-AS2QGND5.js → chunk-NOF6HJDV.js} +4 -4
  34. package/dist/{chunk-AS2QGND5.js.map → chunk-NOF6HJDV.js.map} +1 -1
  35. package/dist/{chunk-UDZWYHDV.js → chunk-OOYKKO3V.js} +11 -11
  36. package/dist/{chunk-UDZWYHDV.js.map → chunk-OOYKKO3V.js.map} +1 -1
  37. package/dist/{chunk-UMDWVMB5.cjs → chunk-OXUUE3HX.cjs} +5 -5
  38. package/dist/{chunk-UMDWVMB5.cjs.map → chunk-OXUUE3HX.cjs.map} +1 -1
  39. package/dist/{chunk-DPEY7DSE.cjs → chunk-P5FGJMMI.cjs} +5 -5
  40. package/dist/{chunk-DPEY7DSE.cjs.map → chunk-P5FGJMMI.cjs.map} +1 -1
  41. package/dist/{chunk-5JCTJFQU.cjs → chunk-QADR2XMQ.cjs} +18 -18
  42. package/dist/{chunk-5JCTJFQU.cjs.map → chunk-QADR2XMQ.cjs.map} +1 -1
  43. package/dist/{chunk-AWQ53DON.js → chunk-QIA5FAAW.js} +89 -2
  44. package/dist/chunk-QIA5FAAW.js.map +1 -0
  45. package/dist/{chunk-PSUKWVKU.cjs → chunk-RJGCT35F.cjs} +13 -13
  46. package/dist/{chunk-PSUKWVKU.cjs.map → chunk-RJGCT35F.cjs.map} +1 -1
  47. package/dist/{chunk-NJAF34GN.js → chunk-T33AJYLW.js} +5 -5
  48. package/dist/{chunk-NJAF34GN.js.map → chunk-T33AJYLW.js.map} +1 -1
  49. package/dist/{chunk-RXS455MR.js → chunk-UHKZXOXD.js} +10 -2
  50. package/dist/chunk-UHKZXOXD.js.map +1 -0
  51. package/dist/{chunk-DB4DLHN6.js → chunk-UIGSH2XB.js} +3 -3
  52. package/dist/{chunk-DB4DLHN6.js.map → chunk-UIGSH2XB.js.map} +1 -1
  53. package/dist/{chunk-VSFHJ7FB.cjs → chunk-UISZWFI7.cjs} +89 -2
  54. package/dist/chunk-UISZWFI7.cjs.map +1 -0
  55. package/dist/{chunk-IDYZ2FA2.js → chunk-UYRQEIB7.js} +5 -5
  56. package/dist/{chunk-IDYZ2FA2.js.map → chunk-UYRQEIB7.js.map} +1 -1
  57. package/dist/{chunk-5JFMXBH7.js → chunk-W32ND3ZR.js} +6 -6
  58. package/dist/{chunk-5JFMXBH7.js.map → chunk-W32ND3ZR.js.map} +1 -1
  59. package/dist/{chunk-RCPW6HVY.js → chunk-WBLRUJ77.js} +10 -10
  60. package/dist/{chunk-RCPW6HVY.js.map → chunk-WBLRUJ77.js.map} +1 -1
  61. package/dist/{chunk-CTW3G3EH.cjs → chunk-WGIMLXRW.cjs} +6 -6
  62. package/dist/{chunk-CTW3G3EH.cjs.map → chunk-WGIMLXRW.cjs.map} +1 -1
  63. package/dist/{chunk-N536RUCZ.cjs → chunk-ZA5QUQ2V.cjs} +13 -13
  64. package/dist/{chunk-N536RUCZ.cjs.map → chunk-ZA5QUQ2V.cjs.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 +2 -2
  71. package/dist/components/ActivitySequence.d.ts +2 -2
  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 +30 -0
  86. package/dist/components/InteractiveVideo.cjs.map +1 -0
  87. package/dist/components/InteractiveVideo.d.cts +123 -0
  88. package/dist/components/InteractiveVideo.d.ts +123 -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 +1 -1
  97. package/dist/components/PronunciationFeedback.d.ts +1 -1
  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 +48 -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-l8Wv1Xax.d.ts → strings-Dgc5-DeA.d.ts} +121 -1
  122. package/dist/{strings-wjAF2ONm.d.cts → strings-zY2QQYpU.d.cts} +121 -1
  123. package/dist/theme/ThemeProvider.cjs +6 -6
  124. package/dist/theme/ThemeProvider.js +1 -1
  125. package/dist/theme/defaults.css +9 -0
  126. package/dist/theme/skin.css +1386 -0
  127. package/package.json +13 -3
  128. package/dist/chunk-AWQ53DON.js.map +0 -1
  129. package/dist/chunk-D4DQFTA7.cjs.map +0 -1
  130. package/dist/chunk-RXS455MR.js.map +0 -1
  131. package/dist/chunk-VSFHJ7FB.cjs.map +0 -1
@@ -1935,3 +1935,1389 @@
1935
1935
  }
1936
1936
  }
1937
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. One line, or two: the first
2105
+ language, and under it the second — smaller and in its own colour, so it
2106
+ differs by position and size as well as colour (WCAG 1.4.1). The
2107
+ container is what sits over the video and rises with the controls; the
2108
+ lines stack inside it and share its width. */
2109
+ .lk-iv-captions {
2110
+ z-index: 1;
2111
+ align-self: end;
2112
+ justify-self: center;
2113
+ display: flex;
2114
+ flex-direction: column;
2115
+ align-items: center;
2116
+ gap: var(--lk-iv-caption-gap);
2117
+ max-inline-size: min(88%, 42em);
2118
+ margin-block-end: max(16px, 4cqw);
2119
+ font-size: clamp(14px, 2.4cqw, 30px);
2120
+ line-height: 1.45;
2121
+ text-align: center;
2122
+ pointer-events: none;
2123
+ transition: margin-block-end var(--lk-transition-base);
2124
+ }
2125
+
2126
+ .lk-iv-captions[data-size="small"] {
2127
+ font-size: clamp(12px, 1.9cqw, 24px);
2128
+ }
2129
+
2130
+ .lk-iv-captions[data-size="large"] {
2131
+ font-size: clamp(16px, 3.1cqw, 38px);
2132
+ }
2133
+
2134
+ .lk-iv[data-chrome="shown"] .lk-iv-captions {
2135
+ margin-block-end: 84px;
2136
+ }
2137
+
2138
+ .lk-iv-caption {
2139
+ max-inline-size: 100%;
2140
+ }
2141
+
2142
+ .lk-iv-caption[data-role="secondary"] {
2143
+ font-size: calc(var(--lk-iv-caption-secondary-scale) * 1em);
2144
+ }
2145
+
2146
+ .lk-iv-caption span {
2147
+ padding: 0.1em 0.4em;
2148
+ border-radius: 4px;
2149
+ color: var(--lk-iv-caption-color);
2150
+ text-shadow:
2151
+ 0 0 4px rgb(0 0 0 / 0.9),
2152
+ 0 1px 2px #000;
2153
+ -webkit-box-decoration-break: clone;
2154
+ box-decoration-break: clone;
2155
+ }
2156
+
2157
+ .lk-iv-caption[data-role="secondary"] span {
2158
+ color: var(--lk-iv-caption-secondary-color);
2159
+ }
2160
+
2161
+ .lk-iv-caption[data-background] span {
2162
+ background: rgb(0 0 0 / 0.75);
2163
+ text-shadow: none;
2164
+ }
2165
+
2166
+ /* ── Controls ────────────────────────────────────────────────────────── */
2167
+ .lk-iv-chrome {
2168
+ z-index: 2;
2169
+ align-self: end;
2170
+ display: flex;
2171
+ flex-direction: column;
2172
+ padding: 36px 10px 6px;
2173
+ background: linear-gradient(to top, rgb(0 0 0 / 0.74), rgb(0 0 0 / 0.36) 55%, transparent);
2174
+ transition: opacity var(--lk-transition-base);
2175
+ }
2176
+
2177
+ /* Hidden, it lets a tap through to the video, which brings it back. */
2178
+ .lk-iv[data-chrome="hidden"] .lk-iv-chrome {
2179
+ opacity: 0;
2180
+ pointer-events: none;
2181
+ }
2182
+
2183
+ .lk-iv[data-quiz-open] .lk-iv-chrome {
2184
+ visibility: hidden;
2185
+ }
2186
+
2187
+ .lk-iv-bar {
2188
+ display: flex;
2189
+ align-items: center;
2190
+ justify-content: space-between;
2191
+ gap: 4px;
2192
+ }
2193
+
2194
+ .lk-iv-bar-group {
2195
+ display: flex;
2196
+ align-items: center;
2197
+ gap: 2px;
2198
+ min-inline-size: 0;
2199
+ }
2200
+
2201
+ .lk-iv-button {
2202
+ position: relative;
2203
+ display: inline-grid;
2204
+ place-items: center;
2205
+ flex: none;
2206
+ inline-size: 40px;
2207
+ block-size: 40px;
2208
+ padding: 0;
2209
+ border: 0;
2210
+ border-radius: 999px;
2211
+ background: transparent;
2212
+ color: #fff;
2213
+ font: inherit;
2214
+ cursor: pointer;
2215
+ transition:
2216
+ background-color var(--lk-transition-fast),
2217
+ transform var(--lk-transition-fast);
2218
+ }
2219
+
2220
+ .lk-iv-button:hover {
2221
+ background: rgb(255 255 255 / 0.14);
2222
+ }
2223
+
2224
+ .lk-iv-button:active {
2225
+ transform: scale(0.94);
2226
+ }
2227
+
2228
+ /* A toggle that is on carries a short bar under its icon. */
2229
+ .lk-iv-bar .lk-iv-button[aria-pressed="true"]:not(.lk-iv-volume .lk-iv-button)::after {
2230
+ content: "";
2231
+ position: absolute;
2232
+ inset-block-end: 5px;
2233
+ inline-size: 14px;
2234
+ block-size: 2px;
2235
+ border-radius: 1px;
2236
+ background: var(--lk-color-media-accent);
2237
+ }
2238
+
2239
+ .lk-iv-speed {
2240
+ inline-size: auto;
2241
+ min-inline-size: 40px;
2242
+ padding-inline: 8px;
2243
+ font-size: 13px;
2244
+ font-weight: 600;
2245
+ font-variant-numeric: tabular-nums;
2246
+ }
2247
+
2248
+ .lk-iv-time {
2249
+ display: inline-flex;
2250
+ align-items: center;
2251
+ block-size: 40px;
2252
+ padding: 0 8px;
2253
+ border: 0;
2254
+ border-radius: 999px;
2255
+ background: none;
2256
+ color: #fff;
2257
+ font: inherit;
2258
+ font-size: 13px;
2259
+ font-variant-numeric: tabular-nums;
2260
+ white-space: nowrap;
2261
+ cursor: pointer;
2262
+ }
2263
+
2264
+ .lk-iv-time:hover {
2265
+ background: rgb(255 255 255 / 0.14);
2266
+ }
2267
+
2268
+ .lk-iv-time-total {
2269
+ color: rgb(255 255 255 / 0.7);
2270
+ }
2271
+
2272
+ .lk-iv-volume {
2273
+ display: flex;
2274
+ align-items: center;
2275
+ }
2276
+
2277
+ .lk-iv-volume-slider {
2278
+ inline-size: 0;
2279
+ margin: 0;
2280
+ opacity: 0;
2281
+ accent-color: var(--lk-color-media-accent);
2282
+ cursor: pointer;
2283
+ transition:
2284
+ inline-size var(--lk-transition-base),
2285
+ opacity var(--lk-transition-base),
2286
+ margin var(--lk-transition-base);
2287
+ }
2288
+
2289
+ .lk-iv-volume:hover .lk-iv-volume-slider,
2290
+ .lk-iv-volume:focus-within .lk-iv-volume-slider {
2291
+ inline-size: 72px;
2292
+ margin-inline: 4px 8px;
2293
+ opacity: 1;
2294
+ }
2295
+
2296
+ /* ── The progress bar ────────────────────────────────────────────────── */
2297
+ .lk-iv-scrubber {
2298
+ position: relative;
2299
+ display: flex;
2300
+ align-items: center;
2301
+ block-size: 20px;
2302
+ margin-inline: 6px;
2303
+ cursor: pointer;
2304
+ touch-action: none;
2305
+ }
2306
+
2307
+ .lk-iv-scrubber-track {
2308
+ position: relative;
2309
+ inline-size: 100%;
2310
+ block-size: 4px;
2311
+ border-radius: 2px;
2312
+ background: rgb(255 255 255 / 0.24);
2313
+ transition: block-size var(--lk-transition-fast);
2314
+ }
2315
+
2316
+ .lk-iv-scrubber:hover .lk-iv-scrubber-track,
2317
+ .lk-iv-scrubber[data-dragging] .lk-iv-scrubber-track,
2318
+ .lk-iv-scrubber:focus-visible .lk-iv-scrubber-track {
2319
+ block-size: 6px;
2320
+ }
2321
+
2322
+ .lk-iv-scrubber-buffered,
2323
+ .lk-iv-scrubber-played {
2324
+ position: absolute;
2325
+ inset-block: 0;
2326
+ inset-inline-start: 0;
2327
+ border-radius: inherit;
2328
+ }
2329
+
2330
+ .lk-iv-scrubber-buffered {
2331
+ background: rgb(255 255 255 / 0.36);
2332
+ }
2333
+
2334
+ .lk-iv-scrubber-played {
2335
+ background: var(--lk-color-media-accent);
2336
+ }
2337
+
2338
+ .lk-iv-scrubber-gap {
2339
+ position: absolute;
2340
+ inset-block: 0;
2341
+ inline-size: 3px;
2342
+ margin-inline-start: -1.5px;
2343
+ background: rgb(0 0 0 / 0.7);
2344
+ }
2345
+
2346
+ .lk-iv-scrubber-thumb {
2347
+ position: absolute;
2348
+ inset-block-start: 50%;
2349
+ inline-size: 14px;
2350
+ block-size: 14px;
2351
+ margin-block-start: -7px;
2352
+ margin-inline-start: -7px;
2353
+ border-radius: 50%;
2354
+ background: var(--lk-color-media-accent);
2355
+ box-shadow: 0 1px 4px rgb(0 0 0 / 0.5);
2356
+ transform: scale(0);
2357
+ pointer-events: none;
2358
+ transition: transform var(--lk-transition-fast);
2359
+ }
2360
+
2361
+ .lk-iv-scrubber:hover .lk-iv-scrubber-thumb,
2362
+ .lk-iv-scrubber[data-dragging] .lk-iv-scrubber-thumb,
2363
+ .lk-iv-scrubber:focus-visible .lk-iv-scrubber-thumb {
2364
+ transform: scale(1);
2365
+ }
2366
+
2367
+ /* A quiz on the bar. Each state has its own shape, never colour alone:
2368
+ a ring not yet reached, half filled when begun, filled when answered,
2369
+ a diamond when wrong, dashed while a grade is pending. */
2370
+ .lk-iv-marker {
2371
+ position: absolute;
2372
+ inset-block-start: 50%;
2373
+ inline-size: 12px;
2374
+ block-size: 12px;
2375
+ margin-block-start: -6px;
2376
+ margin-inline-start: -6px;
2377
+ border: 2px solid #fff;
2378
+ border-radius: 50%;
2379
+ background: #18181b;
2380
+ box-shadow: 0 0 0 1.5px rgb(0 0 0 / 0.55);
2381
+ pointer-events: none;
2382
+ }
2383
+
2384
+ .lk-iv-marker[data-state="open"] {
2385
+ background: linear-gradient(to right, #fff 50%, #18181b 50%);
2386
+ }
2387
+
2388
+ .lk-iv-marker[data-state="answered"] {
2389
+ background: #fff;
2390
+ }
2391
+
2392
+ .lk-iv-marker[data-state="correct"] {
2393
+ background: #22c55e;
2394
+ }
2395
+
2396
+ .lk-iv-marker[data-state="partial"] {
2397
+ background: linear-gradient(to right, #f59e0b 50%, #18181b 50%);
2398
+ }
2399
+
2400
+ .lk-iv-marker[data-state="incorrect"] {
2401
+ border-radius: 2px;
2402
+ background: #ef4444;
2403
+ transform: rotate(45deg) scale(0.9);
2404
+ }
2405
+
2406
+ .lk-iv-marker[data-state="pending"] {
2407
+ border-style: dashed;
2408
+ }
2409
+
2410
+ .lk-iv-bubble {
2411
+ position: absolute;
2412
+ inset-block-end: calc(100% + 10px);
2413
+ display: flex;
2414
+ flex-direction: column;
2415
+ gap: 2px;
2416
+ inline-size: max-content;
2417
+ max-inline-size: 240px;
2418
+ padding: 6px 10px;
2419
+ border-radius: 8px;
2420
+ background: rgb(15 15 17 / 0.92);
2421
+ box-shadow: 0 4px 16px rgb(0 0 0 / 0.35);
2422
+ color: #fff;
2423
+ font-size: 12px;
2424
+ line-height: 1.35;
2425
+ text-align: center;
2426
+ translate: -50% 0;
2427
+ pointer-events: none;
2428
+ }
2429
+
2430
+ .lk-iv-bubble:dir(rtl) {
2431
+ translate: 50% 0;
2432
+ }
2433
+
2434
+ .lk-iv-bubble-time {
2435
+ font-weight: 600;
2436
+ font-variant-numeric: tabular-nums;
2437
+ }
2438
+
2439
+ .lk-iv-bubble-chapter {
2440
+ font-weight: 400;
2441
+ color: rgb(255 255 255 / 0.75);
2442
+ }
2443
+
2444
+ .lk-iv-bubble-quiz {
2445
+ font-weight: 600;
2446
+ }
2447
+
2448
+ .lk-iv-bubble-caption {
2449
+ display: -webkit-box;
2450
+ overflow: hidden;
2451
+ color: rgb(255 255 255 / 0.88);
2452
+ -webkit-box-orient: vertical;
2453
+ -webkit-line-clamp: 3;
2454
+ }
2455
+
2456
+ /* ── Menus and the shortcut list ─────────────────────────────────────── */
2457
+ .lk-iv-menu-anchor {
2458
+ position: relative;
2459
+ }
2460
+
2461
+ .lk-iv-menu {
2462
+ position: absolute;
2463
+ z-index: 4;
2464
+ inset-block-end: calc(100% + 8px);
2465
+ inset-inline-end: 0;
2466
+ display: flex;
2467
+ flex-direction: column;
2468
+ min-inline-size: 200px;
2469
+ max-block-size: 232px;
2470
+ overflow-y: auto;
2471
+ padding: 6px;
2472
+ border-radius: 12px;
2473
+ background: rgb(24 24 27 / 0.96);
2474
+ box-shadow: 0 12px 32px rgb(0 0 0 / 0.45);
2475
+ color: #fff;
2476
+ }
2477
+
2478
+ .lk-iv-menu-item {
2479
+ display: flex;
2480
+ flex: none;
2481
+ align-items: center;
2482
+ justify-content: space-between;
2483
+ gap: 16px;
2484
+ min-block-size: 36px;
2485
+ padding: 6px 10px;
2486
+ border: 0;
2487
+ border-radius: 8px;
2488
+ background: transparent;
2489
+ color: inherit;
2490
+ font: inherit;
2491
+ font-size: 14px;
2492
+ text-align: start;
2493
+ white-space: nowrap;
2494
+ cursor: pointer;
2495
+ }
2496
+
2497
+ .lk-iv-menu-item:hover,
2498
+ .lk-iv-menu-item:focus-visible {
2499
+ background: rgb(255 255 255 / 0.1);
2500
+ }
2501
+
2502
+ .lk-iv-menu-item[aria-checked="true"] {
2503
+ font-weight: 600;
2504
+ }
2505
+
2506
+ .lk-iv-menu-item .lk-iv-icon {
2507
+ inline-size: 16px;
2508
+ block-size: 16px;
2509
+ }
2510
+
2511
+ .lk-iv-menu-back {
2512
+ justify-content: flex-start;
2513
+ gap: 6px;
2514
+ margin-block-end: 4px;
2515
+ border-block-end: 1px solid rgb(255 255 255 / 0.12);
2516
+ border-end-start-radius: 0;
2517
+ border-end-end-radius: 0;
2518
+ font-weight: 600;
2519
+ }
2520
+
2521
+ .lk-iv-menu-value {
2522
+ display: inline-flex;
2523
+ align-items: center;
2524
+ gap: 4px;
2525
+ color: rgb(255 255 255 / 0.7);
2526
+ }
2527
+
2528
+ .lk-iv-menu-note {
2529
+ margin: 4px 10px;
2530
+ font-size: 12px;
2531
+ color: #fca5a5;
2532
+ }
2533
+
2534
+ .lk-iv-kbd {
2535
+ display: inline-block;
2536
+ min-inline-size: 22px;
2537
+ padding: 1px 6px;
2538
+ border: 1px solid rgb(255 255 255 / 0.3);
2539
+ border-radius: 5px;
2540
+ background: rgb(255 255 255 / 0.08);
2541
+ color: #fff;
2542
+ font:
2543
+ 12px / 1.6 ui-monospace,
2544
+ SFMono-Regular,
2545
+ Menlo,
2546
+ Consolas,
2547
+ monospace;
2548
+ text-align: center;
2549
+ white-space: nowrap;
2550
+ }
2551
+
2552
+ /* Over the video and scrolled inside it: a reference, not a place. */
2553
+ .lk-iv-sheet {
2554
+ position: absolute;
2555
+ z-index: 5;
2556
+ inset: 12px;
2557
+ overflow-y: auto;
2558
+ padding: 16px 20px;
2559
+ border-radius: 12px;
2560
+ background: rgb(15 15 17 / 0.95);
2561
+ color: #fff;
2562
+ }
2563
+
2564
+ .lk-iv-sheet-head {
2565
+ display: flex;
2566
+ align-items: center;
2567
+ justify-content: space-between;
2568
+ margin-block-end: 8px;
2569
+ }
2570
+
2571
+ .lk-iv-sheet-title {
2572
+ margin: 0;
2573
+ font-size: var(--lk-font-size-base);
2574
+ font-weight: 600;
2575
+ }
2576
+
2577
+ .lk-iv-shortcuts {
2578
+ display: grid;
2579
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
2580
+ gap: 2px 24px;
2581
+ margin: 0;
2582
+ }
2583
+
2584
+ .lk-iv-shortcut {
2585
+ display: flex;
2586
+ align-items: center;
2587
+ gap: 12px;
2588
+ padding-block: 4px;
2589
+ }
2590
+
2591
+ .lk-iv-shortcut dt {
2592
+ flex: 0 0 104px;
2593
+ }
2594
+
2595
+ .lk-iv-shortcut dd {
2596
+ margin: 0;
2597
+ font-size: 14px;
2598
+ color: rgb(255 255 255 / 0.85);
2599
+ }
2600
+
2601
+ /* ── The quiz ────────────────────────────────────────────────────────── */
2602
+ .lk-iv-quiz {
2603
+ z-index: 3;
2604
+ display: flex;
2605
+ flex-direction: column;
2606
+ min-block-size: 0;
2607
+ margin: 12px;
2608
+ border-radius: var(--lk-radius-lg);
2609
+ background: var(--lk-color-surface);
2610
+ box-shadow: 0 24px 64px rgb(0 0 0 / 0.5);
2611
+ color: var(--lk-color-text);
2612
+ animation: lk-iv-rise var(--lk-transition-base) both;
2613
+ }
2614
+
2615
+ .lk-iv-quiz[hidden],
2616
+ .lk-iv-question[hidden] {
2617
+ display: none;
2618
+ }
2619
+
2620
+ @keyframes lk-iv-rise {
2621
+ from {
2622
+ opacity: 0;
2623
+ transform: translateY(8px) scale(0.99);
2624
+ }
2625
+ }
2626
+
2627
+ .lk-iv-quiz-head {
2628
+ display: flex;
2629
+ flex-wrap: wrap;
2630
+ align-items: center;
2631
+ justify-content: space-between;
2632
+ gap: 8px 16px;
2633
+ padding: 14px 20px;
2634
+ border-block-end: 1px solid var(--lk-color-border);
2635
+ }
2636
+
2637
+ .lk-iv-quiz-title {
2638
+ display: flex;
2639
+ flex-wrap: wrap;
2640
+ align-items: center;
2641
+ gap: 4px 8px;
2642
+ margin: 0;
2643
+ font-size: var(--lk-font-size-base);
2644
+ font-weight: var(--lk-font-weight-bold);
2645
+ }
2646
+
2647
+ .lk-iv-quiz-title:focus {
2648
+ outline: none;
2649
+ }
2650
+
2651
+ .lk-iv-quiz-time {
2652
+ margin-inline-start: -4px;
2653
+ font-weight: var(--lk-font-weight-normal);
2654
+ color: var(--lk-color-text-muted);
2655
+ font-variant-numeric: tabular-nums;
2656
+ }
2657
+
2658
+ .lk-iv-tag {
2659
+ display: inline-flex;
2660
+ padding: 0 8px;
2661
+ border: 1px solid var(--lk-color-border);
2662
+ border-radius: 999px;
2663
+ color: var(--lk-color-text-muted);
2664
+ font-size: 12px;
2665
+ font-weight: 600;
2666
+ line-height: 1.6;
2667
+ }
2668
+
2669
+ .lk-iv-steps {
2670
+ display: flex;
2671
+ align-items: center;
2672
+ gap: 12px;
2673
+ }
2674
+
2675
+ .lk-iv-steps-label {
2676
+ color: var(--lk-color-text-muted);
2677
+ font-size: var(--lk-font-size-sm);
2678
+ font-variant-numeric: tabular-nums;
2679
+ }
2680
+
2681
+ .lk-iv-steps-dots {
2682
+ display: flex;
2683
+ align-items: center;
2684
+ gap: 6px;
2685
+ margin: 0;
2686
+ padding: 0;
2687
+ list-style: none;
2688
+ }
2689
+
2690
+ .lk-iv-steps-dots li {
2691
+ display: flex;
2692
+ }
2693
+
2694
+ .lk-iv-step {
2695
+ position: relative;
2696
+ inline-size: 8px;
2697
+ block-size: 8px;
2698
+ padding: 0;
2699
+ border: 0;
2700
+ border-radius: 999px;
2701
+ background: var(--lk-color-border);
2702
+ cursor: pointer;
2703
+ transition:
2704
+ inline-size var(--lk-transition-fast),
2705
+ background-color var(--lk-transition-fast);
2706
+ }
2707
+
2708
+ /* A 24 px target around an 8 px dot. */
2709
+ .lk-iv-step::after {
2710
+ content: "";
2711
+ position: absolute;
2712
+ inset: -8px;
2713
+ }
2714
+
2715
+ .lk-iv-step[data-answered] {
2716
+ background: var(--lk-color-text-muted);
2717
+ }
2718
+
2719
+ .lk-iv-step[data-current] {
2720
+ inline-size: 22px;
2721
+ background: var(--lk-color-primary);
2722
+ }
2723
+
2724
+ .lk-iv-quiz-body {
2725
+ display: flex;
2726
+ flex: 1 1 auto;
2727
+ flex-direction: column;
2728
+ padding: 20px;
2729
+ }
2730
+
2731
+ /* Centred in the panel while it fits, top-aligned once it does not. */
2732
+ .lk-iv-question {
2733
+ inline-size: 100%;
2734
+ max-inline-size: 760px;
2735
+ margin: auto;
2736
+ }
2737
+
2738
+ /* One box, not a box in a box: the panel is the question's card. */
2739
+ .lk-iv-question :is(.lk-mc, .lk-fib, .lk-dc, .lk-ra) {
2740
+ padding: 0;
2741
+ border: 0;
2742
+ border-radius: 0;
2743
+ background: none;
2744
+ }
2745
+
2746
+ .lk-iv-quiz-foot {
2747
+ display: flex;
2748
+ flex-wrap: wrap;
2749
+ align-items: center;
2750
+ justify-content: space-between;
2751
+ gap: 8px 16px;
2752
+ padding: 12px 20px;
2753
+ border-block-start: 1px solid var(--lk-color-border);
2754
+ }
2755
+
2756
+ .lk-iv-quiz-foot-start,
2757
+ .lk-iv-quiz-foot-end {
2758
+ display: flex;
2759
+ align-items: center;
2760
+ gap: 8px;
2761
+ }
2762
+
2763
+ .lk-iv-quiz-foot-end {
2764
+ margin-inline-start: auto;
2765
+ }
2766
+
2767
+ .lk-iv-link {
2768
+ display: inline-flex;
2769
+ align-items: center;
2770
+ gap: 6px;
2771
+ padding: 8px 10px;
2772
+ border: 0;
2773
+ border-radius: var(--lk-radius-base);
2774
+ background: none;
2775
+ color: var(--lk-color-text-muted);
2776
+ font: inherit;
2777
+ font-size: var(--lk-font-size-sm);
2778
+ font-weight: 600;
2779
+ cursor: pointer;
2780
+ }
2781
+
2782
+ .lk-iv-link:hover {
2783
+ background: var(--lk-color-surface-raised);
2784
+ color: var(--lk-color-text);
2785
+ }
2786
+
2787
+ .lk-iv-link .lk-iv-icon,
2788
+ .lk-iv-action .lk-iv-icon {
2789
+ inline-size: 16px;
2790
+ block-size: 16px;
2791
+ }
2792
+
2793
+ .lk-iv-action {
2794
+ display: inline-flex;
2795
+ align-items: center;
2796
+ justify-content: center;
2797
+ gap: 8px;
2798
+ min-block-size: 40px;
2799
+ padding: 8px 18px;
2800
+ border: 1px solid var(--lk-color-border);
2801
+ border-radius: var(--lk-radius-base);
2802
+ background: var(--lk-color-surface);
2803
+ color: var(--lk-color-text);
2804
+ font: inherit;
2805
+ font-weight: var(--lk-font-weight-bold);
2806
+ cursor: pointer;
2807
+ transition: var(--lk-transition-fast);
2808
+ }
2809
+
2810
+ .lk-iv-action:hover {
2811
+ border-color: var(--lk-color-primary);
2812
+ }
2813
+
2814
+ .lk-iv-action-primary {
2815
+ border-color: var(--lk-color-primary);
2816
+ background: var(--lk-color-primary);
2817
+ color: var(--lk-color-surface);
2818
+ }
2819
+
2820
+ .lk-iv-action-primary:hover {
2821
+ background: var(--lk-color-primary-hover);
2822
+ }
2823
+
2824
+ .lk-iv-action[aria-disabled="true"] {
2825
+ opacity: 0.45;
2826
+ cursor: not-allowed;
2827
+ }
2828
+
2829
+ .lk-iv-error .lk-iv-action {
2830
+ border-color: #fff;
2831
+ background: #fff;
2832
+ color: #000;
2833
+ }
2834
+
2835
+ .lk-iv-saved {
2836
+ color: var(--lk-color-success);
2837
+ font-size: var(--lk-font-size-sm);
2838
+ font-weight: 600;
2839
+ }
2840
+
2841
+ /* ── The end ─────────────────────────────────────────────────────────
2842
+ Clear of the controls, so the learner can still scrub back. */
2843
+ .lk-iv-end {
2844
+ z-index: 3;
2845
+ display: grid;
2846
+ place-items: center;
2847
+ margin: 12px 12px 76px;
2848
+ animation: lk-iv-rise var(--lk-transition-base) both;
2849
+ }
2850
+
2851
+ .lk-iv-end-card {
2852
+ display: flex;
2853
+ flex-direction: column;
2854
+ gap: var(--lk-spacing-md);
2855
+ inline-size: min(100%, 520px);
2856
+ padding: var(--lk-spacing-lg);
2857
+ border-radius: var(--lk-radius-lg);
2858
+ background: var(--lk-color-surface);
2859
+ box-shadow: 0 24px 64px rgb(0 0 0 / 0.5);
2860
+ color: var(--lk-color-text);
2861
+ }
2862
+
2863
+ .lk-iv-end-title {
2864
+ margin: 0;
2865
+ font-size: var(--lk-font-size-lg);
2866
+ font-weight: var(--lk-font-weight-bold);
2867
+ }
2868
+
2869
+ .lk-iv-end-title:focus {
2870
+ outline: none;
2871
+ }
2872
+
2873
+ .lk-iv-end-summary {
2874
+ margin: 0;
2875
+ color: var(--lk-color-text-muted);
2876
+ }
2877
+
2878
+ .lk-iv-end-list,
2879
+ .lk-iv-contents {
2880
+ margin: 0;
2881
+ padding: 0;
2882
+ list-style: none;
2883
+ }
2884
+
2885
+ .lk-iv-end-list {
2886
+ max-block-size: 240px;
2887
+ overflow-y: auto;
2888
+ border: 1px solid var(--lk-color-border);
2889
+ border-radius: var(--lk-radius-base);
2890
+ }
2891
+
2892
+ .lk-iv-end-list li + li,
2893
+ .lk-iv-contents li + li {
2894
+ border-block-start: 1px solid var(--lk-color-border);
2895
+ }
2896
+
2897
+ .lk-iv-end-actions {
2898
+ display: flex;
2899
+ flex-wrap: wrap;
2900
+ justify-content: flex-end;
2901
+ gap: var(--lk-spacing-sm);
2902
+ }
2903
+
2904
+ /* ── Rows: the contents list and the end card ───────────────────────── */
2905
+ .lk-iv-row {
2906
+ display: flex;
2907
+ align-items: center;
2908
+ gap: 12px;
2909
+ inline-size: 100%;
2910
+ padding: 10px 12px;
2911
+ border: 0;
2912
+ background: none;
2913
+ color: inherit;
2914
+ font: inherit;
2915
+ text-align: start;
2916
+ cursor: pointer;
2917
+ }
2918
+
2919
+ .lk-iv-row:hover {
2920
+ background: var(--lk-color-surface-raised);
2921
+ }
2922
+
2923
+ .lk-iv-row-time {
2924
+ flex: none;
2925
+ min-inline-size: 3.25em;
2926
+ color: var(--lk-color-text-muted);
2927
+ font-size: var(--lk-font-size-sm);
2928
+ font-variant-numeric: tabular-nums;
2929
+ }
2930
+
2931
+ .lk-iv-row-title {
2932
+ display: flex;
2933
+ flex: 1 1 auto;
2934
+ flex-wrap: wrap;
2935
+ align-items: center;
2936
+ gap: 4px 8px;
2937
+ min-inline-size: 0;
2938
+ }
2939
+
2940
+ .lk-iv-row-status {
2941
+ flex: none;
2942
+ color: var(--lk-color-text-muted);
2943
+ font-size: var(--lk-font-size-sm);
2944
+ }
2945
+
2946
+ .lk-iv-contents-chapter .lk-iv-row-title {
2947
+ font-weight: 600;
2948
+ }
2949
+
2950
+ /* The quiz's state in a list: the marker's shapes, in the theme's colours. */
2951
+ .lk-iv-marker-dot {
2952
+ flex: none;
2953
+ inline-size: 10px;
2954
+ block-size: 10px;
2955
+ border: 2px solid var(--lk-color-text-muted);
2956
+ border-radius: 50%;
2957
+ }
2958
+
2959
+ .lk-iv-marker-dot[data-state="open"] {
2960
+ background: linear-gradient(to right, var(--lk-color-text-muted) 50%, transparent 50%);
2961
+ }
2962
+
2963
+ .lk-iv-marker-dot[data-state="answered"] {
2964
+ border-color: var(--lk-color-text);
2965
+ background: var(--lk-color-text);
2966
+ }
2967
+
2968
+ .lk-iv-marker-dot[data-state="correct"] {
2969
+ border-color: var(--lk-color-success);
2970
+ background: var(--lk-color-success);
2971
+ }
2972
+
2973
+ .lk-iv-marker-dot[data-state="partial"] {
2974
+ border-color: var(--lk-color-warning);
2975
+ background: linear-gradient(to right, var(--lk-color-warning) 50%, transparent 50%);
2976
+ }
2977
+
2978
+ .lk-iv-marker-dot[data-state="incorrect"] {
2979
+ border-color: var(--lk-color-error);
2980
+ border-radius: 2px;
2981
+ background: var(--lk-color-error);
2982
+ transform: rotate(45deg) scale(0.85);
2983
+ }
2984
+
2985
+ .lk-iv-marker-dot[data-state="pending"] {
2986
+ border-style: dashed;
2987
+ }
2988
+
2989
+ /* ── The panel below the video ─────────────────────────────────────── */
2990
+ .lk-iv-panel {
2991
+ display: flex;
2992
+ flex-direction: column;
2993
+ overflow: hidden;
2994
+ border: 1px solid var(--lk-color-border);
2995
+ border-radius: var(--lk-radius-lg);
2996
+ background: var(--lk-color-surface);
2997
+ }
2998
+
2999
+ .lk-iv-tabs {
3000
+ display: flex;
3001
+ gap: 4px;
3002
+ padding: 4px 8px 0;
3003
+ border-block-end: 1px solid var(--lk-color-border);
3004
+ }
3005
+
3006
+ .lk-iv-tab {
3007
+ margin-block-end: -1px;
3008
+ padding: 8px 12px;
3009
+ border: 0;
3010
+ border-block-end: 2px solid transparent;
3011
+ background: none;
3012
+ color: var(--lk-color-text-muted);
3013
+ font: inherit;
3014
+ font-size: var(--lk-font-size-sm);
3015
+ font-weight: 600;
3016
+ cursor: pointer;
3017
+ }
3018
+
3019
+ .lk-iv-tab[aria-selected="true"] {
3020
+ border-block-end-color: var(--lk-color-primary);
3021
+ color: var(--lk-color-text);
3022
+ }
3023
+
3024
+ .lk-iv-contents {
3025
+ max-block-size: 320px;
3026
+ overflow-y: auto;
3027
+ }
3028
+
3029
+ .lk-iv-transcript {
3030
+ display: flex;
3031
+ flex-direction: column;
3032
+ min-block-size: 0;
3033
+ }
3034
+
3035
+ .lk-iv-search {
3036
+ margin: 8px;
3037
+ padding: 8px 12px;
3038
+ border: 1px solid var(--lk-color-border);
3039
+ border-radius: var(--lk-radius-base);
3040
+ background: var(--lk-color-surface);
3041
+ color: var(--lk-color-text);
3042
+ font: inherit;
3043
+ font-size: var(--lk-font-size-sm);
3044
+ }
3045
+
3046
+ .lk-iv-lines {
3047
+ position: relative;
3048
+ max-block-size: 300px;
3049
+ overflow-y: auto;
3050
+ padding: 0 4px 4px;
3051
+ }
3052
+
3053
+ .lk-iv-line {
3054
+ display: flex;
3055
+ gap: 12px;
3056
+ inline-size: 100%;
3057
+ padding: 6px 8px;
3058
+ border: 0;
3059
+ border-inline-start: 3px solid transparent;
3060
+ border-radius: var(--lk-radius-sm);
3061
+ background: none;
3062
+ color: var(--lk-color-text-muted);
3063
+ font: inherit;
3064
+ text-align: start;
3065
+ cursor: pointer;
3066
+ }
3067
+
3068
+ .lk-iv-line:hover {
3069
+ background: var(--lk-color-surface-raised);
3070
+ color: var(--lk-color-text);
3071
+ }
3072
+
3073
+ .lk-iv-line[data-active] {
3074
+ border-inline-start-color: var(--lk-color-primary);
3075
+ background: var(--lk-color-surface-raised);
3076
+ color: var(--lk-color-text);
3077
+ }
3078
+
3079
+ .lk-iv-line mark {
3080
+ border-radius: 2px;
3081
+ background: color-mix(in srgb, var(--lk-color-warning) 28%, transparent);
3082
+ color: inherit;
3083
+ }
3084
+
3085
+ /* With a second language chosen, its words sit under the first language's
3086
+ in each row: smaller, set in from the start, and in the theme's muted
3087
+ text colour. Not the caption colour — that one is chosen for the dark
3088
+ caption box over the video, and on this panel it would fail contrast. */
3089
+ .lk-iv-line-text {
3090
+ display: flex;
3091
+ flex-direction: column;
3092
+ gap: 2px;
3093
+ min-inline-size: 0;
3094
+ }
3095
+
3096
+ .lk-iv-line-secondary {
3097
+ padding-inline-start: 8px;
3098
+ border-inline-start: 2px solid var(--lk-color-border);
3099
+ color: var(--lk-color-text-muted);
3100
+ font-size: calc(var(--lk-iv-caption-secondary-scale) * 1em);
3101
+ }
3102
+
3103
+ .lk-iv-empty {
3104
+ margin: 0;
3105
+ padding: var(--lk-spacing-md);
3106
+ color: var(--lk-color-text-muted);
3107
+ font-size: var(--lk-font-size-sm);
3108
+ }
3109
+
3110
+ .lk-iv-live {
3111
+ position: absolute;
3112
+ inline-size: 1px;
3113
+ block-size: 1px;
3114
+ margin: -1px;
3115
+ padding: 0;
3116
+ overflow: hidden;
3117
+ clip-path: inset(50%);
3118
+ border: 0;
3119
+ white-space: nowrap;
3120
+ }
3121
+
3122
+ /* ── Focus ──────────────────────────────────────────────────────────── */
3123
+ .lk-iv :focus-visible {
3124
+ outline: 2px solid var(--lk-color-focus-ring);
3125
+ outline-offset: 2px;
3126
+ }
3127
+
3128
+ /* On the dark chrome the ring takes the chrome's accent. */
3129
+ .lk-iv-chrome :focus-visible,
3130
+ .lk-iv-big-play:focus-visible,
3131
+ .lk-iv-sheet :focus-visible,
3132
+ .lk-iv-error :focus-visible {
3133
+ outline-color: var(--lk-color-media-accent);
3134
+ }
3135
+
3136
+ .lk-iv-menu-item:focus-visible,
3137
+ .lk-iv-row:focus-visible,
3138
+ .lk-iv-line:focus-visible {
3139
+ outline-offset: -2px;
3140
+ }
3141
+
3142
+ .lk-iv-scrubber:focus-visible {
3143
+ border-radius: 4px;
3144
+ outline-offset: 2px;
3145
+ }
3146
+
3147
+ /* ── Fullscreen: the video fills the screen; the panel, if open and there
3148
+ is room, becomes a column beside it. A quiz scrolls inside the screen. */
3149
+ .lk-iv[data-fullscreen] {
3150
+ flex-direction: row;
3151
+ gap: 0;
3152
+ background: #000;
3153
+ }
3154
+
3155
+ .lk-iv[data-fullscreen] .lk-iv-stage {
3156
+ flex: 1 1 auto;
3157
+ grid-template-rows: minmax(0, 1fr);
3158
+ block-size: 100%;
3159
+ border-radius: 0;
3160
+ }
3161
+
3162
+ .lk-iv[data-fullscreen] .lk-iv-video {
3163
+ block-size: 100%;
3164
+ aspect-ratio: auto;
3165
+ }
3166
+
3167
+ .lk-iv[data-fullscreen] .lk-iv-quiz,
3168
+ .lk-iv[data-fullscreen] .lk-iv-end {
3169
+ overflow-y: auto;
3170
+ }
3171
+
3172
+ .lk-iv[data-fullscreen] .lk-iv-panel {
3173
+ flex: 0 0 360px;
3174
+ border: 0;
3175
+ border-inline-start: 1px solid var(--lk-color-border);
3176
+ border-radius: 0;
3177
+ }
3178
+
3179
+ .lk-iv[data-fullscreen] .lk-iv-contents,
3180
+ .lk-iv[data-fullscreen] .lk-iv-lines {
3181
+ flex: 1 1 auto;
3182
+ max-block-size: none;
3183
+ }
3184
+
3185
+ @media (max-width: 899px) {
3186
+ .lk-iv[data-fullscreen] .lk-iv-panel {
3187
+ display: none;
3188
+ }
3189
+ }
3190
+
3191
+ /* ── Small players ──────────────────────────────────────────────────── */
3192
+ @container (max-width: 479px) {
3193
+ .lk-iv-wide,
3194
+ .lk-iv-time-total {
3195
+ display: none;
3196
+ }
3197
+
3198
+ .lk-iv-big-play {
3199
+ inline-size: 56px;
3200
+ block-size: 56px;
3201
+ }
3202
+
3203
+ .lk-iv-menu {
3204
+ max-block-size: 156px;
3205
+ }
3206
+
3207
+ .lk-iv-quiz {
3208
+ margin: 8px;
3209
+ }
3210
+
3211
+ .lk-iv-quiz-head,
3212
+ .lk-iv-quiz-foot {
3213
+ padding-inline: 14px;
3214
+ }
3215
+
3216
+ .lk-iv-quiz-body {
3217
+ padding: 14px;
3218
+ }
3219
+
3220
+ .lk-iv-end {
3221
+ margin: 8px 8px 72px;
3222
+ }
3223
+
3224
+ .lk-iv-end-card {
3225
+ padding: var(--lk-spacing-md);
3226
+ }
3227
+ }
3228
+
3229
+ /* A finger needs a bigger target, and a phone has volume keys. */
3230
+ @media (pointer: coarse) {
3231
+ .lk-iv-button {
3232
+ inline-size: 44px;
3233
+ block-size: 44px;
3234
+ }
3235
+
3236
+ .lk-iv-volume-slider {
3237
+ display: none;
3238
+ }
3239
+ }
3240
+
3241
+ /* ── Reduced motion (WCAG 2.3.3) ─────────────────────────────────────── */
3242
+ @media (prefers-reduced-motion: reduce) {
3243
+ .lk-iv *,
3244
+ .lk-iv *::before,
3245
+ .lk-iv *::after {
3246
+ transition: none;
3247
+ animation: none;
3248
+ }
3249
+ }
3250
+
3251
+ /* ── Forced colours (Windows High Contrast) ─────────────────────────────
3252
+ The system palette replaces the chrome's literals; what must survive is
3253
+ that the bar shows progress and that each quiz marker keeps its shape. */
3254
+ @media (forced-colors: active) {
3255
+ .lk-iv-chrome,
3256
+ .lk-iv-menu,
3257
+ .lk-iv-sheet,
3258
+ .lk-iv-bubble,
3259
+ .lk-iv-label,
3260
+ .lk-iv-caption span {
3261
+ forced-color-adjust: none;
3262
+ background: Canvas;
3263
+ color: CanvasText;
3264
+ }
3265
+
3266
+ .lk-iv-chrome .lk-iv-button,
3267
+ .lk-iv-chrome .lk-iv-time,
3268
+ .lk-iv-menu-item {
3269
+ color: ButtonText;
3270
+ }
3271
+
3272
+ .lk-iv-scrubber-track {
3273
+ background: Canvas;
3274
+ outline: 1px solid CanvasText;
3275
+ }
3276
+
3277
+ .lk-iv-scrubber-buffered {
3278
+ background: GrayText;
3279
+ }
3280
+
3281
+ .lk-iv-scrubber-played,
3282
+ .lk-iv-scrubber-thumb {
3283
+ background: Highlight;
3284
+ }
3285
+
3286
+ .lk-iv-marker,
3287
+ .lk-iv-marker-dot,
3288
+ .lk-iv-step {
3289
+ forced-color-adjust: none;
3290
+ border-color: CanvasText;
3291
+ background: Canvas;
3292
+ }
3293
+
3294
+ .lk-iv-marker:is([data-state="answered"], [data-state="correct"], [data-state="incorrect"]),
3295
+ .lk-iv-marker-dot:is([data-state="answered"], [data-state="correct"], [data-state="incorrect"]),
3296
+ .lk-iv-step[data-answered] {
3297
+ background: CanvasText;
3298
+ }
3299
+
3300
+ .lk-iv-marker:is([data-state="open"], [data-state="partial"]),
3301
+ .lk-iv-marker-dot:is([data-state="open"], [data-state="partial"]) {
3302
+ background: linear-gradient(to right, CanvasText 50%, Canvas 50%);
3303
+ }
3304
+
3305
+ .lk-iv-step {
3306
+ outline: 1px solid CanvasText;
3307
+ }
3308
+
3309
+ .lk-iv-step[data-current] {
3310
+ background: Highlight;
3311
+ }
3312
+
3313
+ .lk-iv-quiz,
3314
+ .lk-iv-end-card,
3315
+ .lk-iv-panel {
3316
+ border: 1px solid CanvasText;
3317
+ }
3318
+
3319
+ .lk-iv-line[data-active] {
3320
+ border-inline-start-color: Highlight;
3321
+ }
3322
+ }
3323
+ }