@classytic/labs 0.2.0 → 0.4.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 (3475) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +243 -14
  3. package/dist/_virtual/_rolldown/runtime.mjs +19 -1
  4. package/dist/algorithms/GraphAlgorithmLab.d.mts +13 -0
  5. package/dist/algorithms/GraphAlgorithmLab.mjs +183 -0
  6. package/dist/algorithms/GraphView.d.mts +14 -0
  7. package/dist/algorithms/GraphView.mjs +86 -0
  8. package/dist/algorithms/GridPathLab.d.mts +10 -0
  9. package/dist/algorithms/GridPathLab.mjs +164 -0
  10. package/dist/algorithms/GrowthLab.d.mts +12 -0
  11. package/dist/algorithms/GrowthLab.mjs +191 -0
  12. package/dist/algorithms/HashLab.d.mts +13 -0
  13. package/dist/algorithms/HashLab.mjs +200 -0
  14. package/dist/algorithms/HeapDualView.d.mts +11 -0
  15. package/dist/algorithms/HeapDualView.mjs +115 -0
  16. package/dist/algorithms/HeapQuestLab.d.mts +14 -0
  17. package/dist/algorithms/HeapQuestLab.mjs +152 -0
  18. package/dist/algorithms/LearningChecks.mjs +36 -0
  19. package/dist/algorithms/ListLab.d.mts +14 -0
  20. package/dist/algorithms/ListLab.mjs +208 -0
  21. package/dist/algorithms/SearchLab.d.mts +11 -0
  22. package/dist/algorithms/SearchLab.mjs +201 -0
  23. package/dist/algorithms/SortingLab.d.mts +14 -0
  24. package/dist/algorithms/SortingLab.mjs +190 -0
  25. package/dist/algorithms/TraceTransport.d.mts +12 -0
  26. package/dist/algorithms/TraceTransport.mjs +191 -0
  27. package/dist/algorithms/TreeQuestLab.d.mts +17 -0
  28. package/dist/algorithms/TreeQuestLab.mjs +289 -0
  29. package/dist/algorithms/TreeScene.d.mts +11 -0
  30. package/dist/algorithms/TreeScene.mjs +203 -0
  31. package/dist/algorithms/contract.d.mts +75 -0
  32. package/dist/algorithms/core/index.d.mts +17 -0
  33. package/dist/algorithms/core/index.mjs +16 -0
  34. package/dist/algorithms/cost-derivation/core.d.mts +66 -0
  35. package/dist/algorithms/cost-derivation/core.mjs +93 -0
  36. package/dist/algorithms/cost-derivation/index.d.mts +3 -0
  37. package/dist/algorithms/cost-derivation/preset.d.mts +13 -0
  38. package/dist/algorithms/cost-derivation/preset.mjs +371 -0
  39. package/dist/algorithms/dp/index.d.mts +3 -0
  40. package/dist/algorithms/dp/index.mjs +3 -0
  41. package/dist/algorithms/dp.d.mts +6 -0
  42. package/dist/algorithms/dp.mjs +32 -0
  43. package/dist/algorithms/graph/index.d.mts +5 -0
  44. package/dist/algorithms/graph/index.mjs +5 -0
  45. package/dist/algorithms/graph.d.mts +8 -0
  46. package/dist/algorithms/graph.mjs +148 -0
  47. package/dist/algorithms/growth.d.mts +56 -0
  48. package/dist/algorithms/growth.mjs +99 -0
  49. package/dist/algorithms/hashing.d.mts +63 -0
  50. package/dist/algorithms/hashing.mjs +121 -0
  51. package/dist/algorithms/heap/index.d.mts +3 -0
  52. package/dist/algorithms/heap/index.mjs +4 -0
  53. package/dist/algorithms/heap.d.mts +37 -0
  54. package/dist/algorithms/heap.mjs +190 -0
  55. package/dist/algorithms/index.d.mts +34 -0
  56. package/dist/algorithms/index.mjs +32 -0
  57. package/dist/algorithms/lists.d.mts +53 -0
  58. package/dist/algorithms/lists.mjs +254 -0
  59. package/dist/algorithms/normalize.d.mts +5 -0
  60. package/dist/algorithms/normalize.mjs +27 -0
  61. package/dist/algorithms/presets.d.mts +5 -0
  62. package/dist/algorithms/presets.mjs +94 -0
  63. package/dist/algorithms/react/index.d.mts +9 -0
  64. package/dist/algorithms/react/index.mjs +12 -0
  65. package/dist/algorithms/search.d.mts +44 -0
  66. package/dist/algorithms/search.mjs +65 -0
  67. package/dist/algorithms/sequence-contract.d.mts +39 -0
  68. package/dist/algorithms/sequence-contract.mjs +5 -0
  69. package/dist/algorithms/sorting.d.mts +29 -0
  70. package/dist/algorithms/sorting.mjs +219 -0
  71. package/dist/algorithms/tree/index.d.mts +6 -0
  72. package/dist/algorithms/tree/index.mjs +6 -0
  73. package/dist/algorithms/tree-builder.d.mts +7 -0
  74. package/dist/algorithms/tree-builder.mjs +54 -0
  75. package/dist/algorithms/tree-contract.d.mts +95 -0
  76. package/dist/algorithms/tree-layout.d.mts +8 -0
  77. package/dist/algorithms/tree-layout.mjs +47 -0
  78. package/dist/algorithms/tree-presets.d.mts +6 -0
  79. package/dist/algorithms/tree-presets.mjs +92 -0
  80. package/dist/algorithms/tree.d.mts +9 -0
  81. package/dist/algorithms/tree.mjs +375 -0
  82. package/dist/authoring/evidence.mjs +68 -0
  83. package/dist/authoring/index.d.mts +10 -0
  84. package/dist/authoring/index.mjs +20 -0
  85. package/dist/authoring/quality.d.mts +19 -0
  86. package/dist/authoring/quality.mjs +81 -0
  87. package/dist/authoring/report.d.mts +32 -0
  88. package/dist/authoring/report.mjs +38 -0
  89. package/dist/biology/cell-division/activity.d.mts +1 -0
  90. package/dist/biology/cell-division/activity.mjs +82 -0
  91. package/dist/biology/cell-division/core.d.mts +24 -0
  92. package/dist/biology/cell-division/core.mjs +88 -0
  93. package/dist/biology/cell-division/index.d.mts +8 -0
  94. package/dist/biology/cell-division/meiosis-activity.d.mts +1 -0
  95. package/dist/biology/cell-division/meiosis-activity.mjs +81 -0
  96. package/dist/biology/cell-division/meiosis-core.d.mts +19 -0
  97. package/dist/biology/cell-division/meiosis-core.mjs +89 -0
  98. package/dist/biology/cell-division/meiosis-preset.d.mts +25 -0
  99. package/dist/biology/cell-division/meiosis-preset.mjs +117 -0
  100. package/dist/biology/cell-division/meiosis-scene.d.mts +7 -0
  101. package/dist/biology/cell-division/meiosis-scene.mjs +149 -0
  102. package/dist/biology/cell-division/preset.d.mts +27 -0
  103. package/dist/biology/cell-division/preset.mjs +228 -0
  104. package/dist/biology/cell-energy/activity.d.mts +1 -0
  105. package/dist/biology/cell-energy/activity.mjs +74 -0
  106. package/dist/biology/cell-energy/core.d.mts +20 -0
  107. package/dist/biology/cell-energy/core.mjs +17 -0
  108. package/dist/biology/cell-energy/index.d.mts +4 -0
  109. package/dist/biology/cell-energy/preset.d.mts +27 -0
  110. package/dist/biology/cell-energy/preset.mjs +110 -0
  111. package/dist/biology/cell-sample-investigator/core.d.mts +18 -0
  112. package/dist/biology/cell-sample-investigator/core.mjs +56 -0
  113. package/dist/biology/cell-sample-investigator.d.mts +17 -0
  114. package/dist/biology/cell-sample-investigator.mjs +446 -0
  115. package/dist/biology/cell-system/activity.d.mts +1 -0
  116. package/dist/biology/cell-system/activity.mjs +74 -0
  117. package/dist/biology/cell-system/core.d.mts +18 -0
  118. package/dist/biology/cell-system/core.mjs +63 -0
  119. package/dist/biology/cell-system/index.d.mts +4 -0
  120. package/dist/biology/cell-system/preset.d.mts +22 -0
  121. package/dist/biology/cell-system/preset.mjs +82 -0
  122. package/dist/biology/enzyme-rate/index.d.mts +2 -1
  123. package/dist/biology/enzyme-rate/preset.d.mts +1 -11
  124. package/dist/biology/enzyme-rate/preset.mjs +115 -46
  125. package/dist/biology/genetic-cross/core.mjs +1 -1
  126. package/dist/biology/genetic-cross/grid.mjs +119 -106
  127. package/dist/biology/genetic-cross/index.d.mts +2 -1
  128. package/dist/biology/genetic-cross/preset.d.mts +2 -11
  129. package/dist/biology/genetic-cross/preset.mjs +17 -60
  130. package/dist/biology/genetic-cross/sex-linked.d.mts +1 -12
  131. package/dist/biology/genetic-cross/sex-linked.mjs +33 -74
  132. package/dist/biology/index.d.mts +24 -1
  133. package/dist/biology/index.mjs +14 -1
  134. package/dist/biology/membrane-transport/activity.d.mts +1 -0
  135. package/dist/biology/membrane-transport/activity.mjs +74 -0
  136. package/dist/biology/membrane-transport/core.d.mts +22 -0
  137. package/dist/biology/membrane-transport/core.mjs +49 -0
  138. package/dist/biology/membrane-transport/index.d.mts +4 -0
  139. package/dist/biology/membrane-transport/preset.d.mts +27 -0
  140. package/dist/biology/membrane-transport/preset.mjs +131 -0
  141. package/dist/biology/photosynthesis-factors/index.d.mts +2 -1
  142. package/dist/biology/photosynthesis-factors/preset.d.mts +1 -11
  143. package/dist/biology/photosynthesis-factors/preset.mjs +129 -75
  144. package/dist/biology/punnett-cross/index.d.mts +2 -1
  145. package/dist/biology/punnett-cross/preset.d.mts +1 -12
  146. package/dist/biology/punnett-cross/preset.mjs +2 -1
  147. package/dist/biology/respiration/index.d.mts +2 -1
  148. package/dist/biology/respiration/preset.d.mts +1 -7
  149. package/dist/biology/respiration/preset.mjs +75 -64
  150. package/dist/biology/sequence/central-dogma.d.mts +1 -7
  151. package/dist/biology/sequence/central-dogma.mjs +195 -188
  152. package/dist/biology/sequence/index.d.mts +2 -1
  153. package/dist/biology/sequence/preset.d.mts +1 -8
  154. package/dist/biology/sequence/preset.mjs +172 -128
  155. package/dist/blocks/authoring.d.mts +0 -1
  156. package/dist/blocks/authoring.mjs +329 -171
  157. package/dist/blocks/catalog.d.mts +16 -0
  158. package/dist/blocks/catalog.mjs +9 -0
  159. package/dist/blocks/domains.d.mts +10 -0
  160. package/dist/blocks/domains.mjs +14 -0
  161. package/dist/blocks/gallery.d.mts +3 -0
  162. package/dist/blocks/gallery.mjs +6 -0
  163. package/dist/blocks/index.d.mts +7 -6951
  164. package/dist/blocks/index.mjs +9 -107
  165. package/dist/blocks/lab-block.mjs +15 -43
  166. package/dist/blocks/lab-config.d.mts +1 -8
  167. package/dist/blocks/lab-config.mjs +109 -32
  168. package/dist/blocks/lazy-resolve.d.mts +16 -0
  169. package/dist/blocks/lazy-resolve.mjs +24 -0
  170. package/dist/blocks/lazy.d.mts +8 -0
  171. package/dist/blocks/lazy.mjs +12 -0
  172. package/dist/blocks/lesson.d.mts +1 -7
  173. package/dist/blocks/lesson.mjs +12 -11
  174. package/dist/blocks/resolve.d.mts +2 -0
  175. package/dist/blocks/resolve.mjs +5 -0
  176. package/dist/build/CircuitEditor.d.mts +1 -5
  177. package/dist/build/CircuitEditor.mjs +380 -368
  178. package/dist/build/CircuitPlayer.d.mts +1 -7
  179. package/dist/build/CircuitScene.d.mts +8 -10
  180. package/dist/build/CircuitScene.mjs +298 -209
  181. package/dist/build/contract.d.mts +1 -2
  182. package/dist/build/editor/index.d.mts +4 -0
  183. package/dist/build/editor/index.mjs +6 -0
  184. package/dist/build/editor-ops.d.mts +0 -1
  185. package/dist/build/editor-ops.mjs +3 -2
  186. package/dist/build/editor-ui.mjs +60 -83
  187. package/dist/build/flow.d.mts +0 -1
  188. package/dist/build/index.d.mts +2 -2
  189. package/dist/build/parts/ammeter.d.mts +1 -1
  190. package/dist/build/parts/ammeter.mjs +1 -1
  191. package/dist/build/parts/bulb.d.mts +1 -1
  192. package/dist/build/parts/bulb.mjs +1 -1
  193. package/dist/build/parts/capacitor.d.mts +1 -1
  194. package/dist/build/parts/capacitor.mjs +1 -1
  195. package/dist/build/parts/cell.d.mts +1 -1
  196. package/dist/build/parts/cell.mjs +1 -1
  197. package/dist/build/parts/diode.d.mts +1 -1
  198. package/dist/build/parts/diode.mjs +1 -1
  199. package/dist/build/parts/index.d.mts +10 -0
  200. package/dist/build/parts/index.mjs +1 -1
  201. package/dist/build/parts/mosfet.d.mts +1 -1
  202. package/dist/build/parts/mosfet.mjs +3 -2
  203. package/dist/build/parts/node.d.mts +1 -1
  204. package/dist/build/parts/node.mjs +1 -1
  205. package/dist/build/parts/resistor.d.mts +1 -1
  206. package/dist/build/parts/resistor.mjs +1 -1
  207. package/dist/build/parts/shared.mjs +1 -1
  208. package/dist/build/parts/switch.d.mts +1 -1
  209. package/dist/build/parts/switch.mjs +1 -1
  210. package/dist/build/registry.d.mts +0 -1
  211. package/dist/build/runtime/index.d.mts +8 -0
  212. package/dist/build/runtime/index.mjs +10 -0
  213. package/dist/build/solve.d.mts +0 -1
  214. package/dist/build/solve.mjs +0 -0
  215. package/dist/build/viewport.mjs +231 -0
  216. package/dist/catalog/registry.d.mts +1 -2
  217. package/dist/chem/applied-chemistry-lab.d.mts +10 -0
  218. package/dist/chem/applied-chemistry-lab.mjs +341 -0
  219. package/dist/chem/battery.d.mts +3 -6
  220. package/dist/chem/battery.mjs +320 -191
  221. package/dist/chem/bohr-atom.d.mts +3 -6
  222. package/dist/chem/bohr-atom.mjs +80 -26
  223. package/dist/chem/crystal-lattice/activity.d.mts +5 -0
  224. package/dist/chem/crystal-lattice/activity.mjs +95 -0
  225. package/dist/chem/crystal-lattice/core.d.mts +19 -0
  226. package/dist/chem/crystal-lattice/core.mjs +101 -0
  227. package/dist/chem/crystal-lattice/index.d.mts +4 -0
  228. package/dist/chem/crystal-lattice/preset.d.mts +28 -0
  229. package/dist/chem/crystal-lattice/preset.mjs +244 -0
  230. package/dist/chem/diffusion/asset.mjs +76 -38
  231. package/dist/chem/diffusion/index.d.mts +2 -1
  232. package/dist/chem/diffusion/preset.d.mts +3 -6
  233. package/dist/chem/diffusion/preset.mjs +145 -91
  234. package/dist/chem/electrochem/index.d.mts +3 -1
  235. package/dist/chem/electrochem/preset.d.mts +3 -10
  236. package/dist/chem/electrochem/preset.mjs +157 -345
  237. package/dist/chem/electrochem/scene.d.mts +2 -0
  238. package/dist/chem/electrochem/scene.mjs +370 -0
  239. package/dist/chem/equation-conservation-desk.d.mts +22 -0
  240. package/dist/chem/equation-conservation-desk.mjs +250 -0
  241. package/dist/chem/equilibrium/index.d.mts +2 -1
  242. package/dist/chem/equilibrium/preset.d.mts +3 -13
  243. package/dist/chem/equilibrium/preset.mjs +343 -281
  244. package/dist/chem/evidence-scenes.mjs +460 -0
  245. package/dist/chem/formula-forge.d.mts +11 -0
  246. package/dist/chem/formula-forge.mjs +347 -0
  247. package/dist/chem/gas-box/index.d.mts +2 -1
  248. package/dist/chem/gas-box/preset.d.mts +3 -12
  249. package/dist/chem/gas-box/preset.mjs +203 -151
  250. package/dist/chem/index.d.mts +49 -2
  251. package/dist/chem/index.mjs +32 -1
  252. package/dist/chem/industrial-process-lab.d.mts +10 -0
  253. package/dist/chem/industrial-process-lab.mjs +197 -0
  254. package/dist/chem/kinetics/index.d.mts +2 -1
  255. package/dist/chem/kinetics/preset.d.mts +3 -11
  256. package/dist/chem/kinetics/preset.mjs +331 -329
  257. package/dist/chem/mole-factory.d.mts +11 -0
  258. package/dist/chem/mole-factory.mjs +351 -0
  259. package/dist/chem/molecular-geometry/activity.d.mts +5 -0
  260. package/dist/chem/molecular-geometry/activity.mjs +90 -0
  261. package/dist/chem/molecular-geometry/core.d.mts +30 -0
  262. package/dist/chem/molecular-geometry/core.mjs +156 -0
  263. package/dist/chem/molecular-geometry/index.d.mts +4 -0
  264. package/dist/chem/molecular-geometry/preset.d.mts +31 -0
  265. package/dist/chem/molecular-geometry/preset.mjs +292 -0
  266. package/dist/chem/o-level-concepts.d.mts +32 -0
  267. package/dist/chem/o-level-concepts.mjs +700 -0
  268. package/dist/chem/orbital-overlap/activity.d.mts +5 -0
  269. package/dist/chem/orbital-overlap/activity.mjs +82 -0
  270. package/dist/chem/orbital-overlap/core.d.mts +12 -0
  271. package/dist/chem/orbital-overlap/core.mjs +27 -0
  272. package/dist/chem/orbital-overlap/index.d.mts +4 -0
  273. package/dist/chem/orbital-overlap/preset.d.mts +25 -0
  274. package/dist/chem/orbital-overlap/preset.mjs +200 -0
  275. package/dist/chem/orbitals/activity.d.mts +5 -0
  276. package/dist/chem/orbitals/activity.mjs +90 -0
  277. package/dist/chem/orbitals/core.d.mts +27 -0
  278. package/dist/chem/orbitals/core.mjs +100 -0
  279. package/dist/chem/orbitals/index.d.mts +4 -0
  280. package/dist/chem/orbitals/preset.d.mts +29 -0
  281. package/dist/chem/orbitals/preset.mjs +213 -0
  282. package/dist/chem/particle-theatre.d.mts +11 -0
  283. package/dist/chem/particle-theatre.mjs +362 -0
  284. package/dist/chem/periodic-trends/index.d.mts +2 -1
  285. package/dist/chem/periodic-trends/preset.d.mts +4 -8
  286. package/dist/chem/periodic-trends/preset.mjs +354 -728
  287. package/dist/chem/ratio-normalizer/core.d.mts +37 -0
  288. package/dist/chem/ratio-normalizer/core.mjs +84 -0
  289. package/dist/chem/ratio-normalizer/index.d.mts +3 -0
  290. package/dist/chem/ratio-normalizer/preset.d.mts +14 -0
  291. package/dist/chem/ratio-normalizer/preset.mjs +241 -0
  292. package/dist/chem/reaction-lab.d.mts +3 -7
  293. package/dist/chem/reaction-lab.mjs +193 -92
  294. package/dist/chem/reaction-profile.d.mts +3 -8
  295. package/dist/chem/reaction-profile.mjs +202 -181
  296. package/dist/chem/solubility-kitchen.d.mts +11 -0
  297. package/dist/chem/solubility-kitchen.mjs +267 -0
  298. package/dist/chem/solution/dilution.d.mts +4 -12
  299. package/dist/chem/solution/dilution.mjs +166 -131
  300. package/dist/chem/solution/field.d.mts +13 -15
  301. package/dist/chem/solution/field.mjs +122 -88
  302. package/dist/chem/solution/index.d.mts +2 -1
  303. package/dist/chem/solution/solution-box.d.mts +4 -12
  304. package/dist/chem/solution/solution-box.mjs +133 -84
  305. package/dist/chem/solution-mixer.d.mts +11 -0
  306. package/dist/chem/solution-mixer.mjs +268 -0
  307. package/dist/chem/species-workshop.d.mts +11 -0
  308. package/dist/chem/species-workshop.mjs +274 -0
  309. package/dist/chem/stereochemistry/activity.d.mts +5 -0
  310. package/dist/chem/stereochemistry/activity.mjs +88 -0
  311. package/dist/chem/stereochemistry/core.d.mts +25 -0
  312. package/dist/chem/stereochemistry/core.mjs +129 -0
  313. package/dist/chem/stereochemistry/index.d.mts +4 -0
  314. package/dist/chem/stereochemistry/preset.d.mts +30 -0
  315. package/dist/chem/stereochemistry/preset.mjs +245 -0
  316. package/dist/chem/stoichiometry/index.d.mts +2 -1
  317. package/dist/chem/stoichiometry/preset.d.mts +4 -10
  318. package/dist/chem/stoichiometry/preset.mjs +295 -197
  319. package/dist/chem/structure-detective.d.mts +12 -0
  320. package/dist/chem/structure-detective.mjs +496 -0
  321. package/dist/chem/titration/index.d.mts +2 -1
  322. package/dist/chem/titration/preset.d.mts +8 -12
  323. package/dist/chem/titration/preset.mjs +470 -325
  324. package/dist/chem/visual/atom.mjs +41 -0
  325. package/dist/circuits/ac-dc/activity-plan.mjs +70 -0
  326. package/dist/circuits/ac-dc/asset.mjs +2 -2
  327. package/dist/circuits/ac-dc/index.d.mts +2 -1
  328. package/dist/circuits/ac-dc/preset.d.mts +6 -7
  329. package/dist/circuits/ac-dc/preset.mjs +234 -42
  330. package/dist/circuits/ac-response/activity.mjs +121 -0
  331. package/dist/circuits/ac-response/preset.mjs +474 -0
  332. package/dist/circuits/brownout/activity-plan.mjs +83 -0
  333. package/dist/circuits/brownout/index.d.mts +2 -1
  334. package/dist/circuits/brownout/preset.d.mts +3 -10
  335. package/dist/circuits/brownout/preset.mjs +215 -261
  336. package/dist/circuits/capacitor-leak/activity-plan.mjs +83 -0
  337. package/dist/circuits/capacitor-leak/index.d.mts +2 -1
  338. package/dist/circuits/capacitor-leak/preset.d.mts +5 -12
  339. package/dist/circuits/capacitor-leak/preset.mjs +411 -164
  340. package/dist/circuits/cell-combination/activity.mjs +119 -0
  341. package/dist/circuits/cell-combination/core.mjs +115 -0
  342. package/dist/circuits/cell-combination/preset.mjs +265 -0
  343. package/dist/circuits/circuit/activity-plan.mjs +83 -0
  344. package/dist/circuits/circuit/asset.d.mts +0 -1
  345. package/dist/circuits/circuit/asset.mjs +74 -186
  346. package/dist/circuits/circuit/index.d.mts +2 -1
  347. package/dist/circuits/circuit/preset.d.mts +4 -8
  348. package/dist/circuits/circuit/preset.mjs +58 -47
  349. package/dist/circuits/circuit-builder.d.mts +7 -20
  350. package/dist/circuits/circuit-builder.mjs +16 -320
  351. package/dist/circuits/circuit-divider-activity-plan.mjs +101 -0
  352. package/dist/circuits/circuit-lab.d.mts +4 -8
  353. package/dist/circuits/circuit-lab.mjs +137 -159
  354. package/dist/circuits/cmos-gate/activity-plans.mjs +309 -0
  355. package/dist/circuits/cmos-gate/index.d.mts +6 -1
  356. package/dist/circuits/cmos-gate/inverter.d.mts +16 -0
  357. package/dist/circuits/cmos-gate/inverter.mjs +279 -0
  358. package/dist/circuits/cmos-gate/model.mjs +186 -0
  359. package/dist/circuits/cmos-gate/nand.d.mts +15 -0
  360. package/dist/circuits/cmos-gate/nand.mjs +289 -0
  361. package/dist/circuits/cmos-gate/nor.d.mts +15 -0
  362. package/dist/circuits/cmos-gate/nor.mjs +324 -0
  363. package/dist/circuits/cmos-gate/preset.d.mts +5 -75
  364. package/dist/circuits/cmos-gate/rnmos-not.d.mts +17 -0
  365. package/dist/circuits/cmos-gate/rnmos-not.mjs +265 -0
  366. package/dist/circuits/cmos-gate/shared.mjs +6 -0
  367. package/dist/circuits/diode/activity-plan.mjs +97 -0
  368. package/dist/circuits/diode/index.d.mts +2 -1
  369. package/dist/circuits/diode/preset.d.mts +3 -11
  370. package/dist/circuits/diode/preset.mjs +321 -106
  371. package/dist/circuits/energy-cost/activity.mjs +120 -0
  372. package/dist/circuits/energy-cost/core.mjs +93 -0
  373. package/dist/circuits/energy-cost/preset.mjs +278 -0
  374. package/dist/circuits/index.d.mts +26 -3
  375. package/dist/circuits/index.mjs +15 -3
  376. package/dist/circuits/kirchhoff/core.d.mts +70 -0
  377. package/dist/circuits/kirchhoff/core.mjs +187 -0
  378. package/dist/circuits/kirchhoff/index.d.mts +3 -0
  379. package/dist/circuits/kirchhoff/preset.d.mts +37 -0
  380. package/dist/circuits/kirchhoff/preset.mjs +929 -0
  381. package/dist/circuits/meter-conversion/activity.mjs +119 -0
  382. package/dist/circuits/meter-conversion/core.mjs +114 -0
  383. package/dist/circuits/meter-conversion/preset.mjs +311 -0
  384. package/dist/circuits/network-reduction/activity.mjs +140 -0
  385. package/dist/circuits/network-reduction/preset.mjs +424 -0
  386. package/dist/circuits/network-reduction/presets.mjs +239 -0
  387. package/dist/circuits/null-balance/activity.mjs +96 -0
  388. package/dist/circuits/null-balance/core.mjs +145 -0
  389. package/dist/circuits/null-balance/preset.mjs +375 -0
  390. package/dist/circuits/potential-divider/core.d.mts +42 -0
  391. package/dist/circuits/potential-divider/core.mjs +80 -0
  392. package/dist/circuits/potential-divider/index.d.mts +3 -0
  393. package/dist/circuits/potential-divider/preset.d.mts +35 -0
  394. package/dist/circuits/potential-divider/preset.mjs +686 -0
  395. package/dist/circuits/rc-charging/activity-plan.mjs +101 -0
  396. package/dist/circuits/rc-charging/index.d.mts +2 -1
  397. package/dist/circuits/rc-charging/preset.d.mts +3 -12
  398. package/dist/circuits/rc-charging/preset.mjs +378 -116
  399. package/dist/circuits/semiconductor/bjt-inside.d.mts +15 -0
  400. package/dist/circuits/semiconductor/bjt-inside.mjs +303 -0
  401. package/dist/circuits/semiconductor/conduction.d.mts +13 -0
  402. package/dist/circuits/semiconductor/conduction.mjs +201 -0
  403. package/dist/circuits/semiconductor/device-activity-plans.mjs +230 -0
  404. package/dist/circuits/semiconductor/hall-effect.d.mts +13 -0
  405. package/dist/circuits/semiconductor/hall-effect.mjs +250 -0
  406. package/dist/circuits/semiconductor/index.d.mts +8 -1
  407. package/dist/circuits/semiconductor/mosfet-inside.d.mts +17 -0
  408. package/dist/circuits/semiconductor/mosfet-inside.mjs +459 -0
  409. package/dist/circuits/semiconductor/pn-junction.d.mts +17 -0
  410. package/dist/circuits/semiconductor/pn-junction.mjs +336 -0
  411. package/dist/circuits/semiconductor/preset.d.mts +7 -102
  412. package/dist/circuits/semiconductor/shared.mjs +183 -0
  413. package/dist/circuits/semiconductor/silicon-lattice.d.mts +22 -0
  414. package/dist/circuits/semiconductor/silicon-lattice.mjs +266 -0
  415. package/dist/circuits/semiconductor/transport-activity-plans.mjs +251 -0
  416. package/dist/circuits/transistor/activity-plan.mjs +90 -0
  417. package/dist/circuits/transistor/index.d.mts +2 -1
  418. package/dist/circuits/transistor/preset.d.mts +3 -12
  419. package/dist/circuits/transistor/preset.mjs +325 -150
  420. package/dist/commerce/accounting/core.d.mts +3 -18
  421. package/dist/commerce/accounting/core.mjs +4 -26
  422. package/dist/commerce/accounting/equation-balance.d.mts +1 -11
  423. package/dist/commerce/accounting/equation-balance.mjs +189 -77
  424. package/dist/commerce/accounting/index.d.mts +2 -1
  425. package/dist/commerce/accounting/journal-poster.d.mts +1 -9
  426. package/dist/commerce/accounting/journal-poster.mjs +346 -292
  427. package/dist/commerce/accounting/statement-sorter.d.mts +1 -9
  428. package/dist/commerce/accounting/statement-sorter.mjs +231 -171
  429. package/dist/commerce/activity.d.mts +40 -0
  430. package/dist/commerce/activity.mjs +64 -0
  431. package/dist/commerce/economics/demand-shift-vs-move.d.mts +1 -13
  432. package/dist/commerce/economics/demand-shift-vs-move.mjs +210 -89
  433. package/dist/commerce/economics/elasticity-revenue.d.mts +1 -11
  434. package/dist/commerce/economics/elasticity-revenue.mjs +190 -64
  435. package/dist/commerce/economics/index.d.mts +2 -1
  436. package/dist/commerce/economics/market-equilibrium.d.mts +1 -13
  437. package/dist/commerce/economics/market-equilibrium.mjs +222 -68
  438. package/dist/commerce/finance/apportion.d.mts +22 -0
  439. package/dist/commerce/finance/apportion.mjs +233 -0
  440. package/dist/commerce/finance/break-even.d.mts +17 -0
  441. package/dist/commerce/finance/break-even.mjs +359 -0
  442. package/dist/commerce/finance/business-lesson.d.mts +41 -0
  443. package/dist/commerce/finance/business-lesson.mjs +390 -0
  444. package/dist/commerce/finance/club-subscriptions/preset.mjs +420 -0
  445. package/dist/commerce/finance/compound-interest.d.mts +23 -0
  446. package/dist/commerce/finance/compound-interest.mjs +509 -0
  447. package/dist/commerce/finance/depreciation.d.mts +18 -0
  448. package/dist/commerce/finance/depreciation.mjs +341 -0
  449. package/dist/commerce/finance/eoq.d.mts +16 -0
  450. package/dist/commerce/finance/eoq.mjs +266 -0
  451. package/dist/commerce/finance/incomplete-records/core.mjs +69 -0
  452. package/dist/commerce/finance/incomplete-records/preset.mjs +212 -0
  453. package/dist/commerce/finance/index.d.mts +13 -0
  454. package/dist/commerce/finance/inventory-policy.d.mts +28 -0
  455. package/dist/commerce/finance/inventory-policy.mjs +56 -0
  456. package/dist/commerce/finance/limited-company.d.mts +15 -0
  457. package/dist/commerce/finance/limited-company.mjs +419 -0
  458. package/dist/commerce/finance/manufacturing-flow/preset.mjs +134 -0
  459. package/dist/commerce/finance/manufacturing-flow/scene.mjs +257 -0
  460. package/dist/commerce/finance/partnership-split/preset.mjs +218 -0
  461. package/dist/commerce/finance/ratio-lab.d.mts +22 -0
  462. package/dist/commerce/finance/ratio-lab.mjs +420 -0
  463. package/dist/commerce/finance/statement-builder.d.mts +22 -0
  464. package/dist/commerce/finance/statement-builder.mjs +313 -0
  465. package/dist/commerce/finance/supply-chain.d.mts +23 -0
  466. package/dist/commerce/finance/supply-chain.mjs +350 -0
  467. package/dist/commerce/finance/warehouse-allocation.d.mts +18 -0
  468. package/dist/commerce/finance/warehouse-allocation.mjs +49 -0
  469. package/dist/commerce/index.d.mts +17 -1
  470. package/dist/commerce/index.mjs +14 -1
  471. package/dist/core/embedding.d.mts +14 -0
  472. package/dist/core/embedding.mjs +107 -0
  473. package/dist/core/index.d.mts +3 -3
  474. package/dist/core/index.mjs +2 -2
  475. package/dist/core/next-token.d.mts +9 -0
  476. package/dist/core/next-token.mjs +88 -0
  477. package/dist/core/numeric.d.mts +1 -8
  478. package/dist/core/numeric.mjs +1 -15
  479. package/dist/core/tex.d.mts +1 -6
  480. package/dist/core/timeline.d.mts +0 -1
  481. package/dist/core/timeline.mjs +13 -10
  482. package/dist/core/util.d.mts +0 -5
  483. package/dist/core/util.mjs +6 -13
  484. package/dist/data/core/evaluation-leakage.d.mts +16 -0
  485. package/dist/data/core/evaluation-leakage.mjs +24 -0
  486. package/dist/data/core/record-model.d.mts +29 -0
  487. package/dist/data/core/record-model.mjs +39 -0
  488. package/dist/data/foundation/design-records.d.mts +8 -0
  489. package/dist/data/foundation/design-records.mjs +60 -0
  490. package/dist/data/foundation/dirty-data.d.mts +8 -0
  491. package/dist/data/foundation/dirty-data.mjs +119 -0
  492. package/dist/data/index.d.mts +7 -0
  493. package/dist/data/index.mjs +8 -0
  494. package/dist/data/visuals/leakage-board.d.mts +10 -0
  495. package/dist/data/visuals/leakage-board.mjs +87 -0
  496. package/dist/data/visuals/record-model-board.d.mts +11 -0
  497. package/dist/data/visuals/record-model-board.mjs +188 -0
  498. package/dist/databases/core/access-path.d.mts +21 -0
  499. package/dist/databases/core/access-path.mjs +72 -0
  500. package/dist/databases/core/b-plus-tree.d.mts +21 -0
  501. package/dist/databases/core/b-plus-tree.mjs +54 -0
  502. package/dist/databases/core/query-plan.d.mts +32 -0
  503. package/dist/databases/core/query-plan.mjs +54 -0
  504. package/dist/databases/foundation/b-plus-range.d.mts +8 -0
  505. package/dist/databases/foundation/b-plus-range.mjs +81 -0
  506. package/dist/databases/foundation/index-detective.d.mts +8 -0
  507. package/dist/databases/foundation/index-detective.mjs +113 -0
  508. package/dist/databases/foundation/query-plan.d.mts +8 -0
  509. package/dist/databases/foundation/query-plan.mjs +90 -0
  510. package/dist/databases/foundation/range-query.d.mts +8 -0
  511. package/dist/databases/foundation/range-query.mjs +113 -0
  512. package/dist/databases/index.d.mts +14 -0
  513. package/dist/databases/index.mjs +15 -0
  514. package/dist/databases/visuals/access-path-primitives.d.mts +43 -0
  515. package/dist/databases/visuals/access-path-primitives.mjs +151 -0
  516. package/dist/databases/visuals/b-plus-tree-board.d.mts +9 -0
  517. package/dist/databases/visuals/b-plus-tree-board.mjs +96 -0
  518. package/dist/databases/visuals/index-detective-board.d.mts +12 -0
  519. package/dist/databases/visuals/index-detective-board.mjs +187 -0
  520. package/dist/databases/visuals/query-plan-board.d.mts +11 -0
  521. package/dist/databases/visuals/query-plan-board.mjs +118 -0
  522. package/dist/databases/visuals/query-plan-primitives.d.mts +17 -0
  523. package/dist/databases/visuals/query-plan-primitives.mjs +92 -0
  524. package/dist/databases/visuals/range-query-board.d.mts +11 -0
  525. package/dist/databases/visuals/range-query-board.mjs +97 -0
  526. package/dist/deep-learning/core/attention.d.mts +24 -0
  527. package/dist/deep-learning/core/attention.mjs +123 -0
  528. package/dist/deep-learning/core/causal-mask.d.mts +18 -0
  529. package/dist/deep-learning/core/causal-mask.mjs +35 -0
  530. package/dist/deep-learning/core/context-window.d.mts +15 -0
  531. package/dist/deep-learning/core/context-window.mjs +31 -0
  532. package/dist/deep-learning/core/convolution.d.mts +22 -0
  533. package/dist/deep-learning/core/convolution.mjs +91 -0
  534. package/dist/deep-learning/core/dense-layer.d.mts +49 -0
  535. package/dist/deep-learning/core/dense-layer.mjs +108 -0
  536. package/dist/deep-learning/core/embedding-neighborhood.d.mts +10 -0
  537. package/dist/deep-learning/core/embedding-neighborhood.mjs +92 -0
  538. package/dist/deep-learning/core/encoder-decoder.d.mts +17 -0
  539. package/dist/deep-learning/core/encoder-decoder.mjs +39 -0
  540. package/dist/deep-learning/core/feed-forward-network.d.mts +13 -0
  541. package/dist/deep-learning/core/feed-forward-network.mjs +27 -0
  542. package/dist/deep-learning/core/gradient-run.d.mts +12 -0
  543. package/dist/deep-learning/core/gradient-run.mjs +20 -0
  544. package/dist/deep-learning/core/gradient-step.d.mts +24 -0
  545. package/dist/deep-learning/core/gradient-step.mjs +34 -0
  546. package/dist/deep-learning/core/layer-normalization.d.mts +16 -0
  547. package/dist/deep-learning/core/layer-normalization.mjs +28 -0
  548. package/dist/deep-learning/core/learning-loop.d.mts +20 -0
  549. package/dist/deep-learning/core/learning-loop.mjs +36 -0
  550. package/dist/deep-learning/core/linear-algebra.d.mts +10 -0
  551. package/dist/deep-learning/core/linear-algebra.mjs +16 -0
  552. package/dist/deep-learning/core/linear-fit.d.mts +20 -0
  553. package/dist/deep-learning/core/linear-fit.mjs +31 -0
  554. package/dist/deep-learning/core/loss.d.mts +11 -0
  555. package/dist/deep-learning/core/loss.mjs +15 -0
  556. package/dist/deep-learning/core/memory-relay.d.mts +15 -0
  557. package/dist/deep-learning/core/memory-relay.mjs +31 -0
  558. package/dist/deep-learning/core/multi-head-attention.d.mts +17 -0
  559. package/dist/deep-learning/core/multi-head-attention.mjs +103 -0
  560. package/dist/deep-learning/core/multimodal-alignment.d.mts +18 -0
  561. package/dist/deep-learning/core/multimodal-alignment.mjs +70 -0
  562. package/dist/deep-learning/core/neural-trace.d.mts +20 -0
  563. package/dist/deep-learning/core/neural-trace.mjs +29 -0
  564. package/dist/deep-learning/core/position.d.mts +17 -0
  565. package/dist/deep-learning/core/position.mjs +64 -0
  566. package/dist/deep-learning/core/query-key-value.d.mts +31 -0
  567. package/dist/deep-learning/core/query-key-value.mjs +37 -0
  568. package/dist/deep-learning/core/residual-stream.d.mts +12 -0
  569. package/dist/deep-learning/core/residual-stream.mjs +16 -0
  570. package/dist/deep-learning/core/scaled-dot-product-attention.d.mts +24 -0
  571. package/dist/deep-learning/core/scaled-dot-product-attention.mjs +41 -0
  572. package/dist/deep-learning/core/token-generation.d.mts +14 -0
  573. package/dist/deep-learning/core/token-generation.mjs +23 -0
  574. package/dist/deep-learning/core/transformer-block.d.mts +23 -0
  575. package/dist/deep-learning/core/transformer-block.mjs +25 -0
  576. package/dist/deep-learning/core/unembedding.d.mts +25 -0
  577. package/dist/deep-learning/core/unembedding.mjs +23 -0
  578. package/dist/deep-learning/foundation/activation-gates.d.mts +12 -0
  579. package/dist/deep-learning/foundation/activation-gates.mjs +63 -0
  580. package/dist/deep-learning/foundation/affine-neuron.d.mts +14 -0
  581. package/dist/deep-learning/foundation/affine-neuron.mjs +75 -0
  582. package/dist/deep-learning/foundation/anomaly-detector.d.mts +8 -0
  583. package/dist/deep-learning/foundation/anomaly-detector.mjs +79 -0
  584. package/dist/deep-learning/foundation/attention-routing.d.mts +8 -0
  585. package/dist/deep-learning/foundation/attention-routing.mjs +41 -0
  586. package/dist/deep-learning/foundation/autoencoder.d.mts +8 -0
  587. package/dist/deep-learning/foundation/autoencoder.mjs +74 -0
  588. package/dist/deep-learning/foundation/causal-mask.d.mts +8 -0
  589. package/dist/deep-learning/foundation/causal-mask.mjs +44 -0
  590. package/dist/deep-learning/foundation/context-window.d.mts +8 -0
  591. package/dist/deep-learning/foundation/context-window.mjs +39 -0
  592. package/dist/deep-learning/foundation/denoising.d.mts +8 -0
  593. package/dist/deep-learning/foundation/denoising.mjs +78 -0
  594. package/dist/deep-learning/foundation/embedding-neighborhood.d.mts +8 -0
  595. package/dist/deep-learning/foundation/embedding-neighborhood.mjs +41 -0
  596. package/dist/deep-learning/foundation/encoder-decoder.d.mts +8 -0
  597. package/dist/deep-learning/foundation/encoder-decoder.mjs +48 -0
  598. package/dist/deep-learning/foundation/feature-map.d.mts +10 -0
  599. package/dist/deep-learning/foundation/feature-map.mjs +105 -0
  600. package/dist/deep-learning/foundation/feed-forward-network.d.mts +12 -0
  601. package/dist/deep-learning/foundation/feed-forward-network.mjs +70 -0
  602. package/dist/deep-learning/foundation/fit-evidence.d.mts +14 -0
  603. package/dist/deep-learning/foundation/fit-evidence.mjs +96 -0
  604. package/dist/deep-learning/foundation/gradient-step.d.mts +14 -0
  605. package/dist/deep-learning/foundation/gradient-step.mjs +78 -0
  606. package/dist/deep-learning/foundation/latent-space.d.mts +8 -0
  607. package/dist/deep-learning/foundation/latent-space.mjs +41 -0
  608. package/dist/deep-learning/foundation/layer-normalization.d.mts +14 -0
  609. package/dist/deep-learning/foundation/layer-normalization.mjs +65 -0
  610. package/dist/deep-learning/foundation/learning-loop.d.mts +14 -0
  611. package/dist/deep-learning/foundation/learning-loop.mjs +55 -0
  612. package/dist/deep-learning/foundation/loss-error.d.mts +11 -0
  613. package/dist/deep-learning/foundation/loss-error.mjs +50 -0
  614. package/dist/deep-learning/foundation/matrix-vector.d.mts +11 -0
  615. package/dist/deep-learning/foundation/matrix-vector.mjs +61 -0
  616. package/dist/deep-learning/foundation/memory-relay.d.mts +8 -0
  617. package/dist/deep-learning/foundation/memory-relay.mjs +48 -0
  618. package/dist/deep-learning/foundation/multi-head-attention.d.mts +8 -0
  619. package/dist/deep-learning/foundation/multi-head-attention.mjs +59 -0
  620. package/dist/deep-learning/foundation/multimodal-alignment.d.mts +8 -0
  621. package/dist/deep-learning/foundation/multimodal-alignment.mjs +63 -0
  622. package/dist/deep-learning/foundation/pixel-filter.d.mts +8 -0
  623. package/dist/deep-learning/foundation/pixel-filter.mjs +52 -0
  624. package/dist/deep-learning/foundation/position.d.mts +8 -0
  625. package/dist/deep-learning/foundation/position.mjs +40 -0
  626. package/dist/deep-learning/foundation/query-key-value.d.mts +8 -0
  627. package/dist/deep-learning/foundation/query-key-value.mjs +51 -0
  628. package/dist/deep-learning/foundation/residual-stream.d.mts +13 -0
  629. package/dist/deep-learning/foundation/residual-stream.mjs +44 -0
  630. package/dist/deep-learning/foundation/scaled-dot-product-attention.d.mts +10 -0
  631. package/dist/deep-learning/foundation/scaled-dot-product-attention.mjs +122 -0
  632. package/dist/deep-learning/foundation/tiny-network.d.mts +9 -0
  633. package/dist/deep-learning/foundation/tiny-network.mjs +48 -0
  634. package/dist/deep-learning/foundation/token-generation.d.mts +8 -0
  635. package/dist/deep-learning/foundation/token-generation.mjs +45 -0
  636. package/dist/deep-learning/foundation/training-loop.d.mts +14 -0
  637. package/dist/deep-learning/foundation/training-loop.mjs +83 -0
  638. package/dist/deep-learning/foundation/transformer-block.d.mts +13 -0
  639. package/dist/deep-learning/foundation/transformer-block.mjs +74 -0
  640. package/dist/deep-learning/foundation/unembedding.d.mts +14 -0
  641. package/dist/deep-learning/foundation/unembedding.mjs +113 -0
  642. package/dist/deep-learning/index.d.mts +91 -0
  643. package/dist/deep-learning/index.mjs +92 -0
  644. package/dist/deep-learning/visuals/activation-diagram.d.mts +10 -0
  645. package/dist/deep-learning/visuals/activation-diagram.mjs +153 -0
  646. package/dist/deep-learning/visuals/anomaly-diagram.d.mts +11 -0
  647. package/dist/deep-learning/visuals/anomaly-diagram.mjs +175 -0
  648. package/dist/deep-learning/visuals/attention-routing-diagram.d.mts +9 -0
  649. package/dist/deep-learning/visuals/attention-routing-diagram.mjs +160 -0
  650. package/dist/deep-learning/visuals/autoencoder-diagram.d.mts +12 -0
  651. package/dist/deep-learning/visuals/autoencoder-diagram.mjs +161 -0
  652. package/dist/deep-learning/visuals/causal-mask-diagram.d.mts +10 -0
  653. package/dist/deep-learning/visuals/causal-mask-diagram.mjs +183 -0
  654. package/dist/deep-learning/visuals/context-window-diagram.d.mts +9 -0
  655. package/dist/deep-learning/visuals/context-window-diagram.mjs +200 -0
  656. package/dist/deep-learning/visuals/convolution-diagram.d.mts +10 -0
  657. package/dist/deep-learning/visuals/convolution-diagram.mjs +139 -0
  658. package/dist/deep-learning/visuals/denoising-diagram.d.mts +10 -0
  659. package/dist/deep-learning/visuals/denoising-diagram.mjs +103 -0
  660. package/dist/deep-learning/visuals/embedding-neighborhood-diagram.d.mts +9 -0
  661. package/dist/deep-learning/visuals/embedding-neighborhood-diagram.mjs +162 -0
  662. package/dist/deep-learning/visuals/encoder-decoder-diagram.d.mts +10 -0
  663. package/dist/deep-learning/visuals/encoder-decoder-diagram.mjs +229 -0
  664. package/dist/deep-learning/visuals/feature-map-diagram.d.mts +13 -0
  665. package/dist/deep-learning/visuals/feature-map-diagram.mjs +168 -0
  666. package/dist/deep-learning/visuals/feed-forward-workshop-diagram.d.mts +11 -0
  667. package/dist/deep-learning/visuals/feed-forward-workshop-diagram.mjs +131 -0
  668. package/dist/deep-learning/visuals/gradient-step-diagram.d.mts +9 -0
  669. package/dist/deep-learning/visuals/gradient-step-diagram.mjs +126 -0
  670. package/dist/deep-learning/visuals/latent-space-diagram.d.mts +9 -0
  671. package/dist/deep-learning/visuals/latent-space-diagram.mjs +140 -0
  672. package/dist/deep-learning/visuals/layer-normalization-diagram.d.mts +11 -0
  673. package/dist/deep-learning/visuals/layer-normalization-diagram.mjs +191 -0
  674. package/dist/deep-learning/visuals/learning-loop-diagram.d.mts +9 -0
  675. package/dist/deep-learning/visuals/learning-loop-diagram.mjs +148 -0
  676. package/dist/deep-learning/visuals/linear-fit-diagram.d.mts +11 -0
  677. package/dist/deep-learning/visuals/linear-fit-diagram.mjs +113 -0
  678. package/dist/deep-learning/visuals/loss-diagram.d.mts +8 -0
  679. package/dist/deep-learning/visuals/loss-diagram.mjs +173 -0
  680. package/dist/deep-learning/visuals/matrix-vector-diagram.d.mts +12 -0
  681. package/dist/deep-learning/visuals/matrix-vector-diagram.mjs +165 -0
  682. package/dist/deep-learning/visuals/memory-relay-diagram.d.mts +10 -0
  683. package/dist/deep-learning/visuals/memory-relay-diagram.mjs +242 -0
  684. package/dist/deep-learning/visuals/multi-head-attention-diagram.d.mts +10 -0
  685. package/dist/deep-learning/visuals/multi-head-attention-diagram.mjs +170 -0
  686. package/dist/deep-learning/visuals/multimodal-alignment-diagram.d.mts +13 -0
  687. package/dist/deep-learning/visuals/multimodal-alignment-diagram.mjs +138 -0
  688. package/dist/deep-learning/visuals/neuron-diagram.d.mts +12 -0
  689. package/dist/deep-learning/visuals/neuron-diagram.mjs +231 -0
  690. package/dist/deep-learning/visuals/position-diagram.d.mts +10 -0
  691. package/dist/deep-learning/visuals/position-diagram.mjs +157 -0
  692. package/dist/deep-learning/visuals/query-key-value-diagram.d.mts +12 -0
  693. package/dist/deep-learning/visuals/query-key-value-diagram.mjs +247 -0
  694. package/dist/deep-learning/visuals/residual-stream-diagram.d.mts +9 -0
  695. package/dist/deep-learning/visuals/residual-stream-diagram.mjs +221 -0
  696. package/dist/deep-learning/visuals/scaled-attention-mixer.d.mts +15 -0
  697. package/dist/deep-learning/visuals/scaled-attention-mixer.mjs +244 -0
  698. package/dist/deep-learning/visuals/tiny-network-diagram.d.mts +9 -0
  699. package/dist/deep-learning/visuals/tiny-network-diagram.mjs +136 -0
  700. package/dist/deep-learning/visuals/token-generation-diagram.d.mts +10 -0
  701. package/dist/deep-learning/visuals/token-generation-diagram.mjs +199 -0
  702. package/dist/deep-learning/visuals/training-trail-diagram.d.mts +9 -0
  703. package/dist/deep-learning/visuals/training-trail-diagram.mjs +109 -0
  704. package/dist/deep-learning/visuals/transformer-block-diagram.d.mts +11 -0
  705. package/dist/deep-learning/visuals/transformer-block-diagram.mjs +273 -0
  706. package/dist/deep-learning/visuals/unembedding-diagram.d.mts +12 -0
  707. package/dist/deep-learning/visuals/unembedding-diagram.mjs +195 -0
  708. package/dist/discrete/arrangements/preset.d.mts +1 -10
  709. package/dist/discrete/arrangements/preset.mjs +135 -119
  710. package/dist/discrete/bayes/preset.d.mts +1 -15
  711. package/dist/discrete/bayes/preset.mjs +283 -249
  712. package/dist/discrete/binomial/preset.d.mts +1 -11
  713. package/dist/discrete/binomial/preset.mjs +142 -111
  714. package/dist/discrete/combination-studio/figure.d.mts +0 -1
  715. package/dist/discrete/combination-studio/figure.mjs +20 -53
  716. package/dist/discrete/combination-studio/index.d.mts +2 -1
  717. package/dist/discrete/combination-studio/preset.d.mts +1 -12
  718. package/dist/discrete/combination-studio/preset.mjs +109 -166
  719. package/dist/discrete/core/combinatorics.d.mts +5 -2
  720. package/dist/discrete/core/combinatorics.mjs +7 -2
  721. package/dist/discrete/core/inclusionExclusion.d.mts +0 -1
  722. package/dist/discrete/counting-slots/preset.d.mts +1 -13
  723. package/dist/discrete/counting-slots/preset.mjs +185 -223
  724. package/dist/discrete/counting-tree/index.d.mts +2 -1
  725. package/dist/discrete/counting-tree/preset.d.mts +1 -15
  726. package/dist/discrete/counting-tree/preset.mjs +155 -73
  727. package/dist/discrete/expected-value/preset.d.mts +1 -10
  728. package/dist/discrete/expected-value/preset.mjs +153 -235
  729. package/dist/discrete/hypergeometric/preset.d.mts +1 -11
  730. package/dist/discrete/hypergeometric/preset.mjs +155 -117
  731. package/dist/discrete/index.d.mts +28 -4
  732. package/dist/discrete/index.mjs +9 -3
  733. package/dist/discrete/induction/core.mjs +17 -0
  734. package/dist/discrete/induction/index.d.mts +2 -0
  735. package/dist/discrete/induction/preset.d.mts +11 -0
  736. package/dist/discrete/induction/preset.mjs +112 -0
  737. package/dist/discrete/invariant/core.d.mts +8 -0
  738. package/dist/discrete/invariant/core.mjs +17 -0
  739. package/dist/discrete/invariant/index.d.mts +3 -0
  740. package/dist/discrete/invariant/preset.d.mts +14 -0
  741. package/dist/discrete/invariant/preset.mjs +159 -0
  742. package/dist/discrete/karnaugh/index.d.mts +2 -1
  743. package/dist/discrete/karnaugh/preset.d.mts +1 -13
  744. package/dist/discrete/karnaugh/preset.mjs +190 -142
  745. package/dist/discrete/lln/asset.mjs +2 -2
  746. package/dist/discrete/lln/index.d.mts +2 -1
  747. package/dist/discrete/lln/preset.d.mts +1 -7
  748. package/dist/discrete/lln/preset.mjs +151 -55
  749. package/dist/discrete/modular-clock/core.mjs +14 -0
  750. package/dist/discrete/modular-clock/index.d.mts +2 -0
  751. package/dist/discrete/modular-clock/preset.d.mts +13 -0
  752. package/dist/discrete/modular-clock/preset.mjs +192 -0
  753. package/dist/discrete/monte-carlo/index.d.mts +2 -1
  754. package/dist/discrete/monte-carlo/preset.d.mts +1 -15
  755. package/dist/discrete/monte-carlo/preset.mjs +179 -98
  756. package/dist/discrete/monty-hall/index.d.mts +2 -1
  757. package/dist/discrete/monty-hall/preset.d.mts +1 -10
  758. package/dist/discrete/monty-hall/preset.mjs +204 -221
  759. package/dist/discrete/outcome-builder/preset.d.mts +1 -10
  760. package/dist/discrete/outcome-builder/preset.mjs +152 -126
  761. package/dist/discrete/pascal/preset.d.mts +1 -10
  762. package/dist/discrete/pascal/preset.mjs +153 -142
  763. package/dist/discrete/pigeonhole/index.d.mts +2 -0
  764. package/dist/discrete/pigeonhole/preset.d.mts +12 -0
  765. package/dist/discrete/pigeonhole/preset.mjs +129 -0
  766. package/dist/discrete/proof/core.d.mts +74 -0
  767. package/dist/discrete/proof/core.mjs +44 -0
  768. package/dist/discrete/proof-builder/index.d.mts +2 -0
  769. package/dist/discrete/proof-builder/preset.d.mts +12 -0
  770. package/dist/discrete/proof-builder/preset.mjs +239 -0
  771. package/dist/discrete/recurrence/core.mjs +18 -0
  772. package/dist/discrete/recurrence/index.d.mts +2 -0
  773. package/dist/discrete/recurrence/preset.d.mts +12 -0
  774. package/dist/discrete/recurrence/preset.mjs +118 -0
  775. package/dist/discrete/rule-figures.mjs +114 -0
  776. package/dist/discrete/rules.d.mts +1 -2
  777. package/dist/discrete/rules.mjs +101 -1
  778. package/dist/discrete/sample-space/index.d.mts +2 -1
  779. package/dist/discrete/sample-space/preset.d.mts +1 -15
  780. package/dist/discrete/sample-space/preset.mjs +157 -125
  781. package/dist/discrete/selection/preset.d.mts +1 -12
  782. package/dist/discrete/selection/preset.mjs +153 -176
  783. package/dist/discrete/statement-logic/core.d.mts +41 -0
  784. package/dist/discrete/statement-logic/core.mjs +53 -0
  785. package/dist/discrete/statement-logic/index.d.mts +3 -0
  786. package/dist/discrete/statement-logic/preset.d.mts +35 -0
  787. package/dist/discrete/statement-logic/preset.mjs +245 -0
  788. package/dist/discrete/truth-table/index.d.mts +2 -1
  789. package/dist/discrete/truth-table/preset.d.mts +1 -12
  790. package/dist/discrete/truth-table/preset.mjs +138 -140
  791. package/dist/discrete/venn/index.d.mts +2 -1
  792. package/dist/discrete/venn/preset.d.mts +1 -11
  793. package/dist/discrete/venn/preset.mjs +154 -144
  794. package/dist/discrete/visuals/reasoning-scenes.mjs +236 -0
  795. package/dist/distributed-systems/core/sharding.d.mts +19 -0
  796. package/dist/distributed-systems/core/sharding.mjs +24 -0
  797. package/dist/distributed-systems/foundation/shard-key.d.mts +8 -0
  798. package/dist/distributed-systems/foundation/shard-key.mjs +103 -0
  799. package/dist/distributed-systems/index.d.mts +4 -0
  800. package/dist/distributed-systems/index.mjs +5 -0
  801. package/dist/distributed-systems/visuals/shard-key-board.d.mts +20 -0
  802. package/dist/distributed-systems/visuals/shard-key-board.mjs +126 -0
  803. package/dist/domains/accounting/apportion/manifest.mjs +56 -0
  804. package/dist/domains/accounting/apportion/runtime.mjs +5 -0
  805. package/dist/domains/accounting/bank-reconciliation/activity.mjs +96 -0
  806. package/dist/domains/accounting/bank-reconciliation/manifest.mjs +75 -0
  807. package/dist/domains/accounting/bank-reconciliation/runtime.mjs +171 -0
  808. package/dist/domains/accounting/bank-reconciliation/scene.mjs +251 -0
  809. package/dist/domains/accounting/break-even/manifest.mjs +55 -0
  810. package/dist/domains/accounting/break-even/runtime.mjs +5 -0
  811. package/dist/domains/accounting/business-day-mission/activity.mjs +114 -0
  812. package/dist/domains/accounting/business-day-mission/manifest.mjs +58 -0
  813. package/dist/domains/accounting/business-day-mission/runtime.mjs +191 -0
  814. package/dist/domains/accounting/business-day-mission/scene.mjs +184 -0
  815. package/dist/domains/accounting/business-lesson/manifest.mjs +54 -0
  816. package/dist/domains/accounting/business-lesson/runtime.mjs +5 -0
  817. package/dist/domains/accounting/business-lesson/schema.mjs +94 -0
  818. package/dist/domains/accounting/cash-budget-runway/activity.mjs +119 -0
  819. package/dist/domains/accounting/cash-budget-runway/manifest.mjs +74 -0
  820. package/dist/domains/accounting/cash-budget-runway/runtime.mjs +142 -0
  821. package/dist/domains/accounting/club-subscriptions/manifest.mjs +67 -0
  822. package/dist/domains/accounting/club-subscriptions/runtime.mjs +5 -0
  823. package/dist/domains/accounting/company-statement-builder/activity.mjs +114 -0
  824. package/dist/domains/accounting/company-statement-builder/manifest.mjs +68 -0
  825. package/dist/domains/accounting/company-statement-builder/runtime.mjs +110 -0
  826. package/dist/domains/accounting/compound-interest/manifest.mjs +58 -0
  827. package/dist/domains/accounting/compound-interest/runtime.mjs +5 -0
  828. package/dist/domains/accounting/control-account-builder/activity.mjs +96 -0
  829. package/dist/domains/accounting/control-account-builder/manifest.mjs +66 -0
  830. package/dist/domains/accounting/control-account-builder/runtime.mjs +151 -0
  831. package/dist/domains/accounting/control-account-builder/scene.mjs +119 -0
  832. package/dist/domains/accounting/costing-profit-bridge/activity.mjs +119 -0
  833. package/dist/domains/accounting/costing-profit-bridge/manifest.mjs +73 -0
  834. package/dist/domains/accounting/costing-profit-bridge/runtime.mjs +203 -0
  835. package/dist/domains/accounting/depreciation/manifest.mjs +60 -0
  836. package/dist/domains/accounting/depreciation/runtime.mjs +5 -0
  837. package/dist/domains/accounting/eoq/manifest.mjs +57 -0
  838. package/dist/domains/accounting/eoq/runtime.mjs +5 -0
  839. package/dist/domains/accounting/equation-balance/authoring.mjs +159 -0
  840. package/dist/domains/accounting/equation-balance/manifest.mjs +77 -0
  841. package/dist/domains/accounting/equation-balance/runtime.mjs +20 -0
  842. package/dist/domains/accounting/factory-expansion-case/activity.mjs +118 -0
  843. package/dist/domains/accounting/factory-expansion-case/manifest.mjs +59 -0
  844. package/dist/domains/accounting/factory-expansion-case/runtime.mjs +245 -0
  845. package/dist/domains/accounting/incomplete-records/manifest.mjs +71 -0
  846. package/dist/domains/accounting/incomplete-records/runtime.mjs +5 -0
  847. package/dist/domains/accounting/integrated-budget-mission/activity.mjs +115 -0
  848. package/dist/domains/accounting/integrated-budget-mission/manifest.mjs +76 -0
  849. package/dist/domains/accounting/integrated-budget-mission/runtime.mjs +169 -0
  850. package/dist/domains/accounting/integrated-budget-mission/scene.mjs +229 -0
  851. package/dist/domains/accounting/inventory-costing/activity.mjs +119 -0
  852. package/dist/domains/accounting/inventory-costing/manifest.mjs +73 -0
  853. package/dist/domains/accounting/inventory-costing/runtime.mjs +166 -0
  854. package/dist/domains/accounting/inventory-costing/scene.mjs +257 -0
  855. package/dist/domains/accounting/investment-appraisal/activity.mjs +119 -0
  856. package/dist/domains/accounting/investment-appraisal/manifest.mjs +72 -0
  857. package/dist/domains/accounting/investment-appraisal/runtime.mjs +177 -0
  858. package/dist/domains/accounting/journal-poster/manifest.mjs +68 -0
  859. package/dist/domains/accounting/journal-poster/runtime.mjs +20 -0
  860. package/dist/domains/accounting/limited-company/manifest.mjs +55 -0
  861. package/dist/domains/accounting/limited-company/runtime.mjs +5 -0
  862. package/dist/domains/accounting/limiting-factor-mix/activity.mjs +119 -0
  863. package/dist/domains/accounting/limiting-factor-mix/manifest.mjs +65 -0
  864. package/dist/domains/accounting/limiting-factor-mix/runtime.mjs +140 -0
  865. package/dist/domains/accounting/management-scenes.mjs +582 -0
  866. package/dist/domains/accounting/manufacturing-flow/manifest.mjs +75 -0
  867. package/dist/domains/accounting/manufacturing-flow/runtime.mjs +5 -0
  868. package/dist/domains/accounting/operating-budget-chain/activity.mjs +119 -0
  869. package/dist/domains/accounting/operating-budget-chain/manifest.mjs +75 -0
  870. package/dist/domains/accounting/operating-budget-chain/runtime.mjs +167 -0
  871. package/dist/domains/accounting/partnership-split/manifest.mjs +69 -0
  872. package/dist/domains/accounting/partnership-split/runtime.mjs +5 -0
  873. package/dist/domains/accounting/period-adjustment-workbench/activity.mjs +77 -0
  874. package/dist/domains/accounting/period-adjustment-workbench/manifest.mjs +120 -0
  875. package/dist/domains/accounting/period-adjustment-workbench/runtime.mjs +142 -0
  876. package/dist/domains/accounting/period-close-mission/activity.mjs +118 -0
  877. package/dist/domains/accounting/period-close-mission/manifest.mjs +63 -0
  878. package/dist/domains/accounting/period-close-mission/runtime.mjs +327 -0
  879. package/dist/domains/accounting/period-close-mission/scene.mjs +265 -0
  880. package/dist/domains/accounting/process-loss/activity.mjs +119 -0
  881. package/dist/domains/accounting/process-loss/manifest.mjs +60 -0
  882. package/dist/domains/accounting/process-loss/runtime.mjs +136 -0
  883. package/dist/domains/accounting/ratio-lab/manifest.mjs +73 -0
  884. package/dist/domains/accounting/ratio-lab/runtime.mjs +5 -0
  885. package/dist/domains/accounting/reorder-point/manifest.mjs +60 -0
  886. package/dist/domains/accounting/reorder-point/runtime.mjs +5 -0
  887. package/dist/domains/accounting/shared.mjs +65 -0
  888. package/dist/domains/accounting/statement-builder/manifest.mjs +58 -0
  889. package/dist/domains/accounting/statement-builder/runtime.mjs +5 -0
  890. package/dist/domains/accounting/statement-sorter/manifest.mjs +62 -0
  891. package/dist/domains/accounting/statement-sorter/runtime.mjs +20 -0
  892. package/dist/domains/accounting/suspense-reconstruction/activity.mjs +84 -0
  893. package/dist/domains/accounting/suspense-reconstruction/manifest.mjs +75 -0
  894. package/dist/domains/accounting/suspense-reconstruction/runtime.mjs +138 -0
  895. package/dist/domains/accounting/suspense-reconstruction/scene.mjs +176 -0
  896. package/dist/domains/accounting/variance-detective/activity.mjs +119 -0
  897. package/dist/domains/accounting/variance-detective/manifest.mjs +57 -0
  898. package/dist/domains/accounting/variance-detective/runtime.mjs +144 -0
  899. package/dist/domains/accounting/warehouse-allocation/manifest.mjs +53 -0
  900. package/dist/domains/accounting/warehouse-allocation/runtime.mjs +5 -0
  901. package/dist/domains/activity-map.d.mts +8 -0
  902. package/dist/domains/activity-map.mjs +162 -0
  903. package/dist/domains/biology/cell-energy/activity.mjs +3 -0
  904. package/dist/domains/biology/cell-energy/manifest.mjs +65 -0
  905. package/dist/domains/biology/cell-energy/runtime.mjs +3 -0
  906. package/dist/domains/biology/cell-sample-investigator/activity.mjs +53 -0
  907. package/dist/domains/biology/cell-sample-investigator/manifest.mjs +72 -0
  908. package/dist/domains/biology/cell-sample-investigator/runtime.mjs +6 -0
  909. package/dist/domains/biology/cell-system/activity.mjs +3 -0
  910. package/dist/domains/biology/cell-system/manifest.mjs +81 -0
  911. package/dist/domains/biology/cell-system/runtime.mjs +3 -0
  912. package/dist/domains/biology/central-dogma/manifest.mjs +51 -0
  913. package/dist/domains/biology/central-dogma/runtime.mjs +5 -0
  914. package/dist/domains/biology/enzyme-rate/manifest.mjs +69 -0
  915. package/dist/domains/biology/enzyme-rate/runtime.mjs +5 -0
  916. package/dist/domains/biology/genetic-cross/manifest.mjs +132 -0
  917. package/dist/domains/biology/genetic-cross/runtime.mjs +25 -0
  918. package/dist/domains/biology/meiosis-explorer/activity.mjs +3 -0
  919. package/dist/domains/biology/meiosis-explorer/manifest.mjs +71 -0
  920. package/dist/domains/biology/meiosis-explorer/runtime.mjs +3 -0
  921. package/dist/domains/biology/membrane-transport/activity.mjs +3 -0
  922. package/dist/domains/biology/membrane-transport/manifest.mjs +73 -0
  923. package/dist/domains/biology/membrane-transport/runtime.mjs +3 -0
  924. package/dist/domains/biology/mitosis-explorer/activity.mjs +3 -0
  925. package/dist/domains/biology/mitosis-explorer/manifest.mjs +69 -0
  926. package/dist/domains/biology/mitosis-explorer/runtime.mjs +3 -0
  927. package/dist/domains/biology/photosynthesis-factors/manifest.mjs +58 -0
  928. package/dist/domains/biology/photosynthesis-factors/runtime.mjs +5 -0
  929. package/dist/domains/biology/punnett-cross/manifest.mjs +72 -0
  930. package/dist/domains/biology/punnett-cross/runtime.mjs +5 -0
  931. package/dist/domains/biology/respiration/manifest.mjs +55 -0
  932. package/dist/domains/biology/respiration/runtime.mjs +5 -0
  933. package/dist/domains/biology/sequence/manifest.mjs +64 -0
  934. package/dist/domains/biology/sequence/runtime.mjs +19 -0
  935. package/dist/domains/biology/sex-linked-cross/manifest.mjs +75 -0
  936. package/dist/domains/biology/sex-linked-cross/runtime.mjs +5 -0
  937. package/dist/domains/block-loaders.mjs +25 -0
  938. package/dist/domains/block-sets/accounting.mjs +79 -0
  939. package/dist/domains/block-sets/biology.mjs +37 -0
  940. package/dist/domains/block-sets/chem.mjs +157 -0
  941. package/dist/domains/block-sets/circuits.mjs +65 -0
  942. package/dist/domains/block-sets/data.mjs +10 -0
  943. package/dist/domains/block-sets/databases.mjs +17 -0
  944. package/dist/domains/block-sets/discrete.mjs +61 -0
  945. package/dist/domains/block-sets/distributed-systems.mjs +9 -0
  946. package/dist/domains/block-sets/economics.mjs +15 -0
  947. package/dist/domains/block-sets/exam.mjs +9 -0
  948. package/dist/domains/block-sets/geography.mjs +9 -0
  949. package/dist/domains/block-sets/geometry.mjs +10 -0
  950. package/dist/domains/block-sets/ict.mjs +59 -0
  951. package/dist/domains/block-sets/language.mjs +31 -0
  952. package/dist/domains/block-sets/math.mjs +139 -0
  953. package/dist/domains/block-sets/ml.mjs +87 -0
  954. package/dist/domains/block-sets/networking.mjs +125 -0
  955. package/dist/domains/block-sets/physics.mjs +215 -0
  956. package/dist/domains/block-sets/statistics.mjs +27 -0
  957. package/dist/domains/blocks.mjs +11 -0
  958. package/dist/domains/catalog-map.mjs +13246 -0
  959. package/dist/domains/catalog.mjs +10 -0
  960. package/dist/domains/chem/air-composition/manifest.mjs +45 -0
  961. package/dist/domains/chem/air-composition/runtime.mjs +5 -0
  962. package/dist/domains/chem/alkene-geometry/activity.mjs +73 -0
  963. package/dist/domains/chem/alkene-geometry/manifest.mjs +58 -0
  964. package/dist/domains/chem/alkene-geometry/model.mjs +204 -0
  965. package/dist/domains/chem/alkene-geometry/runtime.mjs +122 -0
  966. package/dist/domains/chem/alkene-geometry/scene.mjs +170 -0
  967. package/dist/domains/chem/apparatus-choice/manifest.mjs +51 -0
  968. package/dist/domains/chem/apparatus-choice/runtime.mjs +5 -0
  969. package/dist/domains/chem/applied-chemistry/manifest.mjs +62 -0
  970. package/dist/domains/chem/applied-chemistry/runtime.mjs +5 -0
  971. package/dist/domains/chem/arene-evidence/activity.mjs +86 -0
  972. package/dist/domains/chem/arene-evidence/manifest.mjs +51 -0
  973. package/dist/domains/chem/arene-evidence/model.d.mts +71 -0
  974. package/dist/domains/chem/arene-evidence/model.mjs +116 -0
  975. package/dist/domains/chem/arene-evidence/runtime.mjs +138 -0
  976. package/dist/domains/chem/arene-evidence/scene.d.mts +8 -0
  977. package/dist/domains/chem/arene-evidence/scene.mjs +208 -0
  978. package/dist/domains/chem/atomic-orbital/activity.mjs +3 -0
  979. package/dist/domains/chem/atomic-orbital/manifest.mjs +71 -0
  980. package/dist/domains/chem/atomic-orbital/runtime.mjs +20 -0
  981. package/dist/domains/chem/battery/manifest.mjs +55 -0
  982. package/dist/domains/chem/battery/runtime.mjs +15 -0
  983. package/dist/domains/chem/bohr-atom/manifest.mjs +55 -0
  984. package/dist/domains/chem/bohr-atom/runtime.mjs +15 -0
  985. package/dist/domains/chem/catalytic-cycle/activity.mjs +36 -0
  986. package/dist/domains/chem/catalytic-cycle/manifest.mjs +44 -0
  987. package/dist/domains/chem/catalytic-cycle/model.mjs +61 -0
  988. package/dist/domains/chem/catalytic-cycle/runtime.mjs +61 -0
  989. package/dist/domains/chem/catalytic-cycle/scene.mjs +27 -0
  990. package/dist/domains/chem/change-detective/activity.mjs +81 -0
  991. package/dist/domains/chem/change-detective/manifest.mjs +46 -0
  992. package/dist/domains/chem/change-detective/model.mjs +65 -0
  993. package/dist/domains/chem/change-detective/runtime.mjs +73 -0
  994. package/dist/domains/chem/change-detective/scene.mjs +415 -0
  995. package/dist/domains/chem/chem-qualitative-analysis/activity.mjs +95 -0
  996. package/dist/domains/chem/chem-qualitative-analysis/manifest.mjs +68 -0
  997. package/dist/domains/chem/chem-qualitative-analysis/runtime.mjs +303 -0
  998. package/dist/domains/chem/chromatography-plate/activity.mjs +87 -0
  999. package/dist/domains/chem/chromatography-plate/manifest.mjs +59 -0
  1000. package/dist/domains/chem/chromatography-plate/model.mjs +180 -0
  1001. package/dist/domains/chem/chromatography-plate/runtime.mjs +200 -0
  1002. package/dist/domains/chem/chromatography-plate/scene.mjs +292 -0
  1003. package/dist/domains/chem/complex-colour/activity.mjs +94 -0
  1004. package/dist/domains/chem/complex-colour/manifest.mjs +53 -0
  1005. package/dist/domains/chem/complex-colour/model.mjs +243 -0
  1006. package/dist/domains/chem/complex-colour/runtime.mjs +168 -0
  1007. package/dist/domains/chem/complex-colour/scene.mjs +283 -0
  1008. package/dist/domains/chem/complex-shape/activity.mjs +86 -0
  1009. package/dist/domains/chem/complex-shape/manifest.mjs +52 -0
  1010. package/dist/domains/chem/complex-shape/model.mjs +182 -0
  1011. package/dist/domains/chem/complex-shape/runtime.mjs +162 -0
  1012. package/dist/domains/chem/complex-shape/scene.mjs +270 -0
  1013. package/dist/domains/chem/composition-evidence/activity.mjs +94 -0
  1014. package/dist/domains/chem/composition-evidence/manifest.mjs +71 -0
  1015. package/dist/domains/chem/composition-evidence/model.mjs +60 -0
  1016. package/dist/domains/chem/composition-evidence/runtime.mjs +127 -0
  1017. package/dist/domains/chem/composition-evidence/scene.mjs +308 -0
  1018. package/dist/domains/chem/conductivity-bench/activity.mjs +71 -0
  1019. package/dist/domains/chem/conductivity-bench/manifest.mjs +58 -0
  1020. package/dist/domains/chem/conductivity-bench/model.mjs +257 -0
  1021. package/dist/domains/chem/conductivity-bench/runtime.mjs +136 -0
  1022. package/dist/domains/chem/conductivity-bench/scene.mjs +305 -0
  1023. package/dist/domains/chem/contact-process-control/activity.mjs +75 -0
  1024. package/dist/domains/chem/contact-process-control/manifest.mjs +48 -0
  1025. package/dist/domains/chem/contact-process-control/model.mjs +106 -0
  1026. package/dist/domains/chem/contact-process-control/runtime.mjs +65 -0
  1027. package/dist/domains/chem/contact-process-control/scene.mjs +694 -0
  1028. package/dist/domains/chem/crystal-lattice/activity.mjs +3 -0
  1029. package/dist/domains/chem/crystal-lattice/manifest.mjs +68 -0
  1030. package/dist/domains/chem/crystal-lattice/runtime.mjs +20 -0
  1031. package/dist/domains/chem/dilution/manifest.mjs +57 -0
  1032. package/dist/domains/chem/dilution/runtime.mjs +5 -0
  1033. package/dist/domains/chem/electrochem/manifest.mjs +72 -0
  1034. package/dist/domains/chem/electrochem/runtime.mjs +5 -0
  1035. package/dist/domains/chem/electrolysis-bench/activity.mjs +72 -0
  1036. package/dist/domains/chem/electrolysis-bench/manifest.mjs +71 -0
  1037. package/dist/domains/chem/electrolysis-bench/model.mjs +174 -0
  1038. package/dist/domains/chem/electrolysis-bench/runtime.mjs +169 -0
  1039. package/dist/domains/chem/electrolysis-bench/scene.mjs +291 -0
  1040. package/dist/domains/chem/energy-cycle/activity.mjs +86 -0
  1041. package/dist/domains/chem/energy-cycle/manifest.mjs +52 -0
  1042. package/dist/domains/chem/energy-cycle/model.mjs +249 -0
  1043. package/dist/domains/chem/energy-cycle/runtime.mjs +181 -0
  1044. package/dist/domains/chem/energy-cycle/scene.mjs +277 -0
  1045. package/dist/domains/chem/equation-conservation-desk/activity.mjs +55 -0
  1046. package/dist/domains/chem/equation-conservation-desk/manifest.mjs +61 -0
  1047. package/dist/domains/chem/equation-conservation-desk/runtime.mjs +6 -0
  1048. package/dist/domains/chem/faraday-bench/activity.mjs +51 -0
  1049. package/dist/domains/chem/faraday-bench/manifest.mjs +65 -0
  1050. package/dist/domains/chem/faraday-bench/model.mjs +193 -0
  1051. package/dist/domains/chem/faraday-bench/runtime.mjs +99 -0
  1052. package/dist/domains/chem/faraday-bench/scene.mjs +254 -0
  1053. package/dist/domains/chem/flame-test/activity.mjs +66 -0
  1054. package/dist/domains/chem/flame-test/manifest.mjs +66 -0
  1055. package/dist/domains/chem/flame-test/model.mjs +149 -0
  1056. package/dist/domains/chem/flame-test/runtime.mjs +120 -0
  1057. package/dist/domains/chem/flame-test/scene.mjs +172 -0
  1058. package/dist/domains/chem/formula-forge/activity.mjs +55 -0
  1059. package/dist/domains/chem/formula-forge/manifest.mjs +66 -0
  1060. package/dist/domains/chem/formula-forge/runtime.mjs +6 -0
  1061. package/dist/domains/chem/formula-workbench/activity.mjs +92 -0
  1062. package/dist/domains/chem/formula-workbench/manifest.mjs +73 -0
  1063. package/dist/domains/chem/formula-workbench/model.mjs +89 -0
  1064. package/dist/domains/chem/formula-workbench/runtime.mjs +135 -0
  1065. package/dist/domains/chem/formula-workbench/scene.mjs +275 -0
  1066. package/dist/domains/chem/fuel-cell-flow/activity.mjs +81 -0
  1067. package/dist/domains/chem/fuel-cell-flow/manifest.mjs +49 -0
  1068. package/dist/domains/chem/fuel-cell-flow/model.mjs +63 -0
  1069. package/dist/domains/chem/fuel-cell-flow/runtime.mjs +134 -0
  1070. package/dist/domains/chem/fuel-cell-flow/scene.mjs +245 -0
  1071. package/dist/domains/chem/functional-group-lens/activity.mjs +86 -0
  1072. package/dist/domains/chem/functional-group-lens/manifest.mjs +54 -0
  1073. package/dist/domains/chem/functional-group-lens/model.d.mts +128 -0
  1074. package/dist/domains/chem/functional-group-lens/model.mjs +250 -0
  1075. package/dist/domains/chem/functional-group-lens/runtime.d.mts +16 -0
  1076. package/dist/domains/chem/functional-group-lens/runtime.mjs +135 -0
  1077. package/dist/domains/chem/functional-group-lens/scene.d.mts +8 -0
  1078. package/dist/domains/chem/functional-group-lens/scene.mjs +389 -0
  1079. package/dist/domains/chem/gas-box/manifest.mjs +79 -0
  1080. package/dist/domains/chem/gas-box/runtime.mjs +5 -0
  1081. package/dist/domains/chem/hydrate-cycle/activity.mjs +78 -0
  1082. package/dist/domains/chem/hydrate-cycle/manifest.mjs +47 -0
  1083. package/dist/domains/chem/hydrate-cycle/model.mjs +66 -0
  1084. package/dist/domains/chem/hydrate-cycle/runtime.mjs +72 -0
  1085. package/dist/domains/chem/hydrate-cycle/scene.mjs +187 -0
  1086. package/dist/domains/chem/industrial-process/manifest.mjs +51 -0
  1087. package/dist/domains/chem/industrial-process/runtime.mjs +5 -0
  1088. package/dist/domains/chem/ionic-bond-builder/manifest.mjs +47 -0
  1089. package/dist/domains/chem/ionic-bond-builder/runtime.mjs +5 -0
  1090. package/dist/domains/chem/isomer-builder/activity.mjs +86 -0
  1091. package/dist/domains/chem/isomer-builder/manifest.mjs +52 -0
  1092. package/dist/domains/chem/isomer-builder/model.mjs +345 -0
  1093. package/dist/domains/chem/isomer-builder/runtime.mjs +174 -0
  1094. package/dist/domains/chem/isomer-builder/scene.mjs +216 -0
  1095. package/dist/domains/chem/kinetics/manifest.mjs +59 -0
  1096. package/dist/domains/chem/kinetics/runtime.mjs +5 -0
  1097. package/dist/domains/chem/le-chatelier/manifest.mjs +57 -0
  1098. package/dist/domains/chem/le-chatelier/runtime.mjs +5 -0
  1099. package/dist/domains/chem/mechanism-walk/activity.mjs +53 -0
  1100. package/dist/domains/chem/mechanism-walk/manifest.mjs +53 -0
  1101. package/dist/domains/chem/mechanism-walk/model.mjs +429 -0
  1102. package/dist/domains/chem/mechanism-walk/runtime.mjs +76 -0
  1103. package/dist/domains/chem/mechanism-walk/scene.mjs +36 -0
  1104. package/dist/domains/chem/mole-factory/activity.mjs +55 -0
  1105. package/dist/domains/chem/mole-factory/manifest.mjs +62 -0
  1106. package/dist/domains/chem/mole-factory/runtime.mjs +6 -0
  1107. package/dist/domains/chem/molecular-geometry/activity.mjs +3 -0
  1108. package/dist/domains/chem/molecular-geometry/manifest.mjs +74 -0
  1109. package/dist/domains/chem/molecular-geometry/runtime.mjs +22 -0
  1110. package/dist/domains/chem/nmr-reader/activity.mjs +88 -0
  1111. package/dist/domains/chem/nmr-reader/manifest.mjs +59 -0
  1112. package/dist/domains/chem/nmr-reader/model.mjs +200 -0
  1113. package/dist/domains/chem/nmr-reader/runtime.mjs +167 -0
  1114. package/dist/domains/chem/nmr-reader/scene.mjs +30 -0
  1115. package/dist/domains/chem/orbital-diagram/activity.mjs +74 -0
  1116. package/dist/domains/chem/orbital-diagram/manifest.mjs +58 -0
  1117. package/dist/domains/chem/orbital-diagram/model.mjs +182 -0
  1118. package/dist/domains/chem/orbital-diagram/runtime.mjs +98 -0
  1119. package/dist/domains/chem/orbital-diagram/scene.mjs +289 -0
  1120. package/dist/domains/chem/orbital-overlap/activity.mjs +3 -0
  1121. package/dist/domains/chem/orbital-overlap/manifest.mjs +60 -0
  1122. package/dist/domains/chem/orbital-overlap/runtime.mjs +18 -0
  1123. package/dist/domains/chem/organic-formula-studio/activity.mjs +128 -0
  1124. package/dist/domains/chem/organic-formula-studio/manifest.mjs +67 -0
  1125. package/dist/domains/chem/organic-formula-studio/model.mjs +47 -0
  1126. package/dist/domains/chem/organic-formula-studio/pattern-scene.mjs +344 -0
  1127. package/dist/domains/chem/organic-formula-studio/runtime.mjs +221 -0
  1128. package/dist/domains/chem/organic-formula-studio/scene.mjs +354 -0
  1129. package/dist/domains/chem/organic-formula-studio/topics.mjs +186 -0
  1130. package/dist/domains/chem/organic-reaction-map/manifest.mjs +67 -0
  1131. package/dist/domains/chem/organic-reaction-map/runtime.mjs +5 -0
  1132. package/dist/domains/chem/particle-theatre/manifest.mjs +66 -0
  1133. package/dist/domains/chem/particle-theatre/runtime.mjs +5 -0
  1134. package/dist/domains/chem/percent-lens/activity.mjs +119 -0
  1135. package/dist/domains/chem/percent-lens/manifest.mjs +65 -0
  1136. package/dist/domains/chem/percent-lens/model.mjs +84 -0
  1137. package/dist/domains/chem/percent-lens/runtime.mjs +114 -0
  1138. package/dist/domains/chem/percent-lens/scene.mjs +278 -0
  1139. package/dist/domains/chem/percentage-purity-lab/activity.mjs +85 -0
  1140. package/dist/domains/chem/percentage-purity-lab/manifest.mjs +51 -0
  1141. package/dist/domains/chem/percentage-purity-lab/model.mjs +101 -0
  1142. package/dist/domains/chem/percentage-purity-lab/runtime.mjs +146 -0
  1143. package/dist/domains/chem/percentage-purity-lab/scene.mjs +309 -0
  1144. package/dist/domains/chem/percentage-yield-lab/activity.mjs +54 -0
  1145. package/dist/domains/chem/percentage-yield-lab/manifest.mjs +60 -0
  1146. package/dist/domains/chem/percentage-yield-lab/model.mjs +96 -0
  1147. package/dist/domains/chem/percentage-yield-lab/runtime.mjs +124 -0
  1148. package/dist/domains/chem/percentage-yield-lab/scene.mjs +152 -0
  1149. package/dist/domains/chem/periodic-trends/manifest.mjs +60 -0
  1150. package/dist/domains/chem/periodic-trends/runtime.mjs +5 -0
  1151. package/dist/domains/chem/polymer-builder/activity.mjs +88 -0
  1152. package/dist/domains/chem/polymer-builder/manifest.mjs +63 -0
  1153. package/dist/domains/chem/polymer-builder/model.mjs +200 -0
  1154. package/dist/domains/chem/polymer-builder/runtime.mjs +175 -0
  1155. package/dist/domains/chem/polymer-builder/scene.mjs +170 -0
  1156. package/dist/domains/chem/practical-observation/activity.mjs +66 -0
  1157. package/dist/domains/chem/practical-observation/manifest.mjs +50 -0
  1158. package/dist/domains/chem/practical-observation/model.mjs +487 -0
  1159. package/dist/domains/chem/practical-observation/runtime.mjs +113 -0
  1160. package/dist/domains/chem/practical-observation/scene.mjs +662 -0
  1161. package/dist/domains/chem/precipitation-bench/activity.mjs +65 -0
  1162. package/dist/domains/chem/precipitation-bench/manifest.mjs +61 -0
  1163. package/dist/domains/chem/precipitation-bench/model.mjs +119 -0
  1164. package/dist/domains/chem/precipitation-bench/runtime.mjs +90 -0
  1165. package/dist/domains/chem/precipitation-bench/scene.mjs +215 -0
  1166. package/dist/domains/chem/quantity-route/manifest.mjs +133 -0
  1167. package/dist/domains/chem/quantity-route/runtime.mjs +5 -0
  1168. package/dist/domains/chem/ratio-normalizer/manifest.mjs +61 -0
  1169. package/dist/domains/chem/ratio-normalizer/runtime.mjs +5 -0
  1170. package/dist/domains/chem/reaction-evidence/manifest.mjs +51 -0
  1171. package/dist/domains/chem/reaction-evidence/runtime.mjs +5 -0
  1172. package/dist/domains/chem/reaction-lab/manifest.mjs +56 -0
  1173. package/dist/domains/chem/reaction-lab/runtime.mjs +18 -0
  1174. package/dist/domains/chem/reaction-profile/manifest.mjs +57 -0
  1175. package/dist/domains/chem/reaction-profile/runtime.mjs +17 -0
  1176. package/dist/domains/chem/reagent-ladder/activity.mjs +85 -0
  1177. package/dist/domains/chem/reagent-ladder/manifest.mjs +58 -0
  1178. package/dist/domains/chem/reagent-ladder/model.mjs +120 -0
  1179. package/dist/domains/chem/reagent-ladder/runtime.mjs +107 -0
  1180. package/dist/domains/chem/reagent-ladder/scene.mjs +174 -0
  1181. package/dist/domains/chem/redox-balancer/activity.mjs +86 -0
  1182. package/dist/domains/chem/redox-balancer/manifest.mjs +52 -0
  1183. package/dist/domains/chem/redox-balancer/model.mjs +191 -0
  1184. package/dist/domains/chem/redox-balancer/runtime.mjs +175 -0
  1185. package/dist/domains/chem/redox-balancer/scene.mjs +159 -0
  1186. package/dist/domains/chem/relation-origin/activity.mjs +42 -0
  1187. package/dist/domains/chem/relation-origin/manifest.mjs +61 -0
  1188. package/dist/domains/chem/relation-origin/model.mjs +172 -0
  1189. package/dist/domains/chem/relation-origin/runtime.mjs +114 -0
  1190. package/dist/domains/chem/relation-origin/scene.mjs +195 -0
  1191. package/dist/domains/chem/solubility-kitchen/activity.mjs +54 -0
  1192. package/dist/domains/chem/solubility-kitchen/manifest.mjs +66 -0
  1193. package/dist/domains/chem/solubility-kitchen/runtime.mjs +6 -0
  1194. package/dist/domains/chem/soluble-salt-workshop/activity.mjs +115 -0
  1195. package/dist/domains/chem/soluble-salt-workshop/manifest.mjs +50 -0
  1196. package/dist/domains/chem/soluble-salt-workshop/model.mjs +187 -0
  1197. package/dist/domains/chem/soluble-salt-workshop/runtime.mjs +118 -0
  1198. package/dist/domains/chem/soluble-salt-workshop/scene.mjs +700 -0
  1199. package/dist/domains/chem/solution-box/manifest.mjs +57 -0
  1200. package/dist/domains/chem/solution-box/runtime.mjs +5 -0
  1201. package/dist/domains/chem/solution-mixer/activity.mjs +54 -0
  1202. package/dist/domains/chem/solution-mixer/manifest.mjs +58 -0
  1203. package/dist/domains/chem/solution-mixer/runtime.mjs +6 -0
  1204. package/dist/domains/chem/species-workshop/activity.mjs +55 -0
  1205. package/dist/domains/chem/species-workshop/manifest.mjs +66 -0
  1206. package/dist/domains/chem/species-workshop/runtime.mjs +6 -0
  1207. package/dist/domains/chem/specimen-row/activity.mjs +70 -0
  1208. package/dist/domains/chem/specimen-row/manifest.mjs +57 -0
  1209. package/dist/domains/chem/specimen-row/model.mjs +122 -0
  1210. package/dist/domains/chem/specimen-row/runtime.mjs +105 -0
  1211. package/dist/domains/chem/specimen-row/scene.mjs +230 -0
  1212. package/dist/domains/chem/spectrum-reader/activity.mjs +36 -0
  1213. package/dist/domains/chem/spectrum-reader/manifest.mjs +47 -0
  1214. package/dist/domains/chem/spectrum-reader/model.mjs +244 -0
  1215. package/dist/domains/chem/spectrum-reader/runtime.mjs +62 -0
  1216. package/dist/domains/chem/spectrum-reader/scene.mjs +37 -0
  1217. package/dist/domains/chem/stereochemistry/activity.mjs +3 -0
  1218. package/dist/domains/chem/stereochemistry/manifest.mjs +65 -0
  1219. package/dist/domains/chem/stereochemistry/runtime.mjs +21 -0
  1220. package/dist/domains/chem/stoichiometry/manifest.mjs +61 -0
  1221. package/dist/domains/chem/stoichiometry/runtime.mjs +5 -0
  1222. package/dist/domains/chem/structure-detective/activity.mjs +67 -0
  1223. package/dist/domains/chem/structure-detective/manifest.mjs +59 -0
  1224. package/dist/domains/chem/structure-detective/runtime.mjs +6 -0
  1225. package/dist/domains/chem/synthesis-route/activity.mjs +36 -0
  1226. package/dist/domains/chem/synthesis-route/manifest.mjs +45 -0
  1227. package/dist/domains/chem/synthesis-route/model.mjs +165 -0
  1228. package/dist/domains/chem/synthesis-route/runtime.mjs +67 -0
  1229. package/dist/domains/chem/synthesis-route/scene.mjs +152 -0
  1230. package/dist/domains/chem/titration/manifest.mjs +62 -0
  1231. package/dist/domains/chem/titration/runtime.mjs +5 -0
  1232. package/dist/domains/chem/titration-run/activity.mjs +54 -0
  1233. package/dist/domains/chem/titration-run/manifest.mjs +61 -0
  1234. package/dist/domains/chem/titration-run/model.mjs +174 -0
  1235. package/dist/domains/chem/titration-run/runtime.mjs +113 -0
  1236. package/dist/domains/chem/titration-run/scene.mjs +166 -0
  1237. package/dist/domains/chem/trend-axis/activity.mjs +52 -0
  1238. package/dist/domains/chem/trend-axis/manifest.mjs +57 -0
  1239. package/dist/domains/chem/trend-axis/model.mjs +487 -0
  1240. package/dist/domains/chem/trend-axis/runtime.mjs +87 -0
  1241. package/dist/domains/chem/trend-axis/scene.mjs +246 -0
  1242. package/dist/domains/circuits/ac-dc/manifest.mjs +65 -0
  1243. package/dist/domains/circuits/ac-dc/runtime.mjs +5 -0
  1244. package/dist/domains/circuits/ac-response/activity.mjs +3 -0
  1245. package/dist/domains/circuits/ac-response/manifest.mjs +70 -0
  1246. package/dist/domains/circuits/ac-response/runtime.mjs +3 -0
  1247. package/dist/domains/circuits/bjt-inside/manifest.mjs +57 -0
  1248. package/dist/domains/circuits/bjt-inside/runtime.mjs +5 -0
  1249. package/dist/domains/circuits/brownout/manifest.mjs +59 -0
  1250. package/dist/domains/circuits/brownout/runtime.mjs +5 -0
  1251. package/dist/domains/circuits/capacitor-leak/manifest.mjs +61 -0
  1252. package/dist/domains/circuits/capacitor-leak/runtime.mjs +5 -0
  1253. package/dist/domains/circuits/cell-combination/activity.mjs +3 -0
  1254. package/dist/domains/circuits/cell-combination/manifest.mjs +69 -0
  1255. package/dist/domains/circuits/cell-combination/runtime.mjs +3 -0
  1256. package/dist/domains/circuits/circuit/manifest.mjs +64 -0
  1257. package/dist/domains/circuits/circuit/runtime.mjs +33 -0
  1258. package/dist/domains/circuits/circuit-builder/authoring.mjs +138 -0
  1259. package/dist/domains/circuits/circuit-builder/manifest.mjs +78 -0
  1260. package/dist/domains/circuits/circuit-builder/runtime.mjs +20 -0
  1261. package/dist/domains/circuits/circuit-builder/shared.mjs +16 -0
  1262. package/dist/domains/circuits/circuit-lab/manifest.mjs +64 -0
  1263. package/dist/domains/circuits/circuit-lab/runtime.mjs +21 -0
  1264. package/dist/domains/circuits/circuit-scene/authoring.mjs +33 -0
  1265. package/dist/domains/circuits/circuit-scene/manifest.mjs +101 -0
  1266. package/dist/domains/circuits/circuit-scene/runtime.mjs +25 -0
  1267. package/dist/domains/circuits/cmos-inverter/manifest.mjs +69 -0
  1268. package/dist/domains/circuits/cmos-inverter/runtime.mjs +5 -0
  1269. package/dist/domains/circuits/cmos-nand/manifest.mjs +60 -0
  1270. package/dist/domains/circuits/cmos-nand/runtime.mjs +5 -0
  1271. package/dist/domains/circuits/cmos-nor/manifest.mjs +60 -0
  1272. package/dist/domains/circuits/cmos-nor/runtime.mjs +5 -0
  1273. package/dist/domains/circuits/conduction/manifest.mjs +57 -0
  1274. package/dist/domains/circuits/conduction/runtime.mjs +5 -0
  1275. package/dist/domains/circuits/diode/manifest.mjs +55 -0
  1276. package/dist/domains/circuits/diode/runtime.mjs +5 -0
  1277. package/dist/domains/circuits/energy-cost/activity.mjs +3 -0
  1278. package/dist/domains/circuits/energy-cost/manifest.mjs +79 -0
  1279. package/dist/domains/circuits/energy-cost/runtime.mjs +3 -0
  1280. package/dist/domains/circuits/hall-effect/manifest.mjs +51 -0
  1281. package/dist/domains/circuits/hall-effect/runtime.mjs +5 -0
  1282. package/dist/domains/circuits/kirchhoff-laws/manifest.mjs +64 -0
  1283. package/dist/domains/circuits/kirchhoff-laws/runtime.mjs +5 -0
  1284. package/dist/domains/circuits/meter-conversion/activity.mjs +3 -0
  1285. package/dist/domains/circuits/meter-conversion/manifest.mjs +69 -0
  1286. package/dist/domains/circuits/meter-conversion/runtime.mjs +3 -0
  1287. package/dist/domains/circuits/mosfet-inside/manifest.mjs +58 -0
  1288. package/dist/domains/circuits/mosfet-inside/runtime.mjs +5 -0
  1289. package/dist/domains/circuits/network-reduction/activity.mjs +3 -0
  1290. package/dist/domains/circuits/network-reduction/manifest.mjs +85 -0
  1291. package/dist/domains/circuits/network-reduction/runtime.mjs +3 -0
  1292. package/dist/domains/circuits/null-balance/activity.mjs +3 -0
  1293. package/dist/domains/circuits/null-balance/manifest.mjs +69 -0
  1294. package/dist/domains/circuits/null-balance/runtime.mjs +3 -0
  1295. package/dist/domains/circuits/pn-junction/manifest.mjs +57 -0
  1296. package/dist/domains/circuits/pn-junction/runtime.mjs +5 -0
  1297. package/dist/domains/circuits/potential-divider/manifest.mjs +69 -0
  1298. package/dist/domains/circuits/potential-divider/runtime.mjs +5 -0
  1299. package/dist/domains/circuits/rc-charging/manifest.mjs +59 -0
  1300. package/dist/domains/circuits/rc-charging/runtime.mjs +5 -0
  1301. package/dist/domains/circuits/rnmos-not/manifest.mjs +62 -0
  1302. package/dist/domains/circuits/rnmos-not/runtime.mjs +5 -0
  1303. package/dist/domains/circuits/silicon-lattice/manifest.mjs +63 -0
  1304. package/dist/domains/circuits/silicon-lattice/runtime.mjs +5 -0
  1305. package/dist/domains/circuits/transistor/manifest.mjs +60 -0
  1306. package/dist/domains/circuits/transistor/runtime.mjs +5 -0
  1307. package/dist/domains/data/design-records/manifest.mjs +54 -0
  1308. package/dist/domains/data/design-records/runtime.mjs +3 -0
  1309. package/dist/domains/data/dirty-data/manifest.mjs +53 -0
  1310. package/dist/domains/data/dirty-data/runtime.mjs +3 -0
  1311. package/dist/domains/databases/b-plus-range/manifest.mjs +48 -0
  1312. package/dist/domains/databases/b-plus-range/runtime.mjs +3 -0
  1313. package/dist/domains/databases/index-detective/manifest.mjs +54 -0
  1314. package/dist/domains/databases/index-detective/runtime.mjs +3 -0
  1315. package/dist/domains/databases/query-plan/manifest.mjs +49 -0
  1316. package/dist/domains/databases/query-plan/runtime.mjs +3 -0
  1317. package/dist/domains/databases/range-query/manifest.mjs +53 -0
  1318. package/dist/domains/databases/range-query/runtime.mjs +3 -0
  1319. package/dist/domains/discrete/arrangements/manifest.mjs +55 -0
  1320. package/dist/domains/discrete/arrangements/runtime.mjs +5 -0
  1321. package/dist/domains/discrete/bayes/manifest.mjs +58 -0
  1322. package/dist/domains/discrete/bayes/runtime.mjs +5 -0
  1323. package/dist/domains/discrete/binomial/manifest.mjs +50 -0
  1324. package/dist/domains/discrete/binomial/runtime.mjs +5 -0
  1325. package/dist/domains/discrete/combination-studio/manifest.mjs +74 -0
  1326. package/dist/domains/discrete/combination-studio/runtime.mjs +5 -0
  1327. package/dist/domains/discrete/counting-slots/manifest.mjs +74 -0
  1328. package/dist/domains/discrete/counting-slots/runtime.mjs +5 -0
  1329. package/dist/domains/discrete/counting-tree/manifest.mjs +62 -0
  1330. package/dist/domains/discrete/counting-tree/runtime.mjs +5 -0
  1331. package/dist/domains/discrete/expected-value/manifest.mjs +53 -0
  1332. package/dist/domains/discrete/expected-value/runtime.mjs +5 -0
  1333. package/dist/domains/discrete/hypergeometric/manifest.mjs +56 -0
  1334. package/dist/domains/discrete/hypergeometric/runtime.mjs +5 -0
  1335. package/dist/domains/discrete/induction-ladder/manifest.mjs +54 -0
  1336. package/dist/domains/discrete/induction-ladder/runtime.mjs +5 -0
  1337. package/dist/domains/discrete/invariant-detective/manifest.mjs +61 -0
  1338. package/dist/domains/discrete/invariant-detective/runtime.mjs +5 -0
  1339. package/dist/domains/discrete/karnaugh/manifest.mjs +69 -0
  1340. package/dist/domains/discrete/karnaugh/runtime.mjs +5 -0
  1341. package/dist/domains/discrete/lln/manifest.mjs +52 -0
  1342. package/dist/domains/discrete/lln/runtime.mjs +5 -0
  1343. package/dist/domains/discrete/modular-clock/manifest.mjs +58 -0
  1344. package/dist/domains/discrete/modular-clock/runtime.mjs +5 -0
  1345. package/dist/domains/discrete/monte-carlo/manifest.mjs +76 -0
  1346. package/dist/domains/discrete/monte-carlo/runtime.mjs +5 -0
  1347. package/dist/domains/discrete/monty-hall/manifest.mjs +53 -0
  1348. package/dist/domains/discrete/monty-hall/runtime.mjs +5 -0
  1349. package/dist/domains/discrete/outcome-builder/manifest.mjs +53 -0
  1350. package/dist/domains/discrete/outcome-builder/runtime.mjs +5 -0
  1351. package/dist/domains/discrete/pascal/manifest.mjs +57 -0
  1352. package/dist/domains/discrete/pascal/runtime.mjs +5 -0
  1353. package/dist/domains/discrete/pigeonhole-adversary/manifest.mjs +56 -0
  1354. package/dist/domains/discrete/pigeonhole-adversary/runtime.mjs +5 -0
  1355. package/dist/domains/discrete/proof-builder/manifest.mjs +117 -0
  1356. package/dist/domains/discrete/proof-builder/runtime.mjs +5 -0
  1357. package/dist/domains/discrete/recurrence-builder/manifest.mjs +55 -0
  1358. package/dist/domains/discrete/recurrence-builder/runtime.mjs +5 -0
  1359. package/dist/domains/discrete/rule-card/builtins.mjs +17 -0
  1360. package/dist/domains/discrete/rule-card/manifest.mjs +83 -0
  1361. package/dist/domains/discrete/rule-card/presets.mjs +23 -0
  1362. package/dist/domains/discrete/rule-card/runtime.mjs +30 -0
  1363. package/dist/domains/discrete/sample-space/manifest.mjs +77 -0
  1364. package/dist/domains/discrete/sample-space/runtime.mjs +5 -0
  1365. package/dist/domains/discrete/selection/manifest.mjs +57 -0
  1366. package/dist/domains/discrete/selection/runtime.mjs +5 -0
  1367. package/dist/domains/discrete/statement-logic/manifest.mjs +106 -0
  1368. package/dist/domains/discrete/statement-logic/runtime.mjs +5 -0
  1369. package/dist/domains/discrete/truth-table/manifest.mjs +57 -0
  1370. package/dist/domains/discrete/truth-table/runtime.mjs +5 -0
  1371. package/dist/domains/discrete/venn/manifest.mjs +73 -0
  1372. package/dist/domains/discrete/venn/runtime.mjs +5 -0
  1373. package/dist/domains/distributed-systems/shard-key/manifest.mjs +50 -0
  1374. package/dist/domains/distributed-systems/shard-key/runtime.mjs +3 -0
  1375. package/dist/domains/domain-map.mjs +1008 -0
  1376. package/dist/domains/economics/demand-shift-vs-move/manifest.mjs +47 -0
  1377. package/dist/domains/economics/demand-shift-vs-move/runtime.mjs +5 -0
  1378. package/dist/domains/economics/elasticity-revenue/manifest.mjs +60 -0
  1379. package/dist/domains/economics/elasticity-revenue/runtime.mjs +24 -0
  1380. package/dist/domains/economics/market-equilibrium/manifest.mjs +53 -0
  1381. package/dist/domains/economics/market-equilibrium/runtime.mjs +28 -0
  1382. package/dist/domains/exam/exam-question/manifest.mjs +87 -0
  1383. package/dist/domains/exam/exam-question/runtime.mjs +5 -0
  1384. package/dist/domains/geography/cycle/manifest.mjs +135 -0
  1385. package/dist/domains/geography/cycle/runtime.mjs +26 -0
  1386. package/dist/domains/geometry/geometry-board/authoring.mjs +33 -0
  1387. package/dist/domains/geometry/geometry-board/manifest.mjs +135 -0
  1388. package/dist/domains/geometry/geometry-board/runtime.mjs +16 -0
  1389. package/dist/domains/geometry/geometry-board/scene.mjs +62 -0
  1390. package/dist/domains/geometry/intersecting-circles/manifest.mjs +56 -0
  1391. package/dist/domains/geometry/intersecting-circles/runtime.mjs +16 -0
  1392. package/dist/domains/ict/array-vs-list/manifest.mjs +75 -0
  1393. package/dist/domains/ict/array-vs-list/runtime.mjs +5 -0
  1394. package/dist/domains/ict/base-odometer/manifest.mjs +72 -0
  1395. package/dist/domains/ict/base-odometer/runtime.mjs +5 -0
  1396. package/dist/domains/ict/binary-counter/manifest.mjs +65 -0
  1397. package/dist/domains/ict/binary-counter/runtime.mjs +235 -0
  1398. package/dist/domains/ict/binary-display/manifest.mjs +59 -0
  1399. package/dist/domains/ict/binary-display/runtime.mjs +5 -0
  1400. package/dist/domains/ict/binary-search/manifest.mjs +70 -0
  1401. package/dist/domains/ict/binary-search/runtime.mjs +5 -0
  1402. package/dist/domains/ict/bit-grouper/manifest.mjs +59 -0
  1403. package/dist/domains/ict/bit-grouper/runtime.mjs +5 -0
  1404. package/dist/domains/ict/complexity-growth/manifest.mjs +69 -0
  1405. package/dist/domains/ict/complexity-growth/runtime.mjs +5 -0
  1406. package/dist/domains/ict/cost-derivation/manifest.mjs +56 -0
  1407. package/dist/domains/ict/cost-derivation/runtime.mjs +12 -0
  1408. package/dist/domains/ict/graph-algorithm/authoring.mjs +246 -0
  1409. package/dist/domains/ict/graph-algorithm/manifest.mjs +87 -0
  1410. package/dist/domains/ict/graph-algorithm/runtime.mjs +5 -0
  1411. package/dist/domains/ict/grid-path-dp/authoring.mjs +75 -0
  1412. package/dist/domains/ict/grid-path-dp/manifest.mjs +66 -0
  1413. package/dist/domains/ict/grid-path-dp/runtime.mjs +5 -0
  1414. package/dist/domains/ict/hash-table/manifest.mjs +68 -0
  1415. package/dist/domains/ict/hash-table/runtime.mjs +5 -0
  1416. package/dist/domains/ict/heap-quest/authoring.mjs +123 -0
  1417. package/dist/domains/ict/heap-quest/manifest.mjs +76 -0
  1418. package/dist/domains/ict/heap-quest/runtime.mjs +5 -0
  1419. package/dist/domains/ict/jk-flip-flop/manifest.mjs +65 -0
  1420. package/dist/domains/ict/jk-flip-flop/runtime.mjs +273 -0
  1421. package/dist/domains/ict/latch-vs-flip-flop/manifest.mjs +61 -0
  1422. package/dist/domains/ict/latch-vs-flip-flop/runtime.mjs +227 -0
  1423. package/dist/domains/ict/logic-builder/manifest.mjs +67 -0
  1424. package/dist/domains/ict/logic-builder/runtime.mjs +17 -0
  1425. package/dist/domains/ict/logic-circuit/manifest.mjs +79 -0
  1426. package/dist/domains/ict/logic-circuit/runtime.mjs +26 -0
  1427. package/dist/domains/ict/logic-gate/manifest.mjs +71 -0
  1428. package/dist/domains/ict/logic-gate/runtime.mjs +5 -0
  1429. package/dist/domains/ict/place-value-dial/manifest.mjs +60 -0
  1430. package/dist/domains/ict/place-value-dial/runtime.mjs +5 -0
  1431. package/dist/domains/ict/sequence-detector/manifest.mjs +68 -0
  1432. package/dist/domains/ict/sequence-detector/runtime.mjs +328 -0
  1433. package/dist/domains/ict/shift-register/manifest.mjs +65 -0
  1434. package/dist/domains/ict/shift-register/runtime.mjs +199 -0
  1435. package/dist/domains/ict/sorting-quest/manifest.mjs +76 -0
  1436. package/dist/domains/ict/sorting-quest/runtime.mjs +5 -0
  1437. package/dist/domains/ict/sr-latch/manifest.mjs +65 -0
  1438. package/dist/domains/ict/sr-latch/runtime.mjs +253 -0
  1439. package/dist/domains/ict/tree-quest/authoring.mjs +265 -0
  1440. package/dist/domains/ict/tree-quest/manifest.mjs +90 -0
  1441. package/dist/domains/ict/tree-quest/runtime.mjs +5 -0
  1442. package/dist/domains/ict/twos-complement/manifest.mjs +71 -0
  1443. package/dist/domains/ict/twos-complement/runtime.mjs +276 -0
  1444. package/dist/domains/ict/wire-a-chip/manifest.mjs +72 -0
  1445. package/dist/domains/ict/wire-a-chip/runtime.mjs +287 -0
  1446. package/dist/domains/language/agreement/authoring.mjs +76 -0
  1447. package/dist/domains/language/agreement/manifest.mjs +61 -0
  1448. package/dist/domains/language/agreement/runtime.mjs +20 -0
  1449. package/dist/domains/language/article-lens/authoring.mjs +87 -0
  1450. package/dist/domains/language/article-lens/manifest.mjs +61 -0
  1451. package/dist/domains/language/article-lens/runtime.mjs +20 -0
  1452. package/dist/domains/language/cloze/authoring.mjs +70 -0
  1453. package/dist/domains/language/cloze/manifest.mjs +61 -0
  1454. package/dist/domains/language/cloze/runtime.mjs +20 -0
  1455. package/dist/domains/language/dictation/authoring.mjs +66 -0
  1456. package/dist/domains/language/dictation/manifest.mjs +62 -0
  1457. package/dist/domains/language/dictation/runtime.mjs +19 -0
  1458. package/dist/domains/language/error-correct/authoring.mjs +46 -0
  1459. package/dist/domains/language/error-correct/manifest.mjs +60 -0
  1460. package/dist/domains/language/error-correct/runtime.mjs +19 -0
  1461. package/dist/domains/language/listening/authoring.mjs +83 -0
  1462. package/dist/domains/language/listening/manifest.mjs +67 -0
  1463. package/dist/domains/language/listening/runtime.mjs +20 -0
  1464. package/dist/domains/language/preposition/authoring.mjs +100 -0
  1465. package/dist/domains/language/preposition/manifest.mjs +61 -0
  1466. package/dist/domains/language/preposition/runtime.mjs +20 -0
  1467. package/dist/domains/language/reading/authoring.mjs +87 -0
  1468. package/dist/domains/language/reading/manifest.mjs +62 -0
  1469. package/dist/domains/language/reading/runtime.mjs +22 -0
  1470. package/dist/domains/language/sentence-builder/authoring.mjs +74 -0
  1471. package/dist/domains/language/sentence-builder/manifest.mjs +63 -0
  1472. package/dist/domains/language/sentence-builder/runtime.mjs +22 -0
  1473. package/dist/domains/language/shared.mjs +311 -0
  1474. package/dist/domains/language/transform/authoring.mjs +89 -0
  1475. package/dist/domains/language/transform/manifest.mjs +65 -0
  1476. package/dist/domains/language/transform/runtime.mjs +23 -0
  1477. package/dist/domains/language/word-match/authoring.mjs +83 -0
  1478. package/dist/domains/language/word-match/manifest.mjs +59 -0
  1479. package/dist/domains/language/word-match/runtime.mjs +21 -0
  1480. package/dist/domains/manifests.mjs +1009 -0
  1481. package/dist/domains/math/area-model/manifest.mjs +59 -0
  1482. package/dist/domains/math/area-model/runtime.mjs +17 -0
  1483. package/dist/domains/math/area-rearrange/manifest.mjs +65 -0
  1484. package/dist/domains/math/area-rearrange/runtime.mjs +12 -0
  1485. package/dist/domains/math/authoring-kit.mjs +340 -0
  1486. package/dist/domains/math/balance-algebra/manifest.mjs +60 -0
  1487. package/dist/domains/math/balance-algebra/runtime.mjs +20 -0
  1488. package/dist/domains/math/bearings/manifest.mjs +65 -0
  1489. package/dist/domains/math/bearings/runtime.mjs +12 -0
  1490. package/dist/domains/math/bounds-window/manifest.mjs +64 -0
  1491. package/dist/domains/math/bounds-window/runtime.mjs +29 -0
  1492. package/dist/domains/math/broken-tree/manifest.mjs +59 -0
  1493. package/dist/domains/math/broken-tree/runtime.mjs +12 -0
  1494. package/dist/domains/math/calculus-authoring.mjs +127 -0
  1495. package/dist/domains/math/circle-geometry/authoring.mjs +55 -0
  1496. package/dist/domains/math/circle-geometry/manifest.mjs +65 -0
  1497. package/dist/domains/math/circle-geometry/runtime.mjs +5 -0
  1498. package/dist/domains/math/complex-plane/manifest.mjs +64 -0
  1499. package/dist/domains/math/complex-plane/runtime.mjs +5 -0
  1500. package/dist/domains/math/cone-frustum/manifest.mjs +69 -0
  1501. package/dist/domains/math/cone-frustum/runtime.mjs +20 -0
  1502. package/dist/domains/math/conic/authoring.mjs +84 -0
  1503. package/dist/domains/math/conic/manifest.mjs +67 -0
  1504. package/dist/domains/math/conic/runtime.mjs +5 -0
  1505. package/dist/domains/math/custom-scene/authoring.mjs +34 -0
  1506. package/dist/domains/math/custom-scene/manifest.mjs +74 -0
  1507. package/dist/domains/math/custom-scene/runtime.mjs +29 -0
  1508. package/dist/domains/math/custom-scene/shared.mjs +51 -0
  1509. package/dist/domains/math/derivation/authoring.mjs +65 -0
  1510. package/dist/domains/math/derivation/manifest.mjs +62 -0
  1511. package/dist/domains/math/derivation/runtime.mjs +19 -0
  1512. package/dist/domains/math/derivative-explorer/authoring.mjs +15 -0
  1513. package/dist/domains/math/derivative-explorer/manifest.mjs +55 -0
  1514. package/dist/domains/math/derivative-explorer/runtime.mjs +19 -0
  1515. package/dist/domains/math/differential-equation/authoring.mjs +120 -0
  1516. package/dist/domains/math/differential-equation/manifest.mjs +68 -0
  1517. package/dist/domains/math/differential-equation/runtime.mjs +21 -0
  1518. package/dist/domains/math/division-workbench/manifest.mjs +65 -0
  1519. package/dist/domains/math/division-workbench/runtime.mjs +3 -0
  1520. package/dist/domains/math/domain-range/authoring.mjs +87 -0
  1521. package/dist/domains/math/domain-range/manifest.mjs +63 -0
  1522. package/dist/domains/math/domain-range/runtime.mjs +5 -0
  1523. package/dist/domains/math/exact-triangle/manifest.mjs +62 -0
  1524. package/dist/domains/math/exact-triangle/runtime.mjs +19 -0
  1525. package/dist/domains/math/expression-order/manifest.mjs +77 -0
  1526. package/dist/domains/math/expression-order/runtime.mjs +5 -0
  1527. package/dist/domains/math/fraction-bar/manifest.mjs +61 -0
  1528. package/dist/domains/math/fraction-bar/runtime.mjs +5 -0
  1529. package/dist/domains/math/function-machine/manifest.mjs +74 -0
  1530. package/dist/domains/math/function-machine/runtime.mjs +5 -0
  1531. package/dist/domains/math/fundamental-theorem/authoring.mjs +15 -0
  1532. package/dist/domains/math/fundamental-theorem/manifest.mjs +62 -0
  1533. package/dist/domains/math/fundamental-theorem/runtime.mjs +20 -0
  1534. package/dist/domains/math/geometry-foundations/activity.mjs +3 -0
  1535. package/dist/domains/math/geometry-foundations/manifest.mjs +75 -0
  1536. package/dist/domains/math/geometry-foundations/runtime.mjs +3 -0
  1537. package/dist/domains/math/geometry-transform/manifest.mjs +73 -0
  1538. package/dist/domains/math/geometry-transform/runtime.mjs +42 -0
  1539. package/dist/domains/math/gradient-descent/authoring.mjs +76 -0
  1540. package/dist/domains/math/gradient-descent/manifest.mjs +56 -0
  1541. package/dist/domains/math/gradient-descent/runtime.mjs +20 -0
  1542. package/dist/domains/math/graph/authoring.mjs +156 -0
  1543. package/dist/domains/math/graph/manifest.mjs +63 -0
  1544. package/dist/domains/math/graph/runtime.mjs +20 -0
  1545. package/dist/domains/math/growing-pattern/manifest.mjs +59 -0
  1546. package/dist/domains/math/growing-pattern/runtime.mjs +19 -0
  1547. package/dist/domains/math/harmonic-form/manifest.mjs +53 -0
  1548. package/dist/domains/math/harmonic-form/runtime.mjs +12 -0
  1549. package/dist/domains/math/identity-proof/manifest.mjs +71 -0
  1550. package/dist/domains/math/identity-proof/runtime.mjs +12 -0
  1551. package/dist/domains/math/integral-explorer/authoring.mjs +15 -0
  1552. package/dist/domains/math/integral-explorer/manifest.mjs +57 -0
  1553. package/dist/domains/math/integral-explorer/runtime.mjs +21 -0
  1554. package/dist/domains/math/interactive-problem/authoring.mjs +295 -0
  1555. package/dist/domains/math/interactive-problem/manifest.mjs +65 -0
  1556. package/dist/domains/math/interactive-problem/runtime.mjs +26 -0
  1557. package/dist/domains/math/iteration/manifest.mjs +60 -0
  1558. package/dist/domains/math/iteration/runtime.mjs +12 -0
  1559. package/dist/domains/math/limit-explorer/authoring.mjs +15 -0
  1560. package/dist/domains/math/limit-explorer/manifest.mjs +55 -0
  1561. package/dist/domains/math/limit-explorer/runtime.mjs +19 -0
  1562. package/dist/domains/math/linear-model/manifest.mjs +81 -0
  1563. package/dist/domains/math/linear-model/runtime.mjs +19 -0
  1564. package/dist/domains/math/linear-system/manifest.mjs +59 -0
  1565. package/dist/domains/math/linear-system/runtime.mjs +24 -0
  1566. package/dist/domains/math/linearisation/activity.mjs +94 -0
  1567. package/dist/domains/math/linearisation/manifest.mjs +51 -0
  1568. package/dist/domains/math/linearisation/runtime.mjs +110 -0
  1569. package/dist/domains/math/lines-in-space/manifest.mjs +74 -0
  1570. package/dist/domains/math/lines-in-space/runtime.mjs +12 -0
  1571. package/dist/domains/math/log-law-workbench/activity.mjs +112 -0
  1572. package/dist/domains/math/log-law-workbench/manifest.mjs +51 -0
  1573. package/dist/domains/math/log-law-workbench/runtime.mjs +133 -0
  1574. package/dist/domains/math/measurement/activity.mjs +3 -0
  1575. package/dist/domains/math/measurement/manifest.mjs +81 -0
  1576. package/dist/domains/math/measurement/runtime.mjs +3 -0
  1577. package/dist/domains/math/modulus-cases/activity.mjs +94 -0
  1578. package/dist/domains/math/modulus-cases/manifest.mjs +52 -0
  1579. package/dist/domains/math/modulus-cases/runtime.mjs +105 -0
  1580. package/dist/domains/math/mystery-bucket/manifest.mjs +59 -0
  1581. package/dist/domains/math/mystery-bucket/runtime.mjs +19 -0
  1582. package/dist/domains/math/newton-method/authoring.mjs +72 -0
  1583. package/dist/domains/math/newton-method/manifest.mjs +62 -0
  1584. package/dist/domains/math/newton-method/runtime.mjs +19 -0
  1585. package/dist/domains/math/number-line/manifest.mjs +59 -0
  1586. package/dist/domains/math/number-line/runtime.mjs +19 -0
  1587. package/dist/domains/math/number-structure/manifest.mjs +71 -0
  1588. package/dist/domains/math/number-structure/runtime.mjs +3 -0
  1589. package/dist/domains/math/oblique-triangle/manifest.mjs +67 -0
  1590. package/dist/domains/math/oblique-triangle/runtime.mjs +12 -0
  1591. package/dist/domains/math/partial-fractions/manifest.mjs +71 -0
  1592. package/dist/domains/math/partial-fractions/runtime.mjs +12 -0
  1593. package/dist/domains/math/percent-bar/manifest.mjs +66 -0
  1594. package/dist/domains/math/percent-bar/runtime.mjs +5 -0
  1595. package/dist/domains/math/phase-portrait/authoring.mjs +132 -0
  1596. package/dist/domains/math/phase-portrait/manifest.mjs +65 -0
  1597. package/dist/domains/math/phase-portrait/runtime.mjs +21 -0
  1598. package/dist/domains/math/polynomial-solver/manifest.mjs +57 -0
  1599. package/dist/domains/math/polynomial-solver/runtime.mjs +5 -0
  1600. package/dist/domains/math/radian-wrap/manifest.mjs +56 -0
  1601. package/dist/domains/math/radian-wrap/runtime.mjs +12 -0
  1602. package/dist/domains/math/rate-machine/manifest.mjs +73 -0
  1603. package/dist/domains/math/rate-machine/runtime.mjs +5 -0
  1604. package/dist/domains/math/ratio-share/manifest.mjs +61 -0
  1605. package/dist/domains/math/ratio-share/runtime.mjs +5 -0
  1606. package/dist/domains/math/receipt-totals/manifest.mjs +63 -0
  1607. package/dist/domains/math/receipt-totals/runtime.mjs +24 -0
  1608. package/dist/domains/math/schemas.mjs +79 -0
  1609. package/dist/domains/math/sequence-predict/manifest.mjs +65 -0
  1610. package/dist/domains/math/sequence-predict/runtime.mjs +5 -0
  1611. package/dist/domains/math/shared.mjs +19 -0
  1612. package/dist/domains/math/slide-rule/manifest.mjs +38 -0
  1613. package/dist/domains/math/slide-rule/runtime.mjs +12 -0
  1614. package/dist/domains/math/solid-net/manifest.mjs +65 -0
  1615. package/dist/domains/math/solid-net/runtime.mjs +12 -0
  1616. package/dist/domains/math/solid-slice/manifest.mjs +67 -0
  1617. package/dist/domains/math/solid-slice/runtime.mjs +24 -0
  1618. package/dist/domains/math/straight-line/authoring.mjs +86 -0
  1619. package/dist/domains/math/straight-line/manifest.mjs +76 -0
  1620. package/dist/domains/math/straight-line/runtime.mjs +5 -0
  1621. package/dist/domains/math/system-solve/manifest.mjs +71 -0
  1622. package/dist/domains/math/system-solve/runtime.mjs +36 -0
  1623. package/dist/domains/math/tank-design/manifest.mjs +69 -0
  1624. package/dist/domains/math/tank-design/runtime.mjs +20 -0
  1625. package/dist/domains/math/taylor-series/authoring.mjs +81 -0
  1626. package/dist/domains/math/taylor-series/manifest.mjs +63 -0
  1627. package/dist/domains/math/taylor-series/runtime.mjs +20 -0
  1628. package/dist/domains/math/triangle-trig/authoring.mjs +94 -0
  1629. package/dist/domains/math/triangle-trig/manifest.mjs +75 -0
  1630. package/dist/domains/math/triangle-trig/runtime.mjs +18 -0
  1631. package/dist/domains/math/trig-explorer/manifest.mjs +56 -0
  1632. package/dist/domains/math/trig-explorer/runtime.mjs +16 -0
  1633. package/dist/domains/math/trig-signs/manifest.mjs +57 -0
  1634. package/dist/domains/math/trig-signs/runtime.mjs +5 -0
  1635. package/dist/domains/math/vector-geometry-two-d/activity.mjs +94 -0
  1636. package/dist/domains/math/vector-geometry-two-d/manifest.mjs +52 -0
  1637. package/dist/domains/math/vector-geometry-two-d/runtime.mjs +110 -0
  1638. package/dist/domains/math/vertex-parabola/manifest.mjs +56 -0
  1639. package/dist/domains/math/vertex-parabola/runtime.mjs +12 -0
  1640. package/dist/domains/ml/activation-gates/manifest.mjs +60 -0
  1641. package/dist/domains/ml/activation-gates/runtime.mjs +3 -0
  1642. package/dist/domains/ml/activity.mjs +84 -0
  1643. package/dist/domains/ml/affine-neuron/manifest.mjs +62 -0
  1644. package/dist/domains/ml/affine-neuron/runtime.mjs +3 -0
  1645. package/dist/domains/ml/anomaly-detector/manifest.mjs +52 -0
  1646. package/dist/domains/ml/anomaly-detector/runtime.mjs +3 -0
  1647. package/dist/domains/ml/attention-routing/manifest.mjs +52 -0
  1648. package/dist/domains/ml/attention-routing/runtime.mjs +3 -0
  1649. package/dist/domains/ml/autoencoder/manifest.mjs +52 -0
  1650. package/dist/domains/ml/autoencoder/runtime.mjs +3 -0
  1651. package/dist/domains/ml/causal-mask/manifest.mjs +52 -0
  1652. package/dist/domains/ml/causal-mask/runtime.mjs +3 -0
  1653. package/dist/domains/ml/classifier-threshold/manifest.mjs +68 -0
  1654. package/dist/domains/ml/classifier-threshold/runtime.d.mts +15 -0
  1655. package/dist/domains/ml/classifier-threshold/runtime.mjs +342 -0
  1656. package/dist/domains/ml/context-window/manifest.mjs +53 -0
  1657. package/dist/domains/ml/context-window/runtime.mjs +3 -0
  1658. package/dist/domains/ml/decision-boundary/manifest.mjs +56 -0
  1659. package/dist/domains/ml/decision-boundary/runtime.d.mts +15 -0
  1660. package/dist/domains/ml/decision-boundary/runtime.mjs +451 -0
  1661. package/dist/domains/ml/denoising/manifest.mjs +52 -0
  1662. package/dist/domains/ml/denoising/runtime.mjs +3 -0
  1663. package/dist/domains/ml/embedding-neighborhood/manifest.mjs +52 -0
  1664. package/dist/domains/ml/embedding-neighborhood/runtime.mjs +3 -0
  1665. package/dist/domains/ml/embedding-space/manifest.mjs +75 -0
  1666. package/dist/domains/ml/embedding-space/runtime.mjs +365 -0
  1667. package/dist/domains/ml/encoder-decoder/manifest.mjs +53 -0
  1668. package/dist/domains/ml/encoder-decoder/runtime.mjs +3 -0
  1669. package/dist/domains/ml/feature-map/manifest.mjs +61 -0
  1670. package/dist/domains/ml/feature-map/runtime.mjs +3 -0
  1671. package/dist/domains/ml/feed-forward-network/manifest.mjs +61 -0
  1672. package/dist/domains/ml/feed-forward-network/runtime.mjs +3 -0
  1673. package/dist/domains/ml/fit-evidence/manifest.mjs +62 -0
  1674. package/dist/domains/ml/fit-evidence/runtime.mjs +3 -0
  1675. package/dist/domains/ml/gradient-step/manifest.mjs +58 -0
  1676. package/dist/domains/ml/gradient-step/runtime.mjs +3 -0
  1677. package/dist/domains/ml/kmeans/manifest.mjs +78 -0
  1678. package/dist/domains/ml/kmeans/runtime.d.mts +22 -0
  1679. package/dist/domains/ml/kmeans/runtime.mjs +272 -0
  1680. package/dist/domains/ml/knn/manifest.mjs +58 -0
  1681. package/dist/domains/ml/knn/runtime.d.mts +17 -0
  1682. package/dist/domains/ml/knn/runtime.mjs +404 -0
  1683. package/dist/domains/ml/latent-space/manifest.mjs +52 -0
  1684. package/dist/domains/ml/latent-space/runtime.mjs +3 -0
  1685. package/dist/domains/ml/layer-normalization/manifest.mjs +79 -0
  1686. package/dist/domains/ml/layer-normalization/runtime.mjs +3 -0
  1687. package/dist/domains/ml/learning-loop/manifest.mjs +55 -0
  1688. package/dist/domains/ml/learning-loop/runtime.mjs +3 -0
  1689. package/dist/domains/ml/loss-error/manifest.mjs +57 -0
  1690. package/dist/domains/ml/loss-error/runtime.mjs +3 -0
  1691. package/dist/domains/ml/matrix-vector/manifest.mjs +57 -0
  1692. package/dist/domains/ml/matrix-vector/runtime.mjs +3 -0
  1693. package/dist/domains/ml/memory-relay/manifest.mjs +53 -0
  1694. package/dist/domains/ml/memory-relay/runtime.mjs +3 -0
  1695. package/dist/domains/ml/multi-head-attention/manifest.mjs +52 -0
  1696. package/dist/domains/ml/multi-head-attention/runtime.mjs +3 -0
  1697. package/dist/domains/ml/multimodal-alignment/manifest.mjs +52 -0
  1698. package/dist/domains/ml/multimodal-alignment/runtime.mjs +3 -0
  1699. package/dist/domains/ml/next-token/manifest.mjs +64 -0
  1700. package/dist/domains/ml/next-token/runtime.mjs +271 -0
  1701. package/dist/domains/ml/pixel-filter/manifest.mjs +48 -0
  1702. package/dist/domains/ml/pixel-filter/runtime.mjs +3 -0
  1703. package/dist/domains/ml/position-signals/manifest.mjs +52 -0
  1704. package/dist/domains/ml/position-signals/runtime.mjs +3 -0
  1705. package/dist/domains/ml/query-key-value/manifest.mjs +54 -0
  1706. package/dist/domains/ml/query-key-value/runtime.mjs +3 -0
  1707. package/dist/domains/ml/regression/manifest.mjs +73 -0
  1708. package/dist/domains/ml/regression/runtime.d.mts +20 -0
  1709. package/dist/domains/ml/regression/runtime.mjs +396 -0
  1710. package/dist/domains/ml/residual-stream/manifest.mjs +59 -0
  1711. package/dist/domains/ml/residual-stream/runtime.mjs +3 -0
  1712. package/dist/domains/ml/scaled-dot-product-attention/manifest.mjs +60 -0
  1713. package/dist/domains/ml/scaled-dot-product-attention/runtime.mjs +3 -0
  1714. package/dist/domains/ml/tiny-network/manifest.mjs +56 -0
  1715. package/dist/domains/ml/tiny-network/runtime.mjs +3 -0
  1716. package/dist/domains/ml/token-generation/manifest.mjs +53 -0
  1717. package/dist/domains/ml/token-generation/runtime.mjs +3 -0
  1718. package/dist/domains/ml/training-loop/manifest.mjs +58 -0
  1719. package/dist/domains/ml/training-loop/runtime.mjs +3 -0
  1720. package/dist/domains/ml/transformer-block/manifest.mjs +67 -0
  1721. package/dist/domains/ml/transformer-block/runtime.mjs +3 -0
  1722. package/dist/domains/ml/unembedding/manifest.mjs +61 -0
  1723. package/dist/domains/ml/unembedding/runtime.mjs +3 -0
  1724. package/dist/domains/networking/_shared/decision-scene.mjs +91 -0
  1725. package/dist/domains/networking/adaptive-video-call/activity.mjs +57 -0
  1726. package/dist/domains/networking/adaptive-video-call/manifest.mjs +69 -0
  1727. package/dist/domains/networking/adaptive-video-call/runtime.mjs +132 -0
  1728. package/dist/domains/networking/adaptive-video-call/scene.mjs +194 -0
  1729. package/dist/domains/networking/bottleneck-queue/activity.mjs +33 -0
  1730. package/dist/domains/networking/bottleneck-queue/manifest.mjs +68 -0
  1731. package/dist/domains/networking/bottleneck-queue/runtime.mjs +137 -0
  1732. package/dist/domains/networking/bottleneck-queue/scene.mjs +162 -0
  1733. package/dist/domains/networking/broadcast-delivery/activity.mjs +71 -0
  1734. package/dist/domains/networking/broadcast-delivery/manifest.mjs +76 -0
  1735. package/dist/domains/networking/broadcast-delivery/runtime.mjs +100 -0
  1736. package/dist/domains/networking/broadcast-delivery/scene.mjs +99 -0
  1737. package/dist/domains/networking/cafe-privacy/manifest.mjs +84 -0
  1738. package/dist/domains/networking/cafe-privacy/runtime.mjs +259 -0
  1739. package/dist/domains/networking/cell-size/manifest.mjs +78 -0
  1740. package/dist/domains/networking/cell-size/runtime.mjs +166 -0
  1741. package/dist/domains/networking/cloud-storage-design/activity.mjs +58 -0
  1742. package/dist/domains/networking/cloud-storage-design/manifest.mjs +81 -0
  1743. package/dist/domains/networking/cloud-storage-design/runtime.mjs +108 -0
  1744. package/dist/domains/networking/cloud-storage-design/scene.mjs +134 -0
  1745. package/dist/domains/networking/container-deployment/activity.mjs +58 -0
  1746. package/dist/domains/networking/container-deployment/manifest.mjs +79 -0
  1747. package/dist/domains/networking/container-deployment/runtime.mjs +124 -0
  1748. package/dist/domains/networking/container-deployment/scene.mjs +243 -0
  1749. package/dist/domains/networking/data-recovery-planner/activity.mjs +58 -0
  1750. package/dist/domains/networking/data-recovery-planner/manifest.mjs +74 -0
  1751. package/dist/domains/networking/data-recovery-planner/runtime.mjs +111 -0
  1752. package/dist/domains/networking/data-recovery-planner/scene.mjs +139 -0
  1753. package/dist/domains/networking/dhcp-lease/manifest.mjs +64 -0
  1754. package/dist/domains/networking/dhcp-lease/runtime.mjs +108 -0
  1755. package/dist/domains/networking/distributed-inference-topology/activity.mjs +58 -0
  1756. package/dist/domains/networking/distributed-inference-topology/manifest.mjs +82 -0
  1757. package/dist/domains/networking/distributed-inference-topology/runtime.mjs +142 -0
  1758. package/dist/domains/networking/distributed-inference-topology/scene.mjs +179 -0
  1759. package/dist/domains/networking/dns-resolution/activity.mjs +33 -0
  1760. package/dist/domains/networking/dns-resolution/manifest.mjs +71 -0
  1761. package/dist/domains/networking/dns-resolution/runtime.mjs +80 -0
  1762. package/dist/domains/networking/dns-resolution/scene.mjs +129 -0
  1763. package/dist/domains/networking/edge-cache-delivery/activity.mjs +58 -0
  1764. package/dist/domains/networking/edge-cache-delivery/manifest.mjs +74 -0
  1765. package/dist/domains/networking/edge-cache-delivery/runtime.mjs +111 -0
  1766. package/dist/domains/networking/edge-cache-delivery/scene.mjs +130 -0
  1767. package/dist/domains/networking/ethernet-pinout/manifest.mjs +66 -0
  1768. package/dist/domains/networking/ethernet-pinout/runtime.mjs +254 -0
  1769. package/dist/domains/networking/failure-domain-planner/activity.mjs +58 -0
  1770. package/dist/domains/networking/failure-domain-planner/manifest.mjs +82 -0
  1771. package/dist/domains/networking/failure-domain-planner/runtime.mjs +119 -0
  1772. package/dist/domains/networking/failure-domain-planner/scene.mjs +120 -0
  1773. package/dist/domains/networking/generation-capability/manifest.mjs +73 -0
  1774. package/dist/domains/networking/generation-capability/runtime.mjs +156 -0
  1775. package/dist/domains/networking/geo-market-routing/activity.mjs +58 -0
  1776. package/dist/domains/networking/geo-market-routing/manifest.mjs +79 -0
  1777. package/dist/domains/networking/geo-market-routing/runtime.mjs +122 -0
  1778. package/dist/domains/networking/geo-market-routing/scene.mjs +129 -0
  1779. package/dist/domains/networking/group-message-sync/activity.mjs +33 -0
  1780. package/dist/domains/networking/group-message-sync/manifest.mjs +73 -0
  1781. package/dist/domains/networking/group-message-sync/runtime.mjs +118 -0
  1782. package/dist/domains/networking/group-message-sync/scene.mjs +132 -0
  1783. package/dist/domains/networking/handover-margin/manifest.mjs +81 -0
  1784. package/dist/domains/networking/handover-margin/runtime.mjs +224 -0
  1785. package/dist/domains/networking/home-broadband-journey/activity.mjs +44 -0
  1786. package/dist/domains/networking/home-broadband-journey/manifest.mjs +79 -0
  1787. package/dist/domains/networking/home-broadband-journey/runtime.mjs +108 -0
  1788. package/dist/domains/networking/home-broadband-journey/scene.mjs +133 -0
  1789. package/dist/domains/networking/inference-capacity-planner/activity.mjs +58 -0
  1790. package/dist/domains/networking/inference-capacity-planner/manifest.mjs +82 -0
  1791. package/dist/domains/networking/inference-capacity-planner/runtime.mjs +163 -0
  1792. package/dist/domains/networking/inference-capacity-planner/scene.mjs +138 -0
  1793. package/dist/domains/networking/inference-degradation-planner/activity.mjs +58 -0
  1794. package/dist/domains/networking/inference-degradation-planner/manifest.mjs +81 -0
  1795. package/dist/domains/networking/inference-degradation-planner/runtime.mjs +143 -0
  1796. package/dist/domains/networking/inference-degradation-planner/scene.mjs +130 -0
  1797. package/dist/domains/networking/inference-request-pipeline/activity.mjs +58 -0
  1798. package/dist/domains/networking/inference-request-pipeline/manifest.mjs +86 -0
  1799. package/dist/domains/networking/inference-request-pipeline/runtime.mjs +141 -0
  1800. package/dist/domains/networking/inference-request-pipeline/scene.mjs +137 -0
  1801. package/dist/domains/networking/infrastructure-drift-planner/activity.mjs +58 -0
  1802. package/dist/domains/networking/infrastructure-drift-planner/manifest.mjs +87 -0
  1803. package/dist/domains/networking/infrastructure-drift-planner/runtime.mjs +141 -0
  1804. package/dist/domains/networking/infrastructure-drift-planner/scene.mjs +36 -0
  1805. package/dist/domains/networking/ipv6-neighbor/manifest.mjs +61 -0
  1806. package/dist/domains/networking/ipv6-neighbor/runtime.mjs +124 -0
  1807. package/dist/domains/networking/layer-encapsulation/manifest.mjs +66 -0
  1808. package/dist/domains/networking/layer-encapsulation/runtime.mjs +281 -0
  1809. package/dist/domains/networking/live-stream-pipeline/activity.mjs +72 -0
  1810. package/dist/domains/networking/live-stream-pipeline/manifest.mjs +67 -0
  1811. package/dist/domains/networking/live-stream-pipeline/runtime.mjs +98 -0
  1812. package/dist/domains/networking/live-stream-pipeline/scene.mjs +122 -0
  1813. package/dist/domains/networking/media-encoding/activity.mjs +33 -0
  1814. package/dist/domains/networking/media-encoding/manifest.mjs +72 -0
  1815. package/dist/domains/networking/media-encoding/runtime.mjs +111 -0
  1816. package/dist/domains/networking/media-encoding/scene.mjs +155 -0
  1817. package/dist/domains/networking/message-journey/activity.mjs +51 -0
  1818. package/dist/domains/networking/message-journey/manifest.mjs +80 -0
  1819. package/dist/domains/networking/message-journey/runtime.mjs +170 -0
  1820. package/dist/domains/networking/message-journey/scene.mjs +388 -0
  1821. package/dist/domains/networking/mobile-call-journey/activity.mjs +51 -0
  1822. package/dist/domains/networking/mobile-call-journey/manifest.mjs +81 -0
  1823. package/dist/domains/networking/mobile-call-journey/runtime.mjs +164 -0
  1824. package/dist/domains/networking/mobile-call-journey/scene.mjs +390 -0
  1825. package/dist/domains/networking/model-routing-economics/activity.mjs +58 -0
  1826. package/dist/domains/networking/model-routing-economics/manifest.mjs +79 -0
  1827. package/dist/domains/networking/model-routing-economics/runtime.mjs +124 -0
  1828. package/dist/domains/networking/model-routing-economics/scene.mjs +165 -0
  1829. package/dist/domains/networking/modem-modulation/activity.mjs +33 -0
  1830. package/dist/domains/networking/modem-modulation/manifest.mjs +71 -0
  1831. package/dist/domains/networking/modem-modulation/runtime.mjs +98 -0
  1832. package/dist/domains/networking/modem-modulation/scene.mjs +150 -0
  1833. package/dist/domains/networking/nat-traversal/manifest.mjs +70 -0
  1834. package/dist/domains/networking/nat-traversal/runtime.mjs +115 -0
  1835. package/dist/domains/networking/network-media/manifest.mjs +75 -0
  1836. package/dist/domains/networking/network-media/runtime.mjs +213 -0
  1837. package/dist/domains/networking/orbit-latency/manifest.mjs +83 -0
  1838. package/dist/domains/networking/orbit-latency/runtime.mjs +222 -0
  1839. package/dist/domains/networking/orchestration-reconciler/activity.mjs +58 -0
  1840. package/dist/domains/networking/orchestration-reconciler/manifest.mjs +76 -0
  1841. package/dist/domains/networking/orchestration-reconciler/runtime.mjs +129 -0
  1842. package/dist/domains/networking/orchestration-reconciler/scene.mjs +162 -0
  1843. package/dist/domains/networking/packet-journey/manifest.mjs +61 -0
  1844. package/dist/domains/networking/packet-journey/runtime.d.mts +15 -0
  1845. package/dist/domains/networking/packet-journey/runtime.mjs +237 -0
  1846. package/dist/domains/networking/prefix-cache-planner/activity.mjs +58 -0
  1847. package/dist/domains/networking/prefix-cache-planner/manifest.mjs +79 -0
  1848. package/dist/domains/networking/prefix-cache-planner/runtime.mjs +145 -0
  1849. package/dist/domains/networking/prefix-cache-planner/scene.mjs +120 -0
  1850. package/dist/domains/networking/release-strategy-planner/activity.mjs +56 -0
  1851. package/dist/domains/networking/release-strategy-planner/manifest.mjs +83 -0
  1852. package/dist/domains/networking/release-strategy-planner/runtime.mjs +142 -0
  1853. package/dist/domains/networking/release-strategy-planner/scene.mjs +68 -0
  1854. package/dist/domains/networking/route-learning/manifest.mjs +57 -0
  1855. package/dist/domains/networking/route-learning/runtime.mjs +130 -0
  1856. package/dist/domains/networking/secret-rotation-planner/activity.mjs +57 -0
  1857. package/dist/domains/networking/secret-rotation-planner/manifest.mjs +80 -0
  1858. package/dist/domains/networking/secret-rotation-planner/runtime.mjs +136 -0
  1859. package/dist/domains/networking/secret-rotation-planner/scene.mjs +70 -0
  1860. package/dist/domains/networking/server-deployment/activity.mjs +58 -0
  1861. package/dist/domains/networking/server-deployment/manifest.mjs +89 -0
  1862. package/dist/domains/networking/server-deployment/runtime.mjs +150 -0
  1863. package/dist/domains/networking/server-deployment/scene.mjs +231 -0
  1864. package/dist/domains/networking/service-scaling/activity.mjs +58 -0
  1865. package/dist/domains/networking/service-scaling/manifest.mjs +74 -0
  1866. package/dist/domains/networking/service-scaling/runtime.mjs +120 -0
  1867. package/dist/domains/networking/service-scaling/scene.mjs +134 -0
  1868. package/dist/domains/networking/shared-airtime/manifest.mjs +80 -0
  1869. package/dist/domains/networking/shared-airtime/runtime.mjs +238 -0
  1870. package/dist/domains/networking/signal-through-walls/manifest.mjs +77 -0
  1871. package/dist/domains/networking/signal-through-walls/runtime.mjs +160 -0
  1872. package/dist/domains/networking/slo-incident-console/activity.mjs +58 -0
  1873. package/dist/domains/networking/slo-incident-console/manifest.mjs +83 -0
  1874. package/dist/domains/networking/slo-incident-console/runtime.mjs +128 -0
  1875. package/dist/domains/networking/slo-incident-console/scene.mjs +143 -0
  1876. package/dist/domains/networking/spectrum-map/manifest.mjs +64 -0
  1877. package/dist/domains/networking/spectrum-map/runtime.mjs +149 -0
  1878. package/dist/domains/networking/subnet-builder/manifest.mjs +68 -0
  1879. package/dist/domains/networking/subnet-builder/runtime.mjs +249 -0
  1880. package/dist/domains/networking/switch-learning/manifest.mjs +62 -0
  1881. package/dist/domains/networking/switch-learning/runtime.mjs +250 -0
  1882. package/dist/domains/networking/tcp-handshake/manifest.mjs +81 -0
  1883. package/dist/domains/networking/tcp-handshake/runtime.mjs +257 -0
  1884. package/dist/domains/networking/tcp-sender/manifest.mjs +63 -0
  1885. package/dist/domains/networking/tcp-sender/runtime.mjs +151 -0
  1886. package/dist/domains/networking/tls-connection/activity.mjs +33 -0
  1887. package/dist/domains/networking/tls-connection/manifest.mjs +70 -0
  1888. package/dist/domains/networking/tls-connection/runtime.mjs +94 -0
  1889. package/dist/domains/networking/tls-connection/scene.mjs +96 -0
  1890. package/dist/domains/networking/vlan-designer/manifest.mjs +66 -0
  1891. package/dist/domains/networking/vlan-designer/runtime.mjs +278 -0
  1892. package/dist/domains/networking/vpc-route-planner/activity.mjs +58 -0
  1893. package/dist/domains/networking/vpc-route-planner/manifest.mjs +80 -0
  1894. package/dist/domains/networking/vpc-route-planner/runtime.mjs +107 -0
  1895. package/dist/domains/networking/vpc-route-planner/scene.mjs +145 -0
  1896. package/dist/domains/networking/vpn-tunnel/manifest.mjs +68 -0
  1897. package/dist/domains/networking/vpn-tunnel/runtime.mjs +256 -0
  1898. package/dist/domains/networking/wave-size/manifest.mjs +69 -0
  1899. package/dist/domains/networking/wave-size/runtime.mjs +149 -0
  1900. package/dist/domains/networking/wifi-contention/activity.mjs +33 -0
  1901. package/dist/domains/networking/wifi-contention/manifest.mjs +62 -0
  1902. package/dist/domains/networking/wifi-contention/runtime.mjs +93 -0
  1903. package/dist/domains/networking/wifi-contention/scene.mjs +92 -0
  1904. package/dist/domains/networking/wifi-coverage/manifest.mjs +82 -0
  1905. package/dist/domains/networking/wifi-coverage/runtime.mjs +253 -0
  1906. package/dist/domains/networking/workload-identity-planner/activity.mjs +58 -0
  1907. package/dist/domains/networking/workload-identity-planner/manifest.mjs +82 -0
  1908. package/dist/domains/networking/workload-identity-planner/runtime.mjs +120 -0
  1909. package/dist/domains/networking/workload-identity-planner/scene.mjs +71 -0
  1910. package/dist/domains/physics/ac-generator/manifest.mjs +64 -0
  1911. package/dist/domains/physics/ac-generator/runtime.mjs +5 -0
  1912. package/dist/domains/physics/alternating-current/manifest.mjs +67 -0
  1913. package/dist/domains/physics/alternating-current/runtime.mjs +5 -0
  1914. package/dist/domains/physics/atwood/manifest.mjs +50 -0
  1915. package/dist/domains/physics/atwood/runtime.mjs +5 -0
  1916. package/dist/domains/physics/bloch-sphere/activity.mjs +3 -0
  1917. package/dist/domains/physics/bloch-sphere/manifest.mjs +70 -0
  1918. package/dist/domains/physics/bloch-sphere/runtime.mjs +3 -0
  1919. package/dist/domains/physics/bullet-walls/manifest.mjs +52 -0
  1920. package/dist/domains/physics/bullet-walls/runtime.mjs +5 -0
  1921. package/dist/domains/physics/car-suspension/manifest.mjs +59 -0
  1922. package/dist/domains/physics/car-suspension/runtime.mjs +5 -0
  1923. package/dist/domains/physics/carnot/manifest.mjs +59 -0
  1924. package/dist/domains/physics/carnot/runtime.mjs +5 -0
  1925. package/dist/domains/physics/circuit-fault-detective/activity.mjs +59 -0
  1926. package/dist/domains/physics/circuit-fault-detective/manifest.mjs +59 -0
  1927. package/dist/domains/physics/circuit-fault-detective/runtime.mjs +157 -0
  1928. package/dist/domains/physics/circuit-iv-investigation/activity.mjs +127 -0
  1929. package/dist/domains/physics/circuit-iv-investigation/manifest.mjs +78 -0
  1930. package/dist/domains/physics/circuit-iv-investigation/runtime.mjs +329 -0
  1931. package/dist/domains/physics/circular-motion/manifest.mjs +51 -0
  1932. package/dist/domains/physics/circular-motion/runtime.mjs +5 -0
  1933. package/dist/domains/physics/coil-torque/activity.mjs +3 -0
  1934. package/dist/domains/physics/coil-torque/manifest.mjs +69 -0
  1935. package/dist/domains/physics/coil-torque/runtime.mjs +3 -0
  1936. package/dist/domains/physics/collision-track/manifest.mjs +64 -0
  1937. package/dist/domains/physics/collision-track/runtime.mjs +5 -0
  1938. package/dist/domains/physics/cooling-insulation-investigation/activity.mjs +128 -0
  1939. package/dist/domains/physics/cooling-insulation-investigation/manifest.mjs +78 -0
  1940. package/dist/domains/physics/cooling-insulation-investigation/runtime.mjs +273 -0
  1941. package/dist/domains/physics/coulomb-superposition/activity.mjs +3 -0
  1942. package/dist/domains/physics/coulomb-superposition/manifest.mjs +75 -0
  1943. package/dist/domains/physics/coulomb-superposition/runtime.mjs +3 -0
  1944. package/dist/domains/physics/couple-torque/manifest.mjs +57 -0
  1945. package/dist/domains/physics/couple-torque/runtime.mjs +5 -0
  1946. package/dist/domains/physics/dc-motor/manifest.mjs +58 -0
  1947. package/dist/domains/physics/dc-motor/runtime.mjs +5 -0
  1948. package/dist/domains/physics/density-displacement/activity.mjs +128 -0
  1949. package/dist/domains/physics/density-displacement/manifest.mjs +75 -0
  1950. package/dist/domains/physics/density-displacement/runtime.mjs +197 -0
  1951. package/dist/domains/physics/doppler/manifest.mjs +49 -0
  1952. package/dist/domains/physics/doppler/runtime.mjs +5 -0
  1953. package/dist/domains/physics/double-slit/activity.mjs +3 -0
  1954. package/dist/domains/physics/double-slit/manifest.mjs +62 -0
  1955. package/dist/domains/physics/double-slit/runtime.mjs +3 -0
  1956. package/dist/domains/physics/earth-field/activity.mjs +3 -0
  1957. package/dist/domains/physics/earth-field/manifest.mjs +77 -0
  1958. package/dist/domains/physics/earth-field/runtime.mjs +3 -0
  1959. package/dist/domains/physics/efficiency/manifest.mjs +69 -0
  1960. package/dist/domains/physics/efficiency/runtime.mjs +5 -0
  1961. package/dist/domains/physics/electric-field/manifest.mjs +49 -0
  1962. package/dist/domains/physics/electric-field/runtime.mjs +5 -0
  1963. package/dist/domains/physics/electric-flux/manifest.mjs +53 -0
  1964. package/dist/domains/physics/electric-flux/runtime.mjs +5 -0
  1965. package/dist/domains/physics/energy-resource-grid/activity.mjs +169 -0
  1966. package/dist/domains/physics/energy-resource-grid/manifest.mjs +89 -0
  1967. package/dist/domains/physics/energy-resource-grid/palette.mjs +69 -0
  1968. package/dist/domains/physics/energy-resource-grid/runtime.mjs +1483 -0
  1969. package/dist/domains/physics/energy-skate/manifest.mjs +55 -0
  1970. package/dist/domains/physics/energy-skate/runtime.mjs +5 -0
  1971. package/dist/domains/physics/entropy/manifest.mjs +53 -0
  1972. package/dist/domains/physics/entropy/runtime.mjs +5 -0
  1973. package/dist/domains/physics/falling-target/manifest.mjs +65 -0
  1974. package/dist/domains/physics/falling-target/runtime.mjs +12 -0
  1975. package/dist/domains/physics/fission-chain/activity.mjs +3 -0
  1976. package/dist/domains/physics/fission-chain/manifest.mjs +61 -0
  1977. package/dist/domains/physics/fission-chain/runtime.mjs +3 -0
  1978. package/dist/domains/physics/fluid-pressure/manifest.mjs +61 -0
  1979. package/dist/domains/physics/fluid-pressure/runtime.mjs +5 -0
  1980. package/dist/domains/physics/force-pairs/manifest.mjs +60 -0
  1981. package/dist/domains/physics/force-pairs/runtime.mjs +5 -0
  1982. package/dist/domains/physics/gas-process/manifest.mjs +58 -0
  1983. package/dist/domains/physics/gas-process/runtime.mjs +5 -0
  1984. package/dist/domains/physics/gauss-law/manifest.mjs +51 -0
  1985. package/dist/domains/physics/gauss-law/runtime.mjs +5 -0
  1986. package/dist/domains/physics/generator-grid-mission/activity.mjs +153 -0
  1987. package/dist/domains/physics/generator-grid-mission/manifest.mjs +81 -0
  1988. package/dist/domains/physics/generator-grid-mission/palette.mjs +30 -0
  1989. package/dist/domains/physics/generator-grid-mission/runtime.mjs +466 -0
  1990. package/dist/domains/physics/glass-block-refraction/activity.mjs +128 -0
  1991. package/dist/domains/physics/glass-block-refraction/manifest.mjs +77 -0
  1992. package/dist/domains/physics/glass-block-refraction/runtime.mjs +327 -0
  1993. package/dist/domains/physics/gravitation/manifest.mjs +55 -0
  1994. package/dist/domains/physics/gravitation/runtime.mjs +5 -0
  1995. package/dist/domains/physics/gravity-drop/manifest.mjs +54 -0
  1996. package/dist/domains/physics/gravity-drop/runtime.mjs +5 -0
  1997. package/dist/domains/physics/gravity-profile/manifest.mjs +62 -0
  1998. package/dist/domains/physics/gravity-profile/runtime.mjs +5 -0
  1999. package/dist/domains/physics/guitar-string/manifest.mjs +69 -0
  2000. package/dist/domains/physics/guitar-string/runtime.mjs +5 -0
  2001. package/dist/domains/physics/heat-transfer/manifest.mjs +57 -0
  2002. package/dist/domains/physics/heat-transfer/runtime.mjs +5 -0
  2003. package/dist/domains/physics/heating-curve/manifest.mjs +61 -0
  2004. package/dist/domains/physics/heating-curve/runtime.mjs +5 -0
  2005. package/dist/domains/physics/impulse/manifest.mjs +52 -0
  2006. package/dist/domains/physics/impulse/runtime.mjs +5 -0
  2007. package/dist/domains/physics/intercept/manifest.mjs +68 -0
  2008. package/dist/domains/physics/intercept/runtime.mjs +12 -0
  2009. package/dist/domains/physics/kepler/manifest.mjs +51 -0
  2010. package/dist/domains/physics/kepler/runtime.mjs +5 -0
  2011. package/dist/domains/physics/length-contraction/activity.mjs +3 -0
  2012. package/dist/domains/physics/length-contraction/manifest.mjs +59 -0
  2013. package/dist/domains/physics/length-contraction/runtime.mjs +3 -0
  2014. package/dist/domains/physics/lens-focal-investigation/activity.mjs +128 -0
  2015. package/dist/domains/physics/lens-focal-investigation/manifest.mjs +78 -0
  2016. package/dist/domains/physics/lens-focal-investigation/runtime.mjs +329 -0
  2017. package/dist/domains/physics/lens-imaging/manifest.mjs +57 -0
  2018. package/dist/domains/physics/lens-imaging/runtime.mjs +5 -0
  2019. package/dist/domains/physics/lever/manifest.mjs +60 -0
  2020. package/dist/domains/physics/lever/runtime.mjs +24 -0
  2021. package/dist/domains/physics/lift-weight/manifest.mjs +55 -0
  2022. package/dist/domains/physics/lift-weight/runtime.mjs +5 -0
  2023. package/dist/domains/physics/lifting-work/manifest.mjs +62 -0
  2024. package/dist/domains/physics/lifting-work/runtime.mjs +5 -0
  2025. package/dist/domains/physics/linear-pursuit/manifest.mjs +74 -0
  2026. package/dist/domains/physics/linear-pursuit/runtime.mjs +12 -0
  2027. package/dist/domains/physics/lorentz/manifest.mjs +52 -0
  2028. package/dist/domains/physics/lorentz/runtime.mjs +5 -0
  2029. package/dist/domains/physics/lorentz-transformation/activity.mjs +3 -0
  2030. package/dist/domains/physics/lorentz-transformation/manifest.mjs +65 -0
  2031. package/dist/domains/physics/lorentz-transformation/runtime.mjs +3 -0
  2032. package/dist/domains/physics/magnetic-field/activity.mjs +3 -0
  2033. package/dist/domains/physics/magnetic-field/manifest.mjs +80 -0
  2034. package/dist/domains/physics/magnetic-field/runtime.mjs +3 -0
  2035. package/dist/domains/physics/magnetic-field-mission/activity.mjs +120 -0
  2036. package/dist/domains/physics/magnetic-field-mission/manifest.mjs +73 -0
  2037. package/dist/domains/physics/magnetic-field-mission/palette.mjs +40 -0
  2038. package/dist/domains/physics/magnetic-field-mission/runtime.mjs +547 -0
  2039. package/dist/domains/physics/magnetism/manifest.mjs +52 -0
  2040. package/dist/domains/physics/magnetism/runtime.mjs +5 -0
  2041. package/dist/domains/physics/mirror-imaging/manifest.mjs +57 -0
  2042. package/dist/domains/physics/mirror-imaging/runtime.mjs +5 -0
  2043. package/dist/domains/physics/moving-launcher/manifest.mjs +66 -0
  2044. package/dist/domains/physics/moving-launcher/runtime.mjs +12 -0
  2045. package/dist/domains/physics/muon-survival/activity.mjs +3 -0
  2046. package/dist/domains/physics/muon-survival/manifest.mjs +61 -0
  2047. package/dist/domains/physics/muon-survival/runtime.mjs +3 -0
  2048. package/dist/domains/physics/nuclear-binding-energy/activity.mjs +3 -0
  2049. package/dist/domains/physics/nuclear-binding-energy/manifest.mjs +67 -0
  2050. package/dist/domains/physics/nuclear-binding-energy/runtime.mjs +3 -0
  2051. package/dist/domains/physics/optics/manifest.mjs +53 -0
  2052. package/dist/domains/physics/optics/runtime.mjs +5 -0
  2053. package/dist/domains/physics/orbit-lab/manifest.mjs +49 -0
  2054. package/dist/domains/physics/orbit-lab/runtime.mjs +5 -0
  2055. package/dist/domains/physics/paper5-analysis-lab/activity.mjs +144 -0
  2056. package/dist/domains/physics/paper5-analysis-lab/manifest.mjs +67 -0
  2057. package/dist/domains/physics/paper5-analysis-lab/runtime.mjs +706 -0
  2058. package/dist/domains/physics/pendulum-worlds/manifest.mjs +55 -0
  2059. package/dist/domains/physics/pendulum-worlds/runtime.mjs +5 -0
  2060. package/dist/domains/physics/pet-scan/activity.mjs +3 -0
  2061. package/dist/domains/physics/pet-scan/manifest.mjs +73 -0
  2062. package/dist/domains/physics/pet-scan/runtime.mjs +3 -0
  2063. package/dist/domains/physics/photoelectric-effect/activity.mjs +3 -0
  2064. package/dist/domains/physics/photoelectric-effect/manifest.mjs +67 -0
  2065. package/dist/domains/physics/photoelectric-effect/runtime.mjs +3 -0
  2066. package/dist/domains/physics/physics-practical-studio/activity.mjs +96 -0
  2067. package/dist/domains/physics/physics-practical-studio/core.mjs +75 -0
  2068. package/dist/domains/physics/physics-practical-studio/manifest.mjs +53 -0
  2069. package/dist/domains/physics/physics-practical-studio/runtime.mjs +207 -0
  2070. package/dist/domains/physics/plug-safety-inspector/activity.mjs +97 -0
  2071. package/dist/domains/physics/plug-safety-inspector/manifest.mjs +54 -0
  2072. package/dist/domains/physics/plug-safety-inspector/palette.mjs +44 -0
  2073. package/dist/domains/physics/plug-safety-inspector/runtime.mjs +414 -0
  2074. package/dist/domains/physics/power/manifest.mjs +58 -0
  2075. package/dist/domains/physics/power/runtime.mjs +5 -0
  2076. package/dist/domains/physics/precision-measurement-lab/activity.mjs +148 -0
  2077. package/dist/domains/physics/precision-measurement-lab/manifest.mjs +81 -0
  2078. package/dist/domains/physics/precision-measurement-lab/palette.mjs +41 -0
  2079. package/dist/domains/physics/precision-measurement-lab/runtime.mjs +641 -0
  2080. package/dist/domains/physics/projectile-lab/core/formulas.mjs +26 -0
  2081. package/dist/domains/physics/projectile-lab/core/model.mjs +43 -0
  2082. package/dist/domains/physics/projectile-lab/manifest.mjs +55 -0
  2083. package/dist/domains/physics/projectile-lab/runtime/index.mjs +241 -0
  2084. package/dist/domains/physics/projectile-lab/runtime/svg.mjs +208 -0
  2085. package/dist/domains/physics/quantum-gates/activity.mjs +3 -0
  2086. package/dist/domains/physics/quantum-gates/manifest.mjs +68 -0
  2087. package/dist/domains/physics/quantum-gates/runtime.mjs +3 -0
  2088. package/dist/domains/physics/radiation-half-life-investigation/activity.mjs +154 -0
  2089. package/dist/domains/physics/radiation-half-life-investigation/manifest.mjs +88 -0
  2090. package/dist/domains/physics/radiation-half-life-investigation/palette.mjs +47 -0
  2091. package/dist/domains/physics/radiation-half-life-investigation/runtime.mjs +1036 -0
  2092. package/dist/domains/physics/rain-relative/manifest.mjs +54 -0
  2093. package/dist/domains/physics/rain-relative/runtime.mjs +5 -0
  2094. package/dist/domains/physics/ramp-forces/manifest.mjs +65 -0
  2095. package/dist/domains/physics/ramp-forces/runtime.mjs +25 -0
  2096. package/dist/domains/physics/refraction/manifest.mjs +60 -0
  2097. package/dist/domains/physics/refraction/runtime.mjs +5 -0
  2098. package/dist/domains/physics/relativity-light-clock/activity.mjs +3 -0
  2099. package/dist/domains/physics/relativity-light-clock/manifest.mjs +67 -0
  2100. package/dist/domains/physics/relativity-light-clock/runtime.mjs +12 -0
  2101. package/dist/domains/physics/relativity-simultaneity/activity.mjs +3 -0
  2102. package/dist/domains/physics/relativity-simultaneity/manifest.mjs +59 -0
  2103. package/dist/domains/physics/relativity-simultaneity/runtime.mjs +3 -0
  2104. package/dist/domains/physics/ripple-tank/manifest.mjs +50 -0
  2105. package/dist/domains/physics/ripple-tank/runtime.mjs +5 -0
  2106. package/dist/domains/physics/river-boat/manifest.mjs +52 -0
  2107. package/dist/domains/physics/river-boat/runtime.mjs +17 -0
  2108. package/dist/domains/physics/shm/manifest.mjs +54 -0
  2109. package/dist/domains/physics/shm/runtime.mjs +5 -0
  2110. package/dist/domains/physics/shm-energy/manifest.mjs +58 -0
  2111. package/dist/domains/physics/shm-energy/runtime.mjs +5 -0
  2112. package/dist/domains/physics/shm-graphs/manifest.mjs +56 -0
  2113. package/dist/domains/physics/shm-graphs/runtime.mjs +5 -0
  2114. package/dist/domains/physics/space-evidence-mission/activity.mjs +148 -0
  2115. package/dist/domains/physics/space-evidence-mission/manifest.mjs +88 -0
  2116. package/dist/domains/physics/space-evidence-mission/runtime.mjs +624 -0
  2117. package/dist/domains/physics/spatial-lorentz/activity.mjs +3 -0
  2118. package/dist/domains/physics/spatial-lorentz/manifest.mjs +61 -0
  2119. package/dist/domains/physics/spatial-lorentz/runtime.mjs +20 -0
  2120. package/dist/domains/physics/spin-studio/manifest.mjs +58 -0
  2121. package/dist/domains/physics/spin-studio/runtime.mjs +5 -0
  2122. package/dist/domains/physics/spring-combinations/manifest.mjs +52 -0
  2123. package/dist/domains/physics/spring-combinations/runtime.mjs +5 -0
  2124. package/dist/domains/physics/stopping-distance/manifest.mjs +61 -0
  2125. package/dist/domains/physics/stopping-distance/runtime.mjs +5 -0
  2126. package/dist/domains/physics/stress-strain/manifest.mjs +69 -0
  2127. package/dist/domains/physics/stress-strain/runtime.mjs +5 -0
  2128. package/dist/domains/physics/string-reflection/manifest.mjs +55 -0
  2129. package/dist/domains/physics/string-reflection/runtime.mjs +5 -0
  2130. package/dist/domains/physics/temperature-scales/manifest.mjs +57 -0
  2131. package/dist/domains/physics/temperature-scales/runtime.mjs +5 -0
  2132. package/dist/domains/physics/terminal-velocity/manifest.mjs +51 -0
  2133. package/dist/domains/physics/terminal-velocity/runtime.mjs +5 -0
  2134. package/dist/domains/physics/thermal-expansion/manifest.mjs +54 -0
  2135. package/dist/domains/physics/thermal-expansion/runtime.mjs +5 -0
  2136. package/dist/domains/physics/trolley-acceleration-investigation/activity.mjs +158 -0
  2137. package/dist/domains/physics/trolley-acceleration-investigation/manifest.mjs +78 -0
  2138. package/dist/domains/physics/trolley-acceleration-investigation/runtime.mjs +390 -0
  2139. package/dist/domains/physics/uncertainty-wave-packet/activity.mjs +3 -0
  2140. package/dist/domains/physics/uncertainty-wave-packet/manifest.mjs +58 -0
  2141. package/dist/domains/physics/uncertainty-wave-packet/runtime.mjs +3 -0
  2142. package/dist/domains/physics/vector-board/manifest.mjs +63 -0
  2143. package/dist/domains/physics/vector-board/runtime.mjs +28 -0
  2144. package/dist/domains/physics/vector-types/manifest.mjs +51 -0
  2145. package/dist/domains/physics/vector-types/runtime.mjs +5 -0
  2146. package/dist/domains/physics/venturi/manifest.mjs +56 -0
  2147. package/dist/domains/physics/venturi/runtime.mjs +12 -0
  2148. package/dist/domains/physics/water-density/manifest.mjs +53 -0
  2149. package/dist/domains/physics/water-density/runtime.mjs +5 -0
  2150. package/dist/domains/physics/wave-lab/manifest.mjs +60 -0
  2151. package/dist/domains/physics/wave-lab/runtime.mjs +5 -0
  2152. package/dist/domains/physics/work-energy/manifest.mjs +54 -0
  2153. package/dist/domains/physics/work-energy/runtime.mjs +5 -0
  2154. package/dist/domains/physics/work-potential/manifest.mjs +63 -0
  2155. package/dist/domains/physics/work-potential/runtime.mjs +5 -0
  2156. package/dist/domains/physics/xray-attenuation/activity.mjs +3 -0
  2157. package/dist/domains/physics/xray-attenuation/manifest.mjs +61 -0
  2158. package/dist/domains/physics/xray-attenuation/runtime.mjs +3 -0
  2159. package/dist/domains/physics/xray-tube-spectrum/activity.mjs +3 -0
  2160. package/dist/domains/physics/xray-tube-spectrum/manifest.mjs +61 -0
  2161. package/dist/domains/physics/xray-tube-spectrum/runtime.mjs +3 -0
  2162. package/dist/domains/render-map.mjs +1012 -0
  2163. package/dist/domains/render.d.mts +8 -0
  2164. package/dist/domains/render.mjs +23 -0
  2165. package/dist/domains/statistics/center-spread/manifest.mjs +60 -0
  2166. package/dist/domains/statistics/center-spread/runtime.mjs +5 -0
  2167. package/dist/domains/statistics/frequency-density/manifest.mjs +64 -0
  2168. package/dist/domains/statistics/frequency-density/runtime.mjs +12 -0
  2169. package/dist/domains/statistics/galton/manifest.mjs +50 -0
  2170. package/dist/domains/statistics/galton/runtime.mjs +5 -0
  2171. package/dist/domains/statistics/histogram/manifest.mjs +58 -0
  2172. package/dist/domains/statistics/histogram/runtime.mjs +5 -0
  2173. package/dist/domains/statistics/normal/manifest.mjs +56 -0
  2174. package/dist/domains/statistics/normal/runtime.mjs +5 -0
  2175. package/dist/domains/statistics/ogive/manifest.mjs +62 -0
  2176. package/dist/domains/statistics/ogive/runtime.mjs +12 -0
  2177. package/dist/domains/statistics/sampling/manifest.mjs +61 -0
  2178. package/dist/domains/statistics/sampling/runtime.mjs +5 -0
  2179. package/dist/domains/statistics/series/manifest.mjs +55 -0
  2180. package/dist/domains/statistics/series/runtime.mjs +5 -0
  2181. package/dist/domains/statistics/z-table/manifest.mjs +51 -0
  2182. package/dist/domains/statistics/z-table/runtime.mjs +5 -0
  2183. package/dist/exam/exam-question/core.d.mts +95 -0
  2184. package/dist/exam/exam-question/core.mjs +136 -0
  2185. package/dist/exam/exam-question/default-question.d.mts +17 -0
  2186. package/dist/exam/exam-question/default-question.mjs +41 -0
  2187. package/dist/exam/exam-question/index.d.mts +4 -0
  2188. package/dist/exam/exam-question/preset.d.mts +15 -0
  2189. package/dist/exam/exam-question/preset.mjs +233 -0
  2190. package/dist/exam/index.d.mts +5 -0
  2191. package/dist/exam/index.mjs +5 -0
  2192. package/dist/geography/cycle-lab/index.d.mts +2 -1
  2193. package/dist/geography/cycle-lab/preset.d.mts +1 -10
  2194. package/dist/geography/cycle-lab/preset.mjs +218 -102
  2195. package/dist/geography/cycles.d.mts +0 -1
  2196. package/dist/geography/index.d.mts +1 -0
  2197. package/dist/geometry/board/index.d.mts +2 -1
  2198. package/dist/geometry/board/preset.d.mts +12 -8
  2199. package/dist/geometry/board/preset.mjs +65 -21
  2200. package/dist/geometry/builder.d.mts +2 -7
  2201. package/dist/geometry/builder.mjs +21 -11
  2202. package/dist/geometry/index.d.mts +1 -0
  2203. package/dist/geometry/intersecting-circles.d.mts +1 -7
  2204. package/dist/geometry/intersecting-circles.mjs +76 -75
  2205. package/dist/ict/index.d.mts +1 -0
  2206. package/dist/ict/number-systems/base-odometer.d.mts +1 -14
  2207. package/dist/ict/number-systems/base-odometer.mjs +55 -83
  2208. package/dist/ict/number-systems/bit-grouper.d.mts +1 -12
  2209. package/dist/ict/number-systems/bit-grouper.mjs +66 -97
  2210. package/dist/ict/number-systems/index.d.mts +2 -1
  2211. package/dist/ict/number-systems/place-value-dial.d.mts +1 -12
  2212. package/dist/ict/number-systems/place-value-dial.mjs +67 -82
  2213. package/dist/ict/number-systems/wheel.d.mts +4 -25
  2214. package/dist/ict/number-systems/wheel.mjs +24 -49
  2215. package/dist/index.d.mts +3 -3
  2216. package/dist/index.mjs +2 -2
  2217. package/dist/kit/activity-authoring.d.mts +128 -0
  2218. package/dist/kit/activity-authoring.mjs +63 -0
  2219. package/dist/kit/activity.d.mts +146 -0
  2220. package/dist/kit/activity.mjs +497 -0
  2221. package/dist/kit/anim.d.mts +22 -0
  2222. package/dist/kit/annotate.mjs +32 -7
  2223. package/dist/kit/ask.d.mts +1 -2
  2224. package/dist/kit/ask.mjs +1 -1
  2225. package/dist/kit/assets.d.mts +30 -0
  2226. package/dist/kit/assets.mjs +31 -0
  2227. package/dist/kit/authored-activity-runtime.d.mts +70 -0
  2228. package/dist/kit/authored-activity-runtime.mjs +160 -0
  2229. package/dist/kit/authored-response.d.mts +17 -0
  2230. package/dist/kit/authored-response.mjs +215 -0
  2231. package/dist/kit/carrier-engine.mjs +5 -1
  2232. package/dist/kit/celebrate.d.mts +13 -0
  2233. package/dist/kit/celebrate.mjs +80 -0
  2234. package/dist/kit/chemistry/composition-evidence.d.mts +45 -0
  2235. package/dist/kit/chemistry/composition-evidence.mjs +164 -0
  2236. package/dist/kit/chemistry/cycle.mjs +147 -0
  2237. package/dist/kit/chemistry/electrode.d.mts +103 -0
  2238. package/dist/kit/chemistry/electrode.mjs +155 -0
  2239. package/dist/kit/chemistry/equation-model.d.mts +35 -0
  2240. package/dist/kit/chemistry/equation-model.mjs +84 -0
  2241. package/dist/kit/chemistry/flame.d.mts +38 -0
  2242. package/dist/kit/chemistry/flame.mjs +129 -0
  2243. package/dist/kit/chemistry/formula-model.d.mts +38 -0
  2244. package/dist/kit/chemistry/formula-model.mjs +221 -0
  2245. package/dist/kit/chemistry/formula.d.mts +18 -0
  2246. package/dist/kit/chemistry/formula.mjs +94 -0
  2247. package/dist/kit/chemistry/glassware.d.mts +114 -0
  2248. package/dist/kit/chemistry/glassware.mjs +697 -0
  2249. package/dist/kit/chemistry/groups.d.mts +104 -0
  2250. package/dist/kit/chemistry/groups.mjs +317 -0
  2251. package/dist/kit/chemistry/index.d.mts +18 -0
  2252. package/dist/kit/chemistry/mechanism.mjs +248 -0
  2253. package/dist/kit/chemistry/molecule.d.mts +246 -0
  2254. package/dist/kit/chemistry/molecule.mjs +441 -0
  2255. package/dist/kit/chemistry/nmr-figure.d.mts +15 -0
  2256. package/dist/kit/chemistry/nmr-figure.mjs +207 -0
  2257. package/dist/kit/chemistry/observation.d.mts +68 -0
  2258. package/dist/kit/chemistry/observation.mjs +86 -0
  2259. package/dist/kit/chemistry/percent-lens.d.mts +35 -0
  2260. package/dist/kit/chemistry/percent-lens.mjs +44 -0
  2261. package/dist/kit/chemistry/process.d.mts +31 -0
  2262. package/dist/kit/chemistry/process.mjs +234 -0
  2263. package/dist/kit/chemistry/quantity-route-figure.d.mts +25 -0
  2264. package/dist/kit/chemistry/quantity-route-figure.mjs +198 -0
  2265. package/dist/kit/chemistry/quantity-route.d.mts +78 -0
  2266. package/dist/kit/chemistry/quantity-route.mjs +117 -0
  2267. package/dist/kit/chemistry/reaction.mjs +293 -0
  2268. package/dist/kit/chemistry/safety.d.mts +25 -0
  2269. package/dist/kit/chemistry/safety.mjs +77 -0
  2270. package/dist/kit/chemistry/species.mjs +1078 -0
  2271. package/dist/kit/chemistry/spectrum.mjs +252 -0
  2272. package/dist/kit/chemistry/structure-figure.d.mts +38 -0
  2273. package/dist/kit/chemistry/structure-figure.mjs +161 -0
  2274. package/dist/kit/clue-scene.d.mts +8 -39
  2275. package/dist/kit/clue-scene.mjs +146 -219
  2276. package/dist/kit/cluster.d.mts +1 -11
  2277. package/dist/kit/commerce/glyphs.d.mts +144 -0
  2278. package/dist/kit/commerce/glyphs.mjs +569 -0
  2279. package/dist/kit/commerce/index.d.mts +3 -0
  2280. package/dist/kit/commerce/ledger.d.mts +64 -0
  2281. package/dist/kit/commerce/ledger.mjs +224 -0
  2282. package/dist/kit/controls.mjs +207 -29
  2283. package/dist/kit/coords.d.mts +32 -21
  2284. package/dist/kit/coords.mjs +31 -4
  2285. package/dist/kit/cycle.d.mts +2 -12
  2286. package/dist/kit/cycle.mjs +88 -8
  2287. package/dist/kit/data-scene.d.mts +0 -1
  2288. package/dist/kit/data-scene.mjs +75 -62
  2289. package/dist/kit/diagram/annotations.mjs +134 -0
  2290. package/dist/kit/diagram/circuit-box.mjs +76 -0
  2291. package/dist/kit/electronics/_shared.mjs +83 -0
  2292. package/dist/kit/electronics/basics.mjs +590 -0
  2293. package/dist/kit/electronics/icons.mjs +140 -0
  2294. package/dist/kit/electronics/meter.mjs +193 -0
  2295. package/dist/kit/electronics/semiconductor.mjs +195 -0
  2296. package/dist/kit/electronics/signals.mjs +155 -0
  2297. package/dist/kit/electronics/wire.mjs +94 -0
  2298. package/dist/kit/embed.mjs +61 -0
  2299. package/dist/kit/figure/action.d.mts +11 -0
  2300. package/dist/kit/figure/action.mjs +27 -0
  2301. package/dist/kit/figure/beam.d.mts +53 -0
  2302. package/dist/kit/figure/beam.mjs +139 -0
  2303. package/dist/kit/figure/body.d.mts +46 -0
  2304. package/dist/kit/figure/body.mjs +102 -0
  2305. package/dist/kit/figure/container.d.mts +59 -0
  2306. package/dist/kit/figure/container.mjs +203 -0
  2307. package/dist/kit/figure/digits.d.mts +39 -0
  2308. package/dist/kit/figure/digits.mjs +30 -0
  2309. package/dist/kit/figure/figure.d.mts +128 -0
  2310. package/dist/kit/figure/figure.mjs +175 -0
  2311. package/dist/kit/figure/gauge.d.mts +54 -0
  2312. package/dist/kit/figure/gauge.mjs +54 -0
  2313. package/dist/kit/figure/illustration.d.mts +19 -0
  2314. package/dist/kit/figure/illustration.mjs +31 -0
  2315. package/dist/kit/figure/index.d.mts +13 -0
  2316. package/dist/kit/figure/legend.d.mts +27 -0
  2317. package/dist/kit/figure/legend.mjs +71 -0
  2318. package/dist/kit/figure/plot.d.mts +72 -0
  2319. package/dist/kit/figure/plot.mjs +230 -0
  2320. package/dist/kit/figure/system.d.mts +59 -0
  2321. package/dist/kit/figure/system.mjs +205 -0
  2322. package/dist/kit/figure/text.d.mts +102 -0
  2323. package/dist/kit/figure/text.mjs +106 -0
  2324. package/dist/kit/finance-viz/apportion-bar.d.mts +25 -0
  2325. package/dist/kit/finance-viz/apportion-bar.mjs +108 -0
  2326. package/dist/kit/finance-viz/index.d.mts +5 -0
  2327. package/dist/kit/finance-viz/plot-chart.d.mts +40 -0
  2328. package/dist/kit/finance-viz/plot-chart.mjs +79 -0
  2329. package/dist/kit/finance-viz/stock-timeline.d.mts +24 -0
  2330. package/dist/kit/finance-viz/stock-timeline.mjs +78 -0
  2331. package/dist/kit/finance-viz/tradeoff-curve.d.mts +32 -0
  2332. package/dist/kit/finance-viz/tradeoff-curve.mjs +168 -0
  2333. package/dist/kit/frame.d.mts +33 -49
  2334. package/dist/kit/frame.mjs +158 -120
  2335. package/dist/kit/freq-tree.mjs +2 -2
  2336. package/dist/kit/gravitation/index.d.mts +2 -0
  2337. package/dist/kit/gravitation/section.d.mts +60 -0
  2338. package/dist/kit/gravitation/section.mjs +128 -0
  2339. package/dist/kit/guide.d.mts +41 -0
  2340. package/dist/kit/guide.mjs +53 -0
  2341. package/dist/kit/index.d.mts +73 -6
  2342. package/dist/kit/index.mjs +63 -4
  2343. package/dist/kit/instruments-palette.mjs +14 -0
  2344. package/dist/kit/instruments.mjs +679 -0
  2345. package/dist/kit/learning-sequence.d.mts +51 -0
  2346. package/dist/kit/learning-sequence.mjs +102 -0
  2347. package/dist/kit/logic-gates/_shared.mjs +11 -0
  2348. package/dist/kit/logic-gates/display.mjs +281 -0
  2349. package/dist/kit/logic-gates/gate.d.mts +5 -0
  2350. package/dist/kit/logic-gates/gate.mjs +132 -0
  2351. package/dist/kit/magnetism/glyphs.d.mts +179 -0
  2352. package/dist/kit/magnetism/glyphs.mjs +445 -0
  2353. package/dist/kit/magnetism/index.d.mts +2 -0
  2354. package/dist/kit/mechanics/energy.d.mts +221 -0
  2355. package/dist/kit/mechanics/energy.mjs +578 -0
  2356. package/dist/kit/mechanics/index.d.mts +3 -0
  2357. package/dist/kit/mechanics/palette.mjs +27 -0
  2358. package/dist/kit/mechanics/primitives.d.mts +298 -0
  2359. package/dist/kit/mechanics/primitives.mjs +887 -0
  2360. package/dist/kit/networking/access-glyphs.d.mts +2 -0
  2361. package/dist/kit/networking/access-glyphs.mjs +123 -0
  2362. package/dist/kit/networking/glyphs.d.mts +13 -0
  2363. package/dist/kit/networking/glyphs.mjs +147 -0
  2364. package/dist/kit/networking/index.d.mts +7 -0
  2365. package/dist/kit/networking/infrastructure-glyphs.d.mts +2 -0
  2366. package/dist/kit/networking/infrastructure-glyphs.mjs +149 -0
  2367. package/dist/kit/networking/layout.mjs +15 -0
  2368. package/dist/kit/networking/primitives.d.mts +69 -0
  2369. package/dist/kit/networking/primitives.mjs +798 -0
  2370. package/dist/kit/networking/release-glyphs.d.mts +2 -0
  2371. package/dist/kit/networking/release-glyphs.mjs +128 -0
  2372. package/dist/kit/networking/secret-glyphs.d.mts +2 -0
  2373. package/dist/kit/networking/secret-glyphs.mjs +148 -0
  2374. package/dist/kit/palette.mjs +51 -5
  2375. package/dist/kit/pedagogy.d.mts +22 -33
  2376. package/dist/kit/pedagogy.mjs +120 -97
  2377. package/dist/kit/play.d.mts +1 -5
  2378. package/dist/kit/play.mjs +4 -1
  2379. package/dist/kit/predict-gate.d.mts +17 -0
  2380. package/dist/kit/predict-gate.mjs +42 -0
  2381. package/dist/kit/predict.d.mts +1 -19
  2382. package/dist/kit/predict.mjs +10 -10
  2383. package/dist/kit/probability.d.mts +37 -0
  2384. package/dist/kit/probability.mjs +115 -1
  2385. package/dist/kit/proportion.mjs +52 -27
  2386. package/dist/kit/receipt.d.mts +3 -11
  2387. package/dist/kit/receipt.mjs +13 -53
  2388. package/dist/kit/rich.d.mts +1 -4
  2389. package/dist/kit/rich.mjs +41 -1
  2390. package/dist/kit/rule.d.mts +34 -17
  2391. package/dist/kit/rule.mjs +110 -155
  2392. package/dist/kit/scale.mjs +55 -23
  2393. package/dist/kit/scene-library.d.mts +1 -4
  2394. package/dist/kit/scene-library.mjs +51 -89
  2395. package/dist/kit/scene-studio.d.mts +1 -5
  2396. package/dist/kit/scene-studio.mjs +116 -177
  2397. package/dist/kit/scenes.d.mts +0 -1
  2398. package/dist/kit/scenes.mjs +306 -114
  2399. package/dist/kit/simulation/adapter.d.mts +9 -0
  2400. package/dist/kit/simulation/adapter.mjs +11 -0
  2401. package/dist/kit/simulation/behavior.d.mts +15 -0
  2402. package/dist/kit/simulation/behavior.mjs +24 -0
  2403. package/dist/kit/simulation/clock.d.mts +65 -0
  2404. package/dist/kit/simulation/clock.mjs +155 -0
  2405. package/dist/kit/simulation/model.d.mts +133 -0
  2406. package/dist/kit/simulation/model.mjs +79 -0
  2407. package/dist/kit/simulation/rig.d.mts +11 -0
  2408. package/dist/kit/simulation/rig.mjs +11 -0
  2409. package/dist/kit/simulation/use-simulation.d.mts +60 -0
  2410. package/dist/kit/simulation/use-simulation.mjs +92 -0
  2411. package/dist/kit/slot-fill.d.mts +9 -17
  2412. package/dist/kit/slot-fill.mjs +86 -71
  2413. package/dist/kit/space/backdrop.d.mts +39 -0
  2414. package/dist/kit/space/backdrop.mjs +174 -0
  2415. package/dist/kit/space/bodies.d.mts +66 -0
  2416. package/dist/kit/space/bodies.mjs +464 -0
  2417. package/dist/kit/space/index.d.mts +4 -0
  2418. package/dist/kit/space/palette.d.mts +144 -0
  2419. package/dist/kit/space/palette.mjs +165 -0
  2420. package/dist/kit/space-glyphs.mjs +63 -0
  2421. package/dist/kit/steps.d.mts +4 -6
  2422. package/dist/kit/steps.mjs +6 -6
  2423. package/dist/kit/thermal-palette.mjs +38 -0
  2424. package/dist/kit/thermal.mjs +159 -26
  2425. package/dist/kit/ticks.mjs +19 -0
  2426. package/dist/kit/vessel.d.mts +2 -27
  2427. package/dist/kit/vessel.mjs +30 -11
  2428. package/dist/lab-def/attrs.d.mts +31 -0
  2429. package/dist/lab-def/attrs.mjs +65 -0
  2430. package/dist/lab-def/define-lab.d.mts +133 -0
  2431. package/dist/lab-def/define-lab.mjs +15 -0
  2432. package/dist/lab-def/lab-authoring.mjs +39 -0
  2433. package/dist/lab-def/lab-runtime.mjs +154 -0
  2434. package/dist/lab-def/to-block.mjs +56 -0
  2435. package/dist/language/activity.d.mts +17 -0
  2436. package/dist/language/activity.mjs +60 -0
  2437. package/dist/language/agreement/index.d.mts +2 -1
  2438. package/dist/language/agreement/preset.d.mts +9 -6
  2439. package/dist/language/agreement/preset.mjs +59 -30
  2440. package/dist/language/article-lens/index.d.mts +2 -1
  2441. package/dist/language/article-lens/preset.d.mts +7 -8
  2442. package/dist/language/article-lens/preset.mjs +53 -28
  2443. package/dist/language/cloze/index.d.mts +2 -0
  2444. package/dist/language/cloze/preset.d.mts +28 -0
  2445. package/dist/language/cloze/preset.mjs +130 -0
  2446. package/dist/language/deck.d.mts +0 -1
  2447. package/dist/language/dictation/index.d.mts +2 -0
  2448. package/dist/language/dictation/preset.d.mts +14 -0
  2449. package/dist/language/dictation/preset.mjs +171 -0
  2450. package/dist/language/error-correct/index.d.mts +2 -0
  2451. package/dist/language/error-correct/preset.d.mts +22 -0
  2452. package/dist/language/error-correct/preset.mjs +134 -0
  2453. package/dist/language/icon.d.mts +2 -9
  2454. package/dist/language/icon.mjs +4 -10
  2455. package/dist/language/index.d.mts +19 -2
  2456. package/dist/language/index.mjs +8 -2
  2457. package/dist/language/listening/index.d.mts +2 -0
  2458. package/dist/language/listening/preset.d.mts +17 -0
  2459. package/dist/language/listening/preset.mjs +153 -0
  2460. package/dist/language/preposition-scene/index.d.mts +2 -1
  2461. package/dist/language/preposition-scene/preset.d.mts +9 -6
  2462. package/dist/language/preposition-scene/preset.mjs +81 -70
  2463. package/dist/language/reading/index.d.mts +2 -0
  2464. package/dist/language/reading/preset.d.mts +30 -0
  2465. package/dist/language/reading/preset.mjs +63 -0
  2466. package/dist/language/sentence-builder/index.d.mts +2 -1
  2467. package/dist/language/sentence-builder/preset.d.mts +6 -9
  2468. package/dist/language/sentence-builder/preset.mjs +36 -22
  2469. package/dist/language/transform/index.d.mts +2 -1
  2470. package/dist/language/transform/preset.d.mts +6 -9
  2471. package/dist/language/transform/preset.mjs +43 -23
  2472. package/dist/language/ui.d.mts +20 -16
  2473. package/dist/language/ui.mjs +49 -8
  2474. package/dist/language/word-match/index.d.mts +2 -1
  2475. package/dist/language/word-match/preset.d.mts +3 -8
  2476. package/dist/language/word-match/preset.mjs +38 -20
  2477. package/dist/logic/ChipScene.d.mts +20 -0
  2478. package/dist/logic/ChipScene.mjs +314 -0
  2479. package/dist/logic/CounterScene.d.mts +13 -0
  2480. package/dist/logic/CounterScene.mjs +228 -0
  2481. package/dist/logic/DetectorScene.d.mts +15 -0
  2482. package/dist/logic/DetectorScene.mjs +232 -0
  2483. package/dist/logic/LatchScene.d.mts +14 -0
  2484. package/dist/logic/LatchScene.mjs +309 -0
  2485. package/dist/logic/LogicBuildLab.d.mts +1 -8
  2486. package/dist/logic/LogicBuildLab.mjs +18 -63
  2487. package/dist/logic/LogicEditScene.d.mts +5 -11
  2488. package/dist/logic/LogicEditScene.mjs +27 -19
  2489. package/dist/logic/LogicEditor.d.mts +4 -5
  2490. package/dist/logic/LogicEditor.mjs +165 -227
  2491. package/dist/logic/LogicScene.d.mts +1 -11
  2492. package/dist/logic/LogicScene.mjs +87 -23
  2493. package/dist/logic/SequentialLogicLab.d.mts +15 -0
  2494. package/dist/logic/SequentialLogicLab.mjs +179 -0
  2495. package/dist/logic/ShiftScene.d.mts +12 -0
  2496. package/dist/logic/ShiftScene.mjs +171 -0
  2497. package/dist/logic/TimingScene.d.mts +18 -0
  2498. package/dist/logic/TimingScene.mjs +166 -0
  2499. package/dist/logic/TwosScene.d.mts +21 -0
  2500. package/dist/logic/TwosScene.mjs +269 -0
  2501. package/dist/logic/WaveScene.d.mts +34 -0
  2502. package/dist/logic/WaveScene.mjs +123 -0
  2503. package/dist/logic/contract.d.mts +22 -3
  2504. package/dist/logic/counter.d.mts +26 -0
  2505. package/dist/logic/counter.mjs +90 -0
  2506. package/dist/logic/detector.d.mts +72 -0
  2507. package/dist/logic/detector.mjs +93 -0
  2508. package/dist/logic/display.d.mts +1 -9
  2509. package/dist/logic/display.mjs +74 -47
  2510. package/dist/logic/edit-ops.d.mts +0 -1
  2511. package/dist/logic/editor/index.d.mts +6 -0
  2512. package/dist/logic/editor/index.mjs +8 -0
  2513. package/dist/logic/evaluate.d.mts +9 -3
  2514. package/dist/logic/evaluate.mjs +108 -31
  2515. package/dist/logic/ic.d.mts +62 -0
  2516. package/dist/logic/ic.mjs +245 -0
  2517. package/dist/logic/index.d.mts +26 -7
  2518. package/dist/logic/index.mjs +20 -1
  2519. package/dist/logic/lab.d.mts +1 -12
  2520. package/dist/logic/lab.mjs +63 -84
  2521. package/dist/logic/latch.d.mts +61 -0
  2522. package/dist/logic/latch.mjs +68 -0
  2523. package/dist/logic/netlist.d.mts +26 -0
  2524. package/dist/logic/netlist.mjs +29 -0
  2525. package/dist/logic/presets.d.mts +0 -1
  2526. package/dist/logic/registry.d.mts +0 -1
  2527. package/dist/logic/runtime/index.d.mts +14 -0
  2528. package/dist/logic/runtime/index.mjs +15 -0
  2529. package/dist/logic/sequential-presets.d.mts +146 -0
  2530. package/dist/logic/sequential-presets.mjs +179 -0
  2531. package/dist/logic/sequential.d.mts +123 -0
  2532. package/dist/logic/sequential.mjs +187 -0
  2533. package/dist/logic/shift.d.mts +33 -0
  2534. package/dist/logic/shift.mjs +76 -0
  2535. package/dist/logic/timing.d.mts +57 -0
  2536. package/dist/logic/timing.mjs +149 -0
  2537. package/dist/logic/twos.d.mts +65 -0
  2538. package/dist/logic/twos.mjs +97 -0
  2539. package/dist/math/activity.mjs +90 -0
  2540. package/dist/math/area-model/asset.d.mts +0 -1
  2541. package/dist/math/area-model/asset.mjs +24 -14
  2542. package/dist/math/area-model/index.d.mts +2 -1
  2543. package/dist/math/area-model/preset.d.mts +2 -15
  2544. package/dist/math/area-model/preset.mjs +136 -80
  2545. package/dist/math/area-rearrange/core.d.mts +42 -0
  2546. package/dist/math/area-rearrange/core.mjs +188 -0
  2547. package/dist/math/area-rearrange/index.d.mts +3 -0
  2548. package/dist/math/area-rearrange/preset.d.mts +17 -0
  2549. package/dist/math/area-rearrange/preset.mjs +226 -0
  2550. package/dist/math/balance-algebra/asset.d.mts +0 -1
  2551. package/dist/math/balance-algebra/index.d.mts +2 -1
  2552. package/dist/math/balance-algebra/preset.d.mts +3 -9
  2553. package/dist/math/balance-algebra/preset.mjs +47 -17
  2554. package/dist/math/bearings/core.d.mts +76 -0
  2555. package/dist/math/bearings/core.mjs +86 -0
  2556. package/dist/math/bearings/index.d.mts +3 -0
  2557. package/dist/math/bearings/preset.d.mts +18 -0
  2558. package/dist/math/bearings/preset.mjs +338 -0
  2559. package/dist/math/bounds-window/preset.mjs +239 -0
  2560. package/dist/math/broken-tree/index.d.mts +2 -1
  2561. package/dist/math/broken-tree/preset.d.mts +1 -10
  2562. package/dist/math/broken-tree/preset.mjs +87 -52
  2563. package/dist/math/calculus/core.d.mts +30 -0
  2564. package/dist/math/calculus/core.mjs +101 -0
  2565. package/dist/math/calculus/index.d.mts +2 -0
  2566. package/dist/math/calculus/index.mjs +3 -0
  2567. package/dist/math/circle/index.d.mts +2 -1
  2568. package/dist/math/circle/preset.d.mts +1 -15
  2569. package/dist/math/circle/preset.mjs +46 -28
  2570. package/dist/math/complex/index.d.mts +3 -2
  2571. package/dist/math/complex/index.mjs +5 -0
  2572. package/dist/math/complex/preset.d.mts +0 -1
  2573. package/dist/math/complex/preset.mjs +61 -47
  2574. package/dist/math/complex/rule-figures.mjs +328 -0
  2575. package/dist/math/complex/rules.d.mts +11 -2
  2576. package/dist/math/complex/rules.mjs +165 -8
  2577. package/dist/math/cone-frustum/core.mjs +34 -0
  2578. package/dist/math/cone-frustum/preset.mjs +342 -0
  2579. package/dist/math/conic/index.d.mts +2 -1
  2580. package/dist/math/conic/preset.d.mts +0 -1
  2581. package/dist/math/conic/preset.mjs +79 -28
  2582. package/dist/math/derivation.d.mts +14 -6
  2583. package/dist/math/derivation.mjs +118 -60
  2584. package/dist/math/derivative-explorer/index.d.mts +2 -1
  2585. package/dist/math/derivative-explorer/index.mjs +3 -0
  2586. package/dist/math/derivative-explorer/preset.d.mts +1 -8
  2587. package/dist/math/derivative-explorer/preset.mjs +111 -122
  2588. package/dist/math/differential-equation/index.d.mts +2 -0
  2589. package/dist/math/differential-equation/index.mjs +3 -0
  2590. package/dist/math/differential-equation/preset.d.mts +15 -0
  2591. package/dist/math/differential-equation/preset.mjs +276 -0
  2592. package/dist/math/division-workbench/core.d.mts +26 -0
  2593. package/dist/math/division-workbench/core.mjs +53 -0
  2594. package/dist/math/division-workbench/index.d.mts +3 -0
  2595. package/dist/math/division-workbench/preset.d.mts +15 -0
  2596. package/dist/math/division-workbench/preset.mjs +186 -0
  2597. package/dist/math/division-workbench/visuals.mjs +358 -0
  2598. package/dist/math/domain-range/index.d.mts +2 -1
  2599. package/dist/math/domain-range/preset.d.mts +1 -13
  2600. package/dist/math/domain-range/preset.mjs +114 -58
  2601. package/dist/math/exact-triangle/preset.mjs +409 -0
  2602. package/dist/math/expression-order/core.d.mts +32 -0
  2603. package/dist/math/expression-order/core.mjs +141 -0
  2604. package/dist/math/expression-order/index.d.mts +3 -0
  2605. package/dist/math/expression-order/preset.d.mts +30 -0
  2606. package/dist/math/expression-order/preset.mjs +141 -0
  2607. package/dist/math/fraction-bar/index.d.mts +2 -1
  2608. package/dist/math/fraction-bar/preset.d.mts +0 -1
  2609. package/dist/math/fraction-bar/preset.mjs +108 -74
  2610. package/dist/math/function-machine/index.d.mts +2 -1
  2611. package/dist/math/function-machine/preset.d.mts +2 -9
  2612. package/dist/math/function-machine/preset.mjs +35 -16
  2613. package/dist/math/fundamental-theorem/index.d.mts +2 -0
  2614. package/dist/math/fundamental-theorem/index.mjs +3 -0
  2615. package/dist/math/fundamental-theorem/preset.d.mts +13 -0
  2616. package/dist/math/fundamental-theorem/preset.mjs +207 -0
  2617. package/dist/math/geometry-foundations/activity.d.mts +1 -0
  2618. package/dist/math/geometry-foundations/activity.mjs +74 -0
  2619. package/dist/math/geometry-foundations/core.d.mts +22 -0
  2620. package/dist/math/geometry-foundations/core.mjs +62 -0
  2621. package/dist/math/geometry-foundations/index.d.mts +4 -0
  2622. package/dist/math/geometry-foundations/preset.d.mts +18 -0
  2623. package/dist/math/geometry-foundations/preset.mjs +311 -0
  2624. package/dist/math/gradient-descent.d.mts +1 -9
  2625. package/dist/math/gradient-descent.mjs +96 -115
  2626. package/dist/math/grapher/index.d.mts +2 -1
  2627. package/dist/math/grapher/preset.d.mts +3 -12
  2628. package/dist/math/grapher/preset.mjs +207 -191
  2629. package/dist/math/harmonic-form/index.d.mts +2 -1
  2630. package/dist/math/harmonic-form/preset.d.mts +1 -8
  2631. package/dist/math/harmonic-form/preset.mjs +101 -95
  2632. package/dist/math/identity-proof/core.d.mts +86 -0
  2633. package/dist/math/identity-proof/core.mjs +70 -0
  2634. package/dist/math/identity-proof/default-proof.d.mts +13 -0
  2635. package/dist/math/identity-proof/default-proof.mjs +56 -0
  2636. package/dist/math/identity-proof/index.d.mts +4 -0
  2637. package/dist/math/identity-proof/preset.d.mts +13 -0
  2638. package/dist/math/identity-proof/preset.mjs +147 -0
  2639. package/dist/math/index.d.mts +99 -9
  2640. package/dist/math/index.mjs +49 -9
  2641. package/dist/math/integral-explorer/index.d.mts +2 -1
  2642. package/dist/math/integral-explorer/index.mjs +3 -0
  2643. package/dist/math/integral-explorer/preset.d.mts +1 -10
  2644. package/dist/math/integral-explorer/preset.mjs +124 -129
  2645. package/dist/math/interactive/index.d.mts +2 -1
  2646. package/dist/math/interactive/preset.d.mts +2 -14
  2647. package/dist/math/interactive/preset.mjs +69 -35
  2648. package/dist/math/iteration/core.d.mts +87 -0
  2649. package/dist/math/iteration/core.mjs +135 -0
  2650. package/dist/math/iteration/index.d.mts +3 -0
  2651. package/dist/math/iteration/preset.d.mts +28 -0
  2652. package/dist/math/iteration/preset.mjs +243 -0
  2653. package/dist/math/limit-explorer/index.d.mts +2 -1
  2654. package/dist/math/limit-explorer/index.mjs +3 -0
  2655. package/dist/math/limit-explorer/preset.d.mts +1 -8
  2656. package/dist/math/limit-explorer/preset.mjs +71 -92
  2657. package/dist/math/linear-model/index.d.mts +2 -1
  2658. package/dist/math/linear-model/preset.d.mts +0 -1
  2659. package/dist/math/linear-model/preset.mjs +107 -60
  2660. package/dist/math/linear-system/index.d.mts +2 -1
  2661. package/dist/math/linear-system/preset.d.mts +1 -9
  2662. package/dist/math/linear-system/preset.mjs +45 -15
  2663. package/dist/math/lines-in-space/core.d.mts +71 -0
  2664. package/dist/math/lines-in-space/core.mjs +185 -0
  2665. package/dist/math/lines-in-space/index.d.mts +3 -0
  2666. package/dist/math/lines-in-space/preset.d.mts +33 -0
  2667. package/dist/math/lines-in-space/preset.mjs +864 -0
  2668. package/dist/math/measurement/activity.d.mts +1 -0
  2669. package/dist/math/measurement/activity.mjs +74 -0
  2670. package/dist/math/measurement/core.d.mts +27 -0
  2671. package/dist/math/measurement/core.mjs +62 -0
  2672. package/dist/math/measurement/index.d.mts +4 -0
  2673. package/dist/math/measurement/preset.d.mts +23 -0
  2674. package/dist/math/measurement/preset.mjs +667 -0
  2675. package/dist/math/mystery-bucket/asset.d.mts +0 -1
  2676. package/dist/math/mystery-bucket/asset.mjs +2 -1
  2677. package/dist/math/mystery-bucket/index.d.mts +2 -1
  2678. package/dist/math/mystery-bucket/preset.d.mts +2 -11
  2679. package/dist/math/mystery-bucket/preset.mjs +33 -10
  2680. package/dist/math/newton-method/index.d.mts +2 -0
  2681. package/dist/math/newton-method/index.mjs +3 -0
  2682. package/dist/math/newton-method/preset.d.mts +13 -0
  2683. package/dist/math/newton-method/preset.mjs +279 -0
  2684. package/dist/math/number-line/index.d.mts +2 -1
  2685. package/dist/math/number-line/preset.d.mts +1 -10
  2686. package/dist/math/number-line/preset.mjs +48 -18
  2687. package/dist/math/number-structure/core.d.mts +42 -0
  2688. package/dist/math/number-structure/core.mjs +130 -0
  2689. package/dist/math/number-structure/index.d.mts +3 -0
  2690. package/dist/math/number-structure/preset.d.mts +17 -0
  2691. package/dist/math/number-structure/preset.mjs +237 -0
  2692. package/dist/math/number-structure/visuals.mjs +486 -0
  2693. package/dist/math/oblique-triangle/core.d.mts +99 -0
  2694. package/dist/math/oblique-triangle/core.mjs +194 -0
  2695. package/dist/math/oblique-triangle/index.d.mts +3 -0
  2696. package/dist/math/oblique-triangle/preset.d.mts +15 -0
  2697. package/dist/math/oblique-triangle/preset.mjs +423 -0
  2698. package/dist/math/ode/core.d.mts +15 -0
  2699. package/dist/math/ode/core.mjs +73 -0
  2700. package/dist/math/ode/index.d.mts +3 -0
  2701. package/dist/math/ode/index.mjs +4 -0
  2702. package/dist/math/ode/system.d.mts +22 -0
  2703. package/dist/math/ode/system.mjs +73 -0
  2704. package/dist/math/optimization/core.d.mts +21 -0
  2705. package/dist/math/optimization/core.mjs +46 -0
  2706. package/dist/math/optimization/index.d.mts +2 -0
  2707. package/dist/math/optimization/index.mjs +3 -0
  2708. package/dist/math/parabola/index.d.mts +2 -1
  2709. package/dist/math/parabola/preset.d.mts +1 -5
  2710. package/dist/math/parabola/preset.mjs +54 -15
  2711. package/dist/math/partial-fractions/core.d.mts +68 -0
  2712. package/dist/math/partial-fractions/core.mjs +222 -0
  2713. package/dist/math/partial-fractions/index.d.mts +3 -0
  2714. package/dist/math/partial-fractions/preset.d.mts +35 -0
  2715. package/dist/math/partial-fractions/preset.mjs +267 -0
  2716. package/dist/math/pattern/asset.d.mts +0 -1
  2717. package/dist/math/pattern/asset.mjs +2 -1
  2718. package/dist/math/pattern/index.d.mts +2 -1
  2719. package/dist/math/pattern/preset.d.mts +3 -16
  2720. package/dist/math/pattern/preset.mjs +77 -92
  2721. package/dist/math/percent-bar/index.d.mts +2 -1
  2722. package/dist/math/percent-bar/preset.d.mts +0 -1
  2723. package/dist/math/percent-bar/preset.mjs +79 -43
  2724. package/dist/math/phase-portrait/index.d.mts +2 -0
  2725. package/dist/math/phase-portrait/index.mjs +3 -0
  2726. package/dist/math/phase-portrait/preset.d.mts +16 -0
  2727. package/dist/math/phase-portrait/preset.mjs +266 -0
  2728. package/dist/math/poly/index.d.mts +3 -2
  2729. package/dist/math/poly/index.mjs +5 -0
  2730. package/dist/math/poly/preset.d.mts +1 -8
  2731. package/dist/math/poly/preset.mjs +51 -70
  2732. package/dist/math/poly/steps.d.mts +2 -3
  2733. package/dist/math/poly/steps.mjs +6 -6
  2734. package/dist/math/radian-wrap/core.d.mts +38 -0
  2735. package/dist/math/radian-wrap/core.mjs +58 -0
  2736. package/dist/math/radian-wrap/index.d.mts +3 -0
  2737. package/dist/math/radian-wrap/preset.d.mts +13 -0
  2738. package/dist/math/radian-wrap/preset.mjs +228 -0
  2739. package/dist/math/rate-machine/index.d.mts +2 -1
  2740. package/dist/math/rate-machine/preset.d.mts +0 -1
  2741. package/dist/math/rate-machine/preset.mjs +143 -91
  2742. package/dist/math/ratio-share/index.d.mts +2 -1
  2743. package/dist/math/ratio-share/preset.d.mts +0 -1
  2744. package/dist/math/ratio-share/preset.mjs +95 -40
  2745. package/dist/math/receipt/index.d.mts +2 -1
  2746. package/dist/math/receipt/preset.d.mts +0 -1
  2747. package/dist/math/receipt/preset.mjs +66 -60
  2748. package/dist/math/root-finding/core.d.mts +18 -0
  2749. package/dist/math/root-finding/core.mjs +75 -0
  2750. package/dist/math/root-finding/index.d.mts +2 -0
  2751. package/dist/math/root-finding/index.mjs +3 -0
  2752. package/dist/math/sequence-predict/index.d.mts +2 -1
  2753. package/dist/math/sequence-predict/preset.d.mts +0 -1
  2754. package/dist/math/sequence-predict/preset.mjs +46 -43
  2755. package/dist/math/slide-rule/core.d.mts +39 -0
  2756. package/dist/math/slide-rule/core.mjs +104 -0
  2757. package/dist/math/slide-rule/index.d.mts +3 -0
  2758. package/dist/math/slide-rule/preset.d.mts +16 -0
  2759. package/dist/math/slide-rule/preset.mjs +329 -0
  2760. package/dist/math/solid-net/core.d.mts +48 -0
  2761. package/dist/math/solid-net/core.mjs +177 -0
  2762. package/dist/math/solid-net/index.d.mts +3 -0
  2763. package/dist/math/solid-net/preset.d.mts +17 -0
  2764. package/dist/math/solid-net/preset.mjs +433 -0
  2765. package/dist/math/solid-slice/core.mjs +189 -0
  2766. package/dist/math/solid-slice/preset.mjs +278 -0
  2767. package/dist/math/straight-line/index.d.mts +2 -1
  2768. package/dist/math/straight-line/preset.d.mts +0 -1
  2769. package/dist/math/straight-line/preset.mjs +77 -31
  2770. package/dist/math/system-solve/index.d.mts +2 -1
  2771. package/dist/math/system-solve/preset.d.mts +0 -1
  2772. package/dist/math/system-solve/preset.mjs +86 -104
  2773. package/dist/math/tank-design/core.mjs +40 -0
  2774. package/dist/math/tank-design/preset.mjs +465 -0
  2775. package/dist/math/taylor/core.d.mts +8 -0
  2776. package/dist/math/taylor/core.mjs +31 -0
  2777. package/dist/math/taylor/index.d.mts +2 -0
  2778. package/dist/math/taylor/index.mjs +3 -0
  2779. package/dist/math/taylor-series/index.d.mts +2 -0
  2780. package/dist/math/taylor-series/index.mjs +3 -0
  2781. package/dist/math/taylor-series/preset.d.mts +14 -0
  2782. package/dist/math/taylor-series/preset.mjs +244 -0
  2783. package/dist/math/transform/index.d.mts +2 -1
  2784. package/dist/math/transform/preset.d.mts +5 -11
  2785. package/dist/math/transform/preset.mjs +84 -83
  2786. package/dist/math/triangle-trig/index.d.mts +2 -1
  2787. package/dist/math/triangle-trig/preset.d.mts +11 -16
  2788. package/dist/math/triangle-trig/preset.mjs +98 -56
  2789. package/dist/math/trig/core.d.mts +1 -3
  2790. package/dist/math/trig/core.mjs +3 -2
  2791. package/dist/math/trig/diagrams.mjs +45 -19
  2792. package/dist/math/trig/index.d.mts +3 -1
  2793. package/dist/math/trig/preset.d.mts +1 -10
  2794. package/dist/math/trig/preset.mjs +55 -25
  2795. package/dist/math/trig/rules.d.mts +1 -1
  2796. package/dist/math/trig/rules.mjs +71 -10
  2797. package/dist/math/trig-explorer.d.mts +1 -5
  2798. package/dist/math/trig-explorer.mjs +43 -18
  2799. package/dist/ml/index.d.mts +5 -5
  2800. package/dist/ml/index.mjs +5 -5
  2801. package/dist/networking/AirtimeScene.d.mts +10 -0
  2802. package/dist/networking/AirtimeScene.mjs +212 -0
  2803. package/dist/networking/CellularScene.d.mts +36 -0
  2804. package/dist/networking/CellularScene.mjs +406 -0
  2805. package/dist/networking/EncapScene.mjs +212 -0
  2806. package/dist/networking/HandoverScene.d.mts +15 -0
  2807. package/dist/networking/HandoverScene.mjs +196 -0
  2808. package/dist/networking/HandshakeScene.d.mts +11 -0
  2809. package/dist/networking/HandshakeScene.mjs +270 -0
  2810. package/dist/networking/MediaScene.mjs +217 -0
  2811. package/dist/networking/NetworkScene.d.mts +14 -0
  2812. package/dist/networking/NetworkScene.mjs +58 -0
  2813. package/dist/networking/NetworkingPrimitiveScene.d.mts +8 -0
  2814. package/dist/networking/NetworkingPrimitiveScene.mjs +183 -0
  2815. package/dist/networking/PacketInspector.d.mts +8 -0
  2816. package/dist/networking/PacketInspector.mjs +32 -0
  2817. package/dist/networking/PlugScene.mjs +192 -0
  2818. package/dist/networking/PrivacyScene.d.mts +13 -0
  2819. package/dist/networking/PrivacyScene.mjs +307 -0
  2820. package/dist/networking/SatelliteScene.d.mts +10 -0
  2821. package/dist/networking/SatelliteScene.mjs +240 -0
  2822. package/dist/networking/SpectrumScene.d.mts +15 -0
  2823. package/dist/networking/SpectrumScene.mjs +444 -0
  2824. package/dist/networking/SubnetScene.mjs +124 -0
  2825. package/dist/networking/SwitchScene.mjs +339 -0
  2826. package/dist/networking/VlanScene.mjs +203 -0
  2827. package/dist/networking/VpnScene.mjs +193 -0
  2828. package/dist/networking/WifiScene.d.mts +19 -0
  2829. package/dist/networking/WifiScene.mjs +702 -0
  2830. package/dist/networking/index.d.mts +16 -0
  2831. package/dist/networking/index.mjs +16 -0
  2832. package/dist/pathways/biology.d.mts +5 -0
  2833. package/dist/pathways/biology.mjs +60 -0
  2834. package/dist/pathways/calculus.d.mts +5 -0
  2835. package/dist/pathways/calculus.mjs +123 -0
  2836. package/dist/pathways/chemistry.d.mts +7 -0
  2837. package/dist/pathways/chemistry.mjs +87 -0
  2838. package/dist/pathways/cloud-infrastructure.d.mts +6 -0
  2839. package/dist/pathways/cloud-infrastructure.mjs +211 -0
  2840. package/dist/pathways/digital-logic.d.mts +20 -0
  2841. package/dist/pathways/digital-logic.mjs +408 -0
  2842. package/dist/pathways/electronic-circuits.d.mts +14 -0
  2843. package/dist/pathways/electronic-circuits.mjs +142 -0
  2844. package/dist/pathways/electronic-devices.d.mts +17 -0
  2845. package/dist/pathways/electronic-devices.mjs +152 -0
  2846. package/dist/pathways/index.d.mts +12 -0
  2847. package/dist/pathways/index.mjs +13 -0
  2848. package/dist/pathways/network-communication.d.mts +6 -0
  2849. package/dist/pathways/network-communication.mjs +172 -0
  2850. package/dist/pathways/quantum.d.mts +8 -0
  2851. package/dist/pathways/quantum.mjs +56 -0
  2852. package/dist/pathways/relativity.d.mts +5 -0
  2853. package/dist/pathways/relativity.mjs +63 -0
  2854. package/dist/pathways/types.d.mts +56 -0
  2855. package/dist/pathways/types.mjs +26 -0
  2856. package/dist/physics/alternating-current/index.d.mts +3 -0
  2857. package/dist/physics/alternating-current/index.mjs +4 -0
  2858. package/dist/physics/alternating-current/preset.d.mts +21 -0
  2859. package/dist/physics/alternating-current/preset.mjs +1257 -0
  2860. package/dist/physics/astronomy/core.d.mts +111 -0
  2861. package/dist/physics/astronomy/core.mjs +147 -0
  2862. package/dist/physics/attenuation/core.d.mts +106 -0
  2863. package/dist/physics/attenuation/core.mjs +112 -0
  2864. package/dist/physics/atwood/index.d.mts +2 -1
  2865. package/dist/physics/atwood/preset.d.mts +4 -9
  2866. package/dist/physics/atwood/preset.mjs +430 -258
  2867. package/dist/physics/biot-savart/activity.mjs +61 -0
  2868. package/dist/physics/biot-savart/preset.mjs +337 -0
  2869. package/dist/physics/biot-savart/presets.mjs +149 -0
  2870. package/dist/physics/biot-savart/torque-activity.mjs +57 -0
  2871. package/dist/physics/biot-savart/torque-preset.mjs +334 -0
  2872. package/dist/physics/bullet-walls/index.d.mts +2 -1
  2873. package/dist/physics/bullet-walls/model.mjs +81 -0
  2874. package/dist/physics/bullet-walls/preset.d.mts +3 -11
  2875. package/dist/physics/bullet-walls/preset.mjs +228 -290
  2876. package/dist/physics/carnot/index.d.mts +2 -1
  2877. package/dist/physics/carnot/preset.d.mts +3 -10
  2878. package/dist/physics/carnot/preset.mjs +353 -346
  2879. package/dist/physics/circular-motion/index.d.mts +2 -1
  2880. package/dist/physics/circular-motion/model.mjs +46 -0
  2881. package/dist/physics/circular-motion/preset.d.mts +3 -10
  2882. package/dist/physics/circular-motion/preset.mjs +205 -185
  2883. package/dist/physics/collision-track/index.d.mts +2 -1
  2884. package/dist/physics/collision-track/model.mjs +62 -0
  2885. package/dist/physics/collision-track/preset.d.mts +3 -12
  2886. package/dist/physics/collision-track/preset.mjs +356 -248
  2887. package/dist/physics/constants.d.mts +125 -0
  2888. package/dist/physics/constants.mjs +128 -0
  2889. package/dist/physics/couple-torque/index.d.mts +2 -0
  2890. package/dist/physics/couple-torque/preset.d.mts +20 -0
  2891. package/dist/physics/couple-torque/preset.mjs +625 -0
  2892. package/dist/physics/efficiency/index.d.mts +2 -1
  2893. package/dist/physics/efficiency/preset.d.mts +5 -10
  2894. package/dist/physics/efficiency/preset.mjs +228 -168
  2895. package/dist/physics/electric-field/index.d.mts +2 -1
  2896. package/dist/physics/electric-field/preset.d.mts +3 -6
  2897. package/dist/physics/electric-field/preset.mjs +149 -136
  2898. package/dist/physics/electric-flux/index.d.mts +2 -1
  2899. package/dist/physics/electric-flux/preset.d.mts +4 -12
  2900. package/dist/physics/electric-flux/preset.mjs +214 -165
  2901. package/dist/physics/electricity/engine.d.mts +54 -0
  2902. package/dist/physics/electricity/engine.mjs +126 -0
  2903. package/dist/physics/electricity/faults.d.mts +31 -0
  2904. package/dist/physics/electricity/faults.mjs +65 -0
  2905. package/dist/physics/electrostatics/coulomb-activity.mjs +119 -0
  2906. package/dist/physics/electrostatics/coulomb-preset.mjs +331 -0
  2907. package/dist/physics/electrostatics/coulomb-presets.mjs +60 -0
  2908. package/dist/physics/energy/core.d.mts +199 -0
  2909. package/dist/physics/energy/core.mjs +265 -0
  2910. package/dist/physics/energy-skate/index.d.mts +2 -1
  2911. package/dist/physics/energy-skate/model.mjs +92 -0
  2912. package/dist/physics/energy-skate/preset.d.mts +3 -10
  2913. package/dist/physics/energy-skate/preset.mjs +185 -148
  2914. package/dist/physics/entropy/index.d.mts +2 -1
  2915. package/dist/physics/entropy/preset.d.mts +3 -7
  2916. package/dist/physics/entropy/preset.mjs +150 -154
  2917. package/dist/physics/expansion/index.d.mts +2 -1
  2918. package/dist/physics/expansion/preset.d.mts +3 -8
  2919. package/dist/physics/expansion/preset.mjs +202 -163
  2920. package/dist/physics/exponential/asset.mjs +5 -4
  2921. package/dist/physics/exponential/index.d.mts +2 -1
  2922. package/dist/physics/exponential/preset.d.mts +1 -7
  2923. package/dist/physics/exponential/preset.mjs +104 -38
  2924. package/dist/physics/fields/activity.d.mts +23 -0
  2925. package/dist/physics/fields/activity.mjs +113 -0
  2926. package/dist/physics/fields/index.d.mts +10 -0
  2927. package/dist/physics/fields/index.mjs +19 -0
  2928. package/dist/physics/fields/spatial-activity.d.mts +5 -0
  2929. package/dist/physics/fields/spatial-activity.mjs +89 -0
  2930. package/dist/physics/fields/spatial-preset.d.mts +31 -0
  2931. package/dist/physics/fields/spatial-preset.mjs +232 -0
  2932. package/dist/physics/fluid-pressure/index.d.mts +2 -0
  2933. package/dist/physics/fluid-pressure/preset.d.mts +46 -0
  2934. package/dist/physics/fluid-pressure/preset.mjs +727 -0
  2935. package/dist/physics/force-pairs/index.d.mts +2 -0
  2936. package/dist/physics/force-pairs/preset.d.mts +21 -0
  2937. package/dist/physics/force-pairs/preset.mjs +836 -0
  2938. package/dist/physics/gas-process/index.d.mts +2 -1
  2939. package/dist/physics/gas-process/preset.d.mts +3 -11
  2940. package/dist/physics/gas-process/preset.mjs +145 -156
  2941. package/dist/physics/gauss-law/index.d.mts +2 -1
  2942. package/dist/physics/gauss-law/preset.d.mts +4 -9
  2943. package/dist/physics/gauss-law/preset.mjs +159 -115
  2944. package/dist/physics/geomagnetism/activity.mjs +60 -0
  2945. package/dist/physics/geomagnetism/preset.mjs +300 -0
  2946. package/dist/physics/geomagnetism/presets.mjs +68 -0
  2947. package/dist/physics/gravitation/index.d.mts +2 -1
  2948. package/dist/physics/gravitation/preset.d.mts +10 -14
  2949. package/dist/physics/gravitation/preset.mjs +394 -254
  2950. package/dist/physics/gravity-drop.d.mts +6 -2
  2951. package/dist/physics/gravity-drop.mjs +201 -36
  2952. package/dist/physics/gravity-profile/index.d.mts +2 -0
  2953. package/dist/physics/gravity-profile/preset.d.mts +39 -0
  2954. package/dist/physics/gravity-profile/preset.mjs +508 -0
  2955. package/dist/physics/heat-transfer/index.d.mts +2 -1
  2956. package/dist/physics/heat-transfer/preset.d.mts +3 -8
  2957. package/dist/physics/heat-transfer/preset.mjs +493 -421
  2958. package/dist/physics/impulse/index.d.mts +2 -1
  2959. package/dist/physics/impulse/preset.d.mts +3 -11
  2960. package/dist/physics/impulse/preset.mjs +525 -366
  2961. package/dist/physics/index.d.mts +124 -5
  2962. package/dist/physics/index.mjs +70 -3
  2963. package/dist/physics/intercept/animals.mjs +194 -0
  2964. package/dist/physics/intercept/core.d.mts +22 -0
  2965. package/dist/physics/intercept/core.mjs +147 -0
  2966. package/dist/physics/intercept/index.d.mts +2 -0
  2967. package/dist/physics/intercept/preset.d.mts +28 -0
  2968. package/dist/physics/intercept/preset.mjs +450 -0
  2969. package/dist/physics/investigation/circuit.d.mts +41 -0
  2970. package/dist/physics/investigation/circuit.mjs +174 -0
  2971. package/dist/physics/investigation/cooling.d.mts +44 -0
  2972. package/dist/physics/investigation/cooling.mjs +195 -0
  2973. package/dist/physics/investigation/density.d.mts +28 -0
  2974. package/dist/physics/investigation/density.mjs +136 -0
  2975. package/dist/physics/investigation/energy-resource.mjs +453 -0
  2976. package/dist/physics/investigation/engine.d.mts +106 -0
  2977. package/dist/physics/investigation/engine.mjs +126 -0
  2978. package/dist/physics/investigation/measurement.mjs +182 -0
  2979. package/dist/physics/investigation/optics.d.mts +38 -0
  2980. package/dist/physics/investigation/optics.mjs +155 -0
  2981. package/dist/physics/investigation/paper5.mjs +359 -0
  2982. package/dist/physics/investigation/radiation.mjs +304 -0
  2983. package/dist/physics/investigation/refraction.d.mts +40 -0
  2984. package/dist/physics/investigation/refraction.mjs +161 -0
  2985. package/dist/physics/investigation/space.mjs +191 -0
  2986. package/dist/physics/investigation/trolley.d.mts +43 -0
  2987. package/dist/physics/investigation/trolley.mjs +194 -0
  2988. package/dist/physics/investigation-activity.d.mts +25 -0
  2989. package/dist/physics/investigation-activity.mjs +86 -0
  2990. package/dist/physics/kepler/index.d.mts +2 -1
  2991. package/dist/physics/kepler/preset.d.mts +3 -10
  2992. package/dist/physics/kepler/preset.mjs +303 -140
  2993. package/dist/physics/lever/asset.d.mts +0 -1
  2994. package/dist/physics/lever/index.d.mts +2 -1
  2995. package/dist/physics/lever/preset.d.mts +7 -13
  2996. package/dist/physics/lever/preset.mjs +53 -32
  2997. package/dist/physics/lift-weight/index.d.mts +2 -0
  2998. package/dist/physics/lift-weight/preset.d.mts +23 -0
  2999. package/dist/physics/lift-weight/preset.mjs +362 -0
  3000. package/dist/physics/lifting-work/preset.mjs +411 -0
  3001. package/dist/physics/linear-pursuit/core.d.mts +16 -0
  3002. package/dist/physics/linear-pursuit/core.mjs +34 -0
  3003. package/dist/physics/linear-pursuit/index.d.mts +3 -0
  3004. package/dist/physics/linear-pursuit/index.mjs +4 -0
  3005. package/dist/physics/linear-pursuit/preset.d.mts +17 -0
  3006. package/dist/physics/linear-pursuit/preset.mjs +276 -0
  3007. package/dist/physics/linear-pursuit/vehicle.mjs +67 -0
  3008. package/dist/physics/lorentz/core.d.mts +12 -0
  3009. package/dist/physics/lorentz/core.mjs +31 -0
  3010. package/dist/physics/lorentz/index.d.mts +3 -1
  3011. package/dist/physics/lorentz/model.mjs +16 -0
  3012. package/dist/physics/lorentz/preset.d.mts +3 -13
  3013. package/dist/physics/lorentz/preset.mjs +218 -198
  3014. package/dist/physics/machines/ac-generator/core.d.mts +41 -0
  3015. package/dist/physics/machines/ac-generator/core.mjs +63 -0
  3016. package/dist/physics/machines/ac-generator/index.d.mts +3 -0
  3017. package/dist/physics/machines/ac-generator/model.mjs +14 -0
  3018. package/dist/physics/machines/ac-generator/preset.d.mts +30 -0
  3019. package/dist/physics/machines/ac-generator/preset.mjs +684 -0
  3020. package/dist/physics/machines/dc-motor/core.d.mts +28 -0
  3021. package/dist/physics/machines/dc-motor/core.mjs +69 -0
  3022. package/dist/physics/machines/dc-motor/index.d.mts +3 -0
  3023. package/dist/physics/machines/dc-motor/preset.d.mts +30 -0
  3024. package/dist/physics/machines/dc-motor/preset.mjs +689 -0
  3025. package/dist/physics/magnetism/formula-core.d.mts +1 -0
  3026. package/dist/physics/magnetism/formula-core.mjs +30 -0
  3027. package/dist/physics/magnetism/index.d.mts +4 -1
  3028. package/dist/physics/magnetism/preset.d.mts +3 -6
  3029. package/dist/physics/magnetism/preset.mjs +174 -107
  3030. package/dist/physics/mechanics/activity-plan.mjs +53 -0
  3031. package/dist/physics/mechanics/activity.mjs +19 -0
  3032. package/dist/physics/mechanics/core.d.mts +118 -0
  3033. package/dist/physics/mechanics/core.mjs +190 -0
  3034. package/dist/physics/mechanics/glyphs.mjs +250 -0
  3035. package/dist/physics/mechanics/presentation.mjs +182 -0
  3036. package/dist/physics/modern/imaging/activity.d.mts +5 -0
  3037. package/dist/physics/modern/imaging/activity.mjs +79 -0
  3038. package/dist/physics/modern/imaging/index.d.mts +12 -0
  3039. package/dist/physics/modern/imaging/pet-activity.d.mts +5 -0
  3040. package/dist/physics/modern/imaging/pet-activity.mjs +115 -0
  3041. package/dist/physics/modern/imaging/pet-core.d.mts +296 -0
  3042. package/dist/physics/modern/imaging/pet-core.mjs +389 -0
  3043. package/dist/physics/modern/imaging/pet-preset.d.mts +26 -0
  3044. package/dist/physics/modern/imaging/pet-preset.mjs +167 -0
  3045. package/dist/physics/modern/imaging/pet-scene.d.mts +21 -0
  3046. package/dist/physics/modern/imaging/pet-scene.mjs +245 -0
  3047. package/dist/physics/modern/imaging/preset.d.mts +15 -0
  3048. package/dist/physics/modern/imaging/preset.mjs +126 -0
  3049. package/dist/physics/modern/imaging/spectrum-activity.d.mts +5 -0
  3050. package/dist/physics/modern/imaging/spectrum-activity.mjs +79 -0
  3051. package/dist/physics/modern/imaging/spectrum-preset.d.mts +16 -0
  3052. package/dist/physics/modern/imaging/spectrum-preset.mjs +133 -0
  3053. package/dist/physics/modern/imaging/spectrum-scene.d.mts +9 -0
  3054. package/dist/physics/modern/imaging/spectrum-scene.mjs +279 -0
  3055. package/dist/physics/modern/imaging/xray-core.d.mts +74 -0
  3056. package/dist/physics/modern/imaging/xray-core.mjs +115 -0
  3057. package/dist/physics/modern/imaging/xray-scene.mjs +224 -0
  3058. package/dist/physics/modern/imaging/xray-spectrum-core.d.mts +51 -0
  3059. package/dist/physics/modern/imaging/xray-spectrum-core.mjs +94 -0
  3060. package/dist/physics/modern/index.d.mts +58 -0
  3061. package/dist/physics/modern/index.mjs +54 -0
  3062. package/dist/physics/modern/nuclear/activity.d.mts +5 -0
  3063. package/dist/physics/modern/nuclear/activity.mjs +74 -0
  3064. package/dist/physics/modern/nuclear/core.d.mts +74 -0
  3065. package/dist/physics/modern/nuclear/core.mjs +70 -0
  3066. package/dist/physics/modern/nuclear/fission-activity.d.mts +5 -0
  3067. package/dist/physics/modern/nuclear/fission-activity.mjs +96 -0
  3068. package/dist/physics/modern/nuclear/fission-core.d.mts +41 -0
  3069. package/dist/physics/modern/nuclear/fission-core.mjs +67 -0
  3070. package/dist/physics/modern/nuclear/fission-preset.d.mts +15 -0
  3071. package/dist/physics/modern/nuclear/fission-preset.mjs +132 -0
  3072. package/dist/physics/modern/nuclear/fission-scene.mjs +294 -0
  3073. package/dist/physics/modern/nuclear/index.d.mts +8 -0
  3074. package/dist/physics/modern/nuclear/preset.d.mts +14 -0
  3075. package/dist/physics/modern/nuclear/preset.mjs +176 -0
  3076. package/dist/physics/modern/quantum/activity.d.mts +5 -0
  3077. package/dist/physics/modern/quantum/activity.mjs +74 -0
  3078. package/dist/physics/modern/quantum/bloch-activity.d.mts +5 -0
  3079. package/dist/physics/modern/quantum/bloch-activity.mjs +74 -0
  3080. package/dist/physics/modern/quantum/bloch-preset.d.mts +20 -0
  3081. package/dist/physics/modern/quantum/bloch-preset.mjs +232 -0
  3082. package/dist/physics/modern/quantum/double-slit-activity.d.mts +5 -0
  3083. package/dist/physics/modern/quantum/double-slit-activity.mjs +74 -0
  3084. package/dist/physics/modern/quantum/double-slit-core.d.mts +48 -0
  3085. package/dist/physics/modern/quantum/double-slit-core.mjs +64 -0
  3086. package/dist/physics/modern/quantum/double-slit-preset.d.mts +15 -0
  3087. package/dist/physics/modern/quantum/double-slit-preset.mjs +327 -0
  3088. package/dist/physics/modern/quantum/gates-activity.d.mts +5 -0
  3089. package/dist/physics/modern/quantum/gates-activity.mjs +74 -0
  3090. package/dist/physics/modern/quantum/gates-core.d.mts +18 -0
  3091. package/dist/physics/modern/quantum/gates-core.mjs +54 -0
  3092. package/dist/physics/modern/quantum/gates-preset.d.mts +15 -0
  3093. package/dist/physics/modern/quantum/gates-preset.mjs +102 -0
  3094. package/dist/physics/modern/quantum/index.d.mts +17 -0
  3095. package/dist/physics/modern/quantum/photoelectric-core.d.mts +43 -0
  3096. package/dist/physics/modern/quantum/photoelectric-core.mjs +49 -0
  3097. package/dist/physics/modern/quantum/preset.d.mts +16 -0
  3098. package/dist/physics/modern/quantum/preset.mjs +229 -0
  3099. package/dist/physics/modern/quantum/qubit-core.d.mts +49 -0
  3100. package/dist/physics/modern/quantum/qubit-core.mjs +52 -0
  3101. package/dist/physics/modern/quantum/uncertainty-activity.d.mts +5 -0
  3102. package/dist/physics/modern/quantum/uncertainty-activity.mjs +74 -0
  3103. package/dist/physics/modern/quantum/uncertainty-core.d.mts +11 -0
  3104. package/dist/physics/modern/quantum/uncertainty-core.mjs +19 -0
  3105. package/dist/physics/modern/quantum/uncertainty-preset.d.mts +13 -0
  3106. package/dist/physics/modern/quantum/uncertainty-preset.mjs +157 -0
  3107. package/dist/physics/modern/relativity/activity.d.mts +5 -0
  3108. package/dist/physics/modern/relativity/activity.mjs +80 -0
  3109. package/dist/physics/modern/relativity/core.d.mts +29 -0
  3110. package/dist/physics/modern/relativity/core.mjs +60 -0
  3111. package/dist/physics/modern/relativity/explorer-activity.d.mts +5 -0
  3112. package/dist/physics/modern/relativity/explorer-activity.mjs +74 -0
  3113. package/dist/physics/modern/relativity/explorer-core.d.mts +15 -0
  3114. package/dist/physics/modern/relativity/explorer-core.mjs +21 -0
  3115. package/dist/physics/modern/relativity/explorer-preset.d.mts +14 -0
  3116. package/dist/physics/modern/relativity/explorer-preset.mjs +341 -0
  3117. package/dist/physics/modern/relativity/index.d.mts +19 -0
  3118. package/dist/physics/modern/relativity/length-activity.d.mts +5 -0
  3119. package/dist/physics/modern/relativity/length-activity.mjs +79 -0
  3120. package/dist/physics/modern/relativity/length-core.d.mts +20 -0
  3121. package/dist/physics/modern/relativity/length-core.mjs +33 -0
  3122. package/dist/physics/modern/relativity/length-preset.d.mts +13 -0
  3123. package/dist/physics/modern/relativity/length-preset.mjs +185 -0
  3124. package/dist/physics/modern/relativity/light-clock.d.mts +8 -0
  3125. package/dist/physics/modern/relativity/light-clock.mjs +237 -0
  3126. package/dist/physics/modern/relativity/muon-activity.d.mts +5 -0
  3127. package/dist/physics/modern/relativity/muon-activity.mjs +79 -0
  3128. package/dist/physics/modern/relativity/muon-core.d.mts +39 -0
  3129. package/dist/physics/modern/relativity/muon-core.mjs +66 -0
  3130. package/dist/physics/modern/relativity/muon-preset.d.mts +15 -0
  3131. package/dist/physics/modern/relativity/muon-preset.mjs +120 -0
  3132. package/dist/physics/modern/relativity/muon-scene.d.mts +10 -0
  3133. package/dist/physics/modern/relativity/muon-scene.mjs +144 -0
  3134. package/dist/physics/modern/relativity/preset.d.mts +17 -0
  3135. package/dist/physics/modern/relativity/preset.mjs +132 -0
  3136. package/dist/physics/modern/relativity/scene-primitives.mjs +244 -0
  3137. package/dist/physics/modern/relativity/simultaneity-activity.d.mts +5 -0
  3138. package/dist/physics/modern/relativity/simultaneity-activity.mjs +80 -0
  3139. package/dist/physics/modern/relativity/simultaneity-core.d.mts +20 -0
  3140. package/dist/physics/modern/relativity/simultaneity-core.mjs +33 -0
  3141. package/dist/physics/modern/relativity/simultaneity-preset.d.mts +13 -0
  3142. package/dist/physics/modern/relativity/simultaneity-preset.mjs +319 -0
  3143. package/dist/physics/modern/relativity/spacetime.d.mts +8 -0
  3144. package/dist/physics/modern/relativity/spacetime.mjs +168 -0
  3145. package/dist/physics/modern/shared/experiment-transport.d.mts +28 -0
  3146. package/dist/physics/modern/shared/experiment-transport.mjs +87 -0
  3147. package/dist/physics/modern/shared/index.d.mts +2 -0
  3148. package/dist/physics/optics/activity-plan.mjs +53 -0
  3149. package/dist/physics/optics/activity.mjs +36 -0
  3150. package/dist/physics/optics/asset.d.mts +0 -1
  3151. package/dist/physics/optics/asset.mjs +1 -1
  3152. package/dist/physics/optics/imaging-activity.mjs +64 -0
  3153. package/dist/physics/optics/index.d.mts +5 -1
  3154. package/dist/physics/optics/lens.d.mts +18 -0
  3155. package/dist/physics/optics/lens.mjs +402 -0
  3156. package/dist/physics/optics/mirror.d.mts +18 -0
  3157. package/dist/physics/optics/mirror.mjs +394 -0
  3158. package/dist/physics/optics/preset.d.mts +6 -4
  3159. package/dist/physics/optics/preset.mjs +48 -27
  3160. package/dist/physics/optics/refraction.d.mts +25 -0
  3161. package/dist/physics/optics/refraction.mjs +425 -0
  3162. package/dist/physics/orbit-lab.d.mts +12 -3
  3163. package/dist/physics/orbit-lab.mjs +336 -197
  3164. package/dist/physics/orbital/core.d.mts +69 -0
  3165. package/dist/physics/orbital/core.mjs +93 -0
  3166. package/dist/physics/orbital/model.d.mts +50 -0
  3167. package/dist/physics/orbital/model.mjs +66 -0
  3168. package/dist/physics/power/index.d.mts +2 -0
  3169. package/dist/physics/power/preset.d.mts +25 -0
  3170. package/dist/physics/power/preset.mjs +556 -0
  3171. package/dist/physics/projectiles/core.d.mts +8 -0
  3172. package/dist/physics/projectiles/core.mjs +194 -0
  3173. package/dist/physics/projectiles/falling-target.d.mts +23 -0
  3174. package/dist/physics/projectiles/falling-target.mjs +338 -0
  3175. package/dist/physics/projectiles/glyphs.mjs +269 -0
  3176. package/dist/physics/projectiles/index.d.mts +4 -0
  3177. package/dist/physics/projectiles/moving-launcher.d.mts +30 -0
  3178. package/dist/physics/projectiles/moving-launcher.mjs +481 -0
  3179. package/dist/physics/rain-relative/index.d.mts +2 -1
  3180. package/dist/physics/rain-relative/model.mjs +14 -0
  3181. package/dist/physics/rain-relative/preset.d.mts +4 -8
  3182. package/dist/physics/rain-relative/preset.mjs +249 -130
  3183. package/dist/physics/ramp-forces/index.d.mts +2 -1
  3184. package/dist/physics/ramp-forces/preset.d.mts +3 -14
  3185. package/dist/physics/ramp-forces/preset.mjs +362 -286
  3186. package/dist/physics/river-boat.d.mts +5 -9
  3187. package/dist/physics/river-boat.mjs +194 -76
  3188. package/dist/physics/river-crossing.mjs +101 -0
  3189. package/dist/physics/shm/core.mjs +58 -0
  3190. package/dist/physics/shm/energy.d.mts +24 -0
  3191. package/dist/physics/shm/energy.mjs +654 -0
  3192. package/dist/physics/shm/graphs.d.mts +20 -0
  3193. package/dist/physics/shm/graphs.mjs +483 -0
  3194. package/dist/physics/shm/index.d.mts +6 -1
  3195. package/dist/physics/shm/pendulum-worlds.d.mts +18 -0
  3196. package/dist/physics/shm/pendulum-worlds.mjs +356 -0
  3197. package/dist/physics/shm/preset.d.mts +3 -12
  3198. package/dist/physics/shm/preset.mjs +571 -252
  3199. package/dist/physics/shm/springs.d.mts +23 -0
  3200. package/dist/physics/shm/springs.mjs +404 -0
  3201. package/dist/physics/spin-studio/index.d.mts +2 -0
  3202. package/dist/physics/spin-studio/preset.d.mts +20 -0
  3203. package/dist/physics/spin-studio/preset.mjs +395 -0
  3204. package/dist/physics/stopping-distance/index.d.mts +2 -1
  3205. package/dist/physics/stopping-distance/preset.d.mts +3 -13
  3206. package/dist/physics/stopping-distance/preset.mjs +288 -181
  3207. package/dist/physics/stress-strain/core.d.mts +127 -0
  3208. package/dist/physics/stress-strain/core.mjs +161 -0
  3209. package/dist/physics/stress-strain/index.d.mts +3 -0
  3210. package/dist/physics/stress-strain/preset.d.mts +28 -0
  3211. package/dist/physics/stress-strain/preset.mjs +879 -0
  3212. package/dist/physics/suspension/index.d.mts +2 -0
  3213. package/dist/physics/suspension/preset.d.mts +26 -0
  3214. package/dist/physics/suspension/preset.mjs +887 -0
  3215. package/dist/physics/temperature-scales/index.d.mts +2 -1
  3216. package/dist/physics/temperature-scales/preset.d.mts +12 -7
  3217. package/dist/physics/temperature-scales/preset.mjs +172 -186
  3218. package/dist/physics/terminal-velocity/index.d.mts +2 -1
  3219. package/dist/physics/terminal-velocity/model.mjs +54 -0
  3220. package/dist/physics/terminal-velocity/preset.d.mts +3 -10
  3221. package/dist/physics/terminal-velocity/preset.mjs +286 -254
  3222. package/dist/physics/thermal/activity-plan.mjs +53 -0
  3223. package/dist/physics/thermal/activity.d.mts +8 -0
  3224. package/dist/physics/thermal/activity.mjs +19 -0
  3225. package/dist/physics/thermal/index.d.mts +3 -1
  3226. package/dist/physics/thermal/model.mjs +46 -0
  3227. package/dist/physics/thermal/preset.d.mts +1 -17
  3228. package/dist/physics/thermal/preset.mjs +485 -295
  3229. package/dist/physics/ultrasound/core.d.mts +221 -0
  3230. package/dist/physics/ultrasound/core.mjs +235 -0
  3231. package/dist/physics/vector-board/index.d.mts +2 -1
  3232. package/dist/physics/vector-board/preset.d.mts +23 -18
  3233. package/dist/physics/vector-board/preset.mjs +396 -181
  3234. package/dist/physics/vector-board/view.mjs +3 -16
  3235. package/dist/physics/vector-types/index.d.mts +2 -1
  3236. package/dist/physics/vector-types/preset.d.mts +5 -5
  3237. package/dist/physics/vector-types/preset.mjs +104 -33
  3238. package/dist/physics/venturi/core.mjs +67 -0
  3239. package/dist/physics/venturi/index.d.mts +2 -0
  3240. package/dist/physics/venturi/preset.d.mts +18 -0
  3241. package/dist/physics/venturi/preset.mjs +340 -0
  3242. package/dist/physics/water-density/index.d.mts +2 -1
  3243. package/dist/physics/water-density/preset.d.mts +3 -7
  3244. package/dist/physics/water-density/preset.mjs +193 -209
  3245. package/dist/physics/waves/activity-plan.mjs +62 -0
  3246. package/dist/physics/waves/doppler-core.d.mts +106 -0
  3247. package/dist/physics/waves/doppler-core.mjs +157 -0
  3248. package/dist/physics/waves/doppler-model.mjs +90 -0
  3249. package/dist/physics/waves/doppler.d.mts +3 -10
  3250. package/dist/physics/waves/doppler.mjs +93 -118
  3251. package/dist/physics/waves/guitar.d.mts +22 -0
  3252. package/dist/physics/waves/guitar.mjs +807 -0
  3253. package/dist/physics/waves/index.d.mts +3 -1
  3254. package/dist/physics/waves/interference-core.d.mts +157 -0
  3255. package/dist/physics/waves/interference-core.mjs +207 -0
  3256. package/dist/physics/waves/preset.d.mts +3 -13
  3257. package/dist/physics/waves/preset.mjs +237 -239
  3258. package/dist/physics/waves/ripple.d.mts +3 -11
  3259. package/dist/physics/waves/ripple.mjs +144 -117
  3260. package/dist/physics/waves/string.d.mts +3 -12
  3261. package/dist/physics/waves/string.mjs +141 -142
  3262. package/dist/physics/waves/wave-activity.mjs +108 -0
  3263. package/dist/physics/work-energy/index.d.mts +2 -1
  3264. package/dist/physics/work-energy/preset.d.mts +3 -7
  3265. package/dist/physics/work-energy/preset.mjs +308 -177
  3266. package/dist/physics/work-potential/index.d.mts +2 -1
  3267. package/dist/physics/work-potential/preset.d.mts +17 -9
  3268. package/dist/physics/work-potential/preset.mjs +220 -196
  3269. package/dist/schemas/activity-authoring.d.mts +232 -0
  3270. package/dist/schemas/activity-authoring.mjs +316 -0
  3271. package/dist/schemas/index.d.mts +37 -4
  3272. package/dist/schemas/index.mjs +107 -20
  3273. package/dist/shared/fields.mjs +39 -0
  3274. package/dist/statistics/center-spread/preset.d.mts +1 -14
  3275. package/dist/statistics/center-spread/preset.mjs +137 -92
  3276. package/dist/statistics/frequency-density/core.d.mts +73 -0
  3277. package/dist/statistics/frequency-density/core.mjs +72 -0
  3278. package/dist/statistics/frequency-density/index.d.mts +3 -0
  3279. package/dist/statistics/frequency-density/preset.d.mts +22 -0
  3280. package/dist/statistics/frequency-density/preset.mjs +181 -0
  3281. package/dist/statistics/galton/preset.d.mts +1 -12
  3282. package/dist/statistics/galton/preset.mjs +129 -74
  3283. package/dist/statistics/histogram/preset.d.mts +1 -12
  3284. package/dist/statistics/histogram/preset.mjs +189 -83
  3285. package/dist/statistics/index.d.mts +7 -1
  3286. package/dist/statistics/index.mjs +5 -1
  3287. package/dist/statistics/normal/preset.d.mts +1 -13
  3288. package/dist/statistics/normal/preset.mjs +159 -76
  3289. package/dist/statistics/ogive/core.d.mts +54 -0
  3290. package/dist/statistics/ogive/core.mjs +73 -0
  3291. package/dist/statistics/ogive/index.d.mts +3 -0
  3292. package/dist/statistics/ogive/preset.d.mts +14 -0
  3293. package/dist/statistics/ogive/preset.mjs +242 -0
  3294. package/dist/statistics/sampling/preset.d.mts +1 -14
  3295. package/dist/statistics/sampling/preset.mjs +162 -96
  3296. package/dist/statistics/sequence/preset.d.mts +1 -12
  3297. package/dist/statistics/sequence/preset.mjs +100 -86
  3298. package/dist/statistics/z-table/preset.d.mts +1 -12
  3299. package/dist/statistics/z-table/preset.mjs +178 -138
  3300. package/dist/tex/index.d.mts +2 -0
  3301. package/dist/tex/index.mjs +3 -0
  3302. package/dist/three/biology/cell-energy.d.mts +9 -0
  3303. package/dist/three/biology/cell-energy.mjs +151 -0
  3304. package/dist/three/biology/cell-system.d.mts +14 -0
  3305. package/dist/three/biology/cell-system.mjs +139 -0
  3306. package/dist/three/biology/cell-world.d.mts +37 -0
  3307. package/dist/three/biology/cell-world.mjs +346 -0
  3308. package/dist/three/biology/index.d.mts +8 -0
  3309. package/dist/three/biology/index.mjs +9 -0
  3310. package/dist/three/biology/meiosis-explorer.d.mts +9 -0
  3311. package/dist/three/biology/meiosis-explorer.mjs +292 -0
  3312. package/dist/three/biology/membrane-transport.d.mts +9 -0
  3313. package/dist/three/biology/membrane-transport.mjs +164 -0
  3314. package/dist/three/biology/mitosis-explorer.d.mts +9 -0
  3315. package/dist/three/biology/mitosis-explorer.mjs +722 -0
  3316. package/dist/three/biology/organelles.d.mts +19 -0
  3317. package/dist/three/biology/organelles.mjs +192 -0
  3318. package/dist/three/chemistry/atomic-orbital.d.mts +9 -0
  3319. package/dist/three/chemistry/atomic-orbital.mjs +122 -0
  3320. package/dist/three/chemistry/crystal-lattice.d.mts +9 -0
  3321. package/dist/three/chemistry/crystal-lattice.mjs +173 -0
  3322. package/dist/three/chemistry/index.d.mts +6 -0
  3323. package/dist/three/chemistry/index.mjs +7 -0
  3324. package/dist/three/chemistry/molecular-geometry.d.mts +9 -0
  3325. package/dist/three/chemistry/molecular-geometry.mjs +209 -0
  3326. package/dist/three/chemistry/orbital-overlap.d.mts +9 -0
  3327. package/dist/three/chemistry/orbital-overlap.mjs +144 -0
  3328. package/dist/three/chemistry/stereochemistry.d.mts +9 -0
  3329. package/dist/three/chemistry/stereochemistry.mjs +150 -0
  3330. package/dist/three/index.d.mts +14 -0
  3331. package/dist/three/index.mjs +12 -0
  3332. package/dist/three/model-asset.d.mts +21 -0
  3333. package/dist/three/model-asset.mjs +63 -0
  3334. package/dist/three/palette.d.mts +11 -0
  3335. package/dist/three/palette.mjs +75 -0
  3336. package/dist/three/physics/bloch-sphere.d.mts +11 -0
  3337. package/dist/three/physics/bloch-sphere.mjs +209 -0
  3338. package/dist/three/physics/index.d.mts +3 -0
  3339. package/dist/three/physics/index.mjs +4 -0
  3340. package/dist/three/physics/spatial-lorentz.d.mts +9 -0
  3341. package/dist/three/physics/spatial-lorentz.mjs +162 -0
  3342. package/dist/three/primitives.d.mts +86 -0
  3343. package/dist/three/primitives.mjs +347 -0
  3344. package/dist/three/surface.d.mts +23 -0
  3345. package/dist/three/surface.mjs +178 -0
  3346. package/package.json +271 -95
  3347. package/styles/commerce.css +826 -0
  3348. package/styles/core.css +4083 -0
  3349. package/styles/domains/algorithms.css +7 -0
  3350. package/styles/domains/biology.css +4 -0
  3351. package/styles/domains/chemistry.css +4 -0
  3352. package/styles/domains/circuits.css +4 -0
  3353. package/styles/domains/discrete.css +9 -0
  3354. package/styles/domains/editor.css +4 -0
  3355. package/styles/domains/ict.css +4 -0
  3356. package/styles/domains/logic.css +5 -0
  3357. package/styles/domains/math.css +9 -0
  3358. package/styles/domains/ml.css +4 -0
  3359. package/styles/domains/networking.css +4 -0
  3360. package/styles/domains/parts/algorithms-0.css +441 -0
  3361. package/styles/domains/parts/algorithms-1.css +521 -0
  3362. package/styles/domains/parts/algorithms-2.css +122 -0
  3363. package/styles/domains/parts/algorithms-3.css +91 -0
  3364. package/styles/domains/parts/biology.css +436 -0
  3365. package/styles/domains/parts/chemistry.css +1698 -0
  3366. package/styles/domains/parts/circuits.css +349 -0
  3367. package/styles/domains/parts/discrete-1.css +142 -0
  3368. package/styles/domains/parts/discrete-2.css +181 -0
  3369. package/styles/domains/parts/discrete-3.css +116 -0
  3370. package/styles/domains/parts/discrete-4.css +194 -0
  3371. package/styles/domains/parts/discrete-5.css +111 -0
  3372. package/styles/domains/parts/discrete-6.css +106 -0
  3373. package/styles/domains/parts/editor.css +290 -0
  3374. package/styles/domains/parts/ict.css +242 -0
  3375. package/styles/domains/parts/logic-1.css +286 -0
  3376. package/styles/domains/parts/logic-2.css +208 -0
  3377. package/styles/domains/parts/math-1.css +329 -0
  3378. package/styles/domains/parts/math-2.css +284 -0
  3379. package/styles/domains/parts/math-3.css +299 -0
  3380. package/styles/domains/parts/math-4.css +75 -0
  3381. package/styles/domains/parts/math-5.css +305 -0
  3382. package/styles/domains/parts/math-6.css +202 -0
  3383. package/styles/domains/parts/ml.css +243 -0
  3384. package/styles/domains/parts/networking.css +212 -0
  3385. package/styles/domains/parts/physics-1.css +483 -0
  3386. package/styles/domains/parts/physics-2.css +664 -0
  3387. package/styles/domains/parts/physics-3.css +433 -0
  3388. package/styles/domains/parts/probability-1.css +54 -0
  3389. package/styles/domains/parts/probability-2.css +392 -0
  3390. package/styles/domains/parts/probability-3.css +111 -0
  3391. package/styles/domains/parts/statistics.css +250 -0
  3392. package/styles/domains/physics.css +6 -0
  3393. package/styles/domains/probability.css +6 -0
  3394. package/styles/domains/statistics.css +4 -0
  3395. package/styles/domains.css +47 -0
  3396. package/styles/exam.css +206 -0
  3397. package/styles/figure.css +373 -0
  3398. package/styles/modern-physics.css +155 -0
  3399. package/styles/three.css +299 -0
  3400. package/styles.css +22 -263
  3401. package/dist/blocks/accounting.d.mts +0 -142
  3402. package/dist/blocks/accounting.mjs +0 -446
  3403. package/dist/blocks/biology.d.mts +0 -197
  3404. package/dist/blocks/biology.mjs +0 -513
  3405. package/dist/blocks/chem.d.mts +0 -128
  3406. package/dist/blocks/chem.mjs +0 -486
  3407. package/dist/blocks/circuits.d.mts +0 -375
  3408. package/dist/blocks/circuits.mjs +0 -1213
  3409. package/dist/blocks/discrete.d.mts +0 -90
  3410. package/dist/blocks/discrete.mjs +0 -384
  3411. package/dist/blocks/economics.d.mts +0 -56
  3412. package/dist/blocks/economics.mjs +0 -203
  3413. package/dist/blocks/geography.d.mts +0 -58
  3414. package/dist/blocks/geography.mjs +0 -115
  3415. package/dist/blocks/geometry.d.mts +0 -28
  3416. package/dist/blocks/geometry.mjs +0 -160
  3417. package/dist/blocks/ict.d.mts +0 -154
  3418. package/dist/blocks/ict.mjs +0 -407
  3419. package/dist/blocks/lab-block.d.mts +0 -16
  3420. package/dist/blocks/lab-gallery.d.mts +0 -30
  3421. package/dist/blocks/lab-gallery.mjs +0 -208
  3422. package/dist/blocks/language.d.mts +0 -349
  3423. package/dist/blocks/language.mjs +0 -750
  3424. package/dist/blocks/math.d.mts +0 -977
  3425. package/dist/blocks/math.mjs +0 -3170
  3426. package/dist/blocks/ml.d.mts +0 -128
  3427. package/dist/blocks/ml.mjs +0 -220
  3428. package/dist/blocks/physics.d.mts +0 -264
  3429. package/dist/blocks/physics.mjs +0 -915
  3430. package/dist/blocks/statistics.d.mts +0 -29
  3431. package/dist/blocks/statistics.mjs +0 -123
  3432. package/dist/build/parts.d.mts +0 -1
  3433. package/dist/circuits/cmos-gate/preset.mjs +0 -1491
  3434. package/dist/circuits/semiconductor/preset.mjs +0 -1855
  3435. package/dist/discrete/logic-circuit/index.d.mts +0 -1
  3436. package/dist/discrete/logic-circuit/preset.d.mts +0 -47
  3437. package/dist/discrete/logic-circuit/preset.mjs +0 -307
  3438. package/dist/kit/answer-check.d.mts +0 -38
  3439. package/dist/kit/answer-check.mjs +0 -93
  3440. package/dist/kit/calc.d.mts +0 -33
  3441. package/dist/kit/calc.mjs +0 -27
  3442. package/dist/kit/diagram.mjs +0 -237
  3443. package/dist/kit/electronics.mjs +0 -849
  3444. package/dist/kit/expr-analysis.d.mts +0 -49
  3445. package/dist/kit/expr-analysis.mjs +0 -165
  3446. package/dist/kit/logic-gates.d.mts +0 -6
  3447. package/dist/kit/logic-gates.mjs +0 -409
  3448. package/dist/kit/solve.d.mts +0 -21
  3449. package/dist/kit/solve.mjs +0 -75
  3450. package/dist/kit/space.mjs +0 -326
  3451. package/dist/math/complex/core.d.mts +0 -93
  3452. package/dist/math/complex/core.mjs +0 -239
  3453. package/dist/math/poly/core.d.mts +0 -50
  3454. package/dist/math/poly/core.mjs +0 -268
  3455. package/dist/ml/boundary/index.d.mts +0 -1
  3456. package/dist/ml/boundary/preset.d.mts +0 -24
  3457. package/dist/ml/boundary/preset.mjs +0 -390
  3458. package/dist/ml/classifier/index.d.mts +0 -1
  3459. package/dist/ml/classifier/preset.d.mts +0 -25
  3460. package/dist/ml/classifier/preset.mjs +0 -340
  3461. package/dist/ml/kmeans/index.d.mts +0 -1
  3462. package/dist/ml/kmeans/preset.d.mts +0 -33
  3463. package/dist/ml/kmeans/preset.mjs +0 -236
  3464. package/dist/ml/knn/index.d.mts +0 -1
  3465. package/dist/ml/knn/preset.d.mts +0 -28
  3466. package/dist/ml/knn/preset.mjs +0 -314
  3467. package/dist/ml/regression/index.d.mts +0 -1
  3468. package/dist/ml/regression/preset.d.mts +0 -32
  3469. package/dist/ml/regression/preset.mjs +0 -423
  3470. package/dist/physics/projectile-lab.d.mts +0 -10
  3471. package/dist/physics/projectile-lab.mjs +0 -354
  3472. package/dist/physics/vector-board/view.d.mts +0 -49
  3473. package/dist/physics/vector-scene.d.mts +0 -41
  3474. package/dist/physics/vector-scene.mjs +0 -211
  3475. package/dist/physics/waves/core.mjs +0 -33
@@ -0,0 +1,4083 @@
1
+ @source "./dist/**/*.mjs";
2
+
3
+ :root {
4
+ /* ── colour (semantic; host shadcn → calm fallback) ─────────────────────── */
5
+ --lab-surface: var(--card, var(--background, oklch(1 0 0)));
6
+ --lab-sunken: var(--muted, color-mix(in oklab, currentColor 5%, transparent));
7
+ --lab-fg: var(--foreground, currentColor);
8
+ --lab-muted: var(--muted-foreground, color-mix(in oklab, currentColor 55%, transparent));
9
+ --lab-border: var(--border, color-mix(in oklab, currentColor 13%, transparent));
10
+ --lab-border-strong: var(--border, color-mix(in oklab, currentColor 22%, transparent));
11
+ --lab-accent: var(--primary, oklch(0.55 0.16 262));
12
+ --lab-accent-fg: var(--primary-foreground, oklch(1 0 0));
13
+ --lab-good: var(--success, oklch(0.58 0.15 152));
14
+ --lab-warn: var(--warning, oklch(0.72 0.14 75));
15
+ --lab-warn-fg: var(--warning-foreground, oklch(0.42 0.1 75));
16
+ --lab-danger: var(--destructive, oklch(0.58 0.19 25));
17
+ --lab-ring: var(--ring, var(--lab-accent));
18
+
19
+ /* ── radius scale ───────────────────────────────────────────────────────── */
20
+ --lab-r-xs: 4px;
21
+ --lab-r-sm: 8px;
22
+ --lab-r-md: 12px;
23
+ --lab-r-lg: 16px;
24
+ --lab-r-pill: 999px;
25
+
26
+ /* ── spacing scale ──────────────────────────────────────────────────────────
27
+ A 2px grid, and the number in the name IS the pixel value, so a reader can
28
+ size a gap by eye and an author cannot invent 0.35rem by accident. The old
29
+ scale ran 6/10/14/18 while the values actually used were 4/8/12/16, which is
30
+ why almost nothing referenced it. */
31
+ --lab-sp-2: 2px;
32
+ --lab-sp-4: 4px;
33
+ --lab-sp-6: 6px;
34
+ --lab-sp-8: 8px;
35
+ --lab-sp-10: 10px;
36
+ --lab-sp-12: 12px;
37
+ --lab-sp-14: 14px;
38
+ --lab-sp-16: 16px;
39
+ --lab-sp-20: 20px;
40
+ --lab-sp-24: 24px;
41
+ --lab-sp-32: 32px;
42
+
43
+ /* ── type scale ─────────────────────────────────────────────────────────── */
44
+ --lab-t-micro: 10px;
45
+ --lab-t-eyebrow: 12px;
46
+ --lab-t-sm: 14px;
47
+ --lab-t-body: 16px;
48
+ --lab-t-lg: 18px;
49
+ --lab-t-title: 20px;
50
+ --lab-t-hero: 24px;
51
+ /* The one editorial size, for ONE thing per lab: the title. A scale stopping at 24px spans 2.4x
52
+ and reads as a control panel, because nothing is allowed to behave like a heading. Pair it
53
+ with --lab-lh-title and --lab-ls-tight. */
54
+ --lab-t-display: 32px;
55
+
56
+ /* ── type roles: weight, leading, tracking ───────────────────────────────────
57
+ Four weights, four leadings, two trackings. A size on its own does not make
58
+ a hierarchy; the pairing does. The sheets carried ten weights (400 to 850)
59
+ and seventeen line-heights, which read as no hierarchy at all. */
60
+ --lab-w-regular: 450; /* prose, answer text */
61
+ --lab-w-medium: 550; /* the step lead, labels, picked answers */
62
+ --lab-w-semibold: 650; /* control text, chips, stat labels */
63
+ --lab-w-bold: 750; /* titles, eyebrows, headline values */
64
+ --lab-lh-tight: 1; /* a numeral on its own */
65
+ --lab-lh-title: 1.25; /* headings, readout values */
66
+ --lab-lh-ui: 1.45; /* everything a learner acts on */
67
+ --lab-lh-prose: 1.55; /* explanations, observe text */
68
+ --lab-ls-caps: 0.06em; /* small uppercase labels only */
69
+ --lab-ls-tight: -0.015em; /* large numerals and display type */
70
+
71
+ /* ── targets ─────────────────────────────────────────────────────────────────
72
+ 44px for anything the learner commits with (answers, primary actions,
73
+ transport, sliders' hit area). Compact secondary controls use the same 44px
74
+ hit target; their visual glyph may remain smaller, but the tappable area does
75
+ not require precision and adjacent controls stay at least 8px apart. */
76
+ --lab-target: 44px;
77
+ --lab-target-compact: 44px;
78
+
79
+ /* ── state tints ─────────────────────────────────────────────────────────────
80
+ Every surface that reacts uses the SAME four steps, so "picked" looks like
81
+ picked everywhere and "right" is one green, not twenty. The mix is toward
82
+ the surface, not transparent, so the result is identical on a card and on
83
+ the sunken dock. Ink variants keep 4.5:1 for text on those tints. */
84
+ --lab-accent-faint: color-mix(in oklab, var(--lab-accent) 5%, var(--lab-surface)); /* hover */
85
+ --lab-accent-soft: color-mix(in oklab, var(--lab-accent) 12%, var(--lab-surface)); /* picked */
86
+ --lab-accent-edge: color-mix(
87
+ in oklab,
88
+ var(--lab-accent) 45%,
89
+ var(--lab-border)
90
+ ); /* hover border */
91
+ --lab-good-soft: color-mix(in oklab, var(--lab-good) 14%, var(--lab-surface));
92
+ --lab-good-ink: color-mix(in oklab, var(--lab-good) 80%, var(--lab-fg));
93
+ --lab-warn-soft: color-mix(in oklab, var(--lab-warn) 16%, var(--lab-surface));
94
+ --lab-warn-ink: color-mix(in oklab, var(--lab-warn-fg) 85%, var(--lab-fg));
95
+ --lab-danger-soft: color-mix(in oklab, var(--lab-danger) 12%, var(--lab-surface));
96
+ --lab-danger-ink: color-mix(in oklab, var(--lab-danger) 80%, var(--lab-fg));
97
+ --lab-hairline: color-mix(in oklab, var(--lab-border) 60%, transparent); /* row dividers */
98
+
99
+ /* ── motion ──────────────────────────────────────────────────────────────────
100
+ Three durations and three curves, and every animation in the package uses
101
+ them, so the whole product moves at one rhythm. fast is a state change
102
+ the pointer caused (hover, press); base is a state change the model caused
103
+ (a value lands, a chip lights); slow is something that moves through space
104
+ (a node slides, a panel opens). Exits run at fast. Anything longer than
105
+ slow is scene physics and is authored in the scene, not here. */
106
+ --lab-dur-fast: 120ms;
107
+ --lab-dur-base: 180ms;
108
+ --lab-dur-slow: 260ms;
109
+ --lab-ease: cubic-bezier(0.2, 0.8, 0.2, 1); /* decelerating: things arrive */
110
+ --lab-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); /* things move between two places */
111
+ --lab-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* one landing pop, sparingly */
112
+
113
+ /* ── focus ───────────────────────────────────────────────────────────────────
114
+ One ring for every keyboard focus in the package: 2px of the host's ring
115
+ colour, offset so it never covers the control's own border. Set once in
116
+ the shared :focus-visible rule; a component only overrides it when the
117
+ focused thing is SVG geometry with no box to outline. */
118
+ --lab-focus-ring: 2px solid var(--lab-ring);
119
+ --lab-focus-offset: 2px;
120
+
121
+ /* ── layering ────────────────────────────────────────────────────────────── */
122
+ --lab-z-raised: 1; /* a dragged handle, a lit edge */
123
+ --lab-z-overlay: 8; /* a lock, a tooltip, a floating readout inside the scene */
124
+ --lab-z-top: 50; /* focus-mode chrome */
125
+
126
+ /* elevation */
127
+ --lab-ink: oklch(0.29 0.045 262);
128
+ --lab-shadow-sm:
129
+ 0 1px 2px -1px color-mix(in oklab, var(--lab-ink) 14%, transparent),
130
+ 0 1px 2px color-mix(in oklab, var(--lab-ink) 8%, transparent);
131
+ --lab-shadow-md:
132
+ 0 2px 5px -2px color-mix(in oklab, var(--lab-ink) 12%, transparent),
133
+ 0 10px 24px -8px color-mix(in oklab, var(--lab-ink) 16%, transparent);
134
+ --lab-shadow-lg:
135
+ 0 4px 12px -4px color-mix(in oklab, var(--lab-ink) 14%, transparent),
136
+ 0 22px 46px -12px color-mix(in oklab, var(--lab-ink) 18%, transparent);
137
+
138
+ /* Legacy canvas tokens (widgets not yet migrated to stage). DEPRECATED. */
139
+ --sciviz-stage: oklch(0.16 0.02 255);
140
+ --sciviz-grid: oklch(0.55 0.02 255 / 0.5);
141
+ --sciviz-axis: oklch(0.7 0.02 255);
142
+ --sciviz-accent: oklch(0.72 0.15 250);
143
+ --sciviz-accent-2: oklch(0.78 0.16 50);
144
+ --sciviz-good: oklch(0.72 0.17 150);
145
+ --sciviz-text: oklch(0.92 0.01 255);
146
+ --sciviz-text-dim: oklch(0.7 0.02 255);
147
+ --sciviz-warn: oklch(0.82 0.16 85);
148
+ }
149
+
150
+ /* ── Shared interaction rules ─────────────────────────────────────────────────
151
+ Set once for the whole package. A component below adds to these only when it
152
+ has to (SVG geometry with no box to outline); it never restates them. */
153
+
154
+ /* Focus: one ring for every keyboard focus under a lab root. */
155
+ :is(.lab-activity, .lab-scene-studio) button {
156
+ min-block-size: var(--lab-target);
157
+ min-inline-size: var(--lab-target);
158
+ }
159
+
160
+ :is(.lab-activity, .lab-scene-studio)
161
+ :is(
162
+ button,
163
+ a[href],
164
+ input,
165
+ select,
166
+ textarea,
167
+ summary,
168
+ [role="button"],
169
+ [role="slider"],
170
+ [role="switch"],
171
+ [role="tab"],
172
+ [role="option"],
173
+ [role="radio"],
174
+ [tabindex]:not([tabindex="-1"])
175
+ ):focus-visible {
176
+ outline: var(--lab-focus-ring);
177
+ outline-offset: var(--lab-focus-offset);
178
+ }
179
+
180
+ /* Reduced motion: honoured at the root, not per animation. Drop the MOVEMENT, keep the feedback.
181
+ The preference is about vestibular discomfort from things travelling and scaling, not about
182
+ colour. Collapsing transition-duration to nothing also killed the tint that says an answer was
183
+ accepted and the fade that says a panel changed, so a learner who asks for less motion lost the
184
+ signals telling them the lab had responded at all. Transform and movement snap; colour, border
185
+ and opacity still cross-fade, quickly. Confetti goes outright: a still burst is just noise. */
186
+ @media (prefers-reduced-motion: reduce) {
187
+ :is(.lab-activity, .lab-scene-studio) :is(*, *::before, *::after) {
188
+ animation-duration: 0.01ms !important;
189
+ animation-iteration-count: 1 !important;
190
+ transition-property: color, background-color, border-color, fill, stroke, opacity !important;
191
+ transition-duration: var(--lab-dur-fast) !important;
192
+ scroll-behavior: auto !important;
193
+ }
194
+ .lab-activity .lab-confetti {
195
+ display: none;
196
+ }
197
+ /* A figure's entrance becomes a fade rather than a scale: an opacity change is safe under this
198
+ query where a transform is not. It is stated HERE, with the rest of the policy, because a
199
+ sheet may not keep its own copy of this media query, and because a figure rendered outside
200
+ `.lab-activity` is not reached by the blanket rule above. */
201
+ :is(.lab-figure-arrive, .lab-figure-activate) {
202
+ animation-name: lab-figure-fade;
203
+ }
204
+ }
205
+
206
+ /* One geometry contract for renderer-swappable learning scenes. The selected
207
+ model changes inside this frame; it must not make the activity jump. */
208
+ .lab-scene-viewport {
209
+ container-type: inline-size;
210
+ display: grid;
211
+ width: 100%;
212
+ height: clamp(16rem, 62cqi, 25rem);
213
+ min-width: 0;
214
+ place-items: stretch;
215
+ overflow: hidden;
216
+ }
217
+
218
+ .lab-scene-viewport[data-size="compact"] {
219
+ height: clamp(14rem, 52cqi, 21rem);
220
+ }
221
+
222
+ .lab-scene-viewport[data-size="strip"] {
223
+ height: clamp(10rem, 30cqi, 14rem);
224
+ }
225
+
226
+ .lab-scene-viewport[data-size="wide"] {
227
+ height: clamp(15rem, 48cqi, 23rem);
228
+ }
229
+
230
+ .lab-scene-viewport > :is(svg, .lab-figure, .lab-three-scene),
231
+ .lab-scene-viewport > .lab-three-scene > .lab-three-canvas {
232
+ width: 100%;
233
+ height: 100%;
234
+ min-height: 0;
235
+ }
236
+
237
+ .lab-scene-viewport > :is(svg, .lab-figure) {
238
+ display: block;
239
+ overflow: hidden;
240
+ }
241
+
242
+ /* Dense apparatus may preserve a readable drawing width and pan only when the
243
+ host viewport cannot fit it. This keeps scrolling behavior in one primitive. */
244
+ .lab-scene-viewport[data-overflow="scroll"] {
245
+ overflow-x: auto;
246
+ overflow-y: hidden;
247
+ overscroll-behavior-inline: contain;
248
+ scrollbar-gutter: stable;
249
+ }
250
+ .lab-scene-viewport[data-overflow="scroll"] > :is(svg, .lab-figure) {
251
+ width: max(100%, 42rem);
252
+ max-width: none;
253
+ }
254
+ /* The shared :focus-visible rule already reaches this (it is a tabbable scroll
255
+ box); only the offset changes sign, so the ring sits inside the container
256
+ instead of being clipped by the overflow it is announcing. */
257
+ .lab-scene-viewport[data-overflow="scroll"]:focus-visible {
258
+ outline-offset: calc(-1 * var(--lab-focus-offset));
259
+ }
260
+ .tree-rotation-prediction .lab-chip {
261
+ min-width: 6.8rem;
262
+ justify-content: center;
263
+ gap: var(--lab-sp-6);
264
+ font-weight: var(--lab-w-medium);
265
+ }
266
+ .tree-rotation-prediction .lab-chip strong {
267
+ font-weight: var(--lab-w-bold);
268
+ }
269
+
270
+ /* Algorithm traces need the scene, its evidence and step transport visible as
271
+ one causal unit. Most embedded lesson columns never reach the generic 60rem
272
+ desktop breakpoint, so algorithms adopt a narrower two-pane threshold. */
273
+ @container lab-activity (min-width: 48rem) {
274
+ /* Only reserve a second pane when the inspector is actually open. Between
275
+ the compact and full desktop breakpoints Inspector intentionally remains
276
+ collapsible; an unconditional column here left a large, empty canvas. */
277
+ .algorithm-activity .lab-activity-workspace:has(> .lab-activity-inspector[open]) {
278
+ grid-template-columns: minmax(0, 1fr) minmax(15rem, 18rem);
279
+ align-items: start;
280
+ }
281
+ }
282
+
283
+ .algorithm-activity .lab-activity-transport {
284
+ position: sticky;
285
+ z-index: var(--lab-z-raised);
286
+ inset-block-end: 0;
287
+ box-shadow: 0 -0.45rem 1rem
288
+ color-mix(in oklab, var(--foreground, var(--stage-fg)) 7%, transparent);
289
+ }
290
+
291
+ @container lab-activity (min-width: 64rem) {
292
+ .algorithm-activity[data-focus][data-focus-layout="immersive"] .algorithm-graph svg,
293
+ .algorithm-activity[data-focus][data-focus-layout="immersive"] .tree-scene svg {
294
+ height: clamp(24rem, 56dvh, 42rem);
295
+ }
296
+
297
+ /* Data-rich subject scenes should use the extra focus width without turning
298
+ compact controls, tables, or prose into oversized panels. These selectors
299
+ intentionally target named render surfaces rather than workspace children. */
300
+ .lab-activity[data-focus][data-focus-layout="immersive"] .statistics-chart {
301
+ max-width: 64rem;
302
+ margin-inline: auto;
303
+ }
304
+ .lab-activity[data-focus][data-focus-layout="immersive"] .statistics-z-curve {
305
+ width: min(100%, 34rem);
306
+ }
307
+ .lab-activity[data-focus][data-focus-layout="immersive"] .statistics-z-table-scroll {
308
+ max-height: min(48dvh, 32rem);
309
+ }
310
+ .lab-activity[data-focus][data-focus-layout="immersive"] .geography-cycle-scene svg {
311
+ display: block;
312
+ width: min(100%, 68rem);
313
+ height: auto;
314
+ max-height: 58dvh;
315
+ margin-inline: auto;
316
+ }
317
+ .lab-activity[data-focus][data-focus-layout="immersive"]
318
+ :is(.biology-plot-region, .biology-chart-scene)
319
+ > svg {
320
+ width: 100%;
321
+ max-height: 56dvh;
322
+ }
323
+ }
324
+
325
+ /* Authorable concept rules -------------------------------------------------
326
+ One semantic composition serves both compact lesson cards and full RuleLab
327
+ activities. Domain rule data owns the mathematics; this layer owns layout. */
328
+ .rule-card {
329
+ overflow: hidden;
330
+ min-width: 0;
331
+ border: 1px solid var(--border, var(--stage-grid));
332
+ border-radius: var(--lab-r-panel, 0.85rem);
333
+ background: var(--card, var(--stage-bg));
334
+ color: var(--card-foreground, var(--stage-fg));
335
+ container: rule-card / inline-size;
336
+ }
337
+ .rule-card[data-display="activity"] {
338
+ border: 0;
339
+ border-radius: 0;
340
+ background: transparent;
341
+ }
342
+ .rule-card-header {
343
+ display: grid;
344
+ gap: var(--lab-sp-4);
345
+ padding: var(--lab-sp-14) var(--lab-sp-16);
346
+ border-bottom: 1px solid var(--border, var(--stage-grid));
347
+ }
348
+ .rule-card-title {
349
+ font-size: var(--lab-t-body);
350
+ font-weight: var(--lab-w-bold);
351
+ line-height: var(--lab-lh-title);
352
+ }
353
+ .rule-card-intuition {
354
+ margin: 0;
355
+ color: var(--muted-foreground, var(--stage-muted));
356
+ font-size: var(--lab-t-eyebrow);
357
+ line-height: var(--lab-lh-ui);
358
+ }
359
+ .rule-card-intuition > span {
360
+ margin-inline-end: var(--lab-sp-8);
361
+ color: var(--primary, var(--stage-accent));
362
+ font-size: var(--lab-t-eyebrow, 0.65rem);
363
+ font-weight: var(--lab-w-bold);
364
+ letter-spacing: var(--lab-ls-caps);
365
+ text-transform: uppercase;
366
+ }
367
+ .rule-card-workspace {
368
+ display: grid;
369
+ min-width: 0;
370
+ }
371
+ .rule-card-scene {
372
+ display: grid;
373
+ min-width: 0;
374
+ align-content: center;
375
+ justify-items: center;
376
+ gap: var(--lab-sp-12);
377
+ padding: clamp(0.9rem, 3cqw, 1.5rem);
378
+ }
379
+ .rule-card-formula {
380
+ max-width: 100%;
381
+ /* Same trap as `.rule-step-expression`, and worse here because the formula is set
382
+ larger: one scrolling axis promotes the other, so a fraction grew a vertical
383
+ scrollbar on the card's headline equation. */
384
+ overflow-x: auto;
385
+ overflow-y: hidden;
386
+ padding-block: 0.3em;
387
+ line-height: 1.9;
388
+ font-size: clamp(1rem, 3cqw, 1.25rem);
389
+ scrollbar-width: thin;
390
+ }
391
+ .rule-card-figure {
392
+ display: grid;
393
+ width: 100%;
394
+ min-width: 0;
395
+ place-items: center;
396
+ }
397
+ .rule-figure {
398
+ display: grid;
399
+ width: 100%;
400
+ min-width: 0;
401
+ gap: var(--lab-sp-8);
402
+ margin: 0;
403
+ }
404
+ .rule-figure-scene {
405
+ width: 100%;
406
+ min-width: 0;
407
+ }
408
+ .rule-figure figcaption {
409
+ max-width: 65ch;
410
+ margin-inline: auto;
411
+ color: var(--muted-foreground, var(--stage-muted));
412
+ font-size: var(--lab-t-eyebrow);
413
+ line-height: var(--lab-lh-ui);
414
+ text-align: center;
415
+ }
416
+ .rule-card-evidence {
417
+ display: grid;
418
+ min-width: 0;
419
+ align-content: start;
420
+ gap: var(--lab-sp-12);
421
+ padding: var(--lab-sp-14) var(--lab-sp-16);
422
+ border-top: 1px solid var(--border, var(--stage-grid));
423
+ background: color-mix(in oklab, var(--muted, var(--stage-grid)) 45%, transparent);
424
+ }
425
+ .rule-step-list {
426
+ display: grid;
427
+ gap: var(--lab-sp-4);
428
+ margin: 0;
429
+ padding: 0;
430
+ list-style: none;
431
+ }
432
+ .rule-step-list > li {
433
+ display: flex;
434
+ flex-wrap: wrap;
435
+ align-items: baseline;
436
+ gap: var(--lab-sp-4) var(--lab-sp-12);
437
+ min-width: 0;
438
+ padding: var(--lab-sp-6) var(--lab-sp-8);
439
+ border-radius: calc(var(--radius, 0.625rem) - 2px);
440
+ }
441
+ .rule-step-list > li[data-result="true"] {
442
+ border-inline-start: 2px solid var(--primary, var(--stage-accent));
443
+ background: color-mix(in oklab, var(--primary, var(--stage-accent)) 7%, transparent);
444
+ }
445
+ .rule-step-expression {
446
+ max-width: 100%;
447
+ /* `overflow-x: auto` alone is a trap: CSS promotes the OTHER axis from `visible`
448
+ to `auto` as soon as one axis scrolls. A KaTeX fraction is taller than the line
449
+ box it sits in, so every \frac grew its own vertical scrollbar, arrows and all.
450
+ Pin the y axis, then give the line box room so pinning it never clips: the
451
+ padding and line-height below are what let a two-storey fraction sit inside the
452
+ element rather than poke out of it. Wide expressions still scroll sideways. */
453
+ overflow-x: auto;
454
+ overflow-y: hidden;
455
+ padding-block: 0.3em;
456
+ line-height: 1.9;
457
+ font-size: var(--lab-t-sm);
458
+ }
459
+ .rule-step-note {
460
+ color: var(--muted-foreground, var(--stage-muted));
461
+ font-size: var(--lab-t-eyebrow);
462
+ line-height: var(--lab-lh-ui);
463
+ }
464
+ .rule-card-controls {
465
+ display: flex;
466
+ flex-wrap: wrap;
467
+ align-items: end;
468
+ gap: var(--lab-sp-12);
469
+ padding: var(--lab-sp-12) var(--lab-sp-16);
470
+ border-top: 1px solid var(--border, var(--stage-grid));
471
+ background: color-mix(in oklab, var(--muted, var(--stage-grid)) 42%, transparent);
472
+ }
473
+ .rule-card-support {
474
+ border-top: 1px solid var(--border, var(--stage-grid));
475
+ }
476
+ .rule-card-support > summary {
477
+ cursor: pointer;
478
+ padding: var(--lab-sp-12) var(--lab-sp-16);
479
+ color: var(--muted-foreground, var(--stage-muted));
480
+ font-size: var(--lab-t-eyebrow);
481
+ font-weight: var(--lab-w-semibold);
482
+ }
483
+ .rule-card-support[open] > summary {
484
+ border-bottom: 1px solid var(--border, var(--stage-grid));
485
+ }
486
+ .rule-card-support-body {
487
+ display: grid;
488
+ gap: var(--lab-sp-16);
489
+ padding: var(--lab-sp-14) var(--lab-sp-16) var(--lab-sp-16);
490
+ }
491
+ .rule-card-support-body section {
492
+ display: grid;
493
+ gap: var(--lab-sp-8);
494
+ }
495
+ .rule-card-support-body h4,
496
+ .rule-card-support-body ul {
497
+ margin: 0;
498
+ }
499
+ .rule-card-support-body h4 {
500
+ font-size: var(--lab-t-eyebrow, 0.68rem);
501
+ letter-spacing: var(--lab-ls-caps);
502
+ text-transform: uppercase;
503
+ }
504
+ .rule-card-support-body ul {
505
+ display: grid;
506
+ gap: var(--lab-sp-6);
507
+ padding-inline-start: var(--lab-sp-16);
508
+ font-size: var(--lab-t-eyebrow);
509
+ line-height: var(--lab-lh-ui);
510
+ }
511
+ /* Keep the explanation below the visual until both columns can remain useful.
512
+ The earlier 42rem split produced a cramped equation rail in ordinary lesson widths. */
513
+ @container rule-card (min-width: 54rem) {
514
+ .rule-card-workspace:has(> .rule-card-evidence) {
515
+ grid-template-columns: minmax(28rem, 1.35fr) minmax(19rem, 0.65fr);
516
+ align-items: stretch;
517
+ }
518
+ .rule-card-evidence {
519
+ border-top: 0;
520
+ border-inline-start: 1px solid var(--border, var(--stage-grid));
521
+ }
522
+ }
523
+ .heap-prediction .lab-chip {
524
+ min-width: 3.5rem;
525
+ justify-content: center;
526
+ text-transform: capitalize;
527
+ }
528
+ @media (min-width: 56rem) {
529
+ .heap-authoring {
530
+ grid-template-columns: minmax(25rem, 1.2fr) minmax(20rem, 0.8fr);
531
+ }
532
+ .heap-authoring-preview {
533
+ position: sticky;
534
+ top: 1rem;
535
+ }
536
+ }
537
+ @container lab-activity (max-width: 42.5rem) {
538
+ .heap-tree {
539
+ min-height: 15rem;
540
+ }
541
+ .heap-tree svg {
542
+ height: 15rem;
543
+ }
544
+ .heap-relation {
545
+ align-items: flex-start;
546
+ font-size: var(--lab-t-micro);
547
+ }
548
+ }
549
+ /* No-code scene authoring. Named classes keep the editor styled in every host;
550
+ consumers should not need to scan package source with their Tailwind build. */
551
+ .lab-scene-studio {
552
+ display: grid;
553
+ grid-template-columns: minmax(0, 1fr) minmax(11rem, 0.42fr);
554
+ gap: var(--lab-sp-16);
555
+ align-items: stretch;
556
+ padding: var(--lab-sp-14);
557
+ color: var(--lab-fg);
558
+ border: 1px solid var(--lab-border);
559
+ border-radius: var(--lab-r-lg);
560
+ background: var(--lab-surface);
561
+ }
562
+ .lab-scene-studio-form {
563
+ display: grid;
564
+ gap: var(--lab-sp-14);
565
+ min-width: 0;
566
+ }
567
+ .lab-scene-studio-fields {
568
+ display: grid;
569
+ grid-template-columns: repeat(2, minmax(0, 1fr));
570
+ gap: var(--lab-sp-10);
571
+ align-items: end;
572
+ }
573
+ .lab-scene-studio-field,
574
+ .lab-scene-studio-group {
575
+ display: grid;
576
+ gap: var(--lab-sp-6);
577
+ min-width: 0;
578
+ margin: 0;
579
+ padding: 0;
580
+ border: 0;
581
+ }
582
+ .lab-scene-studio-field small {
583
+ color: var(--lab-muted);
584
+ font-size: var(--lab-t-eyebrow);
585
+ }
586
+ .lab-scene-studio-label {
587
+ color: var(--lab-muted);
588
+ font-size: var(--lab-t-eyebrow);
589
+ font-weight: var(--lab-w-bold);
590
+ letter-spacing: var(--lab-ls-caps);
591
+ line-height: var(--lab-lh-title);
592
+ text-transform: uppercase;
593
+ }
594
+ .lab-scene-studio-input {
595
+ width: 100%;
596
+ min-width: 0;
597
+ min-height: var(--lab-target);
598
+ box-sizing: border-box;
599
+ padding: var(--lab-sp-8) var(--lab-sp-12);
600
+ color: var(--lab-fg);
601
+ font: inherit;
602
+ font-size: var(--lab-t-sm);
603
+ border: 1px solid var(--lab-border-strong);
604
+ border-radius: var(--lab-r-sm);
605
+ outline: none;
606
+ background: var(--lab-surface);
607
+ }
608
+ .lab-scene-studio-choices {
609
+ display: grid;
610
+ grid-template-columns: repeat(3, minmax(0, 1fr));
611
+ gap: var(--lab-sp-6);
612
+ }
613
+ .lab-scene-studio-choice {
614
+ display: grid;
615
+ gap: 2px;
616
+ min-height: var(--lab-target);
617
+ padding: var(--lab-sp-8) var(--lab-sp-12);
618
+ text-align: start;
619
+ color: var(--lab-fg);
620
+ cursor: pointer;
621
+ border: 1px solid var(--lab-border);
622
+ border-radius: var(--lab-r-sm);
623
+ background: var(--lab-surface);
624
+ }
625
+ .lab-scene-studio-choice strong {
626
+ font-size: var(--lab-t-sm);
627
+ }
628
+ .lab-scene-studio-choice span {
629
+ color: var(--lab-muted);
630
+ font-size: var(--lab-t-eyebrow);
631
+ font-weight: var(--lab-w-regular);
632
+ }
633
+ .lab-scene-studio-choice[aria-pressed="true"] {
634
+ border-color: var(--lab-accent);
635
+ background: var(--lab-accent-soft);
636
+ }
637
+ .lab-scene-studio-icons {
638
+ display: flex;
639
+ flex-wrap: wrap;
640
+ gap: var(--lab-sp-6);
641
+ }
642
+ .lab-scene-studio-icons button {
643
+ display: grid;
644
+ place-items: center;
645
+ width: var(--lab-target);
646
+ height: var(--lab-target);
647
+ padding: 0;
648
+ cursor: pointer;
649
+ font-size: var(--lab-t-title);
650
+ border: 1px solid var(--lab-border);
651
+ border-radius: var(--lab-r-sm);
652
+ background: var(--lab-surface);
653
+ }
654
+ .lab-scene-studio-icons button[aria-pressed="true"] {
655
+ border-color: var(--lab-accent);
656
+ background: var(--lab-accent-soft);
657
+ }
658
+ .lab-scene-studio-custom-icon {
659
+ display: flex;
660
+ align-items: center;
661
+ gap: var(--lab-sp-6);
662
+ min-height: var(--lab-target);
663
+ padding-inline: var(--lab-sp-10);
664
+ border: 1px solid var(--lab-border);
665
+ border-radius: var(--lab-r-sm);
666
+ }
667
+ .lab-scene-studio-custom-icon span {
668
+ color: var(--lab-muted);
669
+ font-size: var(--lab-t-eyebrow);
670
+ }
671
+ .lab-scene-studio-custom-icon input {
672
+ width: 2rem;
673
+ border: 0;
674
+ outline: 0;
675
+ color: var(--lab-fg);
676
+ font: inherit;
677
+ font-size: var(--lab-t-title);
678
+ background: transparent;
679
+ }
680
+ .lab-scene-studio-color {
681
+ display: grid;
682
+ grid-template-columns: var(--lab-target) 1fr;
683
+ gap: var(--lab-sp-6);
684
+ }
685
+ .lab-scene-studio-color input[type="color"] {
686
+ width: var(--lab-target);
687
+ height: var(--lab-target);
688
+ padding: var(--lab-sp-2);
689
+ cursor: pointer;
690
+ border: 1px solid var(--lab-border-strong);
691
+ border-radius: var(--lab-r-sm);
692
+ background: var(--lab-surface);
693
+ }
694
+ .lab-scene-studio-preview {
695
+ display: grid;
696
+ grid-template-rows: auto minmax(9.5rem, 1fr) auto;
697
+ gap: var(--lab-sp-6);
698
+ justify-items: center;
699
+ min-width: 0;
700
+ padding: var(--lab-sp-10);
701
+ border: 1px solid var(--lab-border);
702
+ border-radius: var(--lab-r-md);
703
+ background: var(--lab-sunken);
704
+ }
705
+ .lab-scene-studio-preview-stage {
706
+ display: grid;
707
+ place-items: center;
708
+ min-height: 9.5rem;
709
+ width: 100%;
710
+ overflow: hidden;
711
+ }
712
+ .lab-scene-studio-preview-note {
713
+ color: var(--lab-muted);
714
+ font-size: var(--lab-t-eyebrow);
715
+ }
716
+ @media (max-width: 42rem) {
717
+ .lab-scene-studio {
718
+ grid-template-columns: minmax(0, 1fr);
719
+ }
720
+ .lab-scene-studio-preview {
721
+ grid-template-rows: auto 8.5rem auto;
722
+ }
723
+ .lab-scene-studio-preview-stage {
724
+ min-height: 8.5rem;
725
+ }
726
+ }
727
+ @media (max-width: 30rem) {
728
+ .lab-scene-studio-fields,
729
+ .lab-scene-studio-choices {
730
+ grid-template-columns: minmax(0, 1fr);
731
+ }
732
+ .lab-scene-studio-choice {
733
+ grid-template-columns: auto 1fr;
734
+ align-items: baseline;
735
+ gap: var(--lab-sp-6);
736
+ }
737
+ }
738
+ @keyframes tree-edge-flow {
739
+ to {
740
+ stroke-dashoffset: -14;
741
+ }
742
+ }
743
+ @keyframes tree-node-pulse {
744
+ from {
745
+ opacity: 1;
746
+ transform: scale(0.8);
747
+ }
748
+ to {
749
+ opacity: 0;
750
+ transform: scale(1.35);
751
+ }
752
+ }
753
+ @keyframes tree-output-land {
754
+ from {
755
+ opacity: 0;
756
+ transform: translateY(-0.5rem) scale(0.8);
757
+ }
758
+ }
759
+ @container lab-activity (max-width: 42.5rem) {
760
+ .tree-scene {
761
+ min-height: 17rem;
762
+ }
763
+ .tree-scene svg {
764
+ height: 17rem;
765
+ }
766
+ }
767
+ /* Utility: visually-hidden (screen-reader only). */
768
+ /**
769
+ * Visually hidden, and it must STAY hidden.
770
+ *
771
+ * This is the one place `!important` is right. A live region announces what changed and must never
772
+ * take part in layout, but a scene's blanket child rule (`.physics-scene-surface > div { width:
773
+ * 100% }`) matched it and stretched it to the full width: at 360px the page then scrolled sideways
774
+ * by 53px, which is a WCAG reflow failure caused by text nobody can even see. Every design system
775
+ * marks this utility important for the same reason.
776
+ */
777
+ .lab-sr-only {
778
+ position: absolute !important;
779
+ width: 1px !important;
780
+ height: 1px !important;
781
+ margin: -1px !important;
782
+ padding: 0 !important;
783
+ border: 0 !important;
784
+ overflow: hidden !important;
785
+ clip-path: inset(50%);
786
+ white-space: nowrap;
787
+ }
788
+
789
+ /* ═══════════════════════════════════════════════════════════════════════════
790
+ PRIMITIVES
791
+ ═══════════════════════════════════════════════════════════════════════════ */
792
+
793
+ /* ── Eyebrow: the small-caps section label (PREDICT FIRST, SOLUTION, …) ────── */
794
+ .lab-eyebrow,
795
+ .lab-challenge-h,
796
+ .lab-objectives-h,
797
+ .lab-solution-h,
798
+ .lab-field-label {
799
+ font-size: var(--lab-t-eyebrow);
800
+ font-weight: var(--lab-w-semibold);
801
+ letter-spacing: var(--lab-ls-caps);
802
+ text-transform: uppercase;
803
+ color: var(--lab-muted);
804
+ line-height: var(--lab-lh-title);
805
+ }
806
+
807
+ .lab-option,
808
+ .lab-choice,
809
+ .lang-choice,
810
+ .lang-match-cell {
811
+ display: inline-flex;
812
+ align-items: center;
813
+ justify-content: center;
814
+ gap: var(--lab-sp-6);
815
+ padding: var(--lab-sp-10) var(--lab-sp-16);
816
+ border-radius: var(--lab-r-md);
817
+ border: 1.5px solid var(--lab-border-strong);
818
+ background: var(--lab-surface);
819
+ color: var(--lab-fg);
820
+ font-size: var(--lab-t-lg);
821
+ font-weight: var(--lab-w-semibold);
822
+ font-variant-numeric: tabular-nums;
823
+ cursor: pointer;
824
+ transition:
825
+ border-color var(--lab-dur-fast),
826
+ background var(--lab-dur-fast),
827
+ color var(--lab-dur-fast),
828
+ box-shadow var(--lab-dur-fast),
829
+ transform var(--lab-dur-fast);
830
+ }
831
+ /* Gated on a real pointer. A touch device keeps :hover on the last thing tapped, and this hover is
832
+ an accent border over an accent-faint fill, which is precisely what PICKED looks like: a learner
833
+ on a phone tapped A, moved to B, and left A still looking chosen. Most of these learners are on
834
+ a phone, so the sticky state was the common case, not the edge case. */
835
+ @media (hover: hover) and (pointer: fine) {
836
+ .lab-option:hover:not(:disabled),
837
+ .lab-choice:hover:not(:disabled),
838
+ .lang-choice:hover:not(:disabled),
839
+ .lang-match-cell:hover:not(:disabled) {
840
+ border-color: var(--lab-accent-edge);
841
+ background: var(--lab-accent-faint);
842
+ box-shadow: var(--lab-shadow-md);
843
+ }
844
+ }
845
+ .lab-option:active:not(:disabled),
846
+ .lab-choice:active:not(:disabled),
847
+ .lang-choice:active:not(:disabled),
848
+ .lang-match-cell:active:not(:disabled) {
849
+ transform: translateY(1px);
850
+ box-shadow: none;
851
+ }
852
+ .lab-btn {
853
+ min-block-size: var(--lab-target);
854
+ border-color: var(--lab-accent);
855
+ background: var(--lab-accent);
856
+ color: var(--lab-accent-fg);
857
+ }
858
+ .lab-btn.lab-btn-ghost {
859
+ border-color: var(--lab-border);
860
+ background: transparent;
861
+ color: var(--lab-fg);
862
+ }
863
+ @media (hover: hover) and (pointer: fine) {
864
+ .lab-btn:hover:not(:disabled) {
865
+ border-color: var(--lab-accent);
866
+ background: color-mix(in oklab, var(--lab-accent) 88%, var(--lab-fg));
867
+ color: var(--lab-accent-fg);
868
+ }
869
+ .lab-btn.lab-btn-ghost:hover:not(:disabled) {
870
+ border-color: var(--lab-border-strong);
871
+ background: color-mix(in oklab, var(--lab-fg) 5%, transparent);
872
+ color: var(--lab-fg);
873
+ }
874
+ }
875
+ /* selected (accent) — unify the different data-attrs the components emit */
876
+ .lab-option[data-picked],
877
+ .lab-option[data-sel="true"],
878
+ .lab-choice[data-picked],
879
+ .lang-choice[data-state="sel"],
880
+ .lang-match-cell[data-state="sel"] {
881
+ border-color: var(--lab-accent);
882
+ background: var(--lab-accent-soft);
883
+ }
884
+ /* correct (good) */
885
+ .lab-option[data-tone="correct"],
886
+ .lab-option[data-state="ok"],
887
+ .lab-choice[data-tone="correct"],
888
+ .lang-choice[data-state="ok"],
889
+ .lang-match-cell[data-state="ok"] {
890
+ border-color: var(--lab-good);
891
+ background: var(--lab-good-soft);
892
+ color: var(--lab-good-ink);
893
+ cursor: default;
894
+ }
895
+ /* wrong (danger) */
896
+ .lab-option[data-tone="wrong"],
897
+ .lab-option[data-state="no"],
898
+ .lab-choice[data-tone="wrong"],
899
+ .lang-choice[data-state="no"],
900
+ .lang-match-cell[data-state="no"] {
901
+ border-color: var(--lab-danger);
902
+ background: var(--lab-danger-soft);
903
+ color: var(--lab-danger-ink);
904
+ }
905
+ .lang-choice[data-state="no"],
906
+ .lang-match-cell[data-state="no"] {
907
+ animation: lang-shake 0.42s;
908
+ }
909
+ .lang-choice:disabled:not([data-state="ok"]) {
910
+ opacity: 0.5;
911
+ cursor: default;
912
+ }
913
+ .lang-match-cell:disabled {
914
+ cursor: default;
915
+ }
916
+ /* size variants */
917
+ .lab-choice {
918
+ min-width: 46px;
919
+ min-height: var(--lab-target);
920
+ }
921
+ .lang-choice {
922
+ padding: var(--lab-sp-10) var(--lab-sp-20);
923
+ font-size: var(--lab-t-body);
924
+ }
925
+ .lang-match-cell {
926
+ padding: var(--lab-sp-14) var(--lab-sp-14);
927
+ }
928
+
929
+ /* ── Panel: a bordered surface (card / callout / note) ─────────────────────── */
930
+ .lab-panel,
931
+ .lab-challenge,
932
+ .lab-evidence-surface,
933
+ .lab-solution,
934
+ .lab-objectives {
935
+ border-radius: var(--lab-r-lg);
936
+ border: 1px solid var(--lab-border);
937
+ background: var(--lab-surface);
938
+ color: var(--lab-fg);
939
+ }
940
+
941
+ .lab-evidence-surface,
942
+ .lab-solution {
943
+ box-shadow: var(--lab-shadow-sm);
944
+ }
945
+
946
+ .lab-input {
947
+ min-width: 140px;
948
+ font-variant-numeric: tabular-nums;
949
+ }
950
+
951
+ .lab-stepper {
952
+ display: inline-flex;
953
+ align-items: center;
954
+ border: 1.5px solid var(--lab-border-strong);
955
+ border-radius: var(--lab-r-md);
956
+ overflow: hidden;
957
+ background: var(--lab-sunken);
958
+ }
959
+ .lab-stepper b {
960
+ min-width: 30px;
961
+ text-align: center;
962
+ font-size: var(--lab-t-body);
963
+ font-weight: var(--lab-w-bold);
964
+ padding: 0 var(--lab-sp-4);
965
+ font-variant-numeric: tabular-nums;
966
+ }
967
+
968
+ .lab-bar {
969
+ display: flex;
970
+ align-items: center;
971
+ gap: var(--lab-sp-14);
972
+ flex-wrap: wrap;
973
+ padding: var(--lab-sp-12) 2px 2px;
974
+ font-size: var(--lab-t-body);
975
+ color: var(--lab-fg);
976
+ }
977
+ .lab-bar .sep {
978
+ opacity: 0.6;
979
+ }
980
+
981
+ /* ── Meter bar (progress / energy) ─────────────────────────────────────────── */
982
+ .lab-meter {
983
+ display: flex;
984
+ flex-direction: column;
985
+ gap: var(--lab-sp-2);
986
+ }
987
+ .lab-meter-head {
988
+ display: flex;
989
+ justify-content: space-between;
990
+ font-size: var(--lab-t-eyebrow);
991
+ font-weight: var(--lab-w-semibold);
992
+ color: var(--lab-muted);
993
+ }
994
+ .lab-meter-head b {
995
+ font-weight: var(--lab-w-semibold);
996
+ font-variant-numeric: tabular-nums;
997
+ }
998
+ .lab-meter-track {
999
+ height: 12px;
1000
+ border-radius: var(--lab-r-sm);
1001
+ background: color-mix(in oklab, var(--lab-muted) 18%, transparent);
1002
+ overflow: hidden;
1003
+ }
1004
+ .lab-meter-fill {
1005
+ height: 100%;
1006
+ border-radius: var(--lab-r-sm);
1007
+ background: var(--lab-meter-color, var(--lab-accent));
1008
+ transition: width var(--lab-dur-fast);
1009
+ }
1010
+
1011
+ /* ═══════════════════════════════════════════════════════════════════════════
1012
+ COMPONENTS
1013
+ ═══════════════════════════════════════════════════════════════════════════ */
1014
+
1015
+ /* ── pedagogy: objectives / hints / misconception ──────────────────────────── */
1016
+ .lab-objectives {
1017
+ margin: 0 0 var(--lab-sp-12);
1018
+ padding: var(--lab-sp-10) var(--lab-sp-14);
1019
+ border-radius: var(--lab-r-md);
1020
+ background: var(--lab-accent-faint);
1021
+ }
1022
+ .lab-objectives ul {
1023
+ margin: var(--lab-sp-4) 0 0;
1024
+ padding-inline-start: var(--lab-sp-16);
1025
+ }
1026
+ .lab-objectives li {
1027
+ font-size: var(--lab-t-sm);
1028
+ color: var(--lab-fg);
1029
+ margin: 1px 0;
1030
+ }
1031
+ .lab-hints {
1032
+ margin-top: var(--lab-sp-12);
1033
+ display: flex;
1034
+ flex-direction: column;
1035
+ gap: var(--lab-sp-6);
1036
+ align-items: flex-start;
1037
+ }
1038
+ .lab-hint {
1039
+ margin: 0;
1040
+ font-size: var(--lab-t-sm);
1041
+ color: var(--lab-fg);
1042
+ padding: var(--lab-sp-6) var(--lab-sp-10);
1043
+ border-radius: var(--lab-r-sm);
1044
+ background: var(--lab-warn-soft);
1045
+ max-width: 60ch;
1046
+ }
1047
+ .lab-hint-btn {
1048
+ align-self: flex-start;
1049
+ padding: var(--lab-sp-6) var(--lab-sp-14);
1050
+ border-radius: var(--lab-r-pill);
1051
+ border: 1.5px dashed var(--lab-border-strong);
1052
+ background: transparent;
1053
+ color: var(--lab-muted);
1054
+ font-size: var(--lab-t-sm);
1055
+ font-weight: var(--lab-w-medium);
1056
+ cursor: pointer;
1057
+ transition:
1058
+ border-color var(--lab-dur-fast),
1059
+ color var(--lab-dur-fast);
1060
+ }
1061
+ @media (hover: hover) and (pointer: fine) {
1062
+ .lab-hint-btn:hover {
1063
+ border-color: var(--lab-accent);
1064
+ color: var(--lab-fg);
1065
+ }
1066
+ }
1067
+ .lab-misconception {
1068
+ display: inline-flex;
1069
+ align-items: center;
1070
+ gap: var(--lab-sp-6);
1071
+ font-size: var(--lab-t-sm);
1072
+ font-weight: var(--lab-w-medium);
1073
+ padding: var(--lab-sp-4) var(--lab-sp-12);
1074
+ border-radius: var(--lab-r-pill);
1075
+ color: var(--lab-warn-fg);
1076
+ background: color-mix(in oklab, var(--lab-warn) 22%, var(--lab-surface));
1077
+ }
1078
+
1079
+ /* shared "Show answer" escape hatch (kit/pedagogy RevealSolution) */
1080
+ .lab-reveal-btn {
1081
+ align-self: flex-start;
1082
+ padding: var(--lab-sp-4) var(--lab-sp-12);
1083
+ border-radius: var(--lab-r-pill);
1084
+ border: 1.5px dashed var(--lab-border-strong);
1085
+ background: transparent;
1086
+ color: var(--lab-muted);
1087
+ font-size: var(--lab-t-eyebrow);
1088
+ font-weight: var(--lab-w-medium);
1089
+ cursor: pointer;
1090
+ transition:
1091
+ border-color var(--lab-dur-fast),
1092
+ color var(--lab-dur-fast);
1093
+ }
1094
+ @media (hover: hover) and (pointer: fine) {
1095
+ .lab-reveal-btn:hover {
1096
+ border-color: var(--lab-warn);
1097
+ color: var(--lab-fg);
1098
+ }
1099
+ }
1100
+ .lab-solution {
1101
+ margin-top: var(--lab-sp-8);
1102
+ max-width: 64ch;
1103
+ padding: var(--lab-sp-10) var(--lab-sp-14);
1104
+ border-radius: var(--lab-r-md);
1105
+ border-color: color-mix(in oklab, var(--lab-warn) 42%, transparent);
1106
+ background: var(--lab-warn-soft);
1107
+ }
1108
+ .lab-solution-h {
1109
+ display: flex;
1110
+ align-items: center;
1111
+ gap: var(--lab-sp-6);
1112
+ font-weight: var(--lab-w-bold);
1113
+ color: var(--lab-warn-fg);
1114
+ }
1115
+ .lab-solution-body {
1116
+ margin-top: var(--lab-sp-4);
1117
+ font-size: var(--lab-t-body);
1118
+ font-weight: var(--lab-w-medium);
1119
+ color: var(--lab-fg);
1120
+ }
1121
+ .lab-solution-note {
1122
+ margin: var(--lab-sp-4) 0 0;
1123
+ font-size: var(--lab-t-eyebrow);
1124
+ opacity: 0.7;
1125
+ }
1126
+
1127
+ /* ── Challenge: predict / classify / explain (kit/pedagogy) ─────────────────
1128
+ A clean card: a quiet eyebrow, a readable prompt, comfortable options. The
1129
+ card surface stays neutral so the accent reads only on the pick/right states,
1130
+ which is what carries meaning. */
1131
+ /* full width: the card aligns with the figure + controls above it instead of
1132
+ floating as a narrower island in the footer */
1133
+ .lab-challenge {
1134
+ display: flex;
1135
+ flex-direction: column;
1136
+ gap: var(--lab-sp-14);
1137
+ width: 100%;
1138
+ padding: var(--lab-sp-14) var(--lab-sp-16);
1139
+ box-shadow: var(--lab-shadow-sm);
1140
+ }
1141
+ .lab-challenge-h {
1142
+ display: flex;
1143
+ align-items: center;
1144
+ gap: var(--lab-sp-6);
1145
+ font-weight: var(--lab-w-bold);
1146
+ letter-spacing: var(--lab-ls-caps);
1147
+ }
1148
+ .lab-challenge-h::before {
1149
+ content: "";
1150
+ width: 7px;
1151
+ height: 7px;
1152
+ border-radius: var(--lab-r-pill);
1153
+ background: var(--lab-accent);
1154
+ }
1155
+ .lab-challenge-count {
1156
+ margin-inline-start: auto;
1157
+ padding: 1px var(--lab-sp-8);
1158
+ border-radius: var(--lab-r-pill);
1159
+ font-variant-numeric: tabular-nums;
1160
+ letter-spacing: 0;
1161
+ font-weight: var(--lab-w-semibold);
1162
+ color: var(--lab-muted);
1163
+ background: color-mix(in oklab, currentColor 8%, transparent);
1164
+ }
1165
+ .lab-challenge-q {
1166
+ display: flex;
1167
+ flex-direction: column;
1168
+ gap: var(--lab-sp-8);
1169
+ align-items: flex-start;
1170
+ min-inline-size: 0;
1171
+ width: 100%;
1172
+ margin: 0;
1173
+ padding: 0;
1174
+ border: 0;
1175
+ }
1176
+ .lab-challenge-q + .lab-challenge-q {
1177
+ padding-top: var(--lab-sp-14);
1178
+ border-top: 1px solid var(--lab-border);
1179
+ }
1180
+ .lab-challenge-prompt {
1181
+ display: flex;
1182
+ align-items: baseline;
1183
+ gap: var(--lab-sp-8);
1184
+ max-width: 68ch;
1185
+ font-size: var(--lab-t-sm);
1186
+ line-height: var(--lab-lh-ui);
1187
+ font-weight: var(--lab-w-medium);
1188
+ color: var(--lab-fg);
1189
+ margin: 0;
1190
+ padding: 0;
1191
+ }
1192
+ .lab-challenge-num {
1193
+ flex: none;
1194
+ display: inline-flex;
1195
+ align-items: center;
1196
+ justify-content: center;
1197
+ min-width: 20px;
1198
+ height: 20px;
1199
+ padding: 0 var(--lab-sp-4);
1200
+ border-radius: var(--lab-r-pill);
1201
+ font-size: var(--lab-t-eyebrow);
1202
+ font-weight: var(--lab-w-bold);
1203
+ font-variant-numeric: tabular-nums;
1204
+ color: var(--lab-accent);
1205
+ background: var(--lab-accent-soft);
1206
+ transform: translateY(1px);
1207
+ }
1208
+ .lab-choices {
1209
+ display: flex;
1210
+ flex-wrap: wrap;
1211
+ gap: var(--lab-sp-10);
1212
+ }
1213
+ /* Answer controls stay content-sized on roomy layouts. Equal-width full-row
1214
+ pills make short choices look like dominant page actions and waste space. */
1215
+ .lab-challenge .lab-choices {
1216
+ display: flex;
1217
+ align-items: stretch;
1218
+ flex-wrap: wrap;
1219
+ width: 100%;
1220
+ }
1221
+ .lab-challenge .lab-choice {
1222
+ flex: 0 1 auto;
1223
+ width: auto;
1224
+ max-width: min(100%, 34rem);
1225
+ min-height: var(--lab-target);
1226
+ padding: var(--lab-sp-8) var(--lab-sp-12);
1227
+ border-width: 1px;
1228
+ font-size: var(--lab-t-sm);
1229
+ font-weight: var(--lab-w-regular);
1230
+ line-height: var(--lab-lh-ui);
1231
+ text-align: center;
1232
+ white-space: normal;
1233
+ }
1234
+ .lab-challenge .lab-choice:hover:not(:disabled) {
1235
+ box-shadow: none;
1236
+ }
1237
+ @container lab-activity (max-width: 34rem) {
1238
+ .lab-challenge .lab-choice {
1239
+ flex-basis: 100%;
1240
+ max-width: 100%;
1241
+ }
1242
+ }
1243
+ /* Authored answers are SENTENCES, not tokens. The base .lab-choice is tuned for
1244
+ a short tile ("42", "True"): bold, large, centred, heavy border. A full clause
1245
+ in that dress reads as competing buttons rather than options to weigh. So in a
1246
+ question fieldset they become an option list: one per row so the left edges
1247
+ align, a lettered handle, body-size regular text, and a quiet border that only
1248
+ takes colour on hover or once picked. The prompt stays the heaviest thing. */
1249
+ .lab-challenge-q .lab-choices {
1250
+ flex-direction: column;
1251
+ align-items: stretch;
1252
+ width: 100%;
1253
+ max-width: 34rem;
1254
+ gap: var(--lab-sp-4);
1255
+ margin-block-start: 2px;
1256
+ counter-reset: lab-answer;
1257
+ }
1258
+ /* Short answers are comparisons, so let learners scan them side by side. Long
1259
+ authored clauses retain the prose list above. The renderer sets this policy;
1260
+ lesson authors do not hand-tune columns or button widths. */
1261
+ .lab-challenge-q[data-response-layout="compact"] .lab-choices {
1262
+ display: grid;
1263
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 14rem));
1264
+ justify-content: start;
1265
+ max-width: 100%;
1266
+ gap: var(--lab-sp-6);
1267
+ }
1268
+ .lab-challenge-q[data-response-layout="compact"] .lab-choice {
1269
+ height: 100%;
1270
+ }
1271
+ .lab-challenge-q .lab-choice {
1272
+ position: relative;
1273
+ flex: 0 0 auto;
1274
+ width: 100%;
1275
+ max-width: 100%;
1276
+ min-height: 0;
1277
+ justify-content: flex-start;
1278
+ gap: var(--lab-sp-8);
1279
+ padding: var(--lab-sp-6) var(--lab-sp-8);
1280
+ border: 1px solid var(--lab-border);
1281
+ border-radius: var(--lab-r-md);
1282
+ background: var(--lab-surface);
1283
+ /* One step BELOW the 15px prompt. At body size the answers came out larger
1284
+ than the question, which inverts the reading order of the whole block. */
1285
+ font-size: var(--lab-t-sm);
1286
+ font-weight: var(--lab-w-regular);
1287
+ line-height: var(--lab-lh-ui);
1288
+ text-align: start;
1289
+ white-space: normal;
1290
+ }
1291
+ .lab-choice-control {
1292
+ position: absolute !important;
1293
+ inline-size: 1px !important;
1294
+ block-size: 1px !important;
1295
+ margin: 0 !important;
1296
+ opacity: 0;
1297
+ pointer-events: none;
1298
+ }
1299
+ .lab-choice:has(.lab-choice-control:focus-visible) {
1300
+ border-color: var(--lab-accent);
1301
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--lab-accent) 22%, transparent);
1302
+ }
1303
+ .lab-choice[data-disabled] {
1304
+ cursor: not-allowed;
1305
+ opacity: 0.5;
1306
+ }
1307
+ /* An answer is not a heading.
1308
+ The shared option rule sets `--lab-t-lg` at semibold, which is larger and heavier than the body
1309
+ text and the step lead, so a row of prose answers came out as the loudest thing on the card and
1310
+ a three-option row read as three buttons shouting. Numeric choices want the presence; a sentence
1311
+ does not. Scoped to the label span, so the bare `.lab-option` keypad keeps its size. */
1312
+ .lab-choice-label {
1313
+ min-inline-size: 0;
1314
+ font-size: var(--lab-t-sm);
1315
+ font-weight: var(--lab-w-medium);
1316
+ line-height: var(--lab-lh-ui);
1317
+ }
1318
+ /* The letter is a handle, not decoration: it gives the explanation something to
1319
+ point at and keeps every answer's text starting on one vertical line. */
1320
+ .lab-challenge-q .lab-choice::before {
1321
+ counter-increment: lab-answer;
1322
+ content: counter(lab-answer, upper-alpha);
1323
+ flex: none;
1324
+ align-self: flex-start;
1325
+ display: inline-flex;
1326
+ align-items: center;
1327
+ justify-content: center;
1328
+ width: 20px;
1329
+ height: 20px;
1330
+ border-radius: var(--lab-r-pill);
1331
+ background: var(--lab-sunken);
1332
+ border: 1px solid var(--lab-border);
1333
+ color: var(--lab-muted);
1334
+ font-size: var(--lab-t-micro);
1335
+ font-weight: var(--lab-w-medium);
1336
+ line-height: var(--lab-lh-tight);
1337
+ }
1338
+ @media (hover: hover) and (pointer: fine) {
1339
+ .lab-challenge-q .lab-choice:hover:not(:disabled) {
1340
+ border-color: var(--lab-accent-edge);
1341
+ background: var(--lab-accent-faint);
1342
+ box-shadow: none;
1343
+ }
1344
+ }
1345
+ .lab-challenge-q .lab-choice[data-picked] {
1346
+ font-weight: var(--lab-w-medium);
1347
+ }
1348
+ .lab-challenge-q .lab-choice[data-picked]::before {
1349
+ background: var(--lab-accent-soft);
1350
+ border-color: var(--lab-accent);
1351
+ color: color-mix(in oklab, var(--lab-accent) 80%, var(--lab-fg));
1352
+ }
1353
+ .lab-challenge-q .lab-choice[data-tone="correct"]::before {
1354
+ content: "✓";
1355
+ background: var(--lab-good-soft);
1356
+ border-color: var(--lab-good);
1357
+ color: var(--lab-good-ink);
1358
+ }
1359
+ .lab-challenge-q .lab-choice[data-tone="wrong"]::before {
1360
+ content: "×";
1361
+ background: var(--lab-danger-soft);
1362
+ border-color: var(--lab-danger);
1363
+ color: var(--lab-danger-ink);
1364
+ }
1365
+ .lab-response-entry {
1366
+ display: grid;
1367
+ grid-template-columns: minmax(12rem, 28rem) auto;
1368
+ align-items: center;
1369
+ gap: var(--lab-sp-10);
1370
+ width: min(100%, 38rem);
1371
+ }
1372
+ .lab-response-entry .lab-input {
1373
+ width: 100%;
1374
+ min-width: 0;
1375
+ }
1376
+ .lab-response-entry > :is(.lab-explain, .lab-celebrate) {
1377
+ grid-column: 1 / -1;
1378
+ }
1379
+ .lab-response-entry[data-multiline] {
1380
+ grid-template-columns: minmax(0, 1fr);
1381
+ }
1382
+ .lab-response-entry[data-multiline] > button {
1383
+ justify-self: start;
1384
+ }
1385
+ .lab-ordering-list {
1386
+ display: grid;
1387
+ gap: var(--lab-sp-6);
1388
+ width: min(100%, 38rem);
1389
+ margin: 0;
1390
+ padding: 0;
1391
+ list-style: none;
1392
+ counter-reset: none;
1393
+ }
1394
+ .lab-ordering-list > li {
1395
+ display: grid;
1396
+ grid-template-columns: 1.75rem minmax(0, 1fr) auto;
1397
+ align-items: center;
1398
+ gap: var(--lab-sp-10);
1399
+ min-height: var(--lab-target);
1400
+ padding: var(--lab-sp-4) var(--lab-sp-6) var(--lab-sp-4) var(--lab-sp-8);
1401
+ border: 1px solid var(--lab-border);
1402
+ border-radius: var(--lab-r-md);
1403
+ background: var(--lab-surface);
1404
+ }
1405
+ .lab-ordering-rank {
1406
+ display: grid;
1407
+ place-items: center;
1408
+ width: 1.5rem;
1409
+ height: 1.5rem;
1410
+ border-radius: var(--lab-r-pill);
1411
+ background: var(--lab-sunken);
1412
+ color: var(--lab-muted);
1413
+ font-size: var(--lab-t-eyebrow);
1414
+ font-weight: var(--lab-w-semibold);
1415
+ font-variant-numeric: tabular-nums;
1416
+ }
1417
+ .lab-ordering-label {
1418
+ min-width: 0;
1419
+ font-size: var(--lab-t-sm);
1420
+ line-height: var(--lab-lh-ui);
1421
+ }
1422
+ .lab-ordering-actions {
1423
+ display: inline-flex;
1424
+ gap: 2px;
1425
+ }
1426
+ .lab-reflection-rubric {
1427
+ display: grid;
1428
+ gap: var(--lab-sp-6);
1429
+ width: min(100%, 38rem);
1430
+ padding: var(--lab-sp-12) var(--lab-sp-12);
1431
+ border: 1px solid var(--lab-border);
1432
+ border-radius: var(--lab-r-md);
1433
+ background: var(--lab-sunken);
1434
+ }
1435
+ .lab-reflection-rubric > p {
1436
+ margin: 0;
1437
+ color: var(--lab-muted);
1438
+ font-size: var(--lab-t-eyebrow);
1439
+ font-weight: var(--lab-w-semibold);
1440
+ letter-spacing: var(--lab-ls-caps);
1441
+ text-transform: uppercase;
1442
+ }
1443
+ .lab-reflection-rubric ul {
1444
+ display: grid;
1445
+ gap: var(--lab-sp-6);
1446
+ margin: 0;
1447
+ padding: 0;
1448
+ list-style: none;
1449
+ }
1450
+ .lab-reflection-rubric li {
1451
+ position: relative;
1452
+ padding-inline-start: var(--lab-sp-16);
1453
+ font-size: var(--lab-t-sm);
1454
+ line-height: var(--lab-lh-ui);
1455
+ }
1456
+ .lab-reflection-rubric li::before {
1457
+ position: absolute;
1458
+ inset-inline-start: 2px;
1459
+ color: var(--lab-muted);
1460
+ content: "•";
1461
+ }
1462
+ @container lab-activity (max-width: 30rem) {
1463
+ .lab-challenge-q[data-response-layout="compact"] .lab-choices,
1464
+ .lab-response-entry {
1465
+ grid-template-columns: minmax(0, 1fr);
1466
+ }
1467
+ .lab-response-entry > button {
1468
+ width: 100%;
1469
+ }
1470
+ }
1471
+ /* explanation note: a SENTENCE, so it reads as prose (regular weight, roomy
1472
+ line-height), not a shouting bold status pill. Neutral surface + a slim good
1473
+ edge: the picked choice already carries the green, a second green wash on
1474
+ the note turned the whole card monochrome. */
1475
+ .lab-explain {
1476
+ display: block;
1477
+ padding: var(--lab-sp-8) var(--lab-sp-12);
1478
+ border-radius: var(--lab-r-sm);
1479
+ font-size: var(--lab-t-body);
1480
+ font-weight: var(--lab-w-regular);
1481
+ line-height: var(--lab-lh-prose);
1482
+ color: var(--lab-fg);
1483
+ background: var(--lab-sunken);
1484
+ border-inline-start: 3px solid var(--lab-good);
1485
+ }
1486
+ .lab-explain > b:first-child {
1487
+ color: var(--lab-good-ink);
1488
+ }
1489
+ .lab-explain[data-state="no"] {
1490
+ border-inline-start-color: var(--lab-border-strong);
1491
+ color: var(--lab-muted);
1492
+ }
1493
+ /* ── Evidence: a compact instrument/readout surface ───────────────────────── */
1494
+ .lab-evidence-surface {
1495
+ padding: var(--lab-sp-14) var(--lab-sp-14);
1496
+ font-size: var(--lab-t-body);
1497
+ line-height: var(--lab-lh-prose);
1498
+ background: var(--lab-accent-faint);
1499
+ }
1500
+ .lab-evidence-surface[data-tone="result"] {
1501
+ border-color: var(--lab-border);
1502
+ background: var(--lab-surface);
1503
+ }
1504
+ .lab-evidence-value {
1505
+ display: block;
1506
+ margin-top: 2px;
1507
+ font-size: var(--lab-t-title);
1508
+ font-weight: var(--lab-w-bold);
1509
+ font-variant-numeric: tabular-nums;
1510
+ color: var(--lab-good);
1511
+ }
1512
+ .lab-readout {
1513
+ display: grid;
1514
+ gap: var(--lab-sp-4);
1515
+ font-variant-numeric: tabular-nums;
1516
+ }
1517
+ .lab-readout-label {
1518
+ font-size: var(--lab-t-eyebrow);
1519
+ font-weight: var(--lab-w-semibold);
1520
+ letter-spacing: var(--lab-ls-caps);
1521
+ text-transform: uppercase;
1522
+ color: var(--lab-muted);
1523
+ }
1524
+ .lab-readout-val {
1525
+ font-weight: var(--lab-w-bold);
1526
+ font-size: var(--lab-t-title);
1527
+ line-height: var(--lab-lh-title);
1528
+ letter-spacing: var(--lab-ls-tight);
1529
+ color: var(--lab-fg);
1530
+ }
1531
+ .lab-readout-sub {
1532
+ font-size: var(--lab-t-eyebrow);
1533
+ line-height: var(--lab-lh-ui);
1534
+ color: var(--lab-muted);
1535
+ }
1536
+ /* Stat readout: a stack of aligned "label … value" rows (StatList + Stat) — reads
1537
+ like a clean instrument panel, hairline dividers between rows for spec-sheet order. */
1538
+ .lab-statlist {
1539
+ display: grid;
1540
+ gap: var(--lab-sp-6);
1541
+ font-size: var(--lab-t-sm);
1542
+ font-variant-numeric: tabular-nums;
1543
+ }
1544
+ /* Tabular figures, because these numbers CHANGE. In a proportional face a 1 is narrower than a 0,
1545
+ so a value ticking from 1.11 to 2.00 re-measures its own text and everything beside it slides a
1546
+ few pixels, every frame, for as long as the model runs. `.lab-readout` already had this; the
1547
+ stat rows and the status strip did not, and the status strip is the one place a running lab
1548
+ updates continuously in front of the learner. */
1549
+ .lab-stat {
1550
+ display: flex;
1551
+ align-items: baseline;
1552
+ justify-content: space-between;
1553
+ gap: var(--lab-sp-14);
1554
+ font-variant-numeric: tabular-nums;
1555
+ }
1556
+ .lab-stat + .lab-stat {
1557
+ padding-top: var(--lab-sp-6);
1558
+ border-top: 1px solid var(--lab-hairline);
1559
+ }
1560
+ .lab-stat-label {
1561
+ color: var(--lab-muted);
1562
+ }
1563
+ .lab-stat-val {
1564
+ font-weight: var(--lab-w-bold);
1565
+ color: var(--lab-fg);
1566
+ letter-spacing: var(--lab-ls-tight);
1567
+ }
1568
+ .lab-stat-val[data-tone="good"] {
1569
+ color: var(--lab-good);
1570
+ }
1571
+ .lab-stat-val[data-tone="warn"] {
1572
+ color: var(--lab-warn);
1573
+ }
1574
+ .lab-stat-val[data-tone="danger"] {
1575
+ color: var(--lab-danger);
1576
+ }
1577
+
1578
+ /* Compatibility surface for domain evidence authored before StatList existed.
1579
+ Keep the visual contract here so those labs remain aligned and readable while
1580
+ their JSX can migrate incrementally without subject-specific CSS. */
1581
+ .lab-metric-list {
1582
+ display: grid;
1583
+ gap: 0;
1584
+ min-width: 0;
1585
+ overflow: hidden;
1586
+ border: 1px solid var(--lab-border);
1587
+ border-radius: var(--lab-r-md);
1588
+ background: var(--lab-surface);
1589
+ font-size: var(--lab-t-sm);
1590
+ font-variant-numeric: tabular-nums;
1591
+ }
1592
+ .lab-metric-list > div {
1593
+ display: grid;
1594
+ grid-template-columns: minmax(0, 1fr) auto;
1595
+ align-items: baseline;
1596
+ gap: var(--lab-sp-10);
1597
+ padding: var(--lab-sp-10) var(--lab-sp-14);
1598
+ }
1599
+ .lab-metric-list > div + div {
1600
+ border-top: 1px solid var(--lab-hairline);
1601
+ }
1602
+ .lab-metric-list > div > span {
1603
+ min-width: 0;
1604
+ color: var(--lab-muted);
1605
+ line-height: var(--lab-lh-ui);
1606
+ }
1607
+ .lab-metric-list > div > strong {
1608
+ color: var(--lab-fg);
1609
+ font-weight: var(--lab-w-bold);
1610
+ text-align: end;
1611
+ }
1612
+
1613
+ /* Step progress (deck labs) — a slim segmented indicator above the title, the
1614
+ premium "lesson progress" affordance that replaces a "2 / 4" text pill. */
1615
+ .lab-progress {
1616
+ display: inline-flex;
1617
+ align-items: center;
1618
+ gap: var(--lab-sp-10);
1619
+ font-size: var(--lab-t-sm);
1620
+ font-weight: var(--lab-w-semibold);
1621
+ color: var(--lab-muted);
1622
+ font-variant-numeric: tabular-nums;
1623
+ }
1624
+ .lab-progress-segs {
1625
+ display: inline-flex;
1626
+ gap: var(--lab-sp-4);
1627
+ }
1628
+ .lab-progress-seg {
1629
+ width: 24px;
1630
+ height: 6px;
1631
+ border-radius: var(--lab-r-pill);
1632
+ background: var(--lab-border-strong);
1633
+ transition: background var(--lab-dur-base) var(--lab-ease);
1634
+ }
1635
+ .lab-progress-seg[data-on="true"] {
1636
+ background: var(--lab-accent);
1637
+ }
1638
+ .lab-progress-bar {
1639
+ display: inline-block;
1640
+ width: 132px;
1641
+ height: 6px;
1642
+ border-radius: var(--lab-r-pill);
1643
+ background: var(--lab-border-strong);
1644
+ overflow: hidden;
1645
+ }
1646
+ .lab-progress-bar-fill {
1647
+ display: block;
1648
+ height: 100%;
1649
+ background: var(--lab-accent);
1650
+ border-radius: var(--lab-r-pill);
1651
+ transition: width var(--lab-dur-slow) var(--lab-ease);
1652
+ }
1653
+ .lab-progress[data-complete="true"] {
1654
+ gap: var(--lab-sp-4);
1655
+ padding: var(--lab-sp-4) var(--lab-sp-12);
1656
+ border-radius: var(--lab-r-pill);
1657
+ color: var(--lab-good-ink);
1658
+ background: var(--lab-good-soft);
1659
+ }
1660
+ .lab-progress-check {
1661
+ font-weight: var(--lab-w-bold);
1662
+ }
1663
+ .lab-prompt {
1664
+ margin: 0;
1665
+ font-size: var(--lab-t-body);
1666
+ line-height: var(--lab-lh-ui);
1667
+ color: var(--lab-muted);
1668
+ max-width: 68ch;
1669
+ }
1670
+ .lab-reps {
1671
+ display: grid;
1672
+ grid-template-columns: minmax(0, 1fr) minmax(150px, 0.3fr);
1673
+ gap: var(--lab-sp-16);
1674
+ align-items: center;
1675
+ }
1676
+ .lab-reps-plot {
1677
+ min-width: 0;
1678
+ }
1679
+ .lab-reps-views {
1680
+ display: flex;
1681
+ flex-wrap: wrap;
1682
+ gap: var(--lab-sp-10) var(--lab-sp-14);
1683
+ justify-content: center;
1684
+ align-items: flex-end;
1685
+ }
1686
+ .lab-rep {
1687
+ display: flex;
1688
+ flex-direction: column;
1689
+ align-items: center;
1690
+ gap: var(--lab-sp-2);
1691
+ }
1692
+ .lab-rep-cap {
1693
+ font-size: var(--lab-t-eyebrow);
1694
+ font-weight: var(--lab-w-semibold);
1695
+ letter-spacing: var(--lab-ls-caps);
1696
+ text-transform: uppercase;
1697
+ color: var(--lab-muted);
1698
+ }
1699
+ .lab-linked-stack {
1700
+ display: grid;
1701
+ gap: var(--lab-sp-14);
1702
+ }
1703
+ @container lab-activity (max-width: 38rem) {
1704
+ .lab-reps {
1705
+ grid-template-columns: minmax(0, 1fr);
1706
+ }
1707
+ }
1708
+
1709
+ /* ── Circuit editor: wiring pin affordance ─────────────────────────────────────
1710
+ Every pin is a click-to-wire point; make that obvious. The dot grows + glows on
1711
+ hover with a crosshair cursor and a tooltip; the armed pin pulses; while a wire
1712
+ is pending the other pins read as connect targets. */
1713
+ .lab-pin {
1714
+ cursor: crosshair;
1715
+ }
1716
+ .lab-pin-dot {
1717
+ r: 5.5;
1718
+ transition:
1719
+ r var(--lab-dur-fast) var(--lab-ease),
1720
+ stroke-width var(--lab-dur-fast) var(--lab-ease),
1721
+ filter var(--lab-dur-fast) var(--lab-ease);
1722
+ }
1723
+ .lab-pin:hover .lab-pin-dot {
1724
+ r: 8.5;
1725
+ stroke-width: 3;
1726
+ filter: drop-shadow(0 0 4px color-mix(in oklab, var(--stage-accent, #3b82f6) 75%, transparent));
1727
+ }
1728
+ .lab-pin:focus-visible {
1729
+ outline: none;
1730
+ }
1731
+ .lab-pin:focus-visible .lab-pin-dot {
1732
+ r: 8.5;
1733
+ stroke-width: 3;
1734
+ filter: drop-shadow(0 0 4px color-mix(in oklab, var(--stage-accent, #3b82f6) 75%, transparent));
1735
+ }
1736
+ .lab-pin[data-target] .lab-pin-dot {
1737
+ r: 6.5;
1738
+ stroke-width: 2.5;
1739
+ }
1740
+ .lab-pin[data-armed] .lab-pin-dot {
1741
+ r: 7.5;
1742
+ animation: lab-pin-pulse 1.1s var(--lab-ease-in-out) infinite;
1743
+ }
1744
+ @keyframes lab-pin-pulse {
1745
+ 0%,
1746
+ 100% {
1747
+ stroke-width: 2.5;
1748
+ }
1749
+ 50% {
1750
+ stroke-width: 5;
1751
+ }
1752
+ }
1753
+ @media (prefers-reduced-motion: reduce) {
1754
+ /* the armed pin cannot pulse, so it is simply heavier */
1755
+ .lab-pin[data-armed] .lab-pin-dot {
1756
+ stroke-width: 4;
1757
+ }
1758
+ }
1759
+ .lab-control-expr {
1760
+ grid-column: 1 / -1;
1761
+ display: flex;
1762
+ align-items: center;
1763
+ flex-wrap: wrap;
1764
+ gap: var(--lab-sp-8);
1765
+ font-weight: var(--lab-w-medium);
1766
+ }
1767
+
1768
+ /* a labelled control: small caps label, then control + value on one row */
1769
+ .lab-field {
1770
+ display: flex;
1771
+ flex-direction: column;
1772
+ gap: var(--lab-sp-4);
1773
+ min-width: 0;
1774
+ }
1775
+ .lab-field-row {
1776
+ display: inline-flex;
1777
+ align-items: center;
1778
+ gap: var(--lab-sp-8);
1779
+ flex-wrap: wrap;
1780
+ }
1781
+ .lab-field > .lab-field-row {
1782
+ display: flex;
1783
+ width: 100%;
1784
+ }
1785
+ .lab-field-val {
1786
+ font-size: var(--lab-t-body);
1787
+ font-weight: var(--lab-w-bold);
1788
+ font-variant-numeric: tabular-nums;
1789
+ min-width: 3.4em;
1790
+ text-align: end;
1791
+ }
1792
+ .lab-field > .lab-field-row > .lab-field-val {
1793
+ margin-inline-start: auto;
1794
+ }
1795
+ .lab-field .lab-slider {
1796
+ flex: 1 1 auto;
1797
+ width: auto;
1798
+ min-width: 60px;
1799
+ }
1800
+ /* A slider must read as a TRACK even at its minimum. shadcn paints the track `bg-muted`, which is
1801
+ the same tone as the controls dock it sits on, so a slider at value 0 (a scrubber before Play,
1802
+ most obviously) showed only its thumb: a stray dot with no control around it. */
1803
+ .lab-slider [data-slot="slider-track"] {
1804
+ background: color-mix(in oklab, var(--stage-fg) 15%, transparent);
1805
+ }
1806
+ .lab-locked-wrap {
1807
+ display: contents;
1808
+ }
1809
+ .lab-field[data-locked="true"] .lab-field-row {
1810
+ opacity: 0.62;
1811
+ }
1812
+ .lab-field-lock {
1813
+ display: inline-block;
1814
+ width: 0.82em;
1815
+ height: 0.82em;
1816
+ margin-inline-start: 0.3em;
1817
+ vertical-align: -0.05em;
1818
+ opacity: 0.7;
1819
+ }
1820
+
1821
+ /* ── Play-gate for hand-driven sim labs ────────────────────────────────────── */
1822
+ .lab-playwrap {
1823
+ position: relative;
1824
+ }
1825
+ .lab-play-toggle {
1826
+ position: absolute;
1827
+ inset-block-start: var(--lab-sp-10);
1828
+ inset-inline-end: var(--lab-sp-10);
1829
+ z-index: var(--lab-z-raised);
1830
+ display: inline-flex;
1831
+ align-items: center;
1832
+ gap: var(--lab-sp-6);
1833
+ min-width: 34px;
1834
+ height: 32px;
1835
+ padding: 0 var(--lab-sp-12);
1836
+ border-radius: var(--lab-r-pill);
1837
+ border: 1px solid var(--lab-border-strong);
1838
+ background: color-mix(in oklab, var(--lab-surface) 88%, transparent);
1839
+ color: var(--lab-fg);
1840
+ cursor: pointer;
1841
+ font-size: var(--lab-t-sm);
1842
+ font-weight: var(--lab-w-semibold);
1843
+ box-shadow: var(--lab-shadow-sm);
1844
+ transition:
1845
+ filter var(--lab-dur-fast),
1846
+ transform var(--lab-dur-fast);
1847
+ }
1848
+ .lab-play-toggle:hover {
1849
+ filter: brightness(1.05);
1850
+ }
1851
+ .lab-play-toggle:active {
1852
+ transform: translateY(1px);
1853
+ }
1854
+ .lab-play-toggle[data-playing="false"] {
1855
+ background: var(--lab-accent);
1856
+ color: var(--lab-accent-fg);
1857
+ border-color: transparent;
1858
+ }
1859
+
1860
+ /* ── In-lab stepper (teach one idea at a time) ─────────────────────────────── */
1861
+ .lab-stepnav {
1862
+ display: flex;
1863
+ align-items: center;
1864
+ gap: var(--lab-sp-14);
1865
+ }
1866
+ .lab-dots {
1867
+ display: inline-flex;
1868
+ gap: var(--lab-sp-6);
1869
+ }
1870
+ .lab-dot {
1871
+ width: 8px;
1872
+ height: 8px;
1873
+ border-radius: var(--lab-r-pill);
1874
+ background: var(--lab-border-strong);
1875
+ transition: background var(--lab-dur-base);
1876
+ }
1877
+ .lab-dot[data-on="true"] {
1878
+ background: var(--lab-accent);
1879
+ }
1880
+
1881
+ :root {
1882
+ --lang-pos-noun: oklch(0.5 0.13 264);
1883
+ --lang-pos-verb: oklch(0.53 0.18 25);
1884
+ --lang-pos-article: oklch(0.52 0.12 150);
1885
+ --lang-pos-adjective: oklch(0.55 0.12 60);
1886
+ --lang-pos-preposition: oklch(0.52 0.12 235);
1887
+ --lang-pos-pronoun: oklch(0.52 0.16 300);
1888
+ --lang-pos-conjunction: oklch(0.55 0.16 350);
1889
+ --lang-pos-adverb: oklch(0.52 0.11 195);
1890
+ --lang-pos-other: oklch(0.5 0.02 260);
1891
+ }
1892
+
1893
+ .lang-lab {
1894
+ position: relative;
1895
+ }
1896
+
1897
+ /* 600px held every language figure to well under its column on desktop. */
1898
+ .lang-lab {
1899
+ max-width: min(100%, 46rem);
1900
+ margin-inline: auto;
1901
+ }
1902
+ .lang-sentence,
1903
+ .lang-listen-play,
1904
+ .lang-dictation-foot,
1905
+ .lang-bank,
1906
+ .lang-line {
1907
+ justify-content: center;
1908
+ }
1909
+ .lang-cloze,
1910
+ .lang-errsentence,
1911
+ .lang-why {
1912
+ text-align: center;
1913
+ }
1914
+ .lang-match {
1915
+ margin-inline: auto;
1916
+ }
1917
+ .lang-lab .lab-misconception {
1918
+ display: flex;
1919
+ width: fit-content;
1920
+ margin-inline: auto;
1921
+ }
1922
+ .lang-hint {
1923
+ font-size: var(--lab-t-sm);
1924
+ color: var(--lab-muted);
1925
+ margin: 0 0 var(--lab-sp-10);
1926
+ }
1927
+ .lang-prompt {
1928
+ font-size: var(--lab-t-lg);
1929
+ font-weight: var(--lab-w-medium);
1930
+ margin: 0 0 var(--lab-sp-12);
1931
+ color: var(--lab-fg);
1932
+ }
1933
+
1934
+ .lang-tile {
1935
+ display: inline-flex;
1936
+ flex-direction: column;
1937
+ align-items: center;
1938
+ gap: 1px;
1939
+ padding: var(--lab-sp-8) var(--lab-sp-14);
1940
+ border: 0;
1941
+ border-radius: var(--lab-r-md);
1942
+ background: var(--pos, var(--lang-pos-other));
1943
+ color: var(--lab-accent-fg);
1944
+ font-weight: var(--lab-w-semibold);
1945
+ font-size: var(--lab-t-body);
1946
+ line-height: var(--lab-lh-title);
1947
+ cursor: pointer;
1948
+ box-shadow: var(--lab-shadow-sm);
1949
+ transition:
1950
+ transform var(--lab-dur-fast),
1951
+ filter var(--lab-dur-fast),
1952
+ box-shadow var(--lab-dur-fast);
1953
+ }
1954
+ .lang-tile:hover {
1955
+ filter: brightness(1.08);
1956
+ }
1957
+ .lang-tile:active {
1958
+ transform: translateY(1px);
1959
+ }
1960
+ .lang-tile[data-sel="true"] {
1961
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--pos) 55%, transparent);
1962
+ }
1963
+ .lang-tile[data-dim="true"] {
1964
+ opacity: 0.4;
1965
+ }
1966
+ .lang-tile-text {
1967
+ font-size: var(--lab-t-body);
1968
+ }
1969
+ .lang-tile-gloss {
1970
+ font-size: var(--lab-t-eyebrow);
1971
+ font-weight: var(--lab-w-medium);
1972
+ opacity: 0.82;
1973
+ }
1974
+
1975
+ .lang-line {
1976
+ display: flex;
1977
+ flex-wrap: wrap;
1978
+ gap: var(--lab-sp-8);
1979
+ align-items: center;
1980
+ min-height: 56px;
1981
+ padding: var(--lab-sp-12);
1982
+ border-radius: var(--lab-r-lg);
1983
+ border: 2px dashed var(--lab-border-strong);
1984
+ background: var(--lab-sunken);
1985
+ transition:
1986
+ border-color var(--lab-dur-fast),
1987
+ background var(--lab-dur-fast);
1988
+ }
1989
+ .lang-line[data-state="ok"] {
1990
+ border-style: solid;
1991
+ border-color: var(--lab-good);
1992
+ background: var(--lab-good-soft);
1993
+ }
1994
+ .lang-line[data-state="no"] {
1995
+ border-color: var(--lab-danger);
1996
+ }
1997
+ .lang-line-empty {
1998
+ font-size: var(--lab-t-sm);
1999
+ color: var(--lab-muted);
2000
+ }
2001
+ .lang-bank {
2002
+ display: flex;
2003
+ flex-wrap: wrap;
2004
+ gap: var(--lab-sp-8);
2005
+ margin-top: var(--lab-sp-12);
2006
+ }
2007
+
2008
+ .lang-speak {
2009
+ display: inline-flex;
2010
+ align-items: center;
2011
+ justify-content: center;
2012
+ width: 26px;
2013
+ height: 26px;
2014
+ margin-inline-start: 2px;
2015
+ border: 0;
2016
+ border-radius: var(--lab-r-pill);
2017
+ background: color-mix(in oklab, currentColor 12%, transparent);
2018
+ color: inherit;
2019
+ font-size: var(--lab-t-sm);
2020
+ cursor: pointer;
2021
+ transition: background var(--lab-dur-fast);
2022
+ }
2023
+ @media (hover: hover) and (pointer: fine) {
2024
+ .lang-speak:hover {
2025
+ background: color-mix(in oklab, var(--lab-accent) 22%, transparent);
2026
+ }
2027
+ }
2028
+
2029
+ .lang-match {
2030
+ display: grid;
2031
+ grid-template-columns: 1fr 1fr;
2032
+ gap: var(--lab-sp-10) var(--lab-sp-24);
2033
+ max-width: 520px;
2034
+ }
2035
+ .lang-col {
2036
+ display: flex;
2037
+ flex-direction: column;
2038
+ gap: var(--lab-sp-8);
2039
+ }
2040
+ .lang-match-row {
2041
+ position: relative;
2042
+ display: flex;
2043
+ align-items: center;
2044
+ }
2045
+ .lang-match-row .lang-match-cell {
2046
+ flex: 1;
2047
+ padding-inline-end: 40px;
2048
+ }
2049
+ .lang-match-row .lang-speak {
2050
+ position: absolute;
2051
+ inset-block-start: 50%;
2052
+ inset-inline-end: var(--lab-sp-8);
2053
+ transform: translateY(-50%);
2054
+ margin: 0;
2055
+ }
2056
+ .lang-cell-sub {
2057
+ font-size: var(--lab-t-eyebrow);
2058
+ color: var(--lab-muted);
2059
+ font-weight: var(--lab-w-regular);
2060
+ }
2061
+ .lang-cell-icon {
2062
+ font-size: 36px;
2063
+ line-height: var(--lab-lh-tight);
2064
+ }
2065
+ .lang-icon-image {
2066
+ object-fit: contain;
2067
+ }
2068
+ .lang-icon-svg {
2069
+ display: inline-flex;
2070
+ }
2071
+ @keyframes lang-shake {
2072
+ 0%,
2073
+ 100% {
2074
+ transform: translateX(0);
2075
+ }
2076
+ 25% {
2077
+ transform: translateX(-4px);
2078
+ }
2079
+ 75% {
2080
+ transform: translateX(4px);
2081
+ }
2082
+ }
2083
+
2084
+ /* Language activities share the same responsive anatomy while keeping their
2085
+ domain-specific tiles, passages, audio, and grammar scenes. */
2086
+ .language-activity .lab-activity-status {
2087
+ justify-content: flex-start;
2088
+ }
2089
+ .language-activity .lab-activity-workspace {
2090
+ padding: clamp(0.75rem, 2.2vw, 1.25rem);
2091
+ }
2092
+ .language-activity .lab-activity-canvas {
2093
+ align-content: start;
2094
+ }
2095
+ .language-activity-support {
2096
+ padding: 0 var(--lab-sp-16) var(--lab-sp-14);
2097
+ }
2098
+ .language-activity-support > .lab-challenge {
2099
+ margin: 0;
2100
+ }
2101
+ .language-activity .lab-activity-transport {
2102
+ display: flex;
2103
+ flex-wrap: wrap;
2104
+ justify-content: center;
2105
+ min-height: 4rem;
2106
+ }
2107
+ .language-activity .lab-activity-transport .lab-btn,
2108
+ .language-activity .lang-audio-action {
2109
+ border-radius: var(--lab-r-md);
2110
+ }
2111
+ .lang-audio-action {
2112
+ display: inline-flex;
2113
+ align-items: center;
2114
+ justify-content: center;
2115
+ gap: var(--lab-sp-8);
2116
+ min-height: var(--lab-target);
2117
+ padding-inline: var(--lab-sp-16);
2118
+ }
2119
+ .lang-listen-play {
2120
+ display: flex;
2121
+ justify-content: center;
2122
+ margin: 0 0 var(--lab-sp-16);
2123
+ }
2124
+ .lang-listen-play .lang-audio-action {
2125
+ min-width: 8.5rem;
2126
+ }
2127
+
2128
+ .lang-listening-choices .lab-choices {
2129
+ justify-content: center;
2130
+ }
2131
+
2132
+ .lang-listening-choices[data-layout="picture"] .lab-choice {
2133
+ min-width: 5rem;
2134
+ min-height: 4.5rem;
2135
+ }
2136
+
2137
+ @container lab-activity (max-width: 42.5rem) {
2138
+ .language-activity .lab-activity-workspace {
2139
+ padding: var(--lab-sp-12);
2140
+ }
2141
+ .language-activity-support {
2142
+ padding-inline: var(--lab-sp-12);
2143
+ }
2144
+ .language-activity .lang-match {
2145
+ gap: var(--lab-sp-8);
2146
+ }
2147
+ .language-activity .lang-choice {
2148
+ padding-inline: var(--lab-sp-14);
2149
+ }
2150
+ }
2151
+
2152
+ .lang-sentence {
2153
+ display: flex;
2154
+ flex-wrap: wrap;
2155
+ align-items: center;
2156
+ gap: var(--lab-sp-8);
2157
+ font-size: var(--lab-t-title);
2158
+ font-weight: var(--lab-w-medium);
2159
+ color: var(--lab-fg);
2160
+ margin: var(--lab-sp-6) 0 var(--lab-sp-16);
2161
+ }
2162
+ .lang-cloze {
2163
+ font-size: var(--lab-t-lg);
2164
+ line-height: 2.4;
2165
+ font-weight: var(--lab-w-medium);
2166
+ color: var(--lab-fg);
2167
+ margin: var(--lab-sp-6) 0 var(--lab-sp-16);
2168
+ }
2169
+ .lang-cloze .lang-speak {
2170
+ vertical-align: middle;
2171
+ }
2172
+ .lang-dictation-foot {
2173
+ display: flex;
2174
+ flex-wrap: wrap;
2175
+ align-items: center;
2176
+ justify-content: flex-end;
2177
+ gap: var(--lab-sp-12);
2178
+ margin-top: var(--lab-sp-12);
2179
+ }
2180
+ .lang-dictation-card {
2181
+ width: min(100%, 32rem);
2182
+ margin-inline: auto;
2183
+ overflow: hidden;
2184
+ border: 1px solid var(--lab-border);
2185
+ border-radius: var(--lab-r-lg);
2186
+ background: var(--lab-surface);
2187
+ box-shadow: var(--lab-shadow-sm);
2188
+ }
2189
+ .lang-dictation-toolbar {
2190
+ display: flex;
2191
+ align-items: center;
2192
+ gap: var(--lab-sp-12);
2193
+ padding: var(--lab-sp-12);
2194
+ border-bottom: 1px solid var(--lab-border);
2195
+ background: var(--lab-sunken);
2196
+ }
2197
+ .lang-dictation-toolbar > span {
2198
+ color: var(--lab-muted);
2199
+ font-size: var(--lab-t-sm);
2200
+ }
2201
+ .lang-dictation-toolbar .lang-audio-action {
2202
+ flex: none;
2203
+ min-height: var(--lab-target);
2204
+ border: 1px solid var(--lab-accent-edge);
2205
+ background: var(--lab-surface);
2206
+ color: var(--lab-accent);
2207
+ box-shadow: none;
2208
+ }
2209
+ .lang-dictation-answer {
2210
+ display: grid;
2211
+ gap: var(--lab-sp-6);
2212
+ padding: var(--lab-sp-16) var(--lab-sp-16) 0;
2213
+ }
2214
+ .lang-dictation-answer > label {
2215
+ color: var(--lab-muted);
2216
+ font-size: var(--lab-t-eyebrow);
2217
+ font-weight: var(--lab-w-semibold);
2218
+ letter-spacing: var(--lab-ls-caps);
2219
+ text-transform: uppercase;
2220
+ }
2221
+ .lang-dictation-input-row {
2222
+ display: grid;
2223
+ grid-template-columns: minmax(0, 1fr) auto;
2224
+ gap: var(--lab-sp-8);
2225
+ }
2226
+ .lang-dictation-input-row .lab-input {
2227
+ width: 100%;
2228
+ min-height: var(--lab-target);
2229
+ }
2230
+ .lang-dictation-input-row .lab-btn {
2231
+ min-width: 5.5rem;
2232
+ border-radius: var(--lab-r-md);
2233
+ }
2234
+ .lang-dictation-card .lang-dictation-foot {
2235
+ padding: 0 var(--lab-sp-16) var(--lab-sp-16);
2236
+ }
2237
+ @container lab-activity (max-width: 32rem) {
2238
+ .lang-dictation-toolbar > span {
2239
+ display: none;
2240
+ }
2241
+ .lang-dictation-toolbar .lang-audio-action {
2242
+ width: 100%;
2243
+ }
2244
+ .lang-dictation-input-row {
2245
+ grid-template-columns: 1fr;
2246
+ }
2247
+ .lang-dictation-input-row .lab-btn {
2248
+ width: 100%;
2249
+ }
2250
+ }
2251
+ .lang-reveal {
2252
+ font-size: var(--lab-t-lg);
2253
+ font-weight: var(--lab-w-bold);
2254
+ letter-spacing: var(--lab-ls-caps);
2255
+ color: var(--lab-fg);
2256
+ font-variant-numeric: tabular-nums;
2257
+ }
2258
+ .lang-errsentence {
2259
+ font-size: var(--lab-t-title);
2260
+ line-height: 2;
2261
+ font-weight: var(--lab-w-medium);
2262
+ color: var(--lab-fg);
2263
+ margin: var(--lab-sp-6) 0 var(--lab-sp-12);
2264
+ }
2265
+ .lang-word {
2266
+ border: 0;
2267
+ background: transparent;
2268
+ color: inherit;
2269
+ font: inherit;
2270
+ padding: 2px var(--lab-sp-2);
2271
+ border-radius: var(--lab-r-sm);
2272
+ cursor: pointer;
2273
+ transition:
2274
+ background var(--lab-dur-fast),
2275
+ color var(--lab-dur-fast),
2276
+ transform var(--lab-dur-fast);
2277
+ }
2278
+ @media (hover: hover) and (pointer: fine) {
2279
+ .lang-word:hover:not(:disabled) {
2280
+ background: var(--lab-accent-soft);
2281
+ }
2282
+ }
2283
+ .lang-word[data-state="no"] {
2284
+ color: var(--lab-danger);
2285
+ background: var(--lab-danger-soft);
2286
+ animation: lang-shake 0.42s;
2287
+ }
2288
+ .lang-word:disabled {
2289
+ cursor: default;
2290
+ }
2291
+ .lang-fix {
2292
+ padding: 2px var(--lab-sp-8);
2293
+ border-radius: var(--lab-r-sm);
2294
+ font-weight: var(--lab-w-bold);
2295
+ color: var(--lab-good);
2296
+ background: var(--lab-good-soft);
2297
+ }
2298
+ .lang-reading {
2299
+ display: grid;
2300
+ gap: var(--lab-sp-12);
2301
+ }
2302
+ .lang-passage {
2303
+ padding: var(--lab-sp-16) var(--lab-sp-16);
2304
+ border-radius: var(--lab-r-lg);
2305
+ background: var(--lab-sunken);
2306
+ font-size: var(--lab-t-body);
2307
+ line-height: var(--lab-lh-prose);
2308
+ color: var(--lab-fg);
2309
+ max-width: 68ch;
2310
+ }
2311
+ .lang-passage p {
2312
+ margin: 0 0 var(--lab-sp-10);
2313
+ }
2314
+ .lang-passage p:last-child {
2315
+ margin-bottom: 0;
2316
+ }
2317
+ .lang-gloss {
2318
+ display: flex;
2319
+ flex-wrap: wrap;
2320
+ gap: var(--lab-sp-6) var(--lab-sp-16);
2321
+ font-size: var(--lab-t-sm);
2322
+ color: var(--lab-muted);
2323
+ }
2324
+ .lang-gloss-row b {
2325
+ color: var(--lab-fg);
2326
+ font-weight: var(--lab-w-semibold);
2327
+ }
2328
+ .lang-blank {
2329
+ display: inline-flex;
2330
+ align-items: center;
2331
+ justify-content: center;
2332
+ min-width: 52px;
2333
+ padding: 2px var(--lab-sp-12);
2334
+ border-radius: var(--lab-r-sm);
2335
+ border: 2px dashed var(--lab-border-strong);
2336
+ background: var(--lab-sunken);
2337
+ font-weight: var(--lab-w-bold);
2338
+ }
2339
+ .lang-blank[data-state="ok"] {
2340
+ border-style: solid;
2341
+ border-color: var(--lab-good);
2342
+ color: var(--lab-good);
2343
+ background: var(--lab-good-soft);
2344
+ }
2345
+ .lang-blank[data-state="no"] {
2346
+ border-style: solid;
2347
+ border-color: var(--lab-danger);
2348
+ color: var(--lab-danger);
2349
+ }
2350
+ .lang-noun,
2351
+ .lang-subject {
2352
+ font-weight: var(--lab-w-semibold);
2353
+ }
2354
+ .lang-subject[data-ok="true"] {
2355
+ color: var(--lang-pos-pronoun);
2356
+ }
2357
+ .lang-link {
2358
+ color: var(--lab-good);
2359
+ font-weight: var(--lab-w-bold);
2360
+ }
2361
+ .lang-why {
2362
+ font-size: var(--lab-t-body);
2363
+ font-weight: var(--lab-w-medium);
2364
+ margin: var(--lab-sp-12) 0 0;
2365
+ }
2366
+ .lang-why[data-state="ok"] {
2367
+ color: var(--lab-good);
2368
+ }
2369
+ .lang-why[data-state="no"] {
2370
+ color: var(--lab-muted);
2371
+ }
2372
+
2373
+ .lang-from {
2374
+ display: flex;
2375
+ flex-wrap: wrap;
2376
+ gap: var(--lab-sp-8);
2377
+ align-items: center;
2378
+ opacity: 0.85;
2379
+ }
2380
+ .lang-from .lang-tile {
2381
+ filter: saturate(0.7);
2382
+ cursor: default;
2383
+ }
2384
+ .lang-arrow {
2385
+ font-size: var(--lab-t-title);
2386
+ font-weight: var(--lab-w-bold);
2387
+ color: var(--lab-muted);
2388
+ margin: var(--lab-sp-4) 0;
2389
+ text-align: center;
2390
+ width: 100%;
2391
+ }
2392
+
2393
+ .lang-scene {
2394
+ display: flex;
2395
+ justify-content: center;
2396
+ padding: var(--lab-sp-4) 0 var(--lab-sp-10);
2397
+ }
2398
+ .lang-prepscene {
2399
+ position: relative;
2400
+ width: 240px;
2401
+ height: 172px;
2402
+ overflow: hidden;
2403
+ border-radius: var(--lab-r-md);
2404
+ border: 1px solid var(--lab-border);
2405
+ background: color-mix(in oklab, currentColor 3%, transparent);
2406
+ }
2407
+ .lang-preplandmark {
2408
+ position: absolute;
2409
+ left: var(--landmark-x, 50%);
2410
+ top: 56%;
2411
+ transform: translate(-50%, -50%);
2412
+ font-size: 62px;
2413
+ line-height: var(--lab-lh-tight);
2414
+ }
2415
+ .lang-prepfig {
2416
+ position: absolute;
2417
+ font-size: 38px;
2418
+ line-height: var(--lab-lh-tight);
2419
+ filter: drop-shadow(0 1px 1.5px color-mix(in oklab, currentColor 30%, transparent));
2420
+ }
2421
+ .lang-backdrop {
2422
+ position: absolute;
2423
+ inset: 0;
2424
+ overflow: hidden;
2425
+ }
2426
+ .lang-backdrop[data-kind="sky"] {
2427
+ background:
2428
+ radial-gradient(
2429
+ circle at 78% 18%,
2430
+ color-mix(in oklab, var(--stage-warn) 38%, transparent) 0 8%,
2431
+ transparent 9%
2432
+ ),
2433
+ linear-gradient(
2434
+ 180deg,
2435
+ color-mix(in oklab, var(--stage-accent) 24%, var(--stage-bg)),
2436
+ var(--stage-bg)
2437
+ );
2438
+ }
2439
+ .lang-backdrop[data-kind="water"] {
2440
+ top: 48%;
2441
+ border-radius: var(--lab-r-lg) var(--lab-r-lg) 0 0 / var(--lab-r-md) var(--lab-r-md) 0 0;
2442
+ background:
2443
+ repeating-linear-gradient(
2444
+ 170deg,
2445
+ transparent 0 0.8rem,
2446
+ color-mix(in oklab, white 22%, transparent) 0.85rem 0.95rem
2447
+ ),
2448
+ linear-gradient(
2449
+ 180deg,
2450
+ color-mix(in oklab, var(--stage-accent) 65%, #7fc8ff),
2451
+ color-mix(in oklab, var(--stage-accent) 80%, #174f92)
2452
+ );
2453
+ }
2454
+ .lang-backdrop[data-kind="ground"] {
2455
+ top: 68%;
2456
+ background:
2457
+ radial-gradient(
2458
+ ellipse at 20% 0,
2459
+ color-mix(in oklab, var(--stage-good) 40%, transparent) 0 28%,
2460
+ transparent 30%
2461
+ ),
2462
+ linear-gradient(
2463
+ 180deg,
2464
+ color-mix(in oklab, var(--stage-good) 58%, #9bd178),
2465
+ color-mix(in oklab, var(--stage-good) 75%, #4d7b36)
2466
+ );
2467
+ }
2468
+ .lang-backdrop[data-kind="room"] {
2469
+ background:
2470
+ linear-gradient(
2471
+ 90deg,
2472
+ transparent 49.5%,
2473
+ color-mix(in oklab, var(--stage-grid) 65%, transparent) 50%,
2474
+ transparent 50.5%
2475
+ ),
2476
+ linear-gradient(
2477
+ 180deg,
2478
+ color-mix(in oklab, var(--stage-warn) 8%, var(--stage-bg)) 0 62%,
2479
+ color-mix(in oklab, var(--stage-warn) 22%, var(--stage-bg)) 62%
2480
+ );
2481
+ }
2482
+ .lang-backdrop-sun {
2483
+ position: absolute;
2484
+ inset-block-start: var(--lab-sp-10);
2485
+ inset-inline-end: var(--lab-sp-14);
2486
+ width: 1.5rem;
2487
+ height: 1.5rem;
2488
+ color: var(--stage-warn);
2489
+ }
2490
+ .lang-feedback {
2491
+ margin-top: var(--lab-sp-12);
2492
+ }
2493
+ .lang-match[data-layout="picture"] {
2494
+ grid-template-columns: repeat(auto-fill, minmax(6.5rem, 1fr));
2495
+ }
2496
+
2497
+ .lang-typegrid {
2498
+ display: grid;
2499
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
2500
+ gap: var(--lab-sp-12);
2501
+ }
2502
+ .lang-typecard {
2503
+ border: 1px solid var(--lab-border);
2504
+ border-radius: var(--lab-r-md);
2505
+ padding: var(--lab-sp-6) var(--lab-sp-8) var(--lab-sp-10);
2506
+ background: var(--lab-surface);
2507
+ min-width: 0;
2508
+ }
2509
+ .lang-typecard svg {
2510
+ width: 100%;
2511
+ height: auto;
2512
+ max-width: 100%;
2513
+ }
2514
+ .lang-typename {
2515
+ font-weight: var(--lab-w-semibold);
2516
+ font-size: var(--lab-t-body);
2517
+ margin: var(--lab-sp-4) 0 0;
2518
+ color: var(--lab-fg);
2519
+ }
2520
+ .lang-typecap {
2521
+ font-size: var(--lab-t-eyebrow);
2522
+ color: var(--lab-muted);
2523
+ margin: 1px 0 0;
2524
+ }
2525
+
2526
+ /* ═══════════════════════════════════════════════════════════════════════════
2527
+ ANIMATIONS
2528
+ ═══════════════════════════════════════════════════════════════════════════ */
2529
+ /* river current — wave streaks drift downstream */
2530
+ .lab-river-wave {
2531
+ animation-name: stage-river-drift;
2532
+ animation-timing-function: linear;
2533
+ animation-iteration-count: infinite;
2534
+ will-change: transform;
2535
+ }
2536
+ @keyframes stage-river-drift {
2537
+ from {
2538
+ transform: translateX(0);
2539
+ }
2540
+ to {
2541
+ transform: translateX(28px);
2542
+ }
2543
+ }
2544
+ /* annotation kit — a Spotlight ring pulses outward to draw the eye */
2545
+ .lab-pulse {
2546
+ animation: lab-pulse 1.5s var(--lab-ease) infinite;
2547
+ }
2548
+ @keyframes lab-pulse {
2549
+ 0% {
2550
+ transform: scale(0.55);
2551
+ opacity: 0.75;
2552
+ }
2553
+ 100% {
2554
+ transform: scale(1.9);
2555
+ opacity: 0;
2556
+ }
2557
+ }
2558
+ /* ═════════════════════════════════════════════════════════════════════════
2559
+ CELEBRATION + PREDICT-GATE + LESSON PROGRESS (engagement kit)
2560
+ ═════════════════════════════════════════════════════════════════════════ */
2561
+ /* celebrate — one-shot confetti burst anchored to the success pill */
2562
+ .lab-celebrate {
2563
+ position: relative;
2564
+ display: inline-flex;
2565
+ }
2566
+ .lab-confetti {
2567
+ position: absolute;
2568
+ left: 50%;
2569
+ top: 50%;
2570
+ width: 0;
2571
+ height: 0;
2572
+ pointer-events: none;
2573
+ z-index: var(--lab-z-overlay);
2574
+ }
2575
+ .lab-confetti span {
2576
+ position: absolute;
2577
+ left: -3px;
2578
+ top: -3px;
2579
+ width: 7px;
2580
+ height: 7px;
2581
+ border-radius: 2px;
2582
+ background: var(--c, var(--lab-accent));
2583
+ opacity: 0;
2584
+ animation: lab-confetti-fly 0.8s var(--lab-ease) forwards;
2585
+ will-change: transform, opacity;
2586
+ }
2587
+ @keyframes lab-confetti-fly {
2588
+ 0% {
2589
+ opacity: 1;
2590
+ transform: translate(0, 0) rotate(0) scale(1);
2591
+ }
2592
+ 70% {
2593
+ opacity: 1;
2594
+ }
2595
+ 100% {
2596
+ opacity: 0;
2597
+ transform: translate(var(--dx), var(--dy)) rotate(var(--rot)) scale(0.6);
2598
+ }
2599
+ }
2600
+ .lab-pop {
2601
+ animation: lab-pop var(--lab-dur-slow) var(--lab-ease-spring);
2602
+ }
2603
+ @keyframes lab-pop {
2604
+ 0% {
2605
+ transform: scale(0.82);
2606
+ }
2607
+ 60% {
2608
+ transform: scale(1.08);
2609
+ }
2610
+ 100% {
2611
+ transform: scale(1);
2612
+ }
2613
+ }
2614
+ /* value flash — a readout/stat value pops accent when it changes, so the
2615
+ learner SEES which number their drag is driving (cause → effect) */
2616
+ .lab-val-flash {
2617
+ animation: lab-val-flash 0.5s var(--lab-ease);
2618
+ }
2619
+ @keyframes lab-val-flash {
2620
+ 0% {
2621
+ color: var(--lab-accent);
2622
+ }
2623
+ 100% {
2624
+ color: inherit;
2625
+ }
2626
+ }
2627
+ /* predict-gate — show an intentional preview state without mounting or leaking
2628
+ the model that the prediction is meant to precede. */
2629
+ .lab-predict-gate {
2630
+ display: flex;
2631
+ flex-direction: column;
2632
+ gap: var(--lab-sp-12);
2633
+ }
2634
+ .lab-predict-body {
2635
+ min-width: 0;
2636
+ }
2637
+ .lab-predict-lock {
2638
+ display: grid;
2639
+ grid-template-columns: auto 1fr;
2640
+ align-items: center;
2641
+ justify-content: center;
2642
+ gap: 2px var(--lab-sp-14);
2643
+ /* Sized to the one line it holds. It was 8-13rem of empty dashed panel, which nobody had seen
2644
+ because no lab used PredictGate: on the first adopter it became the largest thing on the
2645
+ opening screen, under the choice it is asking the learner to make. */
2646
+ min-height: clamp(4.5rem, 12cqw, 6.5rem);
2647
+ padding: var(--lab-sp-16);
2648
+ border: 1px dashed var(--lab-border-strong);
2649
+ border-radius: var(--lab-r-lg);
2650
+ color: var(--lab-fg);
2651
+ background: color-mix(in oklab, var(--lab-muted) 4%, var(--lab-surface));
2652
+ }
2653
+ .lab-predict-lock-mark {
2654
+ grid-row: 1 / span 2;
2655
+ display: inline-grid;
2656
+ place-items: center;
2657
+ width: 2.25rem;
2658
+ height: 2.25rem;
2659
+ border-radius: var(--lab-r-pill);
2660
+ color: var(--lab-accent);
2661
+ background: var(--lab-accent-soft);
2662
+ font-weight: var(--lab-w-bold);
2663
+ }
2664
+ .lab-predict-lock strong {
2665
+ align-self: end;
2666
+ font-size: var(--lab-t-body);
2667
+ }
2668
+ .lab-predict-lock > span:last-child {
2669
+ align-self: start;
2670
+ color: var(--lab-muted);
2671
+ font-size: var(--lab-t-sm);
2672
+ line-height: var(--lab-lh-ui);
2673
+ }
2674
+ /* ── Networking: vendor-neutral topology, packet layers, and accessible transcript ── */
2675
+ .lab-activity {
2676
+ display: flex;
2677
+ flex-direction: column;
2678
+ container: lab-activity / inline-size;
2679
+ overflow: hidden;
2680
+ border: 1px solid var(--border, var(--stage-grid));
2681
+ border-radius: var(--lab-r-lg);
2682
+ background: var(--background, var(--stage-bg));
2683
+ color: var(--foreground, var(--stage-fg));
2684
+ box-shadow:
2685
+ 0 1px 2px color-mix(in oklab, currentColor 5%, transparent),
2686
+ 0 8px 24px color-mix(in oklab, currentColor 3%, transparent);
2687
+ }
2688
+ .lab-activity[data-focus] {
2689
+ box-sizing: border-box;
2690
+ width: 100%;
2691
+ max-width: 100dvw;
2692
+ overflow: auto;
2693
+ overflow-x: hidden;
2694
+ min-height: 100dvh;
2695
+ border: 0;
2696
+ border-radius: 0;
2697
+ padding: clamp(0.75rem, 2vw, 1.5rem);
2698
+ background: var(--background, var(--stage-bg));
2699
+ }
2700
+ .lab-activity[data-focus]:not(:fullscreen) {
2701
+ position: fixed;
2702
+ inset: 0;
2703
+ z-index: var(--lab-z-top);
2704
+ }
2705
+ .lab-activity[data-focus] > *,
2706
+ .lab-activity[data-focus] .lab-activity-workspace,
2707
+ .lab-activity[data-focus] .lab-activity-canvas {
2708
+ min-width: 0;
2709
+ max-width: 100%;
2710
+ }
2711
+ .lab-activity[data-focus] > * {
2712
+ width: min(100%, 100rem);
2713
+ margin-inline: auto;
2714
+ }
2715
+ .lab-activity[data-focus][data-focus-layout="compact"] > * {
2716
+ width: min(100%, 68rem);
2717
+ }
2718
+ .lab-activity[data-focus][data-focus-layout="immersive"] .lab-scene-viewport {
2719
+ height: clamp(22rem, 58dvh, 42rem);
2720
+ }
2721
+ @media (min-width: 64rem) {
2722
+ .lab-activity[data-focus][data-focus-layout="compact"]
2723
+ .lab-activity-workspace:has(> .lab-activity-inspector) {
2724
+ grid-template-columns: minmax(0, 1fr) minmax(19rem, 24rem);
2725
+ align-items: stretch;
2726
+ }
2727
+ .lab-activity[data-focus][data-focus-layout="compact"]
2728
+ .lab-activity-workspace
2729
+ > .lab-activity-inspector {
2730
+ min-width: 0;
2731
+ border-inline-start: 1px solid var(--border, var(--stage-grid));
2732
+ }
2733
+ }
2734
+ @media (max-width: 48rem) {
2735
+ .lab-activity[data-focus] {
2736
+ padding: 0;
2737
+ }
2738
+ .lab-activity[data-focus][data-focus-layout="immersive"] .lab-scene-viewport,
2739
+ .lab-activity[data-focus][data-focus-layout="immersive"] .lab-scene-viewport[data-size] {
2740
+ height: clamp(15rem, 72vw, 22rem);
2741
+ }
2742
+ }
2743
+ .lab-activity-header {
2744
+ display: flex;
2745
+ align-items: flex-start;
2746
+ justify-content: space-between;
2747
+ gap: var(--lab-sp-12);
2748
+ padding: var(--lab-sp-12) var(--lab-sp-16) var(--lab-sp-10);
2749
+ }
2750
+ .lab-activity-heading {
2751
+ min-width: 0;
2752
+ }
2753
+ .lab-activity-eyebrow {
2754
+ display: block;
2755
+ margin-bottom: var(--lab-sp-4);
2756
+ color: var(--primary, var(--stage-accent));
2757
+ font-size: var(--lab-t-eyebrow);
2758
+ font-weight: var(--lab-w-bold);
2759
+ letter-spacing: var(--lab-ls-caps);
2760
+ text-transform: uppercase;
2761
+ }
2762
+ /* The one thing allowed to be a heading. Capped at 20px it matched the step lead and the readout
2763
+ values, so a learner met no hierarchy at all. Scales with the column: phone to full width. */
2764
+ .lab-activity-heading h3 {
2765
+ margin: 0;
2766
+ font-size: clamp(1.25rem, 2.4cqi, 1.75rem);
2767
+ font-weight: var(--lab-w-bold);
2768
+ line-height: var(--lab-lh-title);
2769
+ letter-spacing: var(--lab-ls-tight);
2770
+ text-wrap: balance;
2771
+ }
2772
+ /* Read, not scanned, so reading size on reading leading. It was 14px: a control-label size. */
2773
+ .lab-activity-description {
2774
+ margin: var(--lab-sp-4) 0 0;
2775
+ max-width: 42rem;
2776
+ color: var(--muted-foreground, var(--stage-muted));
2777
+ font-size: var(--lab-t-sm);
2778
+ line-height: var(--lab-lh-ui);
2779
+ text-wrap: pretty;
2780
+ }
2781
+ .lab-activity-focus {
2782
+ display: inline-flex;
2783
+ flex: none;
2784
+ align-items: center;
2785
+ gap: var(--lab-sp-6);
2786
+ min-width: var(--lab-target);
2787
+ min-height: var(--lab-target-compact);
2788
+ padding: var(--lab-sp-4) var(--lab-sp-8);
2789
+ border: 1px solid var(--border, var(--stage-grid));
2790
+ border-radius: var(--lab-r-sm);
2791
+ background: var(--background, var(--stage-bg));
2792
+ color: var(--foreground, var(--stage-fg));
2793
+ font: inherit;
2794
+ font-size: var(--lab-t-eyebrow);
2795
+ font-weight: var(--lab-w-semibold);
2796
+ cursor: pointer;
2797
+ }
2798
+ @media (hover: hover) and (pointer: fine) {
2799
+ .lab-activity-focus:hover {
2800
+ background: var(--accent, color-mix(in oklab, currentColor 6%, transparent));
2801
+ }
2802
+ }
2803
+ .lab-activity-focus svg {
2804
+ width: 1rem;
2805
+ height: 1rem;
2806
+ fill: none;
2807
+ stroke: currentColor;
2808
+ stroke-width: 1.8;
2809
+ stroke-linecap: round;
2810
+ stroke-linejoin: round;
2811
+ }
2812
+ .lab-activity-status {
2813
+ display: flex;
2814
+ align-items: center;
2815
+ gap: var(--lab-sp-10);
2816
+ min-width: 0;
2817
+ font-variant-numeric: tabular-nums;
2818
+ padding: var(--lab-sp-10) var(--lab-sp-16);
2819
+ border-block: 1px solid var(--border, var(--stage-grid));
2820
+ background: color-mix(
2821
+ in oklab,
2822
+ var(--muted, currentColor) 52%,
2823
+ var(--background, var(--stage-bg))
2824
+ );
2825
+ font-size: var(--lab-t-eyebrow);
2826
+ }
2827
+ .lab-activity-status > * + * {
2828
+ padding-inline-start: var(--lab-sp-10);
2829
+ border-inline-start: 1px solid var(--border, var(--stage-grid));
2830
+ }
2831
+ /* The line of readings inside the strip: "Pendulum · x 12 cm · T 2.84 s · f 0.35 Hz".
2832
+
2833
+ WRAPPING IS THE POINT. This was written out as an identical inline style in seven labs, and none
2834
+ of them said what should happen when the readings are wider than the card. A flex item's minimum
2835
+ width is its content, so the line could not shrink: it ran off the right edge of the lab and the
2836
+ card's own `overflow: hidden` cut the last reading in half. Three labs were losing a word each
2837
+ ("Copper", "proportional", "f 0.35 Hz") and the rest were one longer material name away from it.
2838
+
2839
+ A reading is a whole unit, so `wrap` breaks between readings and never inside one. The strip
2840
+ grows a line instead of swallowing a value.
2841
+
2842
+ The copies also set a 13px font size, which is not on the type scale and never was: it was
2843
+ reachable only because an inline style outranks the stylesheet. `.lab-activity-status` already
2844
+ declares the size this strip is meant to be, so the line simply inherits it now. The gap and the
2845
+ weight were on the scale all along and keep their exact values. */
2846
+ .lab-status-line {
2847
+ display: inline-flex;
2848
+ flex-wrap: wrap;
2849
+ align-items: center;
2850
+ gap: var(--lab-sp-8);
2851
+ min-width: 0;
2852
+ font-weight: var(--lab-w-semibold);
2853
+ }
2854
+ /* A measurement the learner has not earned yet. It holds its slot so the strip keeps its shape
2855
+ when the number arrives, and reads as clearly absent rather than as a value of zero. */
2856
+ .lab-activity-measured-pending {
2857
+ color: var(--lab-muted);
2858
+ opacity: 0.55;
2859
+ }
2860
+ .lab-activity-workspace {
2861
+ display: grid;
2862
+ gap: var(--lab-sp-12);
2863
+ padding: var(--lab-sp-12);
2864
+ }
2865
+ .lab-activity[data-inspector-layout="stacked"] .lab-activity-workspace {
2866
+ grid-template-columns: minmax(0, 1fr);
2867
+ }
2868
+ .lab-activity[data-inspector-layout="stacked"] .lab-activity-workspace > .lab-activity-inspector {
2869
+ border: 1px solid var(--border, var(--stage-grid));
2870
+ border-radius: var(--lab-r-md);
2871
+ background: var(--card, var(--stage-bg));
2872
+ }
2873
+ .lab-activity-canvas {
2874
+ display: grid;
2875
+ gap: var(--lab-sp-10);
2876
+ min-width: 0;
2877
+ align-content: start;
2878
+ isolation: isolate;
2879
+ /* Keep touch-sized wide figures reachable on narrow screens. */
2880
+ overflow-x: auto;
2881
+ overscroll-behavior-x: contain;
2882
+ }
2883
+ .lab-activity-dock {
2884
+ min-width: 0;
2885
+ }
2886
+ .lab-activity-feedback {
2887
+ display: grid;
2888
+ /* minmax(0, 1fr), not 1fr: a grid track is at least min-content wide by default, so the longest
2889
+ word in the sentence set a floor the callout could not go below and it overhung the card on a
2890
+ phone. Below 22rem the label stops sharing the row with the sentence. */
2891
+ grid-template-columns: minmax(5.5rem, auto) minmax(0, 1fr);
2892
+ align-items: baseline;
2893
+ gap: var(--lab-sp-10);
2894
+ margin: 0 var(--lab-sp-12) var(--lab-sp-12);
2895
+ /* The callout is inset from a full-bleed column, so it stretches to the column and its own
2896
+ margins then hang over the edge. Cap it at the room its margins leave. */
2897
+ max-width: calc(100% - 2 * var(--lab-sp-12));
2898
+ padding: var(--lab-sp-10) var(--lab-sp-12);
2899
+ border: 0;
2900
+ border-inline-start: 3px solid var(--primary, var(--stage-accent));
2901
+ border-start-start-radius: 0.2rem;
2902
+ border-end-start-radius: 0.2rem;
2903
+ border-start-end-radius: 0.65rem;
2904
+ border-end-end-radius: 0.65rem;
2905
+ background: color-mix(
2906
+ in oklab,
2907
+ var(--primary, var(--stage-accent)) 2.5%,
2908
+ var(--card, var(--stage-bg))
2909
+ );
2910
+ }
2911
+ /* The step's task sits in the flow above the figure — no second tinted bar under the
2912
+ status strip. The lead IS the question the learner is answering, so it reads as body
2913
+ text in the foreground colour, not as muted fine print. */
2914
+ .lab-authored-task {
2915
+ display: grid;
2916
+ gap: var(--lab-sp-8);
2917
+ padding: var(--lab-sp-10) var(--lab-sp-16);
2918
+ border-top: 1px solid var(--border, var(--stage-grid));
2919
+ }
2920
+ /* An authored question is already a semantic section of Activity. Its challenge
2921
+ must not draw a second card inside that section: one boundary, one prompt,
2922
+ one response row. Standalone ChallengeCard instances retain their card. */
2923
+ .lab-authored-task > .lab-challenge {
2924
+ padding: 0;
2925
+ border: 0;
2926
+ border-radius: 0;
2927
+ box-shadow: none;
2928
+ background: transparent;
2929
+ }
2930
+ .lab-authored-task-lead {
2931
+ margin: 0;
2932
+ max-width: 62ch;
2933
+ color: var(--foreground, var(--stage-fg));
2934
+ font-size: var(--lab-t-sm);
2935
+ font-weight: var(--lab-w-medium);
2936
+ line-height: var(--lab-lh-ui);
2937
+ text-wrap: pretty;
2938
+ }
2939
+ /* The instruction standing alone over the model, rather than heading a stack of answer rows. It
2940
+ carries the padding the task section used to give it, and no rule of its own: it reads as a
2941
+ caption on the figure below, not as another band. */
2942
+ .lab-authored-lead-solo {
2943
+ padding: var(--lab-sp-10) var(--lab-sp-16) var(--lab-sp-4);
2944
+ font-size: var(--lab-t-sm);
2945
+ }
2946
+ @container lab-activity (max-width: 22rem) {
2947
+ .lab-activity-feedback {
2948
+ grid-template-columns: minmax(0, 1fr);
2949
+ }
2950
+ }
2951
+ .lab-activity-feedback > span:first-child {
2952
+ color: var(--primary, var(--stage-accent));
2953
+ font-size: var(--lab-t-eyebrow);
2954
+ font-weight: var(--lab-w-bold);
2955
+ letter-spacing: var(--lab-ls-caps);
2956
+ text-transform: uppercase;
2957
+ }
2958
+ .lab-activity-feedback > div,
2959
+ .lab-activity-feedback p {
2960
+ margin: 0;
2961
+ font-size: var(--lab-t-sm);
2962
+ line-height: var(--lab-lh-ui);
2963
+ }
2964
+ .lab-activity-inspector {
2965
+ overflow: hidden;
2966
+ border: 1px solid var(--border, var(--stage-grid));
2967
+ border-radius: var(--lab-r-md);
2968
+ background: var(--card, var(--stage-bg));
2969
+ }
2970
+ .lab-activity-inspector > summary {
2971
+ display: none;
2972
+ cursor: pointer;
2973
+ padding: var(--lab-sp-12) var(--lab-sp-12);
2974
+ min-height: var(--lab-target);
2975
+ font-size: var(--lab-t-sm);
2976
+ font-weight: var(--lab-w-semibold);
2977
+ }
2978
+ .lab-activity-inspector-body {
2979
+ min-width: 0;
2980
+ }
2981
+ .lab-activity-inspector-section {
2982
+ display: grid;
2983
+ gap: var(--lab-sp-16);
2984
+ padding: var(--lab-sp-16);
2985
+ }
2986
+ .lab-activity-fields {
2987
+ display: flex;
2988
+ flex-wrap: wrap;
2989
+ align-items: end;
2990
+ gap: var(--lab-sp-10);
2991
+ }
2992
+
2993
+ /* Every control gets a real basis. Without one a Field falls back to its content width, and a
2994
+ Field holding a Slider has almost no content width (the Slider is a div, not an input), so a
2995
+ chip group beside it took the whole row and squeezed the slider to its 60px floor. `:has` also
2996
+ covers labs that wrap their Fields in a plain <div>, which a `>` selector would miss. */
2997
+ .lab-activity-fields:not(.lab-authored-controls) > :is(.lab-field, :has(> .lab-field)) {
2998
+ flex: 1 1 15rem;
2999
+ /* `fit-content`, not 0: a field never shrinks below what it actually has to draw. A segmented
3000
+ track used to overflow its share and run under the next control's label, and the slider
3001
+ beside it collapsed to a ~40px stub. Now the row wraps instead, which it already allows.
3002
+ (This cannot be scoped to chip rows with `:has`: CSS forbids `:has()` inside `:has()`, so
3003
+ such a rule is invalid and silently dropped.) */
3004
+ min-width: fit-content;
3005
+ }
3006
+ @media (max-width: 30rem) {
3007
+ /* One control per line at phone widths: let them shrink again rather than scroll the page. */
3008
+ .lab-activity-fields > :is(.lab-field, :has(> .lab-field)) {
3009
+ min-width: 0;
3010
+ }
3011
+ }
3012
+ /* ── Bench panel ───────────────────────────────────────────────────────────────
3013
+ Instruments as equipment BESIDE the diagram, never objects inside it (rationale in
3014
+ src/kit/instruments.tsx). Layout ONLY: no border, radius or fill, because rule 1 is one bordered
3015
+ container per lab and the dock hairline already delimits this. The instruments carry their own
3016
+ depth, so they read as objects on the card rather than needing a box drawn round them. */
3017
+ .lab-bench {
3018
+ display: flex;
3019
+ flex-wrap: wrap;
3020
+ align-items: flex-end;
3021
+ gap: var(--lab-sp-20);
3022
+ padding-block: var(--lab-sp-8);
3023
+ }
3024
+ .lab-bench > .lab-field {
3025
+ flex: 0 0 auto;
3026
+ }
3027
+ /* The panel is a BAND: sized to content it wraps its own children onto stray rows. */
3028
+ .lab-activity-fields > .lab-bench {
3029
+ flex: 1 1 100%;
3030
+ }
3031
+ .lab-bench .lab-field-row {
3032
+ align-items: center;
3033
+ gap: var(--lab-sp-8);
3034
+ }
3035
+ .lab-bench .lab-field-val {
3036
+ min-width: 0;
3037
+ }
3038
+ .lab-bench-meter {
3039
+ flex: 0 0 auto;
3040
+ display: flex;
3041
+ align-items: center;
3042
+ }
3043
+
3044
+ /* ── Authored lesson shell ──────────────────────────────────────────────────────
3045
+ One scene-first container. The model is the hero, its controls form a compact dock,
3046
+ and explanatory evidence stays contextual until the learner asks for it. */
3047
+ .lab-authored-activity[data-inspector-layout="stacked"] .lab-activity-workspace {
3048
+ gap: 0;
3049
+ padding: var(--lab-sp-12) 0 0;
3050
+ }
3051
+ .lab-authored-activity[data-inspector-layout="stacked"] .lab-activity-canvas {
3052
+ padding: 0 var(--lab-sp-12) var(--lab-sp-12);
3053
+ }
3054
+ .lab-authored-activity .lab-activity-dock {
3055
+ border-top: 1px solid color-mix(in oklab, var(--border, var(--stage-grid)) 70%, transparent);
3056
+ background: color-mix(
3057
+ in oklab,
3058
+ var(--muted, currentColor) 28%,
3059
+ var(--background, var(--stage-bg))
3060
+ );
3061
+ }
3062
+ .lab-authored-activity[data-inspector-layout="stacked"]
3063
+ .lab-activity-workspace
3064
+ > .lab-activity-inspector {
3065
+ border: 0;
3066
+ border-top: 1px solid var(--border, var(--stage-grid));
3067
+ border-radius: 0;
3068
+ background: transparent;
3069
+ }
3070
+ .lab-authored-activity .lab-activity-inspector > summary {
3071
+ display: list-item;
3072
+ padding-inline: var(--lab-sp-16);
3073
+ color: var(--muted-foreground, var(--stage-muted));
3074
+ }
3075
+ .lab-authored-activity .lab-activity-inspector[open] > summary {
3076
+ border-bottom: 1px solid color-mix(in oklab, var(--border, var(--stage-grid)) 70%, transparent);
3077
+ color: var(--foreground, var(--stage-fg));
3078
+ }
3079
+ .lab-authored-evidence {
3080
+ display: grid;
3081
+ gap: var(--lab-sp-10) var(--lab-sp-24);
3082
+ padding: var(--lab-sp-14) var(--lab-sp-16);
3083
+ }
3084
+ .lab-authored-evidence > .lab-evidence-surface,
3085
+ .lab-authored-evidence > .lab-metric-list {
3086
+ padding: 0;
3087
+ border: 0;
3088
+ border-radius: 0;
3089
+ box-shadow: none;
3090
+ background: transparent;
3091
+ }
3092
+ .lab-authored-evidence > .lab-metric-list > div {
3093
+ padding-inline: 0;
3094
+ }
3095
+ .lab-authored-evidence .lab-readout-val {
3096
+ font-size: clamp(1.4rem, 2.6cqi, 1.75rem);
3097
+ }
3098
+ .lab-authored-evidence > p {
3099
+ grid-column: 1 / -1;
3100
+ margin: 0;
3101
+ max-width: 62ch;
3102
+ color: var(--muted-foreground, var(--stage-muted));
3103
+ font-size: var(--lab-t-eyebrow);
3104
+ line-height: var(--lab-lh-prose);
3105
+ }
3106
+ .lab-authored-controls {
3107
+ display: grid;
3108
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
3109
+ align-items: end;
3110
+ gap: var(--lab-sp-14) var(--lab-sp-20);
3111
+ padding: var(--lab-sp-12) var(--lab-sp-16);
3112
+ }
3113
+ .lab-authored-controls > .lab-field {
3114
+ width: 100%;
3115
+ }
3116
+ /* The dock is a GRID, so an item wider than its column does not wrap, it runs over the next
3117
+ column: a four-option segmented track printed its last option under the control beside it.
3118
+ Grid items default to min-width: auto, so they must be told they may shrink; a segmented track
3119
+ scrolls in the space it gets (see .lab-segmented) rather than overflowing. The fit-content rule
3120
+ above stays for the FLEX row, where an oversized control wraps to the next line instead. */
3121
+ .lab-authored-controls > * {
3122
+ min-width: 0;
3123
+ }
3124
+ .lab-authored-controls > .physics-simulation-actions {
3125
+ grid-column: 1 / -1;
3126
+ }
3127
+ @container lab-activity (min-width: 46rem) {
3128
+ .lab-authored-evidence:has(> .lab-evidence-surface + .lab-evidence-surface),
3129
+ .lab-authored-evidence:has(> .lab-evidence-surface + .lab-metric-list) {
3130
+ grid-template-columns: minmax(13rem, 2fr) minmax(0, 3fr);
3131
+ align-items: start;
3132
+ }
3133
+ .lab-authored-evidence > .lab-evidence-surface + .lab-evidence-surface,
3134
+ .lab-authored-evidence > .lab-evidence-surface + .lab-metric-list {
3135
+ padding-inline-start: var(--lab-sp-24);
3136
+ border-inline-start: 1px solid
3137
+ color-mix(in oklab, var(--border, var(--stage-grid)) 70%, transparent);
3138
+ }
3139
+ }
3140
+ .lab-authored-transcript + .lab-authored-support {
3141
+ margin-top: var(--lab-sp-12);
3142
+ padding-top: var(--lab-sp-12);
3143
+ border-top: 1px solid color-mix(in oklab, var(--border, var(--stage-grid)) 70%, transparent);
3144
+ }
3145
+
3146
+ /* Mechanic-specific authored shells. They preserve the shared sequence and access behavior while
3147
+ making the scientific object, not repeated chrome, the first phone viewport. Existing labs keep
3148
+ `standard`; new flagships opt into one of these modes deliberately. */
3149
+ .lab-authored-activity[data-presentation]:not([data-presentation="standard"]) .lab-activity-status {
3150
+ padding-block: var(--lab-sp-6);
3151
+ background: transparent;
3152
+ border-bottom: 0;
3153
+ }
3154
+ .lab-authored-activity[data-presentation]:not([data-presentation="standard"])
3155
+ .lab-authored-lead-solo {
3156
+ padding-block: var(--lab-sp-8) var(--lab-sp-4);
3157
+ font-size: var(--lab-t-sm);
3158
+ }
3159
+ .lab-authored-activity[data-presentation]:not([data-presentation="standard"])
3160
+ .lab-activity-heading
3161
+ h3 {
3162
+ font-size: clamp(1.25rem, 5.5cqi, 1.65rem);
3163
+ line-height: var(--lab-lh-title);
3164
+ }
3165
+ .lab-authored-activity[data-presentation="observation"] .lab-activity-workspace {
3166
+ padding-top: var(--lab-sp-6);
3167
+ }
3168
+ .lab-authored-activity[data-presentation="construction"] .lab-activity-dock {
3169
+ position: sticky;
3170
+ bottom: 0;
3171
+ z-index: var(--lab-z-raised);
3172
+ }
3173
+ .lab-authored-activity[data-presentation="investigation"] .lab-activity-inspector,
3174
+ .lab-authored-activity[data-presentation="diagnosis"] .lab-activity-inspector {
3175
+ border-top-style: dashed;
3176
+ }
3177
+ @container lab-activity (max-width: 30rem) {
3178
+ .lab-authored-activity[data-presentation]:not([data-presentation="standard"])
3179
+ .lab-activity-header {
3180
+ padding: var(--lab-sp-10) var(--lab-sp-12) var(--lab-sp-6);
3181
+ }
3182
+ .lab-authored-activity[data-presentation]:not([data-presentation="standard"])
3183
+ .lab-activity-description {
3184
+ margin-top: 0;
3185
+ font-size: var(--lab-t-sm);
3186
+ line-height: var(--lab-lh-ui);
3187
+ }
3188
+ .lab-authored-activity[data-presentation]:not([data-presentation="standard"])
3189
+ .lab-activity-status {
3190
+ padding-inline: var(--lab-sp-12);
3191
+ }
3192
+ .lab-authored-activity[data-presentation]:not([data-presentation="standard"])
3193
+ .lab-authored-lead-solo {
3194
+ padding-inline: var(--lab-sp-12);
3195
+ }
3196
+ }
3197
+ /* Segmented control: a labelled row of mutually-exclusive options as ONE compact control (an
3198
+ iOS-style track), not a column of full-width buttons. Reusable for any 2–4 option mode toggle. */
3199
+ .lab-segmented-field {
3200
+ display: grid;
3201
+ gap: var(--lab-sp-4);
3202
+ }
3203
+ .lab-segmented-field > .lab-field-label {
3204
+ font-size: var(--lab-t-eyebrow, 0.68rem);
3205
+ font-weight: var(--lab-w-semibold);
3206
+ letter-spacing: var(--lab-ls-caps);
3207
+ text-transform: uppercase;
3208
+ color: var(--muted-foreground, var(--stage-muted));
3209
+ }
3210
+ .lab-segmented {
3211
+ display: inline-flex;
3212
+ /* WRAP, do not hide. A four-option track in a narrow dock used to scroll, which
3213
+ left the last mode off-screen with no affordance saying it existed: the
3214
+ learner cannot choose what they cannot see. Wrapping keeps every mode
3215
+ visible; the scroll below is the last resort for one option too wide to fit. */
3216
+ flex-wrap: wrap;
3217
+ gap: var(--lab-sp-2);
3218
+ padding: var(--lab-sp-2);
3219
+ border-radius: var(--lab-r-sm, 6px);
3220
+ background: color-mix(in oklab, var(--stage-fg) 6%, transparent);
3221
+ border: 1px solid color-mix(in oklab, var(--lab-border) 60%, transparent);
3222
+ width: fit-content;
3223
+ max-width: 100%;
3224
+ /* The phone rule above lets a field shrink to avoid scrolling the page, but a segmented track
3225
+ cannot shrink: its options are `nowrap` and `flex: 0 0 auto`. Measured on a 360px screen the
3226
+ track held 813px of options inside a 6px box, so every mode but the first was unreachable and
3227
+ the lab could not be operated at all. Scrolling the track is the standard behaviour for this
3228
+ control and keeps the page itself still. */
3229
+ overflow-x: auto;
3230
+ overscroll-behavior-x: contain;
3231
+ scrollbar-width: thin;
3232
+ }
3233
+ .lab-segmented > * {
3234
+ flex: 0 0 auto;
3235
+ white-space: nowrap;
3236
+ }
3237
+ .lab-activity-select-field {
3238
+ display: grid;
3239
+ min-width: min(100%, 15rem);
3240
+ gap: var(--lab-sp-4);
3241
+ }
3242
+ .lab-activity-select-field > .lab-field-label {
3243
+ color: var(--muted-foreground, var(--stage-muted));
3244
+ font-size: var(--lab-t-eyebrow, 0.68rem);
3245
+ font-weight: var(--lab-w-semibold);
3246
+ letter-spacing: var(--lab-ls-caps);
3247
+ text-transform: uppercase;
3248
+ }
3249
+ .lab-activity-select {
3250
+ width: 100%;
3251
+ min-width: 0;
3252
+ }
3253
+ /* One option inside the track, rendered by `Segmented` on the host's ToggleGroup. A track stays
3254
+ on one line; the field's `min-width: fit-content` keeps room for it, so a cramped row wraps the
3255
+ whole field onto the next line rather than clipping a label. */
3256
+ .lab-segment {
3257
+ flex: 0 0 auto;
3258
+ min-height: var(--lab-target-compact);
3259
+ padding: var(--lab-sp-2) var(--lab-sp-10);
3260
+ border: 1px solid transparent;
3261
+ border-radius: calc(var(--lab-r-sm, 6px) - 1px);
3262
+ background: transparent;
3263
+ box-shadow: none;
3264
+ color: var(--lab-muted);
3265
+ font-size: var(--lab-t-sm);
3266
+ font-weight: var(--lab-w-medium, 500);
3267
+ white-space: nowrap;
3268
+ /* Named properties, not `all`. A blanket transition animates layout and paint together, so a
3269
+ width change that should be instant crossfades instead, and it is the reason the motion tokens
3270
+ exist: one duration and one easing for everything that moves. */
3271
+ transition:
3272
+ background var(--lab-dur-fast) var(--lab-ease),
3273
+ color var(--lab-dur-fast) var(--lab-ease),
3274
+ box-shadow var(--lab-dur-fast) var(--lab-ease);
3275
+ }
3276
+ @media (hover: hover) and (pointer: fine) {
3277
+ .lab-segment:hover:not([data-sel="true"]) {
3278
+ background: color-mix(in oklab, var(--stage-fg) 5%, transparent);
3279
+ color: var(--lab-fg);
3280
+ }
3281
+ }
3282
+ .lab-segment[data-sel="true"] {
3283
+ background: var(--lab-surface);
3284
+ color: var(--lab-fg);
3285
+ box-shadow: 0 1px 2px color-mix(in oklab, currentColor 8%, transparent);
3286
+ font-weight: var(--lab-w-semibold, 600);
3287
+ }
3288
+ .lab-segment:disabled {
3289
+ opacity: 0.45;
3290
+ pointer-events: none;
3291
+ }
3292
+ .lab-activity-transport {
3293
+ display: grid;
3294
+ /* The middle column must be able to SHRINK: with an 8rem floor the three columns could not fit
3295
+ a 360px phone, so the transport pushed its own row wider than the card. Its content is a short
3296
+ status line, which wraps. */
3297
+ grid-template-columns: auto minmax(0, 18rem) auto;
3298
+ align-items: center;
3299
+ justify-content: center;
3300
+ gap: var(--lab-sp-8);
3301
+ padding: var(--lab-sp-6) var(--lab-sp-10);
3302
+ border-top: 1px solid var(--border, var(--stage-grid));
3303
+ background: var(--card, var(--stage-bg));
3304
+ }
3305
+ .lab-icon-button svg {
3306
+ width: 1rem;
3307
+ height: 1rem;
3308
+ stroke-width: 1.8;
3309
+ }
3310
+ /* The transport's middle slot. This is shell, not a subject: it lived in the maths sheet, so every
3311
+ other subject rendered it unstyled, and a long status word ("Photosynthesising") could not shrink
3312
+ inside its flex row and pushed the transport past the card. */
3313
+ .lab-transport-state {
3314
+ display: flex;
3315
+ flex-wrap: wrap;
3316
+ min-width: 0;
3317
+ align-items: baseline;
3318
+ justify-content: center;
3319
+ gap: var(--lab-sp-8);
3320
+ font-size: var(--lab-t-eyebrow);
3321
+ font-variant-numeric: tabular-nums;
3322
+ overflow-wrap: anywhere;
3323
+ }
3324
+ .lab-transport-state strong {
3325
+ font-size: var(--lab-t-eyebrow);
3326
+ line-height: var(--lab-lh-ui);
3327
+ }
3328
+ .lab-transport-state > * {
3329
+ min-width: 0;
3330
+ }
3331
+ .lab-transport-state span {
3332
+ color: var(--lab-muted);
3333
+ }
3334
+ .lab-activity-transport > button {
3335
+ min-height: var(--lab-target);
3336
+ }
3337
+ /* The transport has three slots (back · progress · primary). A lab with a fourth
3338
+ action used to drop it into an implicit column and leave it hanging under the
3339
+ left edge; give any extra action a centred row of its own instead. */
3340
+ .lab-activity-transport > :nth-child(n + 4) {
3341
+ grid-column: 1 / -1;
3342
+ justify-self: center;
3343
+ }
3344
+ .lab-activity-transport:has(> .lab-guide-nav) {
3345
+ grid-template-columns: minmax(0, 1fr);
3346
+ }
3347
+ .lab-activity-transport:has(> .lab-sequence) {
3348
+ grid-template-columns: minmax(0, 1fr);
3349
+ }
3350
+ .lab-guide-nav {
3351
+ display: grid;
3352
+ grid-template-columns: minmax(0, 1fr) auto;
3353
+ align-items: center;
3354
+ gap: var(--lab-sp-12);
3355
+ width: 100%;
3356
+ }
3357
+ .lab-guide-nav > p {
3358
+ margin: 0;
3359
+ font-weight: var(--lab-w-medium);
3360
+ text-align: center;
3361
+ }
3362
+ .lab-guide-nav > .lab-stepnav,
3363
+ .lab-guide-nav > .lab-pill {
3364
+ grid-column: 2;
3365
+ }
3366
+ .lab-activity-progress {
3367
+ display: grid;
3368
+ gap: var(--lab-sp-4);
3369
+ width: 100%;
3370
+ min-width: 0;
3371
+ overflow: hidden;
3372
+ }
3373
+ .lab-activity-progress div {
3374
+ display: flex;
3375
+ width: 100%;
3376
+ min-width: 0;
3377
+ overflow: hidden;
3378
+ justify-content: center;
3379
+ gap: var(--lab-sp-4);
3380
+ color: var(--muted-foreground, var(--stage-muted));
3381
+ font-size: var(--lab-t-sm);
3382
+ font-variant-numeric: tabular-nums;
3383
+ }
3384
+ .lab-activity-progress strong {
3385
+ color: var(--foreground, var(--stage-fg));
3386
+ }
3387
+ .lab-activity-progress progress {
3388
+ /* Same fix as `.physics-efficiency-ledger progress`, for the same two
3389
+ reasons: `appearance:none` so the background actually paints instead of
3390
+ being overridden by Chrome's native track, AND a foreground-derived mix
3391
+ instead of `--muted` (which is deliberately close to the surface tone it
3392
+ sits on - see `.lab-slider [data-slot="slider-track"]`'s comment - so an
3393
+ early step, a small fraction, read as a bare sliver with nothing visible
3394
+ behind it rather than a bar partway along a visible track). */
3395
+ appearance: none;
3396
+ -webkit-appearance: none;
3397
+ -moz-appearance: none;
3398
+ width: 100%;
3399
+ height: 0.28rem;
3400
+ overflow: hidden;
3401
+ border: 0;
3402
+ border-radius: var(--lab-r-pill);
3403
+ background: color-mix(in oklab, var(--stage-fg) 15%, transparent);
3404
+ }
3405
+ .lab-activity-progress progress::-webkit-progress-bar {
3406
+ background: color-mix(in oklab, var(--stage-fg) 15%, transparent);
3407
+ }
3408
+ .lab-activity-progress progress::-webkit-progress-value {
3409
+ border-radius: var(--lab-r-pill);
3410
+ background: var(--primary, var(--stage-accent));
3411
+ }
3412
+ .lab-activity-progress progress::-moz-progress-bar {
3413
+ border-radius: var(--lab-r-pill);
3414
+ background: var(--primary, var(--stage-accent));
3415
+ }
3416
+ .lab-activity-progress input[type="range"] {
3417
+ width: 100%;
3418
+ height: 1rem;
3419
+ margin: 0;
3420
+ accent-color: var(--primary, var(--stage-accent));
3421
+ cursor: pointer;
3422
+ }
3423
+ /* The transcript is a text alternative to a moving scene: a screen reader needs it, and a sighted
3424
+ learner is reading the scene instead. It was drawn as a full-width band with its own rule and a
3425
+ semibold heading, which gave a service affordance the same weight as the lesson and put two of
3426
+ these rows between the figure and the Continue button. It stays exactly where it is in the DOM,
3427
+ and recedes. */
3428
+ .lab-activity-transcript {
3429
+ margin: 0;
3430
+ padding: var(--lab-sp-8) var(--lab-sp-16);
3431
+ border-top: 1px solid var(--lab-hairline);
3432
+ color: var(--muted-foreground, var(--stage-muted));
3433
+ font-size: var(--lab-t-eyebrow);
3434
+ }
3435
+ .lab-activity-transcript summary {
3436
+ cursor: pointer;
3437
+ font-weight: var(--lab-w-medium);
3438
+ opacity: 0.7;
3439
+ }
3440
+ .lab-activity-transcript[open] summary {
3441
+ opacity: 1;
3442
+ }
3443
+ .lab-activity-transcript ol {
3444
+ margin: var(--lab-sp-8) 0 0;
3445
+ padding-inline-start: var(--lab-sp-24);
3446
+ }
3447
+ .lab-activity-transcript li {
3448
+ padding: var(--lab-sp-2) var(--lab-sp-4);
3449
+ }
3450
+ .lab-activity-transcript li[data-current] {
3451
+ border-radius: var(--lab-r-xs);
3452
+ background: color-mix(in oklab, var(--primary, var(--stage-accent)) 12%, transparent);
3453
+ color: var(--foreground, var(--stage-fg));
3454
+ }
3455
+ @container lab-activity (min-width: 60rem) {
3456
+ .lab-authored-activity[data-inspector-layout="side"]
3457
+ .lab-activity-workspace:has(> .lab-activity-inspector) {
3458
+ grid-template-columns: minmax(0, 1fr) minmax(18rem, 22rem);
3459
+ grid-template-rows: auto auto;
3460
+ gap: 0;
3461
+ padding: var(--lab-sp-12) 0 var(--lab-sp-12) var(--lab-sp-12);
3462
+ }
3463
+ .lab-authored-activity[data-inspector-layout="side"] .lab-activity-canvas {
3464
+ grid-column: 1;
3465
+ grid-row: 1;
3466
+ padding: 0 var(--lab-sp-12) var(--lab-sp-12) 0;
3467
+ }
3468
+ .lab-authored-activity[data-inspector-layout="side"] .lab-activity-dock {
3469
+ grid-column: 1;
3470
+ grid-row: 2;
3471
+ }
3472
+ .lab-authored-activity[data-inspector-layout="side"]
3473
+ .lab-activity-workspace
3474
+ > .lab-activity-inspector {
3475
+ grid-column: 2;
3476
+ grid-row: 1 / span 2;
3477
+ }
3478
+ .lab-activity[data-inspector-layout="side"]
3479
+ .lab-activity-workspace:has(> .lab-activity-inspector) {
3480
+ grid-template-columns: minmax(0, 1fr) 19rem;
3481
+ align-items: start;
3482
+ }
3483
+ .lab-activity[data-focus][data-inspector-layout="side"]
3484
+ .lab-activity-workspace:has(> .lab-activity-inspector) {
3485
+ grid-template-columns: minmax(0, 1fr) minmax(19rem, 24rem);
3486
+ }
3487
+ .lab-activity[data-inspector-layout="side"] .lab-activity-workspace > .lab-activity-inspector {
3488
+ border: 0;
3489
+ border-inline-start: 1px solid var(--border, var(--stage-grid));
3490
+ border-radius: 0;
3491
+ background: transparent;
3492
+ }
3493
+ .lab-activity[data-inspector-layout="side"]
3494
+ .lab-activity-workspace
3495
+ > :where(.lab-activity-inspector)
3496
+ :where(.lab-activity-inspector-section) {
3497
+ padding: var(--lab-sp-16);
3498
+ }
3499
+ .lab-activity[data-focus] .network-scene svg {
3500
+ height: clamp(350px, 58vh, 680px);
3501
+ }
3502
+ }
3503
+ @container lab-activity (max-width: 59.99rem) {
3504
+ .lab-activity-inspector > summary {
3505
+ display: list-item;
3506
+ }
3507
+ .lab-activity-inspector[open] > summary {
3508
+ border-bottom: 1px solid var(--border, var(--stage-grid));
3509
+ }
3510
+
3511
+ /* In a stacked lab, keep the transport at the thumb-friendly bottom edge. */
3512
+ .lab-activity-header {
3513
+ order: 1;
3514
+ }
3515
+ .lab-activity-status {
3516
+ order: 2;
3517
+ }
3518
+ /* A task section (question / response) keeps its DOM position relative to the figure.
3519
+ Without an explicit order it defaulted to 0 and jumped ABOVE the title on every narrow
3520
+ layout. Sharing the workspace's value means ties fall back to source order: a predict
3521
+ task authored before the figure stays before it, an explain task after it stays after. */
3522
+ .lab-authored-task {
3523
+ order: 3;
3524
+ }
3525
+ /* The instruction standing alone above the model shares that value too, and sits before the
3526
+ workspace in source, so it lands between the status strip and the figure. Left unset it takes
3527
+ the default 0 and leads the card, above the eyebrow. */
3528
+ .lab-authored-lead-solo {
3529
+ order: 3;
3530
+ }
3531
+ .lab-activity > .lab-activity-workspace,
3532
+ .lab-activity > .lab-activity-canvas,
3533
+ .lab-activity > .lab-activity-dock,
3534
+ .lab-activity > .lab-activity-inspector {
3535
+ order: 3;
3536
+ }
3537
+ .lab-activity-workspace > .lab-activity-canvas {
3538
+ order: 1;
3539
+ }
3540
+ .lab-activity-workspace > .lab-activity-dock {
3541
+ order: 2;
3542
+ }
3543
+ .lab-activity-workspace > .lab-activity-inspector {
3544
+ order: 3;
3545
+ }
3546
+ .lab-activity-feedback {
3547
+ order: 4;
3548
+ }
3549
+ .lab-activity-transcript {
3550
+ order: 5;
3551
+ }
3552
+ .lab-activity-transport {
3553
+ position: sticky;
3554
+ bottom: 0;
3555
+ z-index: var(--lab-z-overlay);
3556
+ order: 6;
3557
+ padding-bottom: max(0.75rem, env(safe-area-inset-bottom));
3558
+ background: color-mix(in oklab, var(--background, var(--stage-bg)) 88%, transparent);
3559
+ box-shadow: 0 -8px 18px color-mix(in oklab, currentColor 7%, transparent);
3560
+ backdrop-filter: blur(12px);
3561
+ }
3562
+ }
3563
+ .lab-choice-grid {
3564
+ display: grid;
3565
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3566
+ gap: var(--lab-sp-8);
3567
+ }
3568
+
3569
+ .lab-numeric-tertiary {
3570
+ color: var(--stage-muted);
3571
+ font-variant-numeric: tabular-nums;
3572
+ }
3573
+ @container lab-activity (max-width: 42.5rem) {
3574
+ .lab-activity-header {
3575
+ padding: var(--lab-sp-10) var(--lab-sp-12) var(--lab-sp-8);
3576
+ }
3577
+ .lab-activity-description {
3578
+ font-size: var(--lab-t-sm);
3579
+ line-height: var(--lab-lh-ui);
3580
+ }
3581
+ .lab-activity-focus {
3582
+ font-size: var(--lab-t-sm);
3583
+ padding-inline: var(--lab-sp-8);
3584
+ }
3585
+ .lab-activity-focus span {
3586
+ display: none;
3587
+ }
3588
+ .lab-activity-status {
3589
+ gap: var(--lab-sp-8);
3590
+ padding: var(--lab-sp-8) var(--lab-sp-12);
3591
+ flex-wrap: wrap;
3592
+ row-gap: var(--lab-sp-4);
3593
+ font-size: var(--lab-t-micro);
3594
+ }
3595
+ .lab-activity-status > * + * {
3596
+ padding-inline-start: var(--lab-sp-8);
3597
+ }
3598
+ .lab-authored-activity .lab-activity-status > strong:first-child {
3599
+ display: none;
3600
+ }
3601
+ .lab-authored-activity .lab-activity-status > strong:first-child + * {
3602
+ padding-inline-start: 0;
3603
+ border-inline-start: 0;
3604
+ }
3605
+ .lab-authored-lead-solo {
3606
+ padding: var(--lab-sp-10) var(--lab-sp-12) var(--lab-sp-4);
3607
+ font-size: var(--lab-t-sm);
3608
+ line-height: var(--lab-lh-ui);
3609
+ }
3610
+ .lab-activity-workspace {
3611
+ gap: var(--lab-sp-8);
3612
+ padding: var(--lab-sp-8);
3613
+ }
3614
+ .lab-activity-feedback {
3615
+ gap: var(--lab-sp-4);
3616
+ margin: 0 var(--lab-sp-8) var(--lab-sp-8);
3617
+ max-width: calc(100% - 2 * var(--lab-sp-8));
3618
+ padding: var(--lab-sp-8) var(--lab-sp-10);
3619
+ }
3620
+ .lab-authored-activity[data-inspector-layout="stacked"]
3621
+ .lab-activity-workspace
3622
+ > .lab-activity-inspector {
3623
+ border-inline: 0;
3624
+ border-radius: 0;
3625
+ }
3626
+ .network-route-path {
3627
+ display: none;
3628
+ }
3629
+ .network-delivery {
3630
+ margin-inline-start: auto;
3631
+ }
3632
+ .network-scene svg {
3633
+ height: 180px;
3634
+ }
3635
+ .lab-activity-feedback {
3636
+ grid-template-columns: 1fr;
3637
+ gap: var(--lab-sp-4);
3638
+ }
3639
+ .lab-activity-transport {
3640
+ position: sticky;
3641
+ inset-block-end: 0;
3642
+ z-index: var(--lab-z-overlay);
3643
+ grid-template-columns: auto 1fr auto;
3644
+ gap: var(--lab-sp-8);
3645
+ padding-inline: var(--lab-sp-10);
3646
+ padding-block-end: max(0.75rem, env(safe-area-inset-bottom));
3647
+ box-shadow: 0 -8px 20px color-mix(in oklab, var(--foreground, var(--stage-fg)) 8%, transparent);
3648
+ }
3649
+ .lab-activity-transport .lab-chip {
3650
+ padding-inline: var(--lab-sp-12);
3651
+ }
3652
+ .lab-guide-nav {
3653
+ grid-template-columns: minmax(0, 1fr);
3654
+ }
3655
+ .lab-guide-nav > .lab-stepnav,
3656
+ .lab-guide-nav > .lab-pill {
3657
+ grid-column: 1;
3658
+ justify-self: center;
3659
+ }
3660
+ .network-layer {
3661
+ grid-template-columns: 4.4rem 3.2rem 1fr;
3662
+ font-size: var(--lab-t-micro);
3663
+ }
3664
+ }
3665
+ /* Authorable predict → act → observe → explain → transfer sequence. */
3666
+ .lab-sequence {
3667
+ display: grid;
3668
+ justify-items: center;
3669
+ gap: var(--lab-sp-6);
3670
+ width: 100%;
3671
+ color: var(--foreground, var(--stage-fg));
3672
+ }
3673
+ .lab-sequence-actions {
3674
+ display: flex;
3675
+ align-items: center;
3676
+ justify-content: center;
3677
+ gap: var(--lab-sp-8);
3678
+ }
3679
+ .lab-sequence-actions .lab-btn,
3680
+ .lab-sequence-actions .lab-btn-ghost {
3681
+ display: inline-flex;
3682
+ align-items: center;
3683
+ gap: var(--lab-sp-4);
3684
+ min-block-size: var(--lab-target-compact);
3685
+ padding: var(--lab-sp-4) var(--lab-sp-10);
3686
+ font-size: var(--lab-t-sm);
3687
+ }
3688
+ .lab-sequence-actions .lab-btn svg {
3689
+ width: 0.9rem;
3690
+ height: 0.9rem;
3691
+ stroke-width: 1.8;
3692
+ }
3693
+ .lab-sequence-gate,
3694
+ .lab-sequence-count {
3695
+ color: var(--muted-foreground, var(--stage-muted));
3696
+ font-size: var(--lab-t-eyebrow);
3697
+ }
3698
+ .lab-sequence-gate {
3699
+ margin: 0;
3700
+ text-align: center;
3701
+ }
3702
+ @media (max-width: 40rem) {
3703
+ .lab-sequence-actions {
3704
+ width: 100%;
3705
+ }
3706
+ }
3707
+
3708
+ /* Scannable rule reference list. */
3709
+ .rule-card-patterns {
3710
+ display: grid;
3711
+ gap: var(--lab-sp-8);
3712
+ padding: var(--lab-sp-14) var(--lab-sp-16);
3713
+ border-top: 1px solid var(--border, var(--stage-grid));
3714
+ }
3715
+ .rule-card-patterns h4 {
3716
+ margin: 0;
3717
+ color: var(--muted-foreground, var(--stage-muted));
3718
+ font-size: var(--lab-t-eyebrow, 0.68rem);
3719
+ letter-spacing: var(--lab-ls-caps);
3720
+ text-transform: uppercase;
3721
+ }
3722
+ .rule-card-patterns ul {
3723
+ display: grid;
3724
+ gap: var(--lab-sp-8);
3725
+ margin: 0;
3726
+ padding: 0;
3727
+ max-width: 46rem;
3728
+ list-style: none;
3729
+ }
3730
+ .rule-card-patterns li {
3731
+ position: relative;
3732
+ padding-inline-start: var(--lab-sp-16);
3733
+ font-size: var(--lab-t-sm);
3734
+ line-height: var(--lab-lh-ui);
3735
+ }
3736
+ .rule-card-patterns li::before {
3737
+ position: absolute;
3738
+ inset-inline-start: 0;
3739
+ color: var(--primary, var(--stage-accent));
3740
+ content: "\203A";
3741
+ font-weight: var(--lab-w-semibold);
3742
+ }
3743
+
3744
+ /* Bound responsive SVGs to their activity container. */
3745
+ .lab-activity svg {
3746
+ max-width: 100%;
3747
+ }
3748
+
3749
+ .lab-config-options {
3750
+ display: inline-flex;
3751
+ flex-wrap: wrap;
3752
+ gap: var(--lab-sp-6);
3753
+ }
3754
+
3755
+ /* A schematic's labels live inside its viewBox, so they scale with the element: at 350px a
3756
+ 520-wide circuit renders its tags at ~3px. The floor keeps it legible and lets the strip scroll
3757
+ instead, and the edge fade rides the container box so a cut-off circuit reads as scrollable
3758
+ rather than broken.
3759
+
3760
+ There is deliberately NO max-width here. Capping every scene reflowed the labels in the ~40 labs
3761
+ composed against their natural width and put two of them into text-on-text collisions. A short
3762
+ wide diagram stretching into a tall empty box is a per-lab composition problem; it does not get
3763
+ a global rule. */
3764
+ .electronics-scene {
3765
+ display: flex;
3766
+ justify-content: center;
3767
+ overflow-x: auto;
3768
+ overscroll-behavior-x: contain;
3769
+ mask-image: linear-gradient(
3770
+ to right,
3771
+ transparent 0,
3772
+ #000 1.5rem,
3773
+ #000 calc(100% - 1.5rem),
3774
+ transparent 100%
3775
+ );
3776
+ }
3777
+ .electronics-scene > svg {
3778
+ min-width: 22rem;
3779
+ flex: 0 0 auto;
3780
+ }
3781
+
3782
+ /* ── Rules that belong to no single domain ─────────────────────────────────────────────────────
3783
+ These arrived here from styles/domains/parts/shared-{1,2}.css.
3784
+
3785
+ They were never meant to be a domain. scripts/split-domains.mjs routes the `lab` and `stage`
3786
+ prefixes to a sheet it calls "shared" (SHEET, :72-74), and every domain sheet then had to
3787
+ `@import "./shared.css"` to get them: 4.6 KiB charged against all fourteen subjects, which is
3788
+ most of why chemistry could not fit under its ceiling. That was a limitation of the generator,
3789
+ which had no way to put a rule BACK into core.css, not a decision about where the rules belong.
3790
+ Their own generated header said they "belong to no single domain", which is the definition of
3791
+ this layer, and every documented layered-import recipe already requires core.css. So a consumer
3792
+ loading core.css plus one subject gets exactly what it got before.
3793
+ ───────────────────────────────────────────────────────────────────────────────────────────── */
3794
+ .lab-scene-row,
3795
+ .lab-sequence-row {
3796
+ display: flex;
3797
+ flex-wrap: wrap;
3798
+ justify-content: center;
3799
+ gap: var(--lab-sp-16);
3800
+ }
3801
+ .lab-scene-row {
3802
+ align-items: center;
3803
+ }
3804
+ .lab-sequence-row {
3805
+ align-items: flex-end;
3806
+ gap: var(--lab-sp-14);
3807
+ }
3808
+ .lab-clue-scene {
3809
+ display: grid;
3810
+ justify-items: center;
3811
+ gap: var(--lab-sp-4);
3812
+ }
3813
+ .lab-clue-scene > span {
3814
+ color: var(--stage-muted);
3815
+ font-size: var(--lab-t-micro);
3816
+ font-weight: var(--lab-w-semibold);
3817
+ text-transform: uppercase;
3818
+ letter-spacing: var(--lab-ls-caps);
3819
+ }
3820
+ .lab-result-stack {
3821
+ display: grid;
3822
+ justify-items: center;
3823
+ gap: var(--lab-sp-14);
3824
+ margin-top: var(--lab-sp-4);
3825
+ }
3826
+ .lab-answer-row {
3827
+ display: flex;
3828
+ flex-wrap: wrap;
3829
+ justify-content: center;
3830
+ gap: var(--lab-sp-16);
3831
+ font-size: var(--lab-t-body);
3832
+ font-weight: var(--lab-w-semibold);
3833
+ }
3834
+ .lab-inline-answer,
3835
+ .lab-trig-value {
3836
+ display: inline-flex;
3837
+ align-items: center;
3838
+ gap: var(--lab-sp-6);
3839
+ }
3840
+ .lab-solved-message {
3841
+ margin: 0;
3842
+ color: var(--stage-good);
3843
+ font-weight: var(--lab-w-semibold);
3844
+ }
3845
+ .lab-worked-list {
3846
+ display: grid;
3847
+ gap: var(--lab-sp-6);
3848
+ margin: 0;
3849
+ padding-inline-start: var(--lab-sp-16);
3850
+ font-size: var(--lab-t-sm);
3851
+ }
3852
+ .lab-result-copy {
3853
+ font-size: var(--lab-t-eyebrow);
3854
+ }
3855
+ .lab-centered-scene {
3856
+ display: grid;
3857
+ place-items: center;
3858
+ }
3859
+ .lab-fill-prompt {
3860
+ margin: 0;
3861
+ font-size: var(--lab-t-body);
3862
+ font-weight: var(--lab-w-semibold);
3863
+ line-height: 1.9;
3864
+ text-align: center;
3865
+ }
3866
+ .lab-sequence-step {
3867
+ display: grid;
3868
+ justify-items: center;
3869
+ gap: var(--lab-sp-4);
3870
+ padding: var(--lab-sp-6);
3871
+ border: 2px solid transparent;
3872
+ border-radius: var(--lab-r-md);
3873
+ }
3874
+ .lab-sequence-step[data-current="true"] {
3875
+ border-color: var(--stage-accent);
3876
+ background: color-mix(in oklab, var(--stage-accent) 5%, transparent);
3877
+ }
3878
+ .lab-sequence-label {
3879
+ color: var(--stage-fg);
3880
+ font-size: var(--lab-t-eyebrow);
3881
+ font-weight: var(--lab-w-semibold);
3882
+ }
3883
+ .lab-sequence-value {
3884
+ min-width: 2rem;
3885
+ padding: 2px var(--lab-sp-8);
3886
+ border: 1.5px solid color-mix(in oklab, var(--stage-fg) 30%, transparent);
3887
+ border-radius: var(--lab-r-xs);
3888
+ background: var(--stage-bg);
3889
+ font-size: var(--lab-t-sm);
3890
+ font-weight: var(--lab-w-bold);
3891
+ font-variant-numeric: tabular-nums;
3892
+ text-align: center;
3893
+ }
3894
+ .lab-numeric-primary {
3895
+ font-size: var(--lab-t-body);
3896
+ font-weight: var(--lab-w-semibold);
3897
+ font-variant-numeric: tabular-nums;
3898
+ }
3899
+ .lab-numeric-secondary,
3900
+ .lab-numeric-tertiary,
3901
+ .lab-tabular {
3902
+ font-variant-numeric: tabular-nums;
3903
+ }
3904
+ .lab-numeric-secondary {
3905
+ opacity: 0.85;
3906
+ }
3907
+ .lab-numeric-tertiary {
3908
+ opacity: 0.75;
3909
+ }
3910
+ .lab-muted-copy {
3911
+ opacity: 0.8;
3912
+ }
3913
+ .lab-trig-readouts {
3914
+ display: inline-flex;
3915
+ gap: var(--lab-sp-16);
3916
+ margin-inline-start: auto;
3917
+ font-variant-numeric: tabular-nums;
3918
+ }
3919
+ .lab-trig-function[data-function="sin"] {
3920
+ color: var(--stage-good);
3921
+ }
3922
+ .lab-trig-function[data-function="cos"] {
3923
+ color: var(--stage-accent);
3924
+ }
3925
+ .lab-trig-function[data-function="tan"] {
3926
+ color: var(--stage-warn);
3927
+ }
3928
+ @media (max-width: 35rem) {
3929
+ .lab-trig-readouts {
3930
+ width: 100%;
3931
+ margin-inline-start: 0;
3932
+ justify-content: space-between;
3933
+ gap: var(--lab-sp-8);
3934
+ }
3935
+ }
3936
+
3937
+ /* Sizing for an icon inside a chip. This lived in the chemistry domain part, with no `.chem-`
3938
+ ancestor, which meant a chip icon was only sized on pages that happened to load chemistry. It is
3939
+ shared chrome, so it belongs in this layer. */
3940
+ .lab-chip > svg {
3941
+ width: 0.9rem;
3942
+ height: 0.9rem;
3943
+ flex: none;
3944
+ }
3945
+
3946
+ /* ── Simulation HUD & Visual-First Floating Controls ────────────────────────
3947
+ Used across flagship laboratories to replace vertical form stacks with
3948
+ compact glassmorphic toolbars, floating telemetry badges, and collapsible
3949
+ drawers so the physical simulation retains 65-75% of viewport height. */
3950
+ /* ── Simulation HUD & Visual-First Floating Controls ────────────────────────
3951
+ Precision instrument toolbar: clean typography, zero emoji noise,
3952
+ consistent alignment, and subtle micro-contrast. */
3953
+ .lab-hud-toolbar {
3954
+ grid-column: 1 / -1;
3955
+ width: 100%;
3956
+ display: flex;
3957
+ flex-wrap: wrap;
3958
+ align-items: center;
3959
+ justify-content: flex-start;
3960
+ gap: var(--lab-sp-6) var(--lab-sp-10);
3961
+ padding: var(--lab-sp-4) var(--lab-sp-8);
3962
+ border: 1px solid var(--lab-border);
3963
+ border-radius: var(--lab-r-md, 8px);
3964
+ background: color-mix(in oklab, var(--lab-surface) 92%, transparent);
3965
+ backdrop-filter: blur(12px);
3966
+ -webkit-backdrop-filter: blur(12px);
3967
+ box-shadow: 0 1px 3px color-mix(in oklab, currentColor 4%, transparent);
3968
+ }
3969
+ .lab-hud-group {
3970
+ display: inline-flex;
3971
+ align-items: center;
3972
+ gap: var(--lab-sp-4);
3973
+ }
3974
+ .lab-hud-badge {
3975
+ display: inline-flex;
3976
+ align-items: center;
3977
+ gap: var(--lab-sp-4);
3978
+ padding: 0 var(--lab-sp-2);
3979
+ border: 0;
3980
+ border-radius: 0;
3981
+ background: transparent;
3982
+ color: var(--muted-foreground, var(--stage-muted));
3983
+ font-size: var(--lab-t-eyebrow, 0.68rem);
3984
+ font-weight: var(--lab-w-semibold, 600);
3985
+ letter-spacing: var(--lab-ls-caps, 0.05em);
3986
+ text-transform: uppercase;
3987
+ font-variant-numeric: tabular-nums;
3988
+ white-space: nowrap;
3989
+ }
3990
+ .lab-hud-badge strong {
3991
+ color: var(--stage-fg, currentColor);
3992
+ font-weight: var(--lab-w-bold);
3993
+ }
3994
+ .lab-hud-chip-select {
3995
+ display: inline-flex;
3996
+ gap: var(--lab-sp-2);
3997
+ padding: var(--lab-sp-2);
3998
+ background: var(--lab-sunken);
3999
+ border-radius: var(--lab-r-sm, 6px);
4000
+ border: 1px solid var(--lab-hairline);
4001
+ }
4002
+ .lab-hud-chip-btn {
4003
+ padding: var(--lab-sp-2) var(--lab-sp-8);
4004
+ border-radius: calc(var(--lab-r-sm, 6px) - 2px);
4005
+ border: 0;
4006
+ background: transparent;
4007
+ color: var(--lab-muted);
4008
+ font-size: var(--lab-t-eyebrow, 0.68rem);
4009
+ font-weight: var(--lab-w-semibold, 600);
4010
+ cursor: pointer;
4011
+ transition: all var(--lab-dur-fast) var(--lab-ease);
4012
+ white-space: nowrap;
4013
+ }
4014
+ .lab-hud-chip-btn:hover {
4015
+ color: var(--lab-fg);
4016
+ }
4017
+ .lab-hud-chip-btn[data-active="true"],
4018
+ .lab-hud-chip-btn.active {
4019
+ background: var(--lab-surface);
4020
+ color: var(--lab-fg);
4021
+ box-shadow: 0 1px 2px color-mix(in oklab, currentColor 8%, transparent);
4022
+ }
4023
+ .lab-hud-drawer {
4024
+ grid-column: 1 / -1;
4025
+ width: 100%;
4026
+ display: grid;
4027
+ grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
4028
+ gap: var(--lab-sp-8);
4029
+ padding: var(--lab-sp-8) var(--lab-sp-10);
4030
+ margin-top: var(--lab-sp-4);
4031
+ border: 1px solid var(--lab-border);
4032
+ border-radius: var(--lab-r-sm, 6px);
4033
+ background: color-mix(in oklab, var(--lab-sunken) 40%, transparent);
4034
+ }
4035
+ .lab-hud-drawer-toggle,
4036
+ .lab-btn.lab-hud-drawer-toggle {
4037
+ margin-left: auto;
4038
+ display: inline-flex;
4039
+ align-items: center;
4040
+ gap: var(--lab-sp-4);
4041
+ font-size: var(--lab-t-eyebrow);
4042
+ font-weight: var(--lab-w-medium, 500);
4043
+ color: var(--muted-foreground, var(--lab-muted));
4044
+ background: color-mix(in oklab, var(--lab-surface) 50%, transparent);
4045
+ border: 1px solid var(--lab-border);
4046
+ border-radius: var(--lab-r-sm, 6px);
4047
+ min-height: var(--lab-target-compact);
4048
+ padding: var(--lab-sp-2) var(--lab-sp-10);
4049
+ cursor: pointer;
4050
+ transition:
4051
+ background var(--lab-dur-fast) var(--lab-ease),
4052
+ color var(--lab-dur-fast) var(--lab-ease),
4053
+ border-color var(--lab-dur-fast) var(--lab-ease);
4054
+ }
4055
+ /* A hover that PAINTS A SURFACE has to sit behind a real pointer. On a touch device the hover
4056
+ state sticks after a tap, so the last control touched stays lit as though it were selected. */
4057
+ @media (hover: hover) and (pointer: fine) {
4058
+ .lab-hud-drawer-toggle:hover,
4059
+ .lab-btn.lab-hud-drawer-toggle:hover {
4060
+ color: var(--lab-fg);
4061
+ background: var(--lab-sunken);
4062
+ border-color: var(--lab-hairline);
4063
+ }
4064
+ }
4065
+ .lab-direct-drag-hint {
4066
+ display: inline-flex;
4067
+ align-items: center;
4068
+ gap: var(--lab-sp-4);
4069
+ font-size: var(--lab-t-micro);
4070
+ text-transform: uppercase;
4071
+ letter-spacing: var(--lab-ls-caps);
4072
+ color: var(--lab-muted);
4073
+ animation: lab-pulse 2s infinite ease-in-out;
4074
+ }
4075
+ @keyframes lab-pulse {
4076
+ 0%,
4077
+ 100% {
4078
+ opacity: 0.6;
4079
+ }
4080
+ 50% {
4081
+ opacity: 1;
4082
+ }
4083
+ }