@the-inclusionist/engine 8.0.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (756) hide show
  1. package/README.md +89 -78
  2. package/app/css/style.css +584 -374
  3. package/app/public/vendor/fonts/bitter-var-ext.woff2 +0 -0
  4. package/app/public/vendor/fonts/bitter-var.woff2 +0 -0
  5. package/app/public/vendor/fonts/bodonimoda-var-ext.woff2 +0 -0
  6. package/app/public/vendor/fonts/bodonimoda-var.woff2 +0 -0
  7. package/app/public/vendor/fonts/cat-abril_fatface-400-ext.woff2 +0 -0
  8. package/app/public/vendor/fonts/cat-abril_fatface-400.woff2 +0 -0
  9. package/app/public/vendor/fonts/cat-adlam_display-400-ext.woff2 +0 -0
  10. package/app/public/vendor/fonts/cat-adlam_display-400.woff2 +0 -0
  11. package/app/public/vendor/fonts/cat-agu_display-400-ext.woff2 +0 -0
  12. package/app/public/vendor/fonts/cat-agu_display-400.woff2 +0 -0
  13. package/app/public/vendor/fonts/cat-alfa_slab_one-400-ext.woff2 +0 -0
  14. package/app/public/vendor/fonts/cat-alfa_slab_one-400.woff2 +0 -0
  15. package/app/public/vendor/fonts/cat-are_you_serious-400-ext.woff2 +0 -0
  16. package/app/public/vendor/fonts/cat-are_you_serious-400.woff2 +0 -0
  17. package/app/public/vendor/fonts/cat-asimovian-400-ext.woff2 +0 -0
  18. package/app/public/vendor/fonts/cat-asimovian-400.woff2 +0 -0
  19. package/app/public/vendor/fonts/cat-atkinson_hyperlegible_next-400-ext.woff2 +0 -0
  20. package/app/public/vendor/fonts/cat-atkinson_hyperlegible_next-400.woff2 +0 -0
  21. package/app/public/vendor/fonts/cat-bakbak_one-400-ext.woff2 +0 -0
  22. package/app/public/vendor/fonts/cat-bakbak_one-400.woff2 +0 -0
  23. package/app/public/vendor/fonts/cat-bangers-400-ext.woff2 +0 -0
  24. package/app/public/vendor/fonts/cat-bangers-400.woff2 +0 -0
  25. package/app/public/vendor/fonts/cat-barriecito-400-ext.woff2 +0 -0
  26. package/app/public/vendor/fonts/cat-barriecito-400.woff2 +0 -0
  27. package/app/public/vendor/fonts/cat-berkshire_swash-400-ext.woff2 +0 -0
  28. package/app/public/vendor/fonts/cat-berkshire_swash-400.woff2 +0 -0
  29. package/app/public/vendor/fonts/cat-bevan-400-ext.woff2 +0 -0
  30. package/app/public/vendor/fonts/cat-bevan-400.woff2 +0 -0
  31. package/app/public/vendor/fonts/cat-bitcount-400-ext.woff2 +0 -0
  32. package/app/public/vendor/fonts/cat-bitcount-400.woff2 +0 -0
  33. package/app/public/vendor/fonts/cat-bowlby_one_sc-400-ext.woff2 +0 -0
  34. package/app/public/vendor/fonts/cat-bowlby_one_sc-400.woff2 +0 -0
  35. package/app/public/vendor/fonts/cat-bungee_shade-400-ext.woff2 +0 -0
  36. package/app/public/vendor/fonts/cat-bungee_shade-400.woff2 +0 -0
  37. package/app/public/vendor/fonts/cat-charm-400-ext.woff2 +0 -0
  38. package/app/public/vendor/fonts/cat-charm-400.woff2 +0 -0
  39. package/app/public/vendor/fonts/cat-charm-700-ext.woff2 +0 -0
  40. package/app/public/vendor/fonts/cat-charm-700.woff2 +0 -0
  41. package/app/public/vendor/fonts/cat-cherry_bomb_one-400-ext.woff2 +0 -0
  42. package/app/public/vendor/fonts/cat-cherry_bomb_one-400.woff2 +0 -0
  43. package/app/public/vendor/fonts/cat-chokokutai-400-ext.woff2 +0 -0
  44. package/app/public/vendor/fonts/cat-chokokutai-400.woff2 +0 -0
  45. package/app/public/vendor/fonts/cat-chonburi-400-ext.woff2 +0 -0
  46. package/app/public/vendor/fonts/cat-chonburi-400.woff2 +0 -0
  47. package/app/public/vendor/fonts/cat-climate_crisis-400-ext.woff2 +0 -0
  48. package/app/public/vendor/fonts/cat-climate_crisis-400.woff2 +0 -0
  49. package/app/public/vendor/fonts/cat-cookie-400.woff2 +0 -0
  50. package/app/public/vendor/fonts/cat-dela_gothic_one-400-ext.woff2 +0 -0
  51. package/app/public/vendor/fonts/cat-dela_gothic_one-400.woff2 +0 -0
  52. package/app/public/vendor/fonts/cat-fascinate_inline-400-ext.woff2 +0 -0
  53. package/app/public/vendor/fonts/cat-fascinate_inline-400.woff2 +0 -0
  54. package/app/public/vendor/fonts/cat-ga_maamli-400-ext.woff2 +0 -0
  55. package/app/public/vendor/fonts/cat-ga_maamli-400.woff2 +0 -0
  56. package/app/public/vendor/fonts/cat-itim-400-ext.woff2 +0 -0
  57. package/app/public/vendor/fonts/cat-itim-400.woff2 +0 -0
  58. package/app/public/vendor/fonts/cat-jacquard_24-400-ext.woff2 +0 -0
  59. package/app/public/vendor/fonts/cat-jacquard_24-400.woff2 +0 -0
  60. package/app/public/vendor/fonts/cat-kablammo-400-ext.woff2 +0 -0
  61. package/app/public/vendor/fonts/cat-kablammo-400.woff2 +0 -0
  62. package/app/public/vendor/fonts/cat-kalam-400-ext.woff2 +0 -0
  63. package/app/public/vendor/fonts/cat-kalam-400.woff2 +0 -0
  64. package/app/public/vendor/fonts/cat-kalam-700-ext.woff2 +0 -0
  65. package/app/public/vendor/fonts/cat-kalam-700.woff2 +0 -0
  66. package/app/public/vendor/fonts/cat-katibeh-400-ext.woff2 +0 -0
  67. package/app/public/vendor/fonts/cat-katibeh-400.woff2 +0 -0
  68. package/app/public/vendor/fonts/cat-lemonada-400-ext.woff2 +0 -0
  69. package/app/public/vendor/fonts/cat-lemonada-400.woff2 +0 -0
  70. package/app/public/vendor/fonts/cat-lilita_one-400-ext.woff2 +0 -0
  71. package/app/public/vendor/fonts/cat-lilita_one-400.woff2 +0 -0
  72. package/app/public/vendor/fonts/cat-lobster-400-ext.woff2 +0 -0
  73. package/app/public/vendor/fonts/cat-lobster-400.woff2 +0 -0
  74. package/app/public/vendor/fonts/cat-luckiest_guy-400-ext.woff2 +0 -0
  75. package/app/public/vendor/fonts/cat-luckiest_guy-400.woff2 +0 -0
  76. package/app/public/vendor/fonts/cat-marhey-400-ext.woff2 +0 -0
  77. package/app/public/vendor/fonts/cat-marhey-400.woff2 +0 -0
  78. package/app/public/vendor/fonts/cat-modak-400-ext.woff2 +0 -0
  79. package/app/public/vendor/fonts/cat-modak-400.woff2 +0 -0
  80. package/app/public/vendor/fonts/cat-momo_signature-400-ext.woff2 +0 -0
  81. package/app/public/vendor/fonts/cat-momo_signature-400.woff2 +0 -0
  82. package/app/public/vendor/fonts/cat-monofett-400-ext.woff2 +0 -0
  83. package/app/public/vendor/fonts/cat-monofett-400.woff2 +0 -0
  84. package/app/public/vendor/fonts/cat-monomakh-400-ext.woff2 +0 -0
  85. package/app/public/vendor/fonts/cat-monomakh-400.woff2 +0 -0
  86. package/app/public/vendor/fonts/cat-monoton-400-ext.woff2 +0 -0
  87. package/app/public/vendor/fonts/cat-monoton-400.woff2 +0 -0
  88. package/app/public/vendor/fonts/cat-nerko_one-400-ext.woff2 +0 -0
  89. package/app/public/vendor/fonts/cat-nerko_one-400.woff2 +0 -0
  90. package/app/public/vendor/fonts/cat-noto_sans_adlam-400-ext.woff2 +0 -0
  91. package/app/public/vendor/fonts/cat-noto_sans_adlam-400.woff2 +0 -0
  92. package/app/public/vendor/fonts/cat-noto_sans_arabic-400-ext.woff2 +0 -0
  93. package/app/public/vendor/fonts/cat-noto_sans_arabic-400.woff2 +0 -0
  94. package/app/public/vendor/fonts/cat-noto_sans_devanagari-400-ext.woff2 +0 -0
  95. package/app/public/vendor/fonts/cat-noto_sans_devanagari-400.woff2 +0 -0
  96. package/app/public/vendor/fonts/cat-noto_sans_hebrew-400-ext.woff2 +0 -0
  97. package/app/public/vendor/fonts/cat-noto_sans_hebrew-400.woff2 +0 -0
  98. package/app/public/vendor/fonts/cat-noto_sans_jp-400-ext.woff2 +0 -0
  99. package/app/public/vendor/fonts/cat-noto_sans_jp-400.woff2 +0 -0
  100. package/app/public/vendor/fonts/cat-noto_sans_khmer-400-ext.woff2 +0 -0
  101. package/app/public/vendor/fonts/cat-noto_sans_khmer-400.woff2 +0 -0
  102. package/app/public/vendor/fonts/cat-noto_sans_kr-400-ext.woff2 +0 -0
  103. package/app/public/vendor/fonts/cat-noto_sans_kr-400.woff2 +0 -0
  104. package/app/public/vendor/fonts/cat-noto_sans_sc-400-ext.woff2 +0 -0
  105. package/app/public/vendor/fonts/cat-noto_sans_sc-400.woff2 +0 -0
  106. package/app/public/vendor/fonts/cat-noto_sans_thai-400-ext.woff2 +0 -0
  107. package/app/public/vendor/fonts/cat-noto_sans_thai-400.woff2 +0 -0
  108. package/app/public/vendor/fonts/cat-ole-400-ext.woff2 +0 -0
  109. package/app/public/vendor/fonts/cat-ole-400.woff2 +0 -0
  110. package/app/public/vendor/fonts/cat-pacifico-400-ext.woff2 +0 -0
  111. package/app/public/vendor/fonts/cat-pacifico-400.woff2 +0 -0
  112. package/app/public/vendor/fonts/cat-patrick_hand-400-ext.woff2 +0 -0
  113. package/app/public/vendor/fonts/cat-patrick_hand-400.woff2 +0 -0
  114. package/app/public/vendor/fonts/cat-petit_formal_script-400-ext.woff2 +0 -0
  115. package/app/public/vendor/fonts/cat-petit_formal_script-400.woff2 +0 -0
  116. package/app/public/vendor/fonts/cat-pixelify_sans-400-ext.woff2 +0 -0
  117. package/app/public/vendor/fonts/cat-pixelify_sans-400.woff2 +0 -0
  118. package/app/public/vendor/fonts/cat-plaster-400-ext.woff2 +0 -0
  119. package/app/public/vendor/fonts/cat-plaster-400.woff2 +0 -0
  120. package/app/public/vendor/fonts/cat-playwrite_ar_guides-400-0.woff2 +0 -0
  121. package/app/public/vendor/fonts/cat-playwrite_at-400-0.woff2 +0 -0
  122. package/app/public/vendor/fonts/cat-playwrite_at_guides-400-0.woff2 +0 -0
  123. package/app/public/vendor/fonts/cat-playwrite_au_nsw-400-0.woff2 +0 -0
  124. package/app/public/vendor/fonts/cat-playwrite_au_nsw_guides-400-0.woff2 +0 -0
  125. package/app/public/vendor/fonts/cat-playwrite_au_qld-400-0.woff2 +0 -0
  126. package/app/public/vendor/fonts/cat-playwrite_au_qld_guides-400-0.woff2 +0 -0
  127. package/app/public/vendor/fonts/cat-playwrite_au_sa-400-0.woff2 +0 -0
  128. package/app/public/vendor/fonts/cat-playwrite_au_sa_guides-400-0.woff2 +0 -0
  129. package/app/public/vendor/fonts/cat-playwrite_au_tas-400-0.woff2 +0 -0
  130. package/app/public/vendor/fonts/cat-playwrite_au_tas_guides-400-0.woff2 +0 -0
  131. package/app/public/vendor/fonts/cat-playwrite_au_vic-400-0.woff2 +0 -0
  132. package/app/public/vendor/fonts/cat-playwrite_au_vic_guides-400-0.woff2 +0 -0
  133. package/app/public/vendor/fonts/cat-playwrite_be_vlg-400-0.woff2 +0 -0
  134. package/app/public/vendor/fonts/cat-playwrite_be_vlg_guides-400-0.woff2 +0 -0
  135. package/app/public/vendor/fonts/cat-playwrite_be_wal-400-0.woff2 +0 -0
  136. package/app/public/vendor/fonts/cat-playwrite_be_wal_guides-400-0.woff2 +0 -0
  137. package/app/public/vendor/fonts/cat-playwrite_br_guides-400-0.woff2 +0 -0
  138. package/app/public/vendor/fonts/cat-playwrite_ca_guides-400-0.woff2 +0 -0
  139. package/app/public/vendor/fonts/cat-playwrite_cl_guides-400-0.woff2 +0 -0
  140. package/app/public/vendor/fonts/cat-playwrite_co_guides-400-0.woff2 +0 -0
  141. package/app/public/vendor/fonts/cat-playwrite_cu_guides-400-0.woff2 +0 -0
  142. package/app/public/vendor/fonts/cat-playwrite_cz-400-0.woff2 +0 -0
  143. package/app/public/vendor/fonts/cat-playwrite_cz_guides-400-0.woff2 +0 -0
  144. package/app/public/vendor/fonts/cat-playwrite_de_grund-400-0.woff2 +0 -0
  145. package/app/public/vendor/fonts/cat-playwrite_de_grund_guides-400-0.woff2 +0 -0
  146. package/app/public/vendor/fonts/cat-playwrite_de_la-400-0.woff2 +0 -0
  147. package/app/public/vendor/fonts/cat-playwrite_de_la_guides-400-0.woff2 +0 -0
  148. package/app/public/vendor/fonts/cat-playwrite_de_sas-400-0.woff2 +0 -0
  149. package/app/public/vendor/fonts/cat-playwrite_de_sas_guides-400-0.woff2 +0 -0
  150. package/app/public/vendor/fonts/cat-playwrite_de_va-400-0.woff2 +0 -0
  151. package/app/public/vendor/fonts/cat-playwrite_de_va_guides-400-0.woff2 +0 -0
  152. package/app/public/vendor/fonts/cat-playwrite_dk_loopet-400-0.woff2 +0 -0
  153. package/app/public/vendor/fonts/cat-playwrite_dk_loopet_guides-400-0.woff2 +0 -0
  154. package/app/public/vendor/fonts/cat-playwrite_dk_uloopet-400-0.woff2 +0 -0
  155. package/app/public/vendor/fonts/cat-playwrite_dk_uloopet_guides-400-0.woff2 +0 -0
  156. package/app/public/vendor/fonts/cat-playwrite_es_deco_guides-400-0.woff2 +0 -0
  157. package/app/public/vendor/fonts/cat-playwrite_es_guides-400-0.woff2 +0 -0
  158. package/app/public/vendor/fonts/cat-playwrite_fr_moderne-400-0.woff2 +0 -0
  159. package/app/public/vendor/fonts/cat-playwrite_fr_moderne_guides-400-0.woff2 +0 -0
  160. package/app/public/vendor/fonts/cat-playwrite_fr_trad-400-0.woff2 +0 -0
  161. package/app/public/vendor/fonts/cat-playwrite_fr_trad_guides-400-0.woff2 +0 -0
  162. package/app/public/vendor/fonts/cat-playwrite_gb_j_guides-400-0.woff2 +0 -0
  163. package/app/public/vendor/fonts/cat-playwrite_gb_s_guides-400-0.woff2 +0 -0
  164. package/app/public/vendor/fonts/cat-playwrite_hr-400-0.woff2 +0 -0
  165. package/app/public/vendor/fonts/cat-playwrite_hr_guides-400-0.woff2 +0 -0
  166. package/app/public/vendor/fonts/cat-playwrite_hr_lijeva-400-0.woff2 +0 -0
  167. package/app/public/vendor/fonts/cat-playwrite_hr_lijeva_guides-400-0.woff2 +0 -0
  168. package/app/public/vendor/fonts/cat-playwrite_hu-400-0.woff2 +0 -0
  169. package/app/public/vendor/fonts/cat-playwrite_hu_guides-400-0.woff2 +0 -0
  170. package/app/public/vendor/fonts/cat-playwrite_id-400-0.woff2 +0 -0
  171. package/app/public/vendor/fonts/cat-playwrite_id_guides-400-0.woff2 +0 -0
  172. package/app/public/vendor/fonts/cat-playwrite_ie-400-0.woff2 +0 -0
  173. package/app/public/vendor/fonts/cat-playwrite_ie_guides-400-0.woff2 +0 -0
  174. package/app/public/vendor/fonts/cat-playwrite_in-400-0.woff2 +0 -0
  175. package/app/public/vendor/fonts/cat-playwrite_in_guides-400-0.woff2 +0 -0
  176. package/app/public/vendor/fonts/cat-playwrite_is-400-0.woff2 +0 -0
  177. package/app/public/vendor/fonts/cat-playwrite_is_guides-400-0.woff2 +0 -0
  178. package/app/public/vendor/fonts/cat-playwrite_it_moderna-400-0.woff2 +0 -0
  179. package/app/public/vendor/fonts/cat-playwrite_it_moderna_guides-400-0.woff2 +0 -0
  180. package/app/public/vendor/fonts/cat-playwrite_it_trad-400-0.woff2 +0 -0
  181. package/app/public/vendor/fonts/cat-playwrite_it_trad_guides-400-0.woff2 +0 -0
  182. package/app/public/vendor/fonts/cat-playwrite_mx_guides-400-0.woff2 +0 -0
  183. package/app/public/vendor/fonts/cat-playwrite_ng_modern-400-0.woff2 +0 -0
  184. package/app/public/vendor/fonts/cat-playwrite_ng_modern_guides-400-0.woff2 +0 -0
  185. package/app/public/vendor/fonts/cat-playwrite_nl-400-0.woff2 +0 -0
  186. package/app/public/vendor/fonts/cat-playwrite_nl_guides-400-0.woff2 +0 -0
  187. package/app/public/vendor/fonts/cat-playwrite_no-400-0.woff2 +0 -0
  188. package/app/public/vendor/fonts/cat-playwrite_no_guides-400-0.woff2 +0 -0
  189. package/app/public/vendor/fonts/cat-playwrite_nz-400-0.woff2 +0 -0
  190. package/app/public/vendor/fonts/cat-playwrite_nz_basic-400-0.woff2 +0 -0
  191. package/app/public/vendor/fonts/cat-playwrite_nz_basic_guides-400-0.woff2 +0 -0
  192. package/app/public/vendor/fonts/cat-playwrite_nz_guides-400-0.woff2 +0 -0
  193. package/app/public/vendor/fonts/cat-playwrite_pe_guides-400-0.woff2 +0 -0
  194. package/app/public/vendor/fonts/cat-playwrite_pl-400-0.woff2 +0 -0
  195. package/app/public/vendor/fonts/cat-playwrite_pl_guides-400-0.woff2 +0 -0
  196. package/app/public/vendor/fonts/cat-playwrite_pt_guides-400-0.woff2 +0 -0
  197. package/app/public/vendor/fonts/cat-playwrite_ro-400-0.woff2 +0 -0
  198. package/app/public/vendor/fonts/cat-playwrite_ro_guides-400-0.woff2 +0 -0
  199. package/app/public/vendor/fonts/cat-playwrite_sk-400-0.woff2 +0 -0
  200. package/app/public/vendor/fonts/cat-playwrite_sk_guides-400-0.woff2 +0 -0
  201. package/app/public/vendor/fonts/cat-playwrite_tz-400-0.woff2 +0 -0
  202. package/app/public/vendor/fonts/cat-playwrite_tz_guides-400-0.woff2 +0 -0
  203. package/app/public/vendor/fonts/cat-playwrite_us_modern_guides-400-0.woff2 +0 -0
  204. package/app/public/vendor/fonts/cat-playwrite_us_trad_guides-400-0.woff2 +0 -0
  205. package/app/public/vendor/fonts/cat-playwrite_vn-400-0.woff2 +0 -0
  206. package/app/public/vendor/fonts/cat-playwrite_vn_guides-400-0.woff2 +0 -0
  207. package/app/public/vendor/fonts/cat-playwrite_za-400-0.woff2 +0 -0
  208. package/app/public/vendor/fonts/cat-playwrite_za_guides-400-0.woff2 +0 -0
  209. package/app/public/vendor/fonts/cat-potta_one-400-ext.woff2 +0 -0
  210. package/app/public/vendor/fonts/cat-potta_one-400.woff2 +0 -0
  211. package/app/public/vendor/fonts/cat-ranchers-400-ext.woff2 +0 -0
  212. package/app/public/vendor/fonts/cat-ranchers-400.woff2 +0 -0
  213. package/app/public/vendor/fonts/cat-ranga-400-ext.woff2 +0 -0
  214. package/app/public/vendor/fonts/cat-ranga-400.woff2 +0 -0
  215. package/app/public/vendor/fonts/cat-ranga-700-ext.woff2 +0 -0
  216. package/app/public/vendor/fonts/cat-ranga-700.woff2 +0 -0
  217. package/app/public/vendor/fonts/cat-risque-400-ext.woff2 +0 -0
  218. package/app/public/vendor/fonts/cat-risque-400.woff2 +0 -0
  219. package/app/public/vendor/fonts/cat-rowdies-400-ext.woff2 +0 -0
  220. package/app/public/vendor/fonts/cat-rowdies-400.woff2 +0 -0
  221. package/app/public/vendor/fonts/cat-rowdies-700-ext.woff2 +0 -0
  222. package/app/public/vendor/fonts/cat-rowdies-700.woff2 +0 -0
  223. package/app/public/vendor/fonts/cat-ruge_boogie-400-ext.woff2 +0 -0
  224. package/app/public/vendor/fonts/cat-ruge_boogie-400.woff2 +0 -0
  225. package/app/public/vendor/fonts/cat-ruslan_display-400-ext.woff2 +0 -0
  226. package/app/public/vendor/fonts/cat-ruslan_display-400.woff2 +0 -0
  227. package/app/public/vendor/fonts/cat-sacramento-400-ext.woff2 +0 -0
  228. package/app/public/vendor/fonts/cat-sacramento-400.woff2 +0 -0
  229. package/app/public/vendor/fonts/cat-sancreek-400-ext.woff2 +0 -0
  230. package/app/public/vendor/fonts/cat-sancreek-400.woff2 +0 -0
  231. package/app/public/vendor/fonts/cat-sankofa_display-400-ext.woff2 +0 -0
  232. package/app/public/vendor/fonts/cat-sankofa_display-400.woff2 +0 -0
  233. package/app/public/vendor/fonts/cat-sedgwick_ave_display-400-ext.woff2 +0 -0
  234. package/app/public/vendor/fonts/cat-sedgwick_ave_display-400.woff2 +0 -0
  235. package/app/public/vendor/fonts/cat-shantell_sans-400-ext.woff2 +0 -0
  236. package/app/public/vendor/fonts/cat-shantell_sans-400.woff2 +0 -0
  237. package/app/public/vendor/fonts/cat-smokum-400-ext.woff2 +0 -0
  238. package/app/public/vendor/fonts/cat-smokum-400.woff2 +0 -0
  239. package/app/public/vendor/fonts/cat-solitreo-400-ext.woff2 +0 -0
  240. package/app/public/vendor/fonts/cat-solitreo-400.woff2 +0 -0
  241. package/app/public/vendor/fonts/cat-spicy_rice-400-ext.woff2 +0 -0
  242. package/app/public/vendor/fonts/cat-spicy_rice-400.woff2 +0 -0
  243. package/app/public/vendor/fonts/cat-sriracha-400-ext.woff2 +0 -0
  244. package/app/public/vendor/fonts/cat-sriracha-400.woff2 +0 -0
  245. package/app/public/vendor/fonts/cat-srisakdi-400-ext.woff2 +0 -0
  246. package/app/public/vendor/fonts/cat-srisakdi-400.woff2 +0 -0
  247. package/app/public/vendor/fonts/cat-srisakdi-700-ext.woff2 +0 -0
  248. package/app/public/vendor/fonts/cat-srisakdi-700.woff2 +0 -0
  249. package/app/public/vendor/fonts/cat-stix_two_math-400-0.woff2 +0 -0
  250. package/app/public/vendor/fonts/cat-tillana-400-ext.woff2 +0 -0
  251. package/app/public/vendor/fonts/cat-tillana-400.woff2 +0 -0
  252. package/app/public/vendor/fonts/cat-tillana-700-ext.woff2 +0 -0
  253. package/app/public/vendor/fonts/cat-tillana-700.woff2 +0 -0
  254. package/app/public/vendor/fonts/cat-titan_one-400-ext.woff2 +0 -0
  255. package/app/public/vendor/fonts/cat-titan_one-400.woff2 +0 -0
  256. package/app/public/vendor/fonts/cat-yatra_one-400-ext.woff2 +0 -0
  257. package/app/public/vendor/fonts/cat-yatra_one-400.woff2 +0 -0
  258. package/app/public/vendor/fonts/cat-yomogi-400-ext.woff2 +0 -0
  259. package/app/public/vendor/fonts/cat-yomogi-400.woff2 +0 -0
  260. package/app/public/vendor/fonts/dmserifdisplay-400-ext.woff2 +0 -0
  261. package/app/public/vendor/fonts/dmserifdisplay-400.woff2 +0 -0
  262. package/app/public/vendor/fonts/domine-var-ext.woff2 +0 -0
  263. package/app/public/vendor/fonts/domine-var.woff2 +0 -0
  264. package/app/public/vendor/fonts/fraunces-var-ext.woff2 +0 -0
  265. package/app/public/vendor/fonts/fraunces-var.woff2 +0 -0
  266. package/app/public/vendor/fonts/fredoka-var-ext.woff2 +0 -0
  267. package/app/public/vendor/fonts/fredoka-var.woff2 +0 -0
  268. package/app/public/vendor/fonts/jakarta-var-ext.woff2 +0 -0
  269. package/app/public/vendor/fonts/jakarta-var.woff2 +0 -0
  270. package/app/public/vendor/fonts/lora-var-ext.woff2 +0 -0
  271. package/app/public/vendor/fonts/lora-var.woff2 +0 -0
  272. package/app/public/vendor/fonts/merriweather-var-ext.woff2 +0 -0
  273. package/app/public/vendor/fonts/merriweather-var.woff2 +0 -0
  274. package/app/public/vendor/fonts/notosans-var-ext.woff2 +0 -0
  275. package/app/public/vendor/fonts/notosans-var.woff2 +0 -0
  276. package/app/public/vendor/fonts/nunito-var-ext.woff2 +0 -0
  277. package/app/public/vendor/fonts/nunito-var.woff2 +0 -0
  278. package/app/public/vendor/fonts/playfair-var-ext.woff2 +0 -0
  279. package/app/public/vendor/fonts/playfair-var.woff2 +0 -0
  280. package/app/public/vendor/fonts/playwrite-cu.woff2 +0 -0
  281. package/app/public/vendor/fonts/playwrite-es-deco.woff2 +0 -0
  282. package/app/public/vendor/fonts/playwrite-es.woff2 +0 -0
  283. package/app/public/vendor/fonts/playwrite-gb-j.woff2 +0 -0
  284. package/app/public/vendor/fonts/playwrite-gb-s.woff2 +0 -0
  285. package/app/public/vendor/fonts/playwrite-pe.woff2 +0 -0
  286. package/app/public/vendor/fonts/playwrite-pt.woff2 +0 -0
  287. package/app/public/vendor/fonts/quicksand-var-ext.woff2 +0 -0
  288. package/app/public/vendor/fonts/quicksand-var.woff2 +0 -0
  289. package/app/public/vendor/fonts/robotoflex-var-ext.woff2 +0 -0
  290. package/app/public/vendor/fonts/robotoflex-var.woff2 +0 -0
  291. package/app/public/vendor/fonts/sora-var-ext.woff2 +0 -0
  292. package/app/public/vendor/fonts/sora-var.woff2 +0 -0
  293. package/app/public/vendor/fonts/spacegrotesk-var-ext.woff2 +0 -0
  294. package/app/public/vendor/fonts/spacegrotesk-var.woff2 +0 -0
  295. package/app/public/vendor/fonts/spectral-400-ext.woff2 +0 -0
  296. package/app/public/vendor/fonts/spectral-400.woff2 +0 -0
  297. package/app/public/vendor/fonts/spectral-700-ext.woff2 +0 -0
  298. package/app/public/vendor/fonts/spectral-700.woff2 +0 -0
  299. package/app/public/vendor/fonts/teachers-var-ext.woff2 +0 -0
  300. package/app/public/vendor/fonts/teachers-var.woff2 +0 -0
  301. package/app/public/vendor/fonts/ubuntu-400-ext.woff2 +0 -0
  302. package/app/public/vendor/fonts/ubuntu-400.woff2 +0 -0
  303. package/app/public/vendor/fonts/ubuntu-700-ext.woff2 +0 -0
  304. package/app/public/vendor/fonts/ubuntu-700.woff2 +0 -0
  305. package/app/public/vendor/fonts.css +1167 -51
  306. package/dist-pkg/boot/create-game.d.ts +467 -162
  307. package/dist-pkg/boot/create-game.js +3563 -426
  308. package/dist-pkg/core/a11y-sr.d.ts +25 -3
  309. package/dist-pkg/core/a11y-sr.js +40 -19
  310. package/dist-pkg/core/accessible-label.d.ts +17 -0
  311. package/dist-pkg/core/accessible-label.js +37 -0
  312. package/dist-pkg/core/accommodation-subjects.d.ts +26 -0
  313. package/dist-pkg/core/accommodation-subjects.js +32 -0
  314. package/dist-pkg/core/accommodations.d.ts +107 -0
  315. package/dist-pkg/core/accommodations.js +178 -0
  316. package/dist-pkg/core/actions.d.ts +75 -51
  317. package/dist-pkg/core/actions.js +98 -69
  318. package/dist-pkg/core/calm-mode.d.ts +31 -0
  319. package/dist-pkg/core/calm-mode.js +47 -0
  320. package/dist-pkg/core/camera-cycle.d.ts +15 -0
  321. package/dist-pkg/core/camera-cycle.js +7 -0
  322. package/dist-pkg/core/caption-duration.d.ts +15 -0
  323. package/dist-pkg/core/caption-duration.js +19 -0
  324. package/dist-pkg/core/cartridge-problems.d.ts +34 -0
  325. package/dist-pkg/core/cartridge-problems.js +53 -0
  326. package/dist-pkg/core/constants.d.ts +0 -54
  327. package/dist-pkg/core/constants.js +9 -76
  328. package/dist-pkg/core/contract.d.ts +143 -163
  329. package/dist-pkg/core/contract.js +223 -207
  330. package/dist-pkg/core/dom-query.d.ts +4 -4
  331. package/dist-pkg/core/dom-query.js +12 -20
  332. package/dist-pkg/core/entity.d.ts +62 -77
  333. package/dist-pkg/core/entity.js +18 -32
  334. package/dist-pkg/core/escape-html.d.ts +9 -10
  335. package/dist-pkg/core/escape-html.js +16 -20
  336. package/dist-pkg/core/flash-threshold.d.ts +17 -0
  337. package/dist-pkg/core/flash-threshold.js +113 -0
  338. package/dist-pkg/core/game-speed.d.ts +11 -0
  339. package/dist-pkg/core/game-speed.js +16 -0
  340. package/dist-pkg/core/genres.d.ts +20 -0
  341. package/dist-pkg/core/genres.js +44 -0
  342. package/dist-pkg/core/i18n.d.ts +87 -41
  343. package/dist-pkg/core/i18n.js +206 -153
  344. package/dist-pkg/core/loop.d.ts +17 -6
  345. package/dist-pkg/core/loop.js +26 -26
  346. package/dist-pkg/core/pause-icon-catalogue.d.ts +15 -0
  347. package/dist-pkg/core/pause-icon-catalogue.js +54 -0
  348. package/dist-pkg/core/ring.d.ts +17 -0
  349. package/dist-pkg/core/ring.js +29 -0
  350. package/dist-pkg/core/rng.d.ts +7 -12
  351. package/dist-pkg/core/rng.js +23 -53
  352. package/dist-pkg/core/route.d.ts +26 -26
  353. package/dist-pkg/core/route.js +126 -121
  354. package/dist-pkg/core/scenes.d.ts +37 -40
  355. package/dist-pkg/core/scenes.js +41 -43
  356. package/dist-pkg/core/screens.d.ts +4 -4
  357. package/dist-pkg/core/screens.js +11 -16
  358. package/dist-pkg/core/setting-defaults.d.ts +61 -0
  359. package/dist-pkg/core/setting-defaults.js +66 -0
  360. package/dist-pkg/core/speech-rate.d.ts +29 -0
  361. package/dist-pkg/core/speech-rate.js +47 -0
  362. package/dist-pkg/core/state.d.ts +118 -118
  363. package/dist-pkg/core/state.js +322 -297
  364. package/dist-pkg/core/visual-cycles.d.ts +30 -0
  365. package/dist-pkg/core/visual-cycles.js +52 -0
  366. package/dist-pkg/core/visual-state.d.ts +13 -0
  367. package/dist-pkg/core/visual-state.js +6 -0
  368. package/dist-pkg/educational/activities-registry.d.ts +1 -1
  369. package/dist-pkg/educational/activities-registry.js +9 -8
  370. package/dist-pkg/educational/adaptive-engine.d.ts +11 -11
  371. package/dist-pkg/educational/adaptive-engine.js +17 -17
  372. package/dist-pkg/educational/segment-bar.d.ts +12 -12
  373. package/dist-pkg/educational/segment-bar.js +9 -9
  374. package/dist-pkg/i18n/en.js +321 -215
  375. package/dist-pkg/i18n/es.js +320 -215
  376. package/dist-pkg/i18n/pt.js +342 -215
  377. package/dist-pkg/input/default-bindings.d.ts +37 -38
  378. package/dist-pkg/input/default-bindings.js +127 -144
  379. package/dist-pkg/input/devices.d.ts +7 -7
  380. package/dist-pkg/input/devices.js +17 -16
  381. package/dist-pkg/input/edges.d.ts +23 -32
  382. package/dist-pkg/input/edges.js +23 -28
  383. package/dist-pkg/input/empathy-filter.d.ts +22 -0
  384. package/dist-pkg/input/empathy-filter.js +34 -0
  385. package/dist-pkg/input/face-map.d.ts +96 -0
  386. package/dist-pkg/input/face-map.js +255 -0
  387. package/dist-pkg/input/face-signals.d.ts +40 -0
  388. package/dist-pkg/input/face-signals.js +48 -0
  389. package/dist-pkg/input/gamepad.d.ts +164 -145
  390. package/dist-pkg/input/gamepad.js +351 -559
  391. package/dist-pkg/input/gaze-cycle.d.ts +64 -0
  392. package/dist-pkg/input/gaze-cycle.js +133 -0
  393. package/dist-pkg/input/gaze-relative.d.ts +68 -0
  394. package/dist-pkg/input/gaze-relative.js +142 -0
  395. package/dist-pkg/input/hand-map.d.ts +28 -0
  396. package/dist-pkg/input/hand-map.js +142 -0
  397. package/dist-pkg/input/input-cooldown.d.ts +17 -0
  398. package/dist-pkg/input/input-cooldown.js +39 -0
  399. package/dist-pkg/input/keyboard-runtime.d.ts +18 -20
  400. package/dist-pkg/input/keyboard-runtime.js +23 -27
  401. package/dist-pkg/input/keyboard.d.ts +68 -62
  402. package/dist-pkg/input/keyboard.js +83 -105
  403. package/dist-pkg/input/keydown.d.ts +124 -132
  404. package/dist-pkg/input/keydown.js +283 -288
  405. package/dist-pkg/input/latch-edge.d.ts +25 -21
  406. package/dist-pkg/input/latch-edge.js +33 -35
  407. package/dist-pkg/input/latch-scope.d.ts +43 -47
  408. package/dist-pkg/input/latch-scope.js +66 -75
  409. package/dist-pkg/input/latch-store.d.ts +28 -29
  410. package/dist-pkg/input/latch-store.js +44 -47
  411. package/dist-pkg/input/latch-sync.d.ts +28 -29
  412. package/dist-pkg/input/latch-sync.js +25 -25
  413. package/dist-pkg/input/latch.d.ts +14 -17
  414. package/dist-pkg/input/latch.js +29 -37
  415. package/dist-pkg/input/pad-defaults.d.ts +13 -16
  416. package/dist-pkg/input/pad-defaults.js +21 -28
  417. package/dist-pkg/input/pad-reading.d.ts +76 -0
  418. package/dist-pkg/input/pad-reading.js +164 -0
  419. package/dist-pkg/input/pad-wizard.d.ts +96 -0
  420. package/dist-pkg/input/pad-wizard.js +205 -0
  421. package/dist-pkg/input/pointer-space.d.ts +19 -20
  422. package/dist-pkg/input/pointer-space.js +27 -32
  423. package/dist-pkg/input/pointer.d.ts +39 -40
  424. package/dist-pkg/input/pointer.js +42 -45
  425. package/dist-pkg/input/state.d.ts +101 -89
  426. package/dist-pkg/input/state.js +54 -134
  427. package/dist-pkg/input/switch-scan.d.ts +42 -0
  428. package/dist-pkg/input/switch-scan.js +54 -0
  429. package/dist-pkg/input/synthetic-source.d.ts +42 -0
  430. package/dist-pkg/input/synthetic-source.js +57 -0
  431. package/dist-pkg/input/touch-bindings.d.ts +127 -113
  432. package/dist-pkg/input/touch-bindings.js +158 -173
  433. package/dist-pkg/input/touch.d.ts +130 -70
  434. package/dist-pkg/input/touch.js +321 -123
  435. package/dist-pkg/input/transport-in-use.d.ts +107 -0
  436. package/dist-pkg/input/transport-in-use.js +130 -0
  437. package/dist-pkg/input/transports.d.ts +96 -114
  438. package/dist-pkg/input/transports.js +104 -106
  439. package/dist-pkg/input/virtual-controller.d.ts +46 -0
  440. package/dist-pkg/input/virtual-controller.js +41 -0
  441. package/dist-pkg/input/vocabulary-migration.d.ts +50 -49
  442. package/dist-pkg/input/vocabulary-migration.js +80 -79
  443. package/dist-pkg/input/voice-map.d.ts +43 -0
  444. package/dist-pkg/input/voice-map.js +125 -0
  445. package/dist-pkg/platform/audio-ambient.d.ts +13 -1
  446. package/dist-pkg/platform/audio-ambient.js +11 -13
  447. package/dist-pkg/platform/audio-earcons.d.ts +20 -19
  448. package/dist-pkg/platform/audio-earcons.js +51 -42
  449. package/dist-pkg/platform/audio-jingles.js +9 -10
  450. package/dist-pkg/platform/audio-mixer.d.ts +14 -2
  451. package/dist-pkg/platform/audio-mixer.js +36 -39
  452. package/dist-pkg/platform/audio-sonar.d.ts +96 -113
  453. package/dist-pkg/platform/audio-sonar.js +245 -238
  454. package/dist-pkg/platform/audio.d.ts +53 -19
  455. package/dist-pkg/platform/audio.js +161 -169
  456. package/dist-pkg/platform/flash-sampler.d.ts +19 -0
  457. package/dist-pkg/platform/flash-sampler.js +79 -0
  458. package/dist-pkg/platform/guide-intensity.d.ts +26 -27
  459. package/dist-pkg/platform/guide-intensity.js +50 -52
  460. package/dist-pkg/platform/heavy-catalogue.d.ts +31 -0
  461. package/dist-pkg/platform/heavy-catalogue.js +223 -0
  462. package/dist-pkg/platform/heavy-mirror.d.ts +26 -0
  463. package/dist-pkg/platform/heavy-mirror.js +76 -0
  464. package/dist-pkg/platform/heavy.d.ts +104 -0
  465. package/dist-pkg/platform/heavy.js +169 -0
  466. package/dist-pkg/platform/interruptible-speech.d.ts +16 -16
  467. package/dist-pkg/platform/interruptible-speech.js +50 -51
  468. package/dist-pkg/platform/kokoro-port.d.ts +27 -0
  469. package/dist-pkg/platform/kokoro-port.js +50 -0
  470. package/dist-pkg/platform/kokoro-runtime.d.ts +20 -0
  471. package/dist-pkg/platform/kokoro-runtime.js +52 -0
  472. package/dist-pkg/platform/kokoro.d.ts +70 -0
  473. package/dist-pkg/platform/kokoro.js +133 -0
  474. package/dist-pkg/platform/listener-scope.d.ts +12 -0
  475. package/dist-pkg/platform/listener-scope.js +81 -0
  476. package/dist-pkg/platform/locale-host.d.ts +10 -0
  477. package/dist-pkg/platform/locale-host.js +34 -0
  478. package/dist-pkg/platform/microphone.d.ts +51 -0
  479. package/dist-pkg/platform/microphone.js +118 -0
  480. package/dist-pkg/platform/onnx-runtime.d.ts +34 -0
  481. package/dist-pkg/platform/onnx-runtime.js +42 -0
  482. package/dist-pkg/platform/reading-in-worker.d.ts +40 -0
  483. package/dist-pkg/platform/reading-in-worker.js +87 -0
  484. package/dist-pkg/platform/reading-model.d.ts +73 -0
  485. package/dist-pkg/platform/reading-model.js +247 -0
  486. package/dist-pkg/platform/reading-runtime.d.ts +24 -0
  487. package/dist-pkg/platform/reading-runtime.js +159 -0
  488. package/dist-pkg/platform/reading-worker.d.ts +41 -0
  489. package/dist-pkg/platform/reading-worker.js +58 -0
  490. package/dist-pkg/platform/reading.d.ts +69 -0
  491. package/dist-pkg/platform/reading.js +128 -0
  492. package/dist-pkg/platform/speech-recognition.d.ts +51 -0
  493. package/dist-pkg/platform/speech-recognition.js +84 -0
  494. package/dist-pkg/platform/speech.d.ts +14 -1
  495. package/dist-pkg/platform/speech.js +13 -13
  496. package/dist-pkg/platform/storage-keys.d.ts +96 -0
  497. package/dist-pkg/platform/storage-keys.js +106 -0
  498. package/dist-pkg/platform/storage.d.ts +46 -111
  499. package/dist-pkg/platform/storage.js +104 -169
  500. package/dist-pkg/platform/tts.d.ts +51 -38
  501. package/dist-pkg/platform/tts.js +217 -119
  502. package/dist-pkg/platform/vision-loop.d.ts +23 -0
  503. package/dist-pkg/platform/vision-loop.js +56 -0
  504. package/dist-pkg/platform/vision.d.ts +132 -0
  505. package/dist-pkg/platform/vision.js +117 -0
  506. package/dist-pkg/platform/voice-listener.d.ts +36 -0
  507. package/dist-pkg/platform/voice-listener.js +88 -0
  508. package/dist-pkg/platform/voice-plan.d.ts +6 -102
  509. package/dist-pkg/platform/voice-plan.js +9 -151
  510. package/dist-pkg/platform/vosk-runtime.d.ts +71 -0
  511. package/dist-pkg/platform/vosk-runtime.js +93 -0
  512. package/dist-pkg/render/canvas.d.ts +13 -7
  513. package/dist-pkg/render/canvas.js +13 -13
  514. package/dist-pkg/render/crt.d.ts +46 -12
  515. package/dist-pkg/render/crt.js +82 -80
  516. package/dist-pkg/render/cvd-matrices.d.ts +18 -18
  517. package/dist-pkg/render/cvd-matrices.js +33 -38
  518. package/dist-pkg/render/hc-role-data.d.ts +7 -7
  519. package/dist-pkg/render/hc-role-data.js +14 -14
  520. package/dist-pkg/render/high-contrast.d.ts +66 -54
  521. package/dist-pkg/render/high-contrast.js +221 -216
  522. package/dist-pkg/render/low-vision-drawing.d.ts +5 -0
  523. package/dist-pkg/render/low-vision-drawing.js +46 -0
  524. package/dist-pkg/render/lq-filter.d.ts +32 -20
  525. package/dist-pkg/render/lq-filter.js +59 -65
  526. package/dist-pkg/render/port.d.ts +86 -88
  527. package/dist-pkg/render/port.js +17 -23
  528. package/dist-pkg/render/screen-pipeline.d.ts +42 -42
  529. package/dist-pkg/render/screen-pipeline.js +80 -87
  530. package/dist-pkg/render/sprite-fx.d.ts +2 -1
  531. package/dist-pkg/render/sprite-fx.js +16 -14
  532. package/dist-pkg/render/viewports.d.ts +20 -15
  533. package/dist-pkg/render/viewports.js +83 -114
  534. package/dist-pkg/render/viz-axes-labels.d.ts +47 -0
  535. package/dist-pkg/render/viz-axes-labels.js +88 -0
  536. package/dist-pkg/render/viz-axes.d.ts +80 -86
  537. package/dist-pkg/render/viz-axes.js +115 -116
  538. package/dist-pkg/render/viz-modes.d.ts +28 -29
  539. package/dist-pkg/render/viz-modes.js +40 -45
  540. package/dist-pkg/render/viz-refusal.d.ts +32 -0
  541. package/dist-pkg/render/viz-refusal.js +57 -0
  542. package/dist-pkg/render/viz-setters.d.ts +104 -66
  543. package/dist-pkg/render/viz-setters.js +182 -191
  544. package/dist-pkg/ui/aac-sets.d.ts +40 -0
  545. package/dist-pkg/ui/aac-sets.js +49 -0
  546. package/dist-pkg/ui/audio-choices.d.ts +63 -0
  547. package/dist-pkg/ui/audio-choices.js +94 -0
  548. package/dist-pkg/ui/audio-rows-that-apply.d.ts +12 -0
  549. package/dist-pkg/ui/audio-rows-that-apply.js +43 -0
  550. package/dist-pkg/ui/camera-control.d.ts +6 -0
  551. package/dist-pkg/ui/camera-control.js +14 -0
  552. package/dist-pkg/ui/changed-mark.d.ts +9 -8
  553. package/dist-pkg/ui/changed-mark.js +22 -53
  554. package/dist-pkg/ui/control-choices.d.ts +37 -0
  555. package/dist-pkg/ui/control-choices.js +84 -0
  556. package/dist-pkg/ui/debug-panel.d.ts +59 -43
  557. package/dist-pkg/ui/debug-panel.js +68 -69
  558. package/dist-pkg/ui/dom.d.ts +10 -14
  559. package/dist-pkg/ui/dom.js +10 -47
  560. package/dist-pkg/ui/drawing-problems.d.ts +25 -0
  561. package/dist-pkg/ui/drawing-problems.js +93 -0
  562. package/dist-pkg/ui/eye-control.d.ts +36 -0
  563. package/dist-pkg/ui/eye-control.js +178 -0
  564. package/dist-pkg/ui/face-control.d.ts +25 -0
  565. package/dist-pkg/ui/face-control.js +183 -0
  566. package/dist-pkg/ui/focus-trap.d.ts +39 -49
  567. package/dist-pkg/ui/focus-trap.js +56 -65
  568. package/dist-pkg/ui/fonts.d.ts +118 -63
  569. package/dist-pkg/ui/fonts.js +267 -111
  570. package/dist-pkg/ui/game-options.d.ts +42 -0
  571. package/dist-pkg/ui/game-options.js +138 -0
  572. package/dist-pkg/ui/gaze-overlay.d.ts +64 -0
  573. package/dist-pkg/ui/gaze-overlay.js +165 -0
  574. package/dist-pkg/ui/hand-control.d.ts +25 -0
  575. package/dist-pkg/ui/hand-control.js +143 -0
  576. package/dist-pkg/ui/help-panel.d.ts +76 -0
  577. package/dist-pkg/ui/help-panel.js +232 -0
  578. package/dist-pkg/ui/hud-bands.d.ts +45 -0
  579. package/dist-pkg/ui/hud-bands.js +108 -0
  580. package/dist-pkg/ui/hud.d.ts +73 -70
  581. package/dist-pkg/ui/hud.js +94 -98
  582. package/dist-pkg/ui/item-announcement.d.ts +13 -12
  583. package/dist-pkg/ui/item-announcement.js +25 -26
  584. package/dist-pkg/ui/latch-refusal.d.ts +22 -21
  585. package/dist-pkg/ui/latch-refusal.js +37 -37
  586. package/dist-pkg/ui/layout.d.ts +103 -28
  587. package/dist-pkg/ui/layout.js +114 -99
  588. package/dist-pkg/ui/locale-flags.d.ts +16 -0
  589. package/dist-pkg/ui/locale-flags.js +30 -0
  590. package/dist-pkg/ui/loop-crash.d.ts +17 -17
  591. package/dist-pkg/ui/loop-crash.js +33 -62
  592. package/dist-pkg/ui/menu-intent.d.ts +32 -0
  593. package/dist-pkg/ui/menu-intent.js +54 -0
  594. package/dist-pkg/ui/menu-items.d.ts +10 -0
  595. package/dist-pkg/ui/menu-items.js +22 -0
  596. package/dist-pkg/ui/menu-nav.d.ts +60 -90
  597. package/dist-pkg/ui/menu-nav.js +301 -274
  598. package/dist-pkg/ui/mobility-choices.d.ts +26 -0
  599. package/dist-pkg/ui/mobility-choices.js +41 -0
  600. package/dist-pkg/ui/motion-choices.d.ts +31 -0
  601. package/dist-pkg/ui/motion-choices.js +68 -0
  602. package/dist-pkg/ui/motion-scene.d.ts +24 -19
  603. package/dist-pkg/ui/motion-scene.js +29 -61
  604. package/dist-pkg/ui/mount-panel.d.ts +81 -0
  605. package/dist-pkg/ui/mount-panel.js +61 -0
  606. package/dist-pkg/ui/panel-shell.d.ts +65 -31
  607. package/dist-pkg/ui/panel-shell.js +92 -66
  608. package/dist-pkg/ui/panel-widgets.d.ts +116 -0
  609. package/dist-pkg/ui/panel-widgets.js +208 -0
  610. package/dist-pkg/ui/pause-buttons.d.ts +35 -0
  611. package/dist-pkg/ui/pause-buttons.js +66 -0
  612. package/dist-pkg/ui/pause-icons.d.ts +250 -343
  613. package/dist-pkg/ui/pause-icons.js +614 -605
  614. package/dist-pkg/ui/pause-markup.d.ts +86 -0
  615. package/dist-pkg/ui/pause-markup.js +125 -0
  616. package/dist-pkg/ui/reach-notice.d.ts +22 -23
  617. package/dist-pkg/ui/reach-notice.js +55 -58
  618. package/dist-pkg/ui/scan-overlay.d.ts +23 -0
  619. package/dist-pkg/ui/scan-overlay.js +42 -0
  620. package/dist-pkg/ui/settings-aac.d.ts +68 -0
  621. package/dist-pkg/ui/settings-aac.js +189 -0
  622. package/dist-pkg/ui/settings-audio.d.ts +91 -113
  623. package/dist-pkg/ui/settings-audio.js +407 -405
  624. package/dist-pkg/ui/settings-controls.d.ts +53 -92
  625. package/dist-pkg/ui/settings-controls.js +143 -215
  626. package/dist-pkg/ui/settings-empathy.d.ts +39 -30
  627. package/dist-pkg/ui/settings-empathy.js +53 -60
  628. package/dist-pkg/ui/settings-mobility.d.ts +195 -0
  629. package/dist-pkg/ui/settings-mobility.js +374 -0
  630. package/dist-pkg/ui/settings-motion.d.ts +91 -70
  631. package/dist-pkg/ui/settings-motion.js +287 -198
  632. package/dist-pkg/ui/settings-panel.d.ts +48 -45
  633. package/dist-pkg/ui/settings-panel.js +164 -93
  634. package/dist-pkg/ui/settings-typo.d.ts +28 -76
  635. package/dist-pkg/ui/settings-typo.js +145 -125
  636. package/dist-pkg/ui/settings-visual.d.ts +29 -87
  637. package/dist-pkg/ui/settings-visual.js +240 -193
  638. package/dist-pkg/ui/shell.d.ts +113 -134
  639. package/dist-pkg/ui/shell.js +143 -216
  640. package/dist-pkg/ui/simulation-list.d.ts +27 -0
  641. package/dist-pkg/ui/simulation-list.js +76 -0
  642. package/dist-pkg/ui/simulation-over-the-world.d.ts +23 -0
  643. package/dist-pkg/ui/simulation-over-the-world.js +131 -0
  644. package/dist-pkg/ui/simulation-refusal.d.ts +5 -31
  645. package/dist-pkg/ui/simulation-refusal.js +8 -56
  646. package/dist-pkg/ui/switchable-control.d.ts +11 -0
  647. package/dist-pkg/ui/switchable-control.js +19 -0
  648. package/dist-pkg/ui/title.d.ts +4 -4
  649. package/dist-pkg/ui/title.js +11 -13
  650. package/dist-pkg/ui/top-band.d.ts +24 -0
  651. package/dist-pkg/ui/top-band.js +100 -0
  652. package/dist-pkg/ui/typo-choices.d.ts +71 -0
  653. package/dist-pkg/ui/typo-choices.js +84 -0
  654. package/dist-pkg/ui/visual-axes-panel.d.ts +11 -47
  655. package/dist-pkg/ui/visual-axes-panel.js +12 -94
  656. package/dist-pkg/ui/visual-choices.d.ts +77 -0
  657. package/dist-pkg/ui/visual-choices.js +107 -0
  658. package/dist-pkg/ui/vlibras.d.ts +33 -10
  659. package/dist-pkg/ui/vlibras.js +58 -81
  660. package/dist-pkg/ui/voice-control.d.ts +46 -0
  661. package/dist-pkg/ui/voice-control.js +143 -0
  662. package/dist-pkg/ui/voice-settings.d.ts +96 -0
  663. package/dist-pkg/ui/voice-settings.js +302 -0
  664. package/dist-pkg/ui/where-the-child-is.d.ts +31 -0
  665. package/dist-pkg/ui/where-the-child-is.js +70 -0
  666. package/docs/CREDITS.md +198 -54
  667. package/docs/LICENSES.md +160 -145
  668. package/package.json +24 -25
  669. package/scripts/heavy-into-the-delivery.mjs +144 -0
  670. package/scripts/licences/Apache-2.0.txt +176 -0
  671. package/scripts/licences/GPL-3.0.txt +674 -0
  672. package/scripts/licences/MIT.txt +17 -0
  673. package/scripts/licences/third-party.mjs +287 -0
  674. package/scripts/licences/vosk-browser.NOTICE.txt +268 -0
  675. package/app/public/vendor/fonts/comicneue-400.woff2 +0 -0
  676. package/app/public/vendor/fonts/comicneue-700.woff2 +0 -0
  677. package/dist-pkg/core/anel.d.ts +0 -17
  678. package/dist-pkg/core/anel.js +0 -31
  679. package/dist-pkg/core/collision.d.ts +0 -21
  680. package/dist-pkg/core/collision.js +0 -62
  681. package/dist-pkg/core/layers.d.ts +0 -63
  682. package/dist-pkg/core/layers.js +0 -95
  683. package/dist-pkg/core/letter-grid.d.ts +0 -55
  684. package/dist-pkg/core/letter-grid.js +0 -116
  685. package/dist-pkg/core/password.d.ts +0 -34
  686. package/dist-pkg/core/password.js +0 -205
  687. package/dist-pkg/core/rotulo-acessivel.d.ts +0 -17
  688. package/dist-pkg/core/rotulo-acessivel.js +0 -41
  689. package/dist-pkg/core/run-state.d.ts +0 -115
  690. package/dist-pkg/core/run-state.js +0 -40
  691. package/dist-pkg/core/tiles.d.ts +0 -12
  692. package/dist-pkg/core/tiles.js +0 -61
  693. package/dist-pkg/core/world.d.ts +0 -4
  694. package/dist-pkg/core/world.js +0 -58
  695. package/dist-pkg/input/origem-sintetica.d.ts +0 -44
  696. package/dist-pkg/input/origem-sintetica.js +0 -60
  697. package/dist-pkg/input/transporte-em-uso.d.ts +0 -101
  698. package/dist-pkg/input/transporte-em-uso.js +0 -130
  699. package/dist-pkg/platform/audio-nav.d.ts +0 -51
  700. package/dist-pkg/platform/audio-nav.js +0 -99
  701. package/dist-pkg/platform/pesados-catalogo.d.ts +0 -14
  702. package/dist-pkg/platform/pesados-catalogo.js +0 -177
  703. package/dist-pkg/platform/pesados.d.ts +0 -31
  704. package/dist-pkg/platform/pesados.js +0 -75
  705. package/dist-pkg/platform/vozes-prontas.d.ts +0 -28
  706. package/dist-pkg/platform/vozes-prontas.js +0 -61
  707. package/dist-pkg/render/camera.d.ts +0 -58
  708. package/dist-pkg/render/camera.js +0 -105
  709. package/dist-pkg/render/cenario-data.d.ts +0 -127
  710. package/dist-pkg/render/cenario-data.js +0 -145
  711. package/dist-pkg/render/city-tex.d.ts +0 -63
  712. package/dist-pkg/render/city-tex.js +0 -228
  713. package/dist-pkg/render/city-tiles.d.ts +0 -11
  714. package/dist-pkg/render/city-tiles.js +0 -140
  715. package/dist-pkg/render/draw.d.ts +0 -149
  716. package/dist-pkg/render/draw.js +0 -231
  717. package/dist-pkg/render/fx.d.ts +0 -63
  718. package/dist-pkg/render/fx.js +0 -123
  719. package/dist-pkg/render/minimap.d.ts +0 -11
  720. package/dist-pkg/render/minimap.js +0 -94
  721. package/dist-pkg/render/parallax.d.ts +0 -85
  722. package/dist-pkg/render/parallax.js +0 -158
  723. package/dist-pkg/render/player-anim.d.ts +0 -71
  724. package/dist-pkg/render/player-anim.js +0 -152
  725. package/dist-pkg/render/recycling-tex.d.ts +0 -48
  726. package/dist-pkg/render/recycling-tex.js +0 -164
  727. package/dist-pkg/render/scene-city.d.ts +0 -77
  728. package/dist-pkg/render/scene-city.js +0 -181
  729. package/dist-pkg/render/scene-parallax.d.ts +0 -72
  730. package/dist-pkg/render/scene-parallax.js +0 -426
  731. package/dist-pkg/render/scene-sky.d.ts +0 -126
  732. package/dist-pkg/render/scene-sky.js +0 -295
  733. package/dist-pkg/render/set-cenario.d.ts +0 -54
  734. package/dist-pkg/render/set-cenario.js +0 -103
  735. package/dist-pkg/render/textures.d.ts +0 -75
  736. package/dist-pkg/render/textures.js +0 -240
  737. package/dist-pkg/render/title-scene.d.ts +0 -46
  738. package/dist-pkg/render/title-scene.js +0 -75
  739. package/dist-pkg/render/weather.d.ts +0 -96
  740. package/dist-pkg/render/weather.js +0 -171
  741. package/dist-pkg/render/wheelchair-sprites.d.ts +0 -32
  742. package/dist-pkg/render/wheelchair-sprites.js +0 -69
  743. package/dist-pkg/render/world-tex.d.ts +0 -18
  744. package/dist-pkg/render/world-tex.js +0 -87
  745. package/dist-pkg/ui/activities-menu.d.ts +0 -258
  746. package/dist-pkg/ui/activities-menu.js +0 -648
  747. package/dist-pkg/ui/caa-sets.d.ts +0 -39
  748. package/dist-pkg/ui/caa-sets.js +0 -65
  749. package/dist-pkg/ui/map-hub.d.ts +0 -56
  750. package/dist-pkg/ui/map-hub.js +0 -138
  751. package/dist-pkg/ui/settings-caa.d.ts +0 -45
  752. package/dist-pkg/ui/settings-caa.js +0 -137
  753. package/dist-pkg/ui/settings-motor.d.ts +0 -175
  754. package/dist-pkg/ui/settings-motor.js +0 -342
  755. package/dist-pkg/ui/webcam.d.ts +0 -7
  756. package/dist-pkg/ui/webcam.js +0 -93
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-or-later
2
- // Locale pt-BR — idioma base (import ESTÁTICO em core/i18n.ts → boot síncrono). Ver docs/plano-i18n.md.
2
+ // Locale pt-BR — idioma base (import ESTÁTICO em core/i18n.ts → boot síncrono). Ver docs/1-Discovery/plan-i18n.md.
3
3
  // A UI em pt é extraída em lotes; en/es caem no fallback pt até serem completados (Etapa 4).
4
4
  const pt = {
5
5
  // ===================== ANÚNCIOS DE LEITOR DE TELA (`sr.*`) =====================
@@ -13,15 +13,11 @@ const pt = {
13
13
  'sr.player.entered': 'Jogador {n} entrou!',
14
14
  // A RECICLAGEM (ADR-0049 §1: a boa ação vale um PONTO, e ponto não move barra nenhuma). As quatro cores
15
15
  // são conteúdo curricular — Resolução CONAMA 275/2001 —, então a fala DIZ a cor, e não só "certo/errado".
16
- 'sr.lixo.pegou': 'Você pegou: {o}.',
17
16
  'sr.lixo.soltou': 'Você soltou: {o}.',
18
- 'sr.lixo.acertou': 'Certo! {o} vai na lixeira {cor}. Um ponto.',
19
- 'sr.lixo.errou': 'Essa não é a lixeira do {o}. Tente outra cor.',
20
17
  'sr.lixo.solta': 'Aqui não se joga lixo. Você deixou cair na placa.',
21
18
  'sr.lixo.barreira': 'A placa não deixa o lixo passar.',
22
19
  'lixo.obj.papel': 'caixa de papelão',
23
20
  'lixo.obj.plastico': 'garrafa PET',
24
- 'lixo.obj.metal': 'latinha de alumínio',
25
21
  'lixo.obj.vidro': 'pote de vidro',
26
22
  'lixo.cor.azul': 'azul',
27
23
  'lixo.cor.vermelha': 'vermelha',
@@ -29,80 +25,83 @@ const pt = {
29
25
  'lixo.cor.verde': 'verde',
30
26
  'sr.print.on': 'Modo Print: veja a tela sem menus. Aperte qualquer botão para voltar.',
31
27
  'sr.player.pressToJoin': 'Jogador {n}: aperte um botão para entrar.',
28
+ // O selo VISÍVEL da tela sem dono (`ui/hud.waitBadgeHtml`). Parece-se com a linha acima e não é a mesma: a
29
+ // de cima é para quem ESCUTA, esta diz QUAL botão, porque quem a lê tem outras pessoas à volta.
30
+ 'hud.waitBadge': 'Jogador {n}: aperte um botão do SEU teclado ou de um controle livre para entrar',
32
31
  'sr.libras.loading': 'Intérprete de Libras ainda carregando — tente de novo em instantes.',
33
- 'sr.eyes.loadFailed': 'WebGazer não carregou.',
34
- 'sr.eyes.calibrate': 'Jogar com os olhos: olhe pela tela e clique em alguns pontos para calibrar. Olhar esquerda/direita anda; olhar para cima pula.',
35
- 'sr.eyes.needsInternet': 'Não foi possível carregar o WebGazer (precisa de internet no 1º uso).',
32
+ // ⚠️ Esta frase não é lida: é SINALIZADA. Ela vai para o widget do VLibras no instante em que o modo liga, e é a primeira
33
+ // coisa que o intérprete diz a quem acabou de o chamar — curta de propósito, e uma saudação, não um estado de sistema.
34
+ 'sr.libras.on': 'Olá! O intérprete de Libras está ligado.',
35
+ 'sr.eyes.needsInternet': 'O controle pelo olhar ainda não chegou a este aparelho: ele desce na primeira vez que o jogo abre com internet.',
36
+ // the eye control's words over the game (ADR-0213 §6): a region tells a preparing look which way to go, the opposite of itself
37
+ 'gaze.lookHere': 'Olhe aqui',
38
+ 'gaze.loading': 'Carregando...',
39
+ 'gaze.prepare.up': 'Desça!',
40
+ 'gaze.prepare.right': 'Pra Esquerda!',
41
+ 'gaze.prepare.down': 'Suba!',
42
+ 'gaze.prepare.left': 'Pra Direita!',
43
+ 'sr.face.lookMiddle': 'Olhe para o meio da tela com o rosto parado até eu dizer pronto.',
44
+ 'sr.face.ready': 'Pronto: já pode jogar com o rosto.',
45
+ 'sr.face.noCamera': 'O controle pelo rosto precisa da câmera, e ela não abriu. Permita a câmera para esta página.',
46
+ 'sr.face.needsInternet': 'O controle pelo rosto ainda não chegou a este aparelho: ele desce na primeira vez que o jogo abre com internet.',
47
+ 'sr.face.stopped': 'O controle pelo rosto parou de receber imagens da câmera.',
48
+ 'sr.face.slow': 'O controle pelo rosto está lento neste aparelho e pode não responder.',
49
+ 'sr.eyes.lookMiddle': 'Olhe para o meio da tela e não mexa os olhos até eu dizer pronto.',
50
+ 'sr.eyes.ready': 'Pronto: já pode jogar com os olhos.',
51
+ 'sr.eyes.noCamera': 'O controle pelo olhar precisa da câmera, e ela não abriu. Permita a câmera para esta página.',
52
+ 'sr.eyes.stopped': 'O controle pelo olhar parou de receber imagens da câmera.',
53
+ 'sr.eyes.slow': 'O controle pelo olhar está lento neste aparelho e pode não responder.',
36
54
  'sr.typo.font': 'Tipografia: {fam}.',
55
+ 'sr.icon.velocidade': 'Velocidade do jogo: {pct}%.',
37
56
  'sr.visual.contrast': 'Alto contraste: {v}.',
38
57
  'sr.visual.lq': 'Realce de contraste: {v}.',
39
- 'sr.gate.open': 'Portão aberto!',
40
- 'sr.key.taken': '{who}pegou a chave. Toque no portão para abri-lo.',
41
- 'sr.key.returned': 'A chave voltou para o lugar de origem.',
42
- 'sr.power.swapHint': '{msg} (Trocar poder cicla entre os coletados.)',
43
- 'sr.round.multi': '{n} jogadores, cada um na sua tela. Corram pelas moedas.',
44
- 'sr.round.somasub': 'Modo Soma-Sub. Toque nas figuras e resolva as contas.',
45
- 'sr.round.silabas': 'Modo Sílabas. Toque nas letras e monte as palavras.',
46
- 'sr.round.ludico': 'Nova rodada. Colete 10 moedas.',
47
- 'sr.screens.mobileOnly': 'No celular o jogo roda em uma tela só.',
48
- 'sr.screens.alreadyN': '{n} telas já ativas.',
49
- 'sr.screens.already1': '1 tela.',
50
- 'sr.screens.wontFitN': 'Não cabem {n} telas nesta janela — cada tela precisa de ao menos 640×360. Aumente a janela ou use tela cheia.',
51
58
  'sr.screens.wontFitOneMore': 'Não cabe mais uma tela nesta janela — cada tela precisa de ao menos 640×360. Aumente a janela ou use tela cheia.',
52
- 'sr.screens.activeN': '{n} telas ativas.',
53
- 'sr.screens.newRoundN': '{n} telas ativas — nova rodada.',
54
- 'sr.screens.newRound1': '1 tela — nova rodada.',
55
59
  'sr.screens.maxPlayers': 'Já são 4 jogadores.',
56
- 'sr.player.restarted': 'Jogador {n} recomeçou nesta tela.',
57
- 'sr.player.joined': 'Jogador {n} entrou no jogo em andamento.',
58
- 'sr.player.quit': 'Jogador {n} abandonou o jogo.',
59
60
  // Objetivo no HUD (texto em DOM, mesma árvore de decisão do anúncio de rodada)
60
- 'hud.objective.multi': '{n} jogadores — corrida pelas {alvo} moedas',
61
- 'hud.objective.somasub': 'Resolva 10 contas',
62
- 'hud.objective.silabas': 'Monte 10 palavras',
63
- 'hud.objective.ludico': 'Colete 10 moedas',
64
61
  // A MOLDURA do contador do HUD. O nome do objetivo atravessa por `{nome}` e NÃO se traduz aqui: quem
65
62
  // o declara é o jogo (campo 5 do contrato). Sem artigo de propósito — assim a frase serve a qualquer
66
63
  // gênero gramatical, e o `gender` do Speakable fica para as frases que precisam concordar.
67
64
  'hud.contador': '{have} de {need} {nome}',
65
+ 'hud.numero': '{nome}: {valor}',
66
+ 'hud.barra': '{nome}: {azuis} de primeira, {verdes} com ajuda, {vermelhos} sem acertar',
67
+ 'hud.barra.sobe': 'o nível sobe',
68
+ 'hud.barra.desce': 'o nível desce',
68
69
  // O NOME do que este jogo junta. Currículo não se traduz (pilar 3), mas "moedas" não é currículo — é um
69
70
  // substantivo comum da interface, e a criança que joga em inglês tem de ouvir "coins". Por isso o nome
70
71
  // atravessa por `{nome}` JÁ RESOLVIDO pelo jogo, e a chave mora aqui.
71
- 'hud.nome.moedas': 'moedas',
72
- 'hud.nome.moeda': 'moeda',
73
72
  // O rótulo do botão dinâmico do menu de pausa. `{nome}` é o nome do nível, que o JOGO resolve — currículo
74
73
  // não se traduz (pilar 3); a MOLDURA, sim, e é ela que mora aqui.
75
74
  'pause.nivel': '📚 Nível {n} · {nome}',
76
75
  // LEGENDAS DOS EARCONS (item 19). Eram texto cru dentro de `platform/audio` — nove frases numa camada de
77
76
  // engine, invisíveis ao gate de i18n do `main.js`. É o que a criança SURDA lê no lugar do som: deixá-las em
78
77
  // português num build em inglês tirava dela exatamente a informação que a legenda existe para dar.
79
- 'sfx.jump': '🔊 Pulo',
80
- 'sfx.coin': '🔊 Coletou',
81
- 'sfx.hurt': '🔊 Ai! Dano',
82
- 'sfx.win': '🔊 Vitória!',
83
- 'sfx.correct': '🔊 Acertou!',
84
- 'sfx.wrong': '🔊 Tente de novo',
85
- 'sfx.power': '🔊 Power-up!',
86
- 'sfx.key': '🔊 Chave',
87
- 'sfx.gate': '🔊 Portão abriu',
88
78
  // Chrome / navegação
89
79
  'skip.toGame': 'Pular para o jogo',
90
- 'menu.ludico': 'Lúdico',
91
- 'menu.alfabetizacao': 'Alfabetização',
92
- 'menu.matematica': 'Matemática',
93
80
  // Tela de título
94
- 'title.byline': 'by Prof. José Rocha',
95
- 'title.wait': 'Aguarde o Jogador 1 escolher o jogo',
96
81
  // Vitória
97
- 'win.title': '🎉 Você coletou as 10 moedas!',
98
- 'win.again': 'Jogar de novo',
99
82
  // Menu de pausa (por tela — buildScreenPause). O botão de letra (ABC/abc/Braille) é dinâmico, fica fora.
100
83
  'pause.title': 'Pausado',
101
- 'pause.resume': '▶ Continuar',
102
- 'pause.acessibilidade': '♿ Acessibilidade',
103
- 'pause.options': '⚙ Opções',
104
- 'pause.pmback': '↩ Voltar',
84
+ 'pause.resume': 'Voltar',
85
+ // A palavra da PAUSA RÁPIDA, ao centro da tela congelada (ADR-0155). Curta: é para ler de relance.
86
+ 'pause.quick': 'PAUSADO',
87
+ // A legenda do rodapé da pausa rápida (errata do ADR-0155), nas palavras do Dev.
88
+ 'pause.quick.legenda': '2: confirmar · 3: voltar · 4: menu · START: voltar ao jogo',
89
+ 'pause.card.legenda': '2: confirmar · 3: voltar',
90
+ 'pause.acessibilidade': 'Acessibilidade',
91
+ 'pause.options': 'Configurações de inclusão',
92
+ 'pause.opcoesdojogo': 'Opções do jogo',
93
+ 'pause.pmback': 'Voltar',
105
94
  'pause.cardAria': 'Menu de pausa do jogador {n}',
95
+ // O sufixo do título do cartão, só em multijogador. Era português cru colado no markup de `ui/pause-icons`.
96
+ 'pause.cardSeat': ' · Jogador {n}',
97
+ // A TELA DE AJUDA (ADR-0147 §4): qual botão faz o quê, neste jogo, no teclado desta criança. A moldura mora
98
+ // aqui; as PALAVRAS de cada posição são do jogo e chegam pelo `preset` (ADR-0085).
99
+ 'menu.help': 'Ajuda',
100
+ 'help.grupo.rotulo': 'Os botões deste jogo',
101
+ // O que a linha diz quando o teclado não alcança aquela posição. É informação e não erro: quem joga só com
102
+ // controle ou só com o dedo tem posições sem tecla, e dizê-lo é melhor do que mostrar uma linha vazia.
103
+ 'help.noKey': 'sem tecla',
104
+ 'help.slide.tecla': 'Tecla {k}',
106
105
  /* --- CATÁLOGO DE ATIVIDADES: só o que NÃO é alfabetização. As cinco de alfabetização seguem cruas em
107
106
  pt-BR no `educational/activities-registry`, porque a palavra e a sílaba SÃO a matéria (pilar 3). --- */
108
107
  'act.ludico.nome': 'Coletar 10 moedas',
@@ -130,19 +129,22 @@ const pt = {
130
129
  'act.fr632.d': 'Some e subtraia sextos, terços e meios.',
131
130
  'act.fr2a6.nome': 'Soma e subtração com frações de meio a sextos',
132
131
  'act.fr2a6.d': 'Some e subtraia frações de meios a sextos.',
133
- 'pause.tipo': '🔤 Tipografia',
134
- 'pause.addplayer': '👥 Adicionar jogador',
135
- 'pause.audio': '🦻 Acessibilidade auditiva',
136
- 'pause.motora': '♿ Acessibilidade motora',
137
- 'pause.anim': '🎞 Sensibilidade visual',
138
- 'pause.visual': '🎨 Acessibilidade visual',
139
- 'pause.empatia': '🫂 Modo empatia',
140
- 'pause.ajuda': '❓ Ajuda',
141
- 'pause.print': '📷 Print (ver a tela)',
142
- 'pause.quit': '🚪 Sair do jogo',
132
+ 'pause.tipo': 'Tipografia',
133
+ 'pause.addplayer': 'Número de jogadores',
134
+ 'pause.audio': 'Acessibilidade auditiva',
135
+ 'pause.som': 'Conforto auditivo',
136
+ 'pause.motora': 'Acessibilidade motora',
137
+ 'pause.anim': 'Sensibilidade visual',
138
+ 'pause.visual': 'Acessibilidade visual',
139
+ 'pause.empatia': 'Modo empatia',
140
+ 'pause.ajuda': 'Ajuda — Como jogar',
141
+ 'pause.print': 'Print (ver a tela)',
142
+ 'pause.quit': 'Sair do jogo',
143
+ 'pause.motivo': 'Este jogo não usa esta opção.',
144
+ 'pause.motivo.ajuda': 'Este jogo ainda não disse o que cada botão faz.',
145
+ 'pause.motivo.addplayer': 'Quem decide quantos jogadores podem jogar é o jogo.',
146
+ 'pause.motivo.opcoesdojogo': 'Este jogo não tem opções próprias.',
143
147
  // Acessibilidade (leitores de tela)
144
- 'a11y.gameRegion': 'Área de jogo. Mova com A e D ou setas; pule com L ou Espaço; suba e desça escadas (e nade na água) com W e S ou setas; corra com P ou Shift. Colete 10 moedas.',
145
- 'game.instructions': 'Mova o personagem pela caverna e colete 10 moedas. Sem limite de tempo. Controles: A e D ou setas movem; L ou Espaço pulam; W e S (ou setas cima/baixo) sobem/descem escadas e nadam; P ou Shift correm.',
146
148
  // Controles de toque — rótulos das 9 posições e das 9 ações mapeáveis (painel #touchcfg) e os anúncios.
147
149
  // Rótulo é MOLDURA inteira: em inglês "(cima)" vira "(up)" e a seta fica onde está, então a seta viaja
148
150
  // dentro da tradução em vez de ser concatenada fora dela.
@@ -151,10 +153,20 @@ const pt = {
151
153
  'touch.slot.left': 'Direcional ← (esquerda)',
152
154
  'touch.slot.right': 'Direcional → (direita)',
153
155
  'touch.slot.start': 'START (enter)',
156
+ 'touch.start': 'START',
157
+ 'touch.nome.up': 'Cima',
158
+ 'touch.nome.down': 'Baixo',
159
+ 'touch.nome.left': 'Esquerda',
160
+ 'touch.nome.right': 'Direita',
161
+ 'touch.select': 'SELECT',
154
162
  'touch.slot.b0': 'Botão 0 (baixo)',
155
163
  'touch.slot.b1': 'Botão 1 (direita)',
156
164
  'touch.slot.b2': 'Botão 2 (esquerda)',
157
165
  'touch.slot.b3': 'Botão 3 (cima)',
166
+ 'touch.slot.bl2': 'L2 (gatilho esquerdo)',
167
+ 'touch.slot.bl1': 'L1 (ombro esquerdo)',
168
+ 'touch.slot.br2': 'R2 (gatilho direito)',
169
+ 'touch.slot.br1': 'R1 (ombro direito)',
158
170
  'touch.slot.fallback': 'Botão',
159
171
  'touch.act.left': 'Andar à esquerda',
160
172
  'touch.act.right': 'Andar à direita',
@@ -164,7 +176,6 @@ const pt = {
164
176
  'touch.act.run': 'Correr / interagir',
165
177
  'touch.act.especial': 'Especial',
166
178
  'touch.act.swap': 'Trocar poder',
167
- 'touch.act.pause': 'Pausar (START)',
168
179
  'touch.dir.cross': 'cruz (D-pad)',
169
180
  'touch.dir.stick': 'analógico',
170
181
  'sr.touch.slotSet': '{slot}: {acao}.',
@@ -207,7 +218,6 @@ const pt = {
207
218
  'audio.voiceSample': 'Olá! Esta é a voz da narração do Inclusionista. Um, dois, três, testando.',
208
219
  // Os NOMES dos motores são nomes próprios e ficam; o que traduz é a explicação entre parênteses.
209
220
  'tts.engine.webspeech': 'Voz do navegador (Web Speech)',
210
- 'tts.engine.piper': 'Piper (neural, offline) — baixa no 1º uso',
211
221
  'tts.engine.kokoro': 'Kokoro-82M (neural) — baixa no 1º uso',
212
222
  'tts.engine.kitten': 'Kitten (neural) — baixa no 1º uso',
213
223
  'tts.engine.espeak': 'eSpeak NG (embutido)',
@@ -224,18 +234,58 @@ const pt = {
224
234
  'sr.audio.voicePicked': 'Voz selecionada.',
225
235
  'sr.audio.testingVoice': 'Testando a voz selecionada.',
226
236
  // Barra de icones de acessibilidade (menu de pausa e splash) + os niveis que ela cicla.
227
- 'icon.blind': 'Modo cego (navegação sonora)',
228
- 'icon.tts': 'Narração por voz (TTS)',
229
- 'icon.libras': 'Modo pessoa surda (Libras)',
230
- 'icon.tea': 'Modo TEA (calmo / silencioso)',
231
- 'icon.altmove': 'Teclas de alternância',
237
+ 'icon.blind': 'Modo cego',
238
+ 'icon.tts': 'Narração por voz',
239
+ 'icon.libras': 'Modo pessoa surda',
240
+ 'icon.tea': 'Modo TEA',
241
+ // ☝️ deixou de ser um interruptor e passou a três posições (ADR-0218): o nome diz o ASSUNTO e o valor diz a posição.
242
+ 'icon.altmove': 'Jeito de apertar',
243
+ 'input.standard': 'padrão',
244
+ 'input.sticky': 'não precisa segurar',
245
+ 'scan.nothing': 'cancelar',
246
+ 'input.scan': 'um botão só',
232
247
  'icon.contrast': 'Alto contraste',
233
- 'icon.cvd': 'Correção de daltonismo (protan/deutan/tritan)',
234
- 'icon.face': 'Webcam — rosto',
235
- 'icon.eyes': 'Webcam — olhos',
248
+ 'icon.cvd': 'Correção de daltonismo',
236
249
  'icon.voice': 'Comando de voz',
250
+ // O 11.º ícone (ADR-0149): um ciclo de tipografia — muda a CAIXA e a FACE de uma vez, sem sair da tela.
251
+ // ADR-0151: o ciclo de «leitura e tipografia» virou o ciclo de COMUNICAÇÃO (vai ganhar ARASAAC e PCS).
252
+ 'icon.tipografia': 'Comunicação',
253
+ 'icon.velocidade': 'Velocidade do jogo',
254
+ 'icon.velocidade.valor': '{pct}%',
255
+ 'icon.blind.dica': 'Joga-se pelo som: a navegação sonora diz o que a tela mostra.',
256
+ 'icon.tts.dica': 'O jogo lê em voz alta o que está escrito na tela.',
257
+ 'icon.libras.dica': 'Um intérprete de Libras mostra em sinais o que o jogo diz.',
258
+ 'icon.tea.dica': 'Deixa o jogo mais calmo ou em silêncio, para quem se sobrecarrega com estímulos.',
259
+ 'icon.altmove.dica': 'Como os seus toques são lidos: do jeito padrão; ou com um toque que liga e outro que desliga, sem segurar; ou com um botão só, em que o jogo mostra cada coisa por vez e você aperta na que quer.',
260
+ 'sr.icon.inputMode': 'Jeito de apertar: {v}.',
261
+ 'icon.contrast.dica': 'Aumenta a diferença entre o que importa e o fundo: 3:1, 4,5:1 ou 7:1.',
262
+ 'icon.cvd.dica': 'Ajusta as cores para quem confunde vermelho e verde (protan, deutan) ou azul e amarelo (tritan).',
263
+ 'icon.idioma': 'Idioma',
264
+ 'icon.idioma.dica': 'Trocar o idioma do jogo: menus, explicações, voz e reconhecimento de fala.',
265
+ 'icon.camera': 'Webcam',
266
+ 'icon.camera.dica': 'Jogar pela webcam: com gestos das mãos, com o rosto ou com os olhos. As linhas mostram o que a câmera lê.',
267
+ 'camera.hands': 'gestos das mãos',
268
+ 'camera.face': 'rosto',
269
+ 'camera.eyes': 'olhos',
270
+ 'sr.icon.voice': 'Comando de voz: {v}.',
271
+ 'sr.icon.camera': 'Jogar pela webcam: {v}.',
272
+ 'sr.voice.ready': 'Pronto: já pode jogar falando.',
273
+ 'sr.voice.noMicrophone': 'O controle por voz precisa do microfone, e ele não abriu. Permita o microfone para esta página.',
274
+ 'sr.voice.failed': 'O comando de voz não conseguiu começar neste aparelho.',
275
+ 'sr.voice.needsInternet': 'O controle por voz ainda não chegou a este aparelho: ele desce na primeira vez que o jogo abre com internet.',
276
+ 'sr.hands.ready': 'Pronto: já pode jogar com gestos das mãos.',
277
+ 'sr.hands.noCamera': 'O controle por gestos precisa da câmera, e ela não abriu. Permita a câmera para esta página.',
278
+ 'sr.hands.needsInternet': 'O controle por gestos ainda não chegou a este aparelho: ele desce na primeira vez que o jogo abre com internet.',
279
+ 'sr.hands.stopped': 'O controle por gestos parou de receber imagens da câmera.',
280
+ 'sr.hands.slow': 'O controle por gestos está lento neste aparelho e pode não responder.',
281
+ 'icon.menu': 'Menu',
282
+ 'icon.menu.dica': 'Abrir os menus: ajuda, configurações de inclusão, opções do jogo e sair.',
283
+ 'sr.icon.idioma': 'Idioma: {v}.',
284
+ 'icon.voice.dica': 'Controlar o jogo falando.',
285
+ 'icon.tipografia.dica': 'Troca a forma das letras: caixa alta, letras mais legíveis ou a letra cursiva do seu país.',
286
+ 'icon.velocidade.dica': 'Deixa o jogo inteiro mais devagar: o tempo, o mundo e o momento de agir.',
237
287
  'icon.state': '{nome}: {v}',
238
- 'icon.soon': '{nome} (em construção)',
288
+ 'ui.soon': 'em breve',
239
289
  'state.on': 'ligado',
240
290
  'state.off': 'desligado',
241
291
  'calm.off': 'desligado',
@@ -250,6 +300,31 @@ const pt = {
250
300
  'contrast.3': '3:1',
251
301
  'contrast.45': '4,5:1',
252
302
  'contrast.7': '7:1',
303
+ 'visual.lq': 'Realce de contraste',
304
+ 'visual.lq.dica': 'Curva de tom na tela inteira: linear estica o contraste, quadrático realça sombras e altas-luzes, e misto fica entre os dois. Vale para todos os jogadores.',
305
+ 'menu.visual': 'Acessibilidade visual',
306
+ 'menu.empathy': 'Modo empatia',
307
+ 'empathy.grupo.rotulo': 'Simulações',
308
+ 'empathy.simulacao.dica': 'Mostra o jogo como o vê quem tem a deficiência escolhida.',
309
+ 'empathy.hearing': 'Simular perda auditiva',
310
+ 'empathy.hearing.dica': 'Sons fracos ficam abafados e os agudos são cortados, como ouve quem tem perda auditiva.',
311
+ 'empathy.onebtn': 'Simular um botão por vez',
312
+ 'empathy.onebtn.dica': 'Enquanto um botão está apertado, o jogo não aceita um segundo, como para quem não consegue apertar dois ao mesmo tempo.',
313
+ 'empathy.semforca': 'Simular sem força para segurar',
314
+ 'empathy.semforca.dica': 'Segurar um botão vale só um toque, como para quem não tem força para manter o botão apertado.',
315
+ 'empathy.select': 'Selecionar',
316
+ 'empathy.selected': '✓ Selecionado',
317
+ 'visual.grupo.rotulo': 'Ajustes visuais',
318
+ 'visual.cbsafe': 'Paleta segura para daltonismo',
319
+ 'visual.cbsafe.dica': 'Troca as cores dos menus e do HUD por uma paleta que se distingue em qualquer tipo de daltonismo (Okabe-Ito).',
320
+ 'visual.dono': 'Itens na cor do dono',
321
+ 'visual.dono.dica': 'No multiplayer, cada jogador vê os próprios itens na cor dele. Desligado: itens na cor original para todos.',
322
+ 'visual.papeis': 'Cores do color-blocking',
323
+ 'visual.papeis.dica': 'Nos modos de alto contraste, escolha a cor de cada papel. ↺ restaura o padrão.',
324
+ // 📌 A MOLDURA NA CHAVE, O CONTEÚDO POR `{param}` (`CLAUDE.md` §A FRONTEIRA): o nome de um papel é a palavra do JOGO
325
+ // que monta este painel, e a engine não a traduz nem a inventa — ela traduz o «Cor de» que a envolve.
326
+ 'visual.papel.cor': 'Cor de {papel}',
327
+ 'visual.papel.repor': 'Restaurar cores padrão',
253
328
  'lq.off': 'desligado',
254
329
  'lq.linear': 'linear',
255
330
  'lq.mixed': 'misto',
@@ -266,22 +341,19 @@ const pt = {
266
341
  'icon.cvd.short': 'Correção de daltonismo',
267
342
  'pause.iconBarAria': 'Atalhos de acessibilidade',
268
343
  // Menu de atividades (splash) — escolha de atividade, cenário, nº de jogadores e notações de fração.
269
- 'fnot.v': 'Fracionária vertical',
270
- 'fnot.d': 'Fracionária diagonal',
271
- 'fnot.dec': 'Decimal',
272
- 'fnot.pct': 'Percentual',
273
- 'fnot.mix': 'Mista',
274
- 'menu.playerCountAria': 'Número de jogadores: {n}. Clique à esquerda para menos, à direita para mais.',
275
- 'sr.menu.pickScenario': 'Escolha o cenário.',
276
- 'sr.menu.gameStarted': '{atividade}. Jogo iniciado.',
277
- 'sr.menu.pickNumbers': '{atividade}: escolha os números.',
278
- 'sr.menu.player1': '{n} jogador.',
279
- 'sr.menu.playersN': '{n} jogadores.',
280
344
  'sr.menu.index': '{n} de {m}',
345
+ 'sr.papel.botao': 'botão',
346
+ 'sr.papel.interruptor': 'interruptor',
347
+ 'sr.papel.lista': 'lista',
348
+ 'sr.papel.cursor': 'controle deslizante',
349
+ 'sr.papel.passos': 'seletor',
350
+ 'sr.papel.opcao': 'opção',
351
+ 'sr.estado.selecionado': 'selecionada',
281
352
  'sr.menu.indexOn': 'Posição na lista ligada.',
282
353
  'sr.menu.indexOff': 'Posição na lista desligada.',
283
- 'sr.a11y.barEnter': 'Barra de acessibilidade. Use as direções para escolher e confirmar para ligar. Para voltar ao jogo, aperte voltar ou START.',
354
+ 'sr.a11y.barEnter': 'Jogo pausado. Barra de acessibilidade. Use as direções para escolher e confirmar para ligar. Para voltar ao jogo, aperte voltar ou START.',
284
355
  'sr.a11y.barExit': 'De volta ao jogo.',
356
+ 'sr.a11y.quickPause': 'Jogo pausado. Para voltar ao jogo, aperte START.',
285
357
  'pad.glyph.cross': 'xis',
286
358
  'pad.glyph.circle': 'bola',
287
359
  'pad.glyph.square': 'quadrado',
@@ -292,23 +364,9 @@ const pt = {
292
364
  'pad.wiz.detected': 'Controle novo detectado: {id}. O jogo pausou para você configurá-lo. SOLTE tudo para começar.',
293
365
  'pad.wiz.releaseAll': 'Controle: {id}. Agora SOLTE tudo.',
294
366
  'menu.legendSpoken': 'Botão {sim} para confirmar, botão {nao} para voltar.',
295
- 'sr.menu.fractionsIntro': 'Soma e subtração de frações: escolha a notação e o tipo.',
296
- 'sr.menu.keepOneNotation': 'Deixe ao menos uma notação ligada.',
297
- 'sr.menu.notationOn': '{notacao} ligada.',
298
- 'sr.menu.notationOff': '{notacao} desligada.',
299
- 'sr.menu.pickOneNumber': 'Escolha ao menos um número para treinar.',
300
- 'sr.menu.numberOn': 'Número {n} ligado.',
301
- 'sr.menu.numberOff': 'Número {n} desligado.',
302
- 'fnot.desc.v': 'Liga a exibição de frações verticais.',
303
- 'fnot.desc.d': 'Liga a exibição de frações na horizontal.',
304
367
  'fnot.desc.dec': 'Liga números que sempre aparecem com uma casa decimal.',
305
- 'fnot.desc.pct': 'Liga números percentuais.',
306
- 'fnot.desc.mix': 'Liga números inteiros e frações reduzidas.',
307
- 'menu.notationGroupAria': 'Notação',
308
368
  // Física (lava, ventosa-aranha), navegação sonora e o modo de demonstração.
309
- 'sr.physics.lava': 'Cuidado! Tocou na lava. As moedas voltaram para posições aleatórias.',
310
369
  'sr.physics.spiderOn': 'Modo aranha! Engatinha em paredes e teto; contorna quinas. {botao} solta.',
311
- 'sr.physics.spiderOff': 'Soltou da superfície.',
312
370
  'sr.nav.noTargetNear': 'Nada por perto.',
313
371
  // O laço parou porque um quadro lançou (ADR-0054). Criança cega não vê tela congelada: sem esta frase,
314
372
  // «travou» e «está pensando» são o mesmo silêncio.
@@ -331,6 +389,7 @@ const pt = {
331
389
  'eixo.correcao.tricro': 'Visão tricromática',
332
390
  'viz.escolher': 'Selecionar',
333
391
  'viz.escolhido': '✓ Selecionado',
392
+ 'sim.indisponivel.alternancia': 'Para ver a simulação sem força para segurar, as teclas de alternância precisam estar desligadas: com elas ligadas, a demonstração mostraria o ajuste e não a dificuldade.',
334
393
  'sim.indisponivel.tema': 'Para ver a simulação, o tema precisa estar no padrão: por cima do alto contraste ela mostraria o que o tema faz, e não o que a deficiência faz.',
335
394
  'sim.indisponivel.correcao': 'Para ver a simulação, a correção de cor precisa estar em visão tricromática: de uma tela já corrigida ela não mostraria nem a deficiência nem a correção.',
336
395
  'sim.indisponivel.ambos': 'Para ver a simulação, o tema e a correção de cor precisam estar no padrão: por cima de um ajuste, a demonstração mostra o ajuste e não a deficiência.',
@@ -342,18 +401,9 @@ const pt = {
342
401
  'reach.nome.gamepad': 'controle',
343
402
  'reach.nome.teclado': 'teclado',
344
403
  'reach.nome.toque': 'controle de tela',
345
- 'sr.attract.demo': 'Demonstração.',
346
- 'sr.attract.recorded': 'Demo de 30 segundos gravada para {cenario}.',
347
404
  // Molduras dos submenus de título e os nomes dos cenários.
348
405
  'menu.back': 'Voltar',
349
- 'menu.play': 'Jogar',
350
406
  'menu.alf': 'Alfabetização',
351
- 'menu.mat': 'Matemática',
352
- 'menu.frac': 'Fração',
353
- 'menu.fracTitle': 'Soma e subtração de frações',
354
- 'menu.tab': 'Tabuada',
355
- 'menu.tabHint': 'Escolha os números para treinar',
356
- 'menu.cen': 'Cenário',
357
407
  'cen.cidade': 'Cidade',
358
408
  'cen.campo': 'Dia no Campo',
359
409
  'cen.cemiterio': 'Amanhecer no Campo',
@@ -361,58 +411,136 @@ const pt = {
361
411
  'cen.floresta': 'Floresta',
362
412
  // Narração por voz (TTS).
363
413
  'audio.noSystemVoices': '(sem vozes do sistema)',
364
- 'sr.tts.engineNoLanguage': 'Este motor ainda não fala este idioma — por enquanto, use Piper (neural) ou a voz do navegador.',
414
+ 'sr.tts.engineNoLanguage': 'Este motor ainda não fala este idioma — por enquanto, use a voz do navegador.',
365
415
  'sr.tts.noNeuralForLanguage': 'Ainda não há voz neural para este idioma — seguindo com a voz do navegador, que fala a língua certa.',
366
416
  // ⚠️ NÃO diz «para este idioma» (ADR-0094): sem motor neural nesta montagem, não há voz neural em idioma
367
417
  // nenhum, e a outra frase faria a criança trocar de idioma à procura do que não está lá.
368
418
  'sr.tts.neuralNotBundled': 'Esta versão do jogo não traz voz neural — seguindo com a voz do navegador.',
369
419
  'sr.tts.downloading': 'Baixando a voz neural (precisa de internet só no 1º uso)…',
370
- 'sr.tts.progress': 'Voz neural: {pct}%.',
371
420
  'sr.tts.ready': 'Voz neural pronta, em {s} segundos.',
372
421
  'sr.tts.loadFailed': 'Não deu para carregar a voz neural (precisa de internet no 1º uso) — seguindo com a voz do navegador.',
373
422
  // Quiz — só a MOLDURA. O currículo de alfabetização (palavra, letra, sílaba, soletração, célula Braille) NÃO
374
423
  // entra aqui: é específico da língua e pede currículo próprio por idioma, não tradução. Ver o CLAUDE.md.
375
- 'sr.quiz.tryAgain': 'Tente de novo.',
376
- 'sr.quiz.erase': 'apagar',
377
424
  'sr.quiz.ok': 'ok',
378
425
  'sr.blind.on': 'Modo cego ligado: bengala e pistas de áudio ativas. O 1º item de poder vira a bengala de corrida.',
379
426
  'sr.blind.off': 'Modo cego desligado.',
380
427
  'sr.motor.oneButtonOn': 'Um botão por vez ligado: só uma tecla/botão de cada vez.',
381
- 'sr.motor.oneButtonOff': 'Um botão por vez desligado.',
382
- 'sr.motor.wheelchairOn': 'Modo cadeirante ligado: sem pulo; rampas e elevadores no lugar de degraus e escada; moedas no chão; só voo e super-corrida.',
383
- 'sr.motor.wheelchairOff': 'Modo cadeirante desligado.',
384
- 'sr.visual.ownerColorsOn': 'Itens na cor do dono ligados.',
385
- 'sr.visual.ownerColorsOff': 'Itens na cor do dono desligados: todos na cor original.',
386
- 'sr.visual.cbSafeOn': 'Paleta segura para daltonismo ligada (Okabe-Ito).',
387
- 'sr.visual.cbSafeOff': 'Paleta segura para daltonismo desligada.',
388
- 'sr.visual.outlineFg': 'Contorno do primeiro plano: {v}.',
389
- 'sr.visual.outlineBg': 'Contorno do segundo plano: {v}.',
390
- 'outline.none': 'nenhum',
391
- 'outline.thin': 'fino',
392
- 'outline.thick': 'grosso',
393
- 'sr.captions.on': 'Legendas ligadas.',
394
- 'sr.captions.off': 'Legendas desligadas.',
395
428
  // Quiz — MATEMÁTICA: enunciado inteiro, operadores inclusive (2+3 independe de língua).
396
- 'math.howManyDots': 'Quantas bolinhas?',
397
- 'math.op.plus': 'mais',
398
- 'math.op.minus': 'menos',
399
- 'math.op.times': 'vezes',
400
- 'math.op.dividedBy': 'dividido por',
401
- 'sr.math.howManyDots': 'Quantas bolinhas você vê?',
402
- 'sr.math.howMuchIs': 'Quanto é {a} {op} {b}?',
403
429
  // Quiz — ALFABETIZAÇÃO: a MOLDURA traduz; a palavra, a letra e a cela Braille atravessam por parâmetro,
404
430
  // em pt-BR, porque são a matéria de uma disciplina de idioma e não se traduzem ao trocar o idioma do jogo.
405
- 'sr.quiz.who': 'Jogador {n}: ',
406
- 'sr.quiz.wins': '{n} de 3 acertos para a moeda',
407
431
  'sr.quiz.buildWord': 'Letra {letra}. Monte a palavra: {palavra}.',
408
432
  'sr.quiz.whichSpelling': '{palavra}. Qual é a escrita certa? O jogo soletra cada opção.',
409
433
  'sr.quiz.writeWord': 'Escreva a palavra: {palavra}. {n} letras.',
410
434
  'sr.quiz.brailleDictation': '{palavra}. {celas} Pule para coletar.',
411
435
  'sr.quiz.wellDone': 'Muito bem! {palavra}. {n} de 3.',
412
- 'sr.quiz.correctSoFar': 'Acertou! {n} de 3 para ganhar a moeda.',
413
436
  'menu.restoreDefaults': 'Restaurar padrões deste menu',
414
437
  'menu.close': 'Fechar',
415
438
  'menu.typo': 'Tipografia',
439
+ // O TÍTULO do painel, sem o emoji: `pause.caa` é o rótulo do BOTÃO no cartão de pausa, onde o símbolo ajuda
440
+ // a distinguir sete itens de relance. Dentro do painel já se sabe onde se está, e um emoji no `<h2>` é lido
441
+ // em voz alta por quem usa leitor de tela antes do nome do que ele abriu.
442
+ 'menu.caa': 'Comunicação',
443
+ 'aac.grupo.rotulo': 'Escolhas de comunicação',
444
+ // O nome vem do botão da pausa (`pause.anim`), sem o emoji, pela mesma razão do `menu.caa`. E o nome é
445
+ // «Sensibilidade visual» e não «Animação» porque é o que a pessoa sente: quem precisa deste painel chega
446
+ // por enjoo ou por crise, não por curiosidade sobre quadros por segundo.
447
+ 'menu.animation': 'Sensibilidade visual',
448
+ 'animation.grupo.rotulo': 'Movimento e animação',
449
+ // ===================== AS LINHAS DO PAINEL MOTORA =====================
450
+ // O rótulo é CURTO e a explicação vai numa dica só, que a casca move para o rodapé (CLAUDE.md §4). As dicas
451
+ // são as mesmas frases que os anúncios `sr.motor.*On` já dizem, no PRESENTE em vez de no passado: duas
452
+ // redações da mesma escolha divergem, e quem ouve o anúncio depois de ler a linha merece reconhecê-la.
453
+ 'motor.facil': 'Modo Fácil',
454
+ 'motor.facil.dica': 'Gravidade menor, pulo mais alto, coleta tolerante, moedas no chão, sem perigos e sem quedas acidentais.',
455
+ 'motor.altmove': 'Jeito de apertar',
456
+ 'motor.espera': 'Esperar entre toques',
457
+ 'motora.camera': 'Jogar com a câmera',
458
+ 'motora.camera.dica': 'A câmera fica no aparelho: nada do que ela vê sai daqui. Escolha o que joga — as mãos, o rosto ou os olhos.',
459
+ 'motora.voz': 'Jogar falando',
460
+ 'motora.voz.dica': 'O microfone fica no aparelho: o que a criança diz é ouvido aqui e não sai daqui. Diga o nome do que quer — «acima», «confirma» — ou o nome do item do menu que está à vista.',
461
+ 'motor.espera.dica': 'Depois de um toque, espera meio segundo antes de aceitar o próximo — para quando a mão treme e o toque sai dobrado.',
462
+ 'motor.altmove.dica': 'Um toque liga e outro desliga, em vez de manter o botão pressionado.',
463
+ 'motor.togglerun': 'Alternância do correr',
464
+ 'motor.togglerun.dica': 'O botão de correr fica ligado num toque, em vez de precisar ser segurado.',
465
+ 'motor.grupo.rotulo': 'Escolhas de movimento',
466
+ 'menu.motora': 'Acessibilidade motora',
467
+ // O tamanho do controle de toque, em quatro passos — um por persona (errata do ADR-0151).
468
+ 'motora.pad': 'Tamanho do controle',
469
+ 'motora.pad.dica': 'Escolha pela mão de quem joga: criança pequena até 6 anos, criança grande por volta dos 12. A criança pequena tem os botões maiores: ela ainda acerta longe do centro.',
470
+ 'motora.pad.crianca-pequena': 'criança pequena',
471
+ 'motora.pad.crianca-grande': 'criança grande',
472
+ 'motora.pad.adulto-pequeno': 'adulto pequeno',
473
+ 'motora.pad.adulto-maos-grandes': 'adulto de mãos grandes',
474
+ // O mapeamento de teclado por modo de jogadores (ADR-0151 §2 item 5). A de 3–4 só aparece sem ombros nem gatilhos.
475
+ 'motora.teclado.1': 'Mapear teclado — 1 jogador',
476
+ 'motora.teclado.2': 'Mapear teclado — 2 jogadores',
477
+ 'motora.teclado.34': 'Mapear teclado — 3–4 jogadores',
478
+ 'motora.controle': 'Mapear controle',
479
+ 'motora.toque': 'Mapear toque',
480
+ 'motora.abrir': 'Abrir',
481
+ 'ctrl.assento': 'Teclado de',
482
+ 'ctrl.jogador': 'Jogador {n}',
483
+ // ===================== AS LINHAS DO PAINEL AUDITIVO =====================
484
+ // Onde já havia palavra para a coisa, ela é REUSADA — `icon.blind` e `icon.tts` nomeiam os mesmos dois
485
+ // ajustes na barra de acessibilidade. Dois nomes para o mesmo ajuste em duas telas da mesma engine é como
486
+ // uma criança deixa de reconhecer o que já aprendeu.
487
+ 'audio.som': 'Som',
488
+ 'audio.som.dica': 'Desliga todo o som do jogo de uma vez, sem mexer nas escolhas de cada tipo.',
489
+ 'audio.volume': 'Volume geral',
490
+ 'audio.modocego': 'Modo cego',
491
+ 'audio.narracao': 'Narração por voz',
492
+ 'audio.cat.music': 'Música',
493
+ 'audio.cat.ambient': 'Sons ambiente',
494
+ 'audio.cat.interact': 'Efeitos de interação',
495
+ 'audio.cat.earcons': 'Earcons',
496
+ 'audio.cat.tts': 'Narração',
497
+ 'audio.cat.sonar': 'Sonar',
498
+ 'audio.cat.guard': 'Guarda de beirada',
499
+ 'audio.cat.guide': 'Pista / guia auditivo',
500
+ 'audio.cat.volumeDe': 'Volume de {c}',
501
+ 'audio.navsound.grupo': 'Sons de navegação',
502
+ 'audio.cane': 'Batida da bengala',
503
+ 'audio.cane.dica': 'De quanto em quanto chão a bengala bate. Uma batida por bloco é mais calma; a cada meio bloco dá mais detalhe.',
504
+ 'audio.menuindex': 'Índice falado dos menus',
505
+ 'audio.menuindex.dica': 'O leitor de tela diz "3 de 7" ao andar num menu, para saber onde se está sem contar.',
506
+ 'audio.tts.dica': 'O jogo lê em voz alta o que está escrito na tela.',
507
+ 'audio.ttsEngine': 'Motor de voz',
508
+ 'audio.ttsEngine.dica': 'A voz do navegador funciona logo; as neurais soam melhor e baixam no primeiro uso.',
509
+ 'audio.ttsVoice': 'Voz',
510
+ 'audio.ttsVol': 'Volume da narração',
511
+ 'audio.ttsPpm': 'Ritmo da fala',
512
+ 'audio.ttsPpm.dica': 'Quantas palavras por minuto a narração fala.',
513
+ 'tts.kokoro.teste': 'Olá.', // the short sentence that tests whether WebGPU speaks (ADR-0198 §4)
514
+ 'visual.captions': 'Legendas',
515
+ 'visual.legenda.ritmo': 'Ritmo das legendas',
516
+ 'visual.legenda.ppm': '{n} PPM',
517
+ 'visual.legenda.ritmo.dica': 'Quanto tempo a legenda fica na tela, em palavras por minuto.',
518
+ 'visual.contorno.fg': 'Contorno do 1º plano',
519
+ 'visual.contorno.bg': 'Contorno do 2º plano',
520
+ 'visual.contorno.fg.dica': 'No alto contraste, contorna o que se mexe e o que se pega.',
521
+ 'visual.contorno.bg.dica': 'No alto contraste, contorna onde se anda e onde não se anda.',
522
+ 'visual.contorno.0': 'nenhum',
523
+ 'visual.contorno.1': 'fino',
524
+ 'visual.contorno.2': 'grosso',
525
+ 'visual.captions.dica': 'Escreve na tela os sons do jogo.',
526
+ 'sr.visual.captionsOn': 'Legendas ligadas.',
527
+ 'sr.visual.captionsOff': 'Legendas desligadas.',
528
+ 'audio.voz': 'Voz',
529
+ 'audio.voz.nenhuma': 'Nenhuma voz',
530
+ 'audio.semVoz': 'Não há voz que fale este idioma.',
531
+ 'sr.audio.voz': 'Voz: {nome}.',
532
+ 'audio.ttsTest': 'Testar a voz',
533
+ 'audio.ttsTest.dica': 'Fala uma frase de exemplo com a voz escolhida agora.',
534
+ 'audio.sinks.grupo': 'Saída de áudio por jogador',
535
+ 'audio.detect': 'Detectar saídas',
536
+ 'menu.audio': 'Acessibilidade auditiva',
537
+ 'menu.som': 'Conforto auditivo',
538
+ 'audio.grupo.rotulo': 'Sons do jogo',
539
+ // O texto de REPOUSO do rodapé de todo painel — o que ele diz enquanto ninguém aponta para linha nenhuma.
540
+ // Era um literal em português dentro do `ui/settings-panel`, e até 2026-09-12 ninguém o via: nenhum painel
541
+ // montado pela engine existia. Com quatro deles montados, ele passou a aparecer — em português, num jogo
542
+ // em inglês.
543
+ 'menu.explainIdle': 'Passe o mouse ou navegue pelas opções para ver a explicação.',
416
544
  'sr.audio.reset': 'Acessibilidade auditiva restaurada aos padrões. Os outros menus não mudaram.',
417
545
  'sr.empathy.reset': 'Modo empatia restaurado aos padrões: simulações desligadas. Correções de daltonismo e os outros menus não mudaram.',
418
546
  'sr.motor.reset': 'Modo Fácil e movimento por alternância restaurados aos padrões. O controle pelos olhos e o mapeamento de teclas continuam como estavam.',
@@ -420,20 +548,62 @@ const pt = {
420
548
  'a11y.changed': 'alterado',
421
549
  'sr.visual.reset': 'Acessibilidade visual restaurada aos padrões: contraste, realce, cores e contornos. As legendas e os outros menus não mudaram.',
422
550
  'sr.motion.reset': 'Sensibilidade visual restaurada aos padrões: animações e estética CRT. As animações voltam ao que o seu sistema pede.',
423
- 'caa.emPreparo': 'em preparação',
424
- 'caa.aguardandoNegociacao': 'aguardando negociação',
425
- 'caa.secao.agora': 'Disponível agora',
426
- 'caa.secao.agoraTag': 'funciona sem rede',
427
- 'caa.secao.preparo': 'Em preparação',
428
- 'caa.secao.preparoTag': 'licença resolvida; falta o trabalho',
429
- 'caa.secao.negociacao': 'Aguardando negociação',
430
- 'caa.secao.negociacaoTag': 'a permissão não é nossa',
431
- 'sr.caa.escolha': 'Comunicação: {v}.',
432
- 'sr.caa.reset': 'Comunicação restaurada ao padrão: letras maiúsculas, como a alfabetização costuma começar.',
433
- 'pause.caa': '🔠 Comunicação',
434
- 'sr.caa.caixaAltaOn': 'Letras maiúsculas ligadas: o jogo inteiro em caixa alta.',
435
- 'sr.caa.caixaAltaOff': 'Letras maiúsculas desligadas: maiúsculas e minúsculas.',
551
+ 'aac.letras': 'Letras maiúsculas',
552
+ 'aac.letras.dica': 'Ligado: o jogo inteiro em caixa alta, como a alfabetização brasileira costuma começar. '
553
+ + 'Desligado: maiúsculas e minúsculas, a escrita do dia a dia.',
554
+ 'aac.emPreparo': 'em preparação',
555
+ 'aac.aguardandoNegociacao': 'aguardando negociação',
556
+ 'aac.secao.agora': 'Disponível agora',
557
+ 'aac.secao.agoraTag': 'funciona sem rede',
558
+ 'aac.secao.preparo': 'Em preparação',
559
+ 'aac.secao.preparoTag': 'licença resolvida; falta o trabalho',
560
+ 'aac.secao.negociacao': 'Aguardando negociação',
561
+ 'aac.secao.negociacaoTag': 'a permissão não é nossa',
562
+ 'sr.aac.escolha': 'Comunicação: {v}.',
563
+ 'sr.aac.reset': 'Comunicação restaurada ao padrão: letras maiúsculas, como a alfabetização costuma começar.',
564
+ 'pause.caa': 'Comunicação',
565
+ 'sr.aac.caixaAltaOn': 'Letras maiúsculas ligadas: o jogo inteiro em caixa alta.',
566
+ 'sr.aac.caixaAltaOff': 'Letras maiúsculas desligadas: maiúsculas e minúsculas.',
436
567
  'sr.quiz.bemVindo': 'Quiz. Use as setas para escolher e Enter para responder.',
568
+ // AS PERGUNTAS DO QUIZ. O quiz NÃO é uma disciplina de idioma, logo nem a excepção do `CLAUDE.md` §A FRONTEIRA
569
+ // se aplica: «o ENUNCIADO SEMPRE TRADUZ». Eram literais em pt-BR dentro do cartucho até 23/09, e trocar a
570
+ // bandeira mudava a moldura da engine sem tocar na atividade (ADR-0225).
571
+ 'quiz.pageTitle': 'The Inclusionist — quiz de demonstração',
572
+ 'quiz.p1': 'Qual animal põe ovos e tem bico?',
573
+ 'quiz.p1.a': 'Gato',
574
+ 'quiz.p1.b': 'Galinha',
575
+ 'quiz.p1.c': 'Cavalo',
576
+ 'quiz.p1.d': 'Peixe',
577
+ 'quiz.p2': 'Quantos lados tem um triângulo?',
578
+ 'quiz.p2.a': 'Três',
579
+ 'quiz.p2.b': 'Quatro',
580
+ 'quiz.p2.c': 'Cinco',
581
+ 'quiz.p2.d': 'Dois',
582
+ 'quiz.p3': 'Qual destas é uma fruta?',
583
+ 'quiz.p3.a': 'Alface',
584
+ 'quiz.p3.b': 'Cenoura',
585
+ 'quiz.p3.c': 'Banana',
586
+ 'quiz.p3.d': 'Batata',
587
+ 'quiz.pos.up': 'Acima',
588
+ 'quiz.pos.down': 'Abaixo',
589
+ 'quiz.pos.confirm': 'Confirmar',
590
+ 'quiz.comoJogar.ler': 'Leia a pergunta no alto da tela.',
591
+ 'quiz.comoJogar.escolher': 'Escolha a resposta com as setas e confirme.',
592
+ 'quiz.pos.back': 'Voltar',
593
+ 'quiz.pos.sonar': 'Sonar',
594
+ 'quiz.pos.falar': 'Dizer a resposta',
595
+ 'quiz.ouvindo': 'Estou ouvindo. Diga a resposta.',
596
+ 'quiz.naoEntendi': 'Ouvi «{texto}», que não é nenhuma das alternativas. Diga de novo ou escolha com as setas.',
597
+ 'quiz.ouviNada': 'Não ouvi nada. Diga de novo ou escolha com as setas.',
598
+ 'quiz.semLeitura': 'Este aparelho não consegue ouvir agora. Escolha com as setas.',
599
+ 'quiz.resposta.certa': 'Certo! {certa}.',
600
+ 'quiz.resposta.errada': 'Ainda não. A resposta certa é {certa}.',
601
+ 'quiz.fim': 'Fim! {n} de {m}.',
602
+ 'quiz.alternativas': 'Alternativas',
603
+ 'quiz.acom.hints': 'Dicas',
604
+ 'quiz.acom.textPace': 'Ritmo do texto',
605
+ 'quiz.acom.lexicalDifficulty': 'Dificuldade das palavras',
606
+ 'quiz.acom.wordHighlight': 'Realce de palavras',
437
607
  'sr.nav.sonarFound': 'Sonar: {alvo} {lado}, {dist}.',
438
608
  // `sr.nav.coin` ficou para o JOGO nomear o alvo (item 19): o sonar recebe o nome por `nameAt`, campo 3 do
439
609
  // contrato. `sr.nav.target` e o que ele diz quando o jogo declara um alvo SEM nome — melhor uma palavra
@@ -458,16 +628,10 @@ const pt = {
458
628
  'sr.player.prefix': 'Jogador {n}: ',
459
629
  'sr.empathy.hearingOn': 'Simulação de perda auditiva ligada: sons fracos ficam abafados e os agudos são cortados; falas ficam difíceis de entender.',
460
630
  'sr.empathy.hearingOff': 'Simulação de perda auditiva desligada.',
461
- 'sr.pad.disconnected': 'Controle do Jogador {n} desconectado — o teclado continua funcionando. Aperte START para reassociar.',
462
- 'sr.quiz.levelSet': 'Nível {n}: {v}.',
463
- 'sr.visual.roleColorSet': 'Cor de {v} alterada.',
464
- 'sr.visual.roleColorsReset': 'Cores do color-blocking restauradas ao padrão.',
465
- 'sr.visual.defaultColors': 'Cores padrão restauradas.',
466
- 'sr.pad.connected': 'Controle conectado: layout {v}.',
467
- 'sr.pad.design': 'Desenho dos botões: {v}.',
468
- 'sr.eyes.loading': 'Jogar com os olhos: carregando a webcam (permita o acesso).',
469
- 'sr.eyes.off': 'Jogar com os olhos desligado.',
470
- 'sr.boot.loaded': 'Jogo carregado. Colete {n} moedas. Suba escadas com W/S, nade segurando pulo na água.',
631
+ 'sr.empathy.onebtnOn': 'Simulação de um botão por vez ligada: um segundo botão apertado junto não conta.',
632
+ 'sr.empathy.onebtnOff': 'Simulação de um botão por vez desligada.',
633
+ 'sr.empathy.semforcaOn': 'Simulação sem força para segurar ligada: segurar um botão vale só um toque.',
634
+ 'sr.empathy.semforcaOff': 'Simulação sem força para segurar desligada.',
471
635
  // ===================== PODERES =====================
472
636
  // `sr.power.*` é FALADO quando o poder muda (game/physics, game/session); `hud.power.*` é o rótulo curto do
473
637
  // HUD. Eram duas tabelas de `const` no main.js, e por isso estavam CONGELADAS no idioma do boot: um `const`
@@ -477,28 +641,28 @@ const pt = {
477
641
  'sr.power.turbo': 'Super-corrida! Correndo você fica bem mais rápido.',
478
642
  'sr.power.fly': 'Voo! No ar, aperte Pular para começar a voar; Pular de novo encerra.',
479
643
  'sr.power.wallcling': 'Escalada (aranha)! No ar, aperte {botao} perto de uma parede/teto para grudar; engatinha e contorna quinas; {botao} de novo solta.',
480
- 'sr.power.none': 'Sem poder ativo.',
481
- 'sr.power.generic': 'Poder ativado!',
482
644
  'hud.power.off': '—',
483
645
  'hud.power.superjump': '🐇 Super-pulo',
484
646
  'hud.power.ultrajump': '🦘 Ultra-pulo',
485
647
  'hud.power.turbo': '👟 Super-corrida',
486
- 'hud.power.fly': '🎈 Voo',
487
648
  'hud.power.wallcling': '🕷️ Escalada',
488
649
  'hud.power.runcane': '👟 Bengala de corrida',
489
650
  // ===================== MOVIMENTO REDUZIDO (WCAG 2.3.3) + CRT =====================
490
651
  // Os rótulos ficavam em DUAS tabelas `const` de texto — uma em main.js e outra em ui/settings-motion — com
491
652
  // três entradas repetidas palavra por palavra e nada ligando as duas. Agora a tabela guarda a CHAVE.
492
653
  'rm.parallax': 'Parallax do fundo',
493
- 'rm.decor': 'Decoração (nuvens, grama)',
494
- 'rm.items': 'Animação de itens (moedas)',
495
- 'rm.walk': 'Personagem em movimento (andar, escalar, nadar, pular)',
496
- 'rm.breath': 'Respiração (parado)',
497
- 'rm.flavor': 'Gracinhas (animações de descanso)',
654
+ 'rm.decor': 'Decoração',
655
+ 'rm.items': 'Animação de itens',
656
+ 'rm.walk': 'Personagem em movimento',
657
+ 'rm.breath': 'Respiração',
658
+ 'rm.flavor': 'Gracinhas',
498
659
  'rm.particles': 'Partículas e cintilação',
499
660
  'rm.crt.scan': 'Scanlines',
500
661
  'rm.crt.vig': 'Vinheta',
501
662
  'rm.crt.round': 'Cantos arredondados',
663
+ 'crt.round.off': 'desligado',
664
+ 'crt.round.small': 'pequeno',
665
+ 'crt.round.large': 'grande',
502
666
  'rm.sec.all': 'todos os jogadores',
503
667
  'sr.rm.frozen': '{alvo} congelado.',
504
668
  'sr.rm.animated': '{alvo} animado.',
@@ -510,8 +674,8 @@ const pt = {
510
674
  // ===================== LIGADO / DESLIGADO =====================
511
675
  // Duas palavras que estavam copiadas TREZE vezes, em nove arquivos — e dois desses arquivos declaravam um
512
676
  // helper "compartilhado" que só eles usavam. Agora é um só, em ui/dom, ao lado do `toggleBtn`.
513
- 'ui.toggle.on': '❚❚ Ligado',
514
- 'ui.toggle.off': '▶ Desligado',
677
+ 'ui.toggle.on': 'Ligado',
678
+ 'ui.toggle.off': 'Desligado',
515
679
  'ui.toggle.ariaOn': '{alvo}: ligado',
516
680
  'ui.toggle.ariaOff': '{alvo}: desligado',
517
681
  // ===================== AS DUAS ESCOLHAS MOTORAS POR JOGADOR =====================
@@ -520,8 +684,8 @@ const pt = {
520
684
  // só consegue se a frase inteira morar no dicionário. O 'Jogador N: ' vem de `sr.player.prefix`.
521
685
  'sr.motor.easyOn': 'Modo Fácil ligado: gravidade menor, pulo mais alto, coleta tolerante, moedas no chão, sem perigos e sem quedas acidentais (segure ↓ para descer).',
522
686
  'sr.motor.easyOff': 'Modo Fácil desligado.',
523
- 'sr.motor.toggleMoveOn': 'Movimento por alternância ligado: toque a direção para andar sem segurar; toque de novo para parar; segure para ir mais rápido. O pulo não interrompe a caminhada.',
524
- 'sr.motor.toggleMoveOff': 'Movimento por alternância desligado.',
687
+ 'sr.motor.toggleMoveOn': 'Não precisa segurar, ligado: um toque liga e outro desliga.',
688
+ 'sr.motor.toggleMoveOff': 'Não precisa segurar, desligado.',
525
689
  // ⚠️ O MOTIVO É UM FACTO SOBRE O APARELHO, NUNCA UMA REPREENSÃO (ADR-0113 cláusula 3). Estas frases
526
690
  // dizem por que o botão não responde; «não desligue isto» repreenderia uma criança por mexer num ajuste
527
691
  // de que ela depende. QUATRO chaves e não uma com `{aparelho}`: «os gestos» é plural e «o olhar» não.
@@ -531,19 +695,10 @@ const pt = {
531
695
  'alt.exigida.fala': 'O comando de voz precisa das teclas de alternância para funcionar.',
532
696
  'sr.motor.toggleRunOn': 'Alternância do correr ligada.',
533
697
  'sr.motor.toggleRunOff': 'Alternância do correr desligada.',
534
- 'sr.physics.runLatchOn': 'Correndo.',
535
- 'sr.physics.runLatchOff': 'Andando.',
536
698
  // ===================== AJUDA (menu de pausa) + rótulo de nível =====================
537
699
  // `pause.level` é MOLDURA: `{v}` é o nome do nível da psicogênese de Ferreiro e atravessa SEM TRADUÇÃO —
538
700
  // currículo de alfabetização não se traduz, reescreve-se por idioma (pilar 3 do ADR-0010). Ver `QL_NAME`.
539
701
  'pause.level': '📚 Nível {n} · {v}',
540
- 'help.controls': 'Seus controles',
541
- 'help.controlsPlayer': 'Seus controles · Jogador {n}',
542
- 'help.keyboard': 'teclado',
543
- 'help.buildNotes': 'Notas desta build',
544
- 'help.powerups': 'Power-ups: 👟 super-corrida · 🕷️ escalada · 🎈 voo · 🐇 super-pulo · 🦘 ultra-pulo · 🔑 chave abre o 🚪 portão.',
545
- 'help.multiplayer': '2–4 jogadores: telas lado a lado, cada uma com seu menu e sua configuração.',
546
- 'help.tech': 'v{v} — PixiJS (WebGL, fallback Canvas) · texto/UI no DOM (acessibilidade) · offline via PWA.',
547
702
  // A legenda 'Sim'/'Não' do rodapé de cada pausa (os dois botões do controle). Achado pelo crivo LARGO do
548
703
  // item 14: o estreito não o pegou porque 'Sim' não tem acento e 'Não' tem três letras.
549
704
  'menu.yes': 'Sim',
@@ -588,44 +743,13 @@ const pt = {
588
743
  // 41 rótulos de leitor de tela (36 distintos) estavam em português CRU no markup, e só UM dos 53 usava o
589
744
  // `data-i18n-aria` que já existia. Numa build em inglês, uma criança cega ouvia a interface inteira em
590
745
  // português — o pilar 2 falhando na superfície onde ele mais importa, e em silêncio.
591
- 'a11y.choosePlayer': 'Escolha o jogador',
592
- 'a11y.animations': 'Animações',
593
- 'a11y.literacy': 'Alfabetização',
594
- 'a11y.shortcuts': 'Atalhos de acessibilidade',
595
- 'a11y.hearing': 'Audição',
596
- 'a11y.actionButtons': 'Botões de ação',
597
- 'a11y.screenButtons': 'Botões de tela (toque)',
598
- 'a11y.touchButtons': 'Botões de toque na tela',
599
- 'a11y.audioCategories': 'Categorias de áudio',
600
746
  'a11y.communication': 'Comunicação: letras e símbolos',
601
- 'a11y.outlineFg': 'Contorno de primeiro plano',
602
- 'a11y.outlineBg': 'Contorno de segundo plano',
603
- 'a11y.outlines': 'Contornos do alto contraste',
604
- 'a11y.touchControls': 'Controles de toque',
605
- 'a11y.padDesign': 'Desenho dos botões',
606
- 'a11y.chooseScenery': 'Escolha o cenário',
607
- 'a11y.chooseGame': 'Escolha o jogo',
608
- 'a11y.chooseNumbers': 'Escolha os números',
609
- 'a11y.hideDebug': 'Esconder as ferramentas de debug',
610
- 'a11y.btnSpecial': 'Especial (botão 1)',
611
- 'a11y.fraction': 'Fração',
612
- 'a11y.touchRoles': 'Função de cada botão de toque',
613
- 'a11y.btnRun': 'Interagir / correr (botão 2)',
614
- 'a11y.eyeGaze': 'Jogar com os olhos',
615
- 'a11y.mapControls': 'Mapear controles (por jogador)',
616
- 'a11y.math': 'Matemática',
617
747
  'a11y.pauseMenu': 'Menu de pausa',
618
- 'a11y.simActive': 'Modo de simulação ativo. Toque duas vezes para voltar às cores normais.',
619
748
  'a11y.stopAll': 'Parar todas as animações',
620
- 'a11y.btnJump': 'Pular (botão 0)',
621
- 'a11y.audioOut': 'Saída de áudio por jogador',
622
- 'a11y.visualSim': 'Simulação visual',
623
- 'a11y.switchScreens': 'Trocar o número de telas (jogadores)',
624
- 'a11y.btnSwap': 'Trocar poder (botão 3)',
749
+ 'a11y.resumeAll': 'Retomar todas as animações',
625
750
  // O rótulo VISÍVEL do #np-btn. Estava cru no index.html e não podia levar `data-i18n`: o texto embrulha um
626
751
  // `<span id="np-n">` com o número, e o `applyDom` escreve `textContent`, o que destruiria o span. A saída é
627
752
  // o JavaScript passar a ser dono do rótulo inteiro — o número já é dinâmico, então o texto sempre foi dele.
628
- 'menu.playerCount': '◀ Nº de jogadores: {n} ▶',
629
753
  // ===================== A LEGENDA DE CONTROLES (fileira sob o título) =====================
630
754
  // TERCEIRA família de rótulos para as mesmas ações, e de propósito. `act.*` serve à LISTA de mapeamento
631
755
  // ("Correr / interagir") e `touch.act.*` ao painel de toque ("Pausar (START)"); os dois cabem lá porque
@@ -643,6 +767,10 @@ const pt = {
643
767
  // catálogo, como os nomes dos motores de voz. O que traduz é o nome do GRUPO e a descrição — que é o texto
644
768
  // que explica à criança (ou a quem a acompanha) POR QUE aquela fonte existe na lista.
645
769
  'font.grupo.rotulo': 'Família de letra',
770
+ // A AMOSTRA do painel: um PANGRAMA, e por isso ele muda de idioma em vez de traduzir. A frase existe para
771
+ // pôr o alfabeto inteiro à vista — quem escolhe uma fonte está a perguntar «consigo ler isto?», e uma
772
+ // tradução literal deixaria letras de fora justamente no idioma em que a criança vai ler.
773
+ 'font.amostra': 'Juiz foge e bota fita de cetim na xícara',
646
774
  'font.group.sans': 'Sem serifa',
647
775
  'font.group.serif': 'Serifada',
648
776
  'font.group.hand': 'Manuscrita',
@@ -671,7 +799,6 @@ const pt = {
671
799
  'font.desc.pinyon': 'caligráfica inglesa',
672
800
  'font.desc.ufcook': 'blackletter alemã',
673
801
  'font.desc.ufmag': 'blackletter alemã',
674
- 'font.desc.comicneue': 'bola e bastão (alfabetização)',
675
802
  'font.desc.pressstart': 'pixel de 8 bits (HUD e título do jogo)',
676
803
  'font.desc.learningcurve': 'cursiva inglesa',
677
804
  'font.desc.kindergarten': 'cursiva brasileira',