@jjlmoya/utils-forensic-science 1.1.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 (316) hide show
  1. package/package.json +69 -0
  2. package/scripts/crystal-lattice-catalog-translations.mjs +459 -0
  3. package/scripts/postinstall.mjs +27 -0
  4. package/scripts/sync-crystal-lattice-i18n.mjs +50 -0
  5. package/src/category/i18n/de.ts +55 -0
  6. package/src/category/i18n/en.ts +55 -0
  7. package/src/category/i18n/es.ts +55 -0
  8. package/src/category/i18n/fr.ts +55 -0
  9. package/src/category/i18n/id.ts +55 -0
  10. package/src/category/i18n/it.ts +55 -0
  11. package/src/category/i18n/ja.ts +56 -0
  12. package/src/category/i18n/ko.ts +56 -0
  13. package/src/category/i18n/nl.ts +55 -0
  14. package/src/category/i18n/pl.ts +55 -0
  15. package/src/category/i18n/pt.ts +55 -0
  16. package/src/category/i18n/ru.ts +55 -0
  17. package/src/category/i18n/sv.ts +55 -0
  18. package/src/category/i18n/tr.ts +55 -0
  19. package/src/category/i18n/zh.ts +56 -0
  20. package/src/category/index.ts +48 -0
  21. package/src/category/seo.astro +15 -0
  22. package/src/components/PreviewNavSidebar.astro +116 -0
  23. package/src/components/PreviewToolbar.astro +143 -0
  24. package/src/data.ts +10 -0
  25. package/src/entries.ts +48 -0
  26. package/src/env.d.ts +5 -0
  27. package/src/index.ts +29 -0
  28. package/src/layouts/PreviewLayout.astro +117 -0
  29. package/src/pages/[locale]/[slug].astro +162 -0
  30. package/src/pages/[locale].astro +261 -0
  31. package/src/pages/index.astro +3 -0
  32. package/src/tests/diacritics_density.test.ts +140 -0
  33. package/src/tests/faq_count.test.ts +19 -0
  34. package/src/tests/i18n_coverage.test.ts +36 -0
  35. package/src/tests/inverted_punctuation.test.ts +84 -0
  36. package/src/tests/locale_completeness.test.ts +24 -0
  37. package/src/tests/mocks/astro_mock.js +2 -0
  38. package/src/tests/no_en_dash.test.ts +70 -0
  39. package/src/tests/no_h1_in_components.test.ts +48 -0
  40. package/src/tests/schemas_fulfillment.test.ts +23 -0
  41. package/src/tests/script_density.test.ts +94 -0
  42. package/src/tests/seo_length.test.ts +46 -0
  43. package/src/tests/shared-test-helpers.ts +56 -0
  44. package/src/tests/slug_language_code_format.test.ts +23 -0
  45. package/src/tests/slug_uniqueness.test.ts +81 -0
  46. package/src/tests/title_quality.test.ts +55 -0
  47. package/src/tests/tool_exports.test.ts +34 -0
  48. package/src/tests/tool_validation.test.ts +16 -0
  49. package/src/tests/widmark.test.ts +28 -0
  50. package/src/tool/forensic-age-estimator/bibliography.astro +14 -0
  51. package/src/tool/forensic-age-estimator/bibliography.ts +16 -0
  52. package/src/tool/forensic-age-estimator/component.astro +321 -0
  53. package/src/tool/forensic-age-estimator/dental-skeletal-third-molar-age-estimator.css +634 -0
  54. package/src/tool/forensic-age-estimator/entry.ts +32 -0
  55. package/src/tool/forensic-age-estimator/i18n/de.ts +245 -0
  56. package/src/tool/forensic-age-estimator/i18n/en.ts +245 -0
  57. package/src/tool/forensic-age-estimator/i18n/es.ts +245 -0
  58. package/src/tool/forensic-age-estimator/i18n/fr.ts +245 -0
  59. package/src/tool/forensic-age-estimator/i18n/id.ts +245 -0
  60. package/src/tool/forensic-age-estimator/i18n/it.ts +245 -0
  61. package/src/tool/forensic-age-estimator/i18n/ja.ts +245 -0
  62. package/src/tool/forensic-age-estimator/i18n/ko.ts +245 -0
  63. package/src/tool/forensic-age-estimator/i18n/nl.ts +245 -0
  64. package/src/tool/forensic-age-estimator/i18n/pl.ts +245 -0
  65. package/src/tool/forensic-age-estimator/i18n/pt.ts +245 -0
  66. package/src/tool/forensic-age-estimator/i18n/ru.ts +245 -0
  67. package/src/tool/forensic-age-estimator/i18n/sv.ts +245 -0
  68. package/src/tool/forensic-age-estimator/i18n/tr.ts +245 -0
  69. package/src/tool/forensic-age-estimator/i18n/zh.ts +246 -0
  70. package/src/tool/forensic-age-estimator/index.ts +11 -0
  71. package/src/tool/forensic-age-estimator/logic.ts +81 -0
  72. package/src/tool/forensic-age-estimator/seo.astro +15 -0
  73. package/src/tool/forensic-blood-test-simulator/bibliography.astro +6 -0
  74. package/src/tool/forensic-blood-test-simulator/bibliography.ts +12 -0
  75. package/src/tool/forensic-blood-test-simulator/component.astro +168 -0
  76. package/src/tool/forensic-blood-test-simulator/dom-utils.ts +40 -0
  77. package/src/tool/forensic-blood-test-simulator/entry.ts +32 -0
  78. package/src/tool/forensic-blood-test-simulator/forensic-presumptive-blood-testing-luminol-kastle-meyer-simulator.css +532 -0
  79. package/src/tool/forensic-blood-test-simulator/helpers.ts +16 -0
  80. package/src/tool/forensic-blood-test-simulator/i18n/de.ts +185 -0
  81. package/src/tool/forensic-blood-test-simulator/i18n/en.ts +185 -0
  82. package/src/tool/forensic-blood-test-simulator/i18n/es.ts +185 -0
  83. package/src/tool/forensic-blood-test-simulator/i18n/fr.ts +220 -0
  84. package/src/tool/forensic-blood-test-simulator/i18n/id.ts +220 -0
  85. package/src/tool/forensic-blood-test-simulator/i18n/it.ts +220 -0
  86. package/src/tool/forensic-blood-test-simulator/i18n/ja.ts +220 -0
  87. package/src/tool/forensic-blood-test-simulator/i18n/ko.ts +220 -0
  88. package/src/tool/forensic-blood-test-simulator/i18n/nl.ts +220 -0
  89. package/src/tool/forensic-blood-test-simulator/i18n/pl.ts +220 -0
  90. package/src/tool/forensic-blood-test-simulator/i18n/pt.ts +220 -0
  91. package/src/tool/forensic-blood-test-simulator/i18n/ru.ts +220 -0
  92. package/src/tool/forensic-blood-test-simulator/i18n/sv.ts +220 -0
  93. package/src/tool/forensic-blood-test-simulator/i18n/tr.ts +220 -0
  94. package/src/tool/forensic-blood-test-simulator/i18n/zh.ts +220 -0
  95. package/src/tool/forensic-blood-test-simulator/index.ts +11 -0
  96. package/src/tool/forensic-blood-test-simulator/logic.ts +174 -0
  97. package/src/tool/forensic-blood-test-simulator/script.ts +192 -0
  98. package/src/tool/forensic-blood-test-simulator/seo.astro +15 -0
  99. package/src/tool/forensic-fiber-comparison-microscope/bibliography.astro +6 -0
  100. package/src/tool/forensic-fiber-comparison-microscope/bibliography.ts +16 -0
  101. package/src/tool/forensic-fiber-comparison-microscope/component.astro +146 -0
  102. package/src/tool/forensic-fiber-comparison-microscope/entry.ts +32 -0
  103. package/src/tool/forensic-fiber-comparison-microscope/forensic-fiber-comparison-microscope.css +629 -0
  104. package/src/tool/forensic-fiber-comparison-microscope/i18n/de.ts +250 -0
  105. package/src/tool/forensic-fiber-comparison-microscope/i18n/en.ts +246 -0
  106. package/src/tool/forensic-fiber-comparison-microscope/i18n/es.ts +246 -0
  107. package/src/tool/forensic-fiber-comparison-microscope/i18n/fr.ts +246 -0
  108. package/src/tool/forensic-fiber-comparison-microscope/i18n/id.ts +250 -0
  109. package/src/tool/forensic-fiber-comparison-microscope/i18n/it.ts +246 -0
  110. package/src/tool/forensic-fiber-comparison-microscope/i18n/ja.ts +250 -0
  111. package/src/tool/forensic-fiber-comparison-microscope/i18n/ko.ts +246 -0
  112. package/src/tool/forensic-fiber-comparison-microscope/i18n/nl.ts +246 -0
  113. package/src/tool/forensic-fiber-comparison-microscope/i18n/pl.ts +250 -0
  114. package/src/tool/forensic-fiber-comparison-microscope/i18n/pt.ts +250 -0
  115. package/src/tool/forensic-fiber-comparison-microscope/i18n/ru.ts +250 -0
  116. package/src/tool/forensic-fiber-comparison-microscope/i18n/sv.ts +250 -0
  117. package/src/tool/forensic-fiber-comparison-microscope/i18n/tr.ts +246 -0
  118. package/src/tool/forensic-fiber-comparison-microscope/i18n/zh.ts +250 -0
  119. package/src/tool/forensic-fiber-comparison-microscope/index.ts +11 -0
  120. package/src/tool/forensic-fiber-comparison-microscope/logic.ts +244 -0
  121. package/src/tool/forensic-fiber-comparison-microscope/render.ts +265 -0
  122. package/src/tool/forensic-fiber-comparison-microscope/seo.astro +15 -0
  123. package/src/tool/forensic-fiber-comparison-microscope/view.ts +267 -0
  124. package/src/tool/forensic-glass-becke-line-simulator/bibliography.astro +6 -0
  125. package/src/tool/forensic-glass-becke-line-simulator/bibliography.ts +16 -0
  126. package/src/tool/forensic-glass-becke-line-simulator/component.astro +81 -0
  127. package/src/tool/forensic-glass-becke-line-simulator/entry.ts +32 -0
  128. package/src/tool/forensic-glass-becke-line-simulator/forensic-glass-becke-line-simulator.css +392 -0
  129. package/src/tool/forensic-glass-becke-line-simulator/i18n/de.ts +231 -0
  130. package/src/tool/forensic-glass-becke-line-simulator/i18n/en.ts +231 -0
  131. package/src/tool/forensic-glass-becke-line-simulator/i18n/es.ts +231 -0
  132. package/src/tool/forensic-glass-becke-line-simulator/i18n/fr.ts +231 -0
  133. package/src/tool/forensic-glass-becke-line-simulator/i18n/id.ts +231 -0
  134. package/src/tool/forensic-glass-becke-line-simulator/i18n/it.ts +231 -0
  135. package/src/tool/forensic-glass-becke-line-simulator/i18n/ja.ts +231 -0
  136. package/src/tool/forensic-glass-becke-line-simulator/i18n/ko.ts +231 -0
  137. package/src/tool/forensic-glass-becke-line-simulator/i18n/nl.ts +231 -0
  138. package/src/tool/forensic-glass-becke-line-simulator/i18n/pl.ts +231 -0
  139. package/src/tool/forensic-glass-becke-line-simulator/i18n/pt.ts +231 -0
  140. package/src/tool/forensic-glass-becke-line-simulator/i18n/ru.ts +231 -0
  141. package/src/tool/forensic-glass-becke-line-simulator/i18n/sv.ts +231 -0
  142. package/src/tool/forensic-glass-becke-line-simulator/i18n/tr.ts +231 -0
  143. package/src/tool/forensic-glass-becke-line-simulator/i18n/zh.ts +231 -0
  144. package/src/tool/forensic-glass-becke-line-simulator/index.ts +11 -0
  145. package/src/tool/forensic-glass-becke-line-simulator/logic.ts +100 -0
  146. package/src/tool/forensic-glass-becke-line-simulator/seo.astro +15 -0
  147. package/src/tool/forensic-glass-becke-line-simulator/view.ts +281 -0
  148. package/src/tool/forensic-image-authenticity-analyzer/bibliography.astro +9 -0
  149. package/src/tool/forensic-image-authenticity-analyzer/bibliography.ts +7 -0
  150. package/src/tool/forensic-image-authenticity-analyzer/component.astro +250 -0
  151. package/src/tool/forensic-image-authenticity-analyzer/entry.ts +29 -0
  152. package/src/tool/forensic-image-authenticity-analyzer/forensic-image-metadata-authenticity-analyzer.css +679 -0
  153. package/src/tool/forensic-image-authenticity-analyzer/i18n/de.ts +105 -0
  154. package/src/tool/forensic-image-authenticity-analyzer/i18n/en.ts +105 -0
  155. package/src/tool/forensic-image-authenticity-analyzer/i18n/es.ts +105 -0
  156. package/src/tool/forensic-image-authenticity-analyzer/i18n/fr.ts +105 -0
  157. package/src/tool/forensic-image-authenticity-analyzer/i18n/id.ts +76 -0
  158. package/src/tool/forensic-image-authenticity-analyzer/i18n/it.ts +105 -0
  159. package/src/tool/forensic-image-authenticity-analyzer/i18n/ja.ts +72 -0
  160. package/src/tool/forensic-image-authenticity-analyzer/i18n/ko.ts +72 -0
  161. package/src/tool/forensic-image-authenticity-analyzer/i18n/nl.ts +75 -0
  162. package/src/tool/forensic-image-authenticity-analyzer/i18n/pl.ts +75 -0
  163. package/src/tool/forensic-image-authenticity-analyzer/i18n/pt.ts +105 -0
  164. package/src/tool/forensic-image-authenticity-analyzer/i18n/ru.ts +75 -0
  165. package/src/tool/forensic-image-authenticity-analyzer/i18n/sv.ts +76 -0
  166. package/src/tool/forensic-image-authenticity-analyzer/i18n/tr.ts +76 -0
  167. package/src/tool/forensic-image-authenticity-analyzer/i18n/zh.ts +71 -0
  168. package/src/tool/forensic-image-authenticity-analyzer/index.ts +11 -0
  169. package/src/tool/forensic-image-authenticity-analyzer/logic.ts +283 -0
  170. package/src/tool/forensic-image-authenticity-analyzer/seo.astro +10 -0
  171. package/src/tool/forensic-microcrystal-drug-simulator/bibliography.astro +6 -0
  172. package/src/tool/forensic-microcrystal-drug-simulator/bibliography.ts +12 -0
  173. package/src/tool/forensic-microcrystal-drug-simulator/component.astro +240 -0
  174. package/src/tool/forensic-microcrystal-drug-simulator/entry.ts +32 -0
  175. package/src/tool/forensic-microcrystal-drug-simulator/forensic-microcrystal-drug-simulator.css +430 -0
  176. package/src/tool/forensic-microcrystal-drug-simulator/i18n/de.ts +244 -0
  177. package/src/tool/forensic-microcrystal-drug-simulator/i18n/en.ts +244 -0
  178. package/src/tool/forensic-microcrystal-drug-simulator/i18n/es.ts +244 -0
  179. package/src/tool/forensic-microcrystal-drug-simulator/i18n/fr.ts +244 -0
  180. package/src/tool/forensic-microcrystal-drug-simulator/i18n/id.ts +244 -0
  181. package/src/tool/forensic-microcrystal-drug-simulator/i18n/it.ts +244 -0
  182. package/src/tool/forensic-microcrystal-drug-simulator/i18n/ja.ts +244 -0
  183. package/src/tool/forensic-microcrystal-drug-simulator/i18n/ko.ts +244 -0
  184. package/src/tool/forensic-microcrystal-drug-simulator/i18n/nl.ts +244 -0
  185. package/src/tool/forensic-microcrystal-drug-simulator/i18n/pl.ts +244 -0
  186. package/src/tool/forensic-microcrystal-drug-simulator/i18n/pt.ts +244 -0
  187. package/src/tool/forensic-microcrystal-drug-simulator/i18n/ru.ts +244 -0
  188. package/src/tool/forensic-microcrystal-drug-simulator/i18n/sv.ts +244 -0
  189. package/src/tool/forensic-microcrystal-drug-simulator/i18n/tr.ts +244 -0
  190. package/src/tool/forensic-microcrystal-drug-simulator/i18n/zh.ts +244 -0
  191. package/src/tool/forensic-microcrystal-drug-simulator/index.ts +11 -0
  192. package/src/tool/forensic-microcrystal-drug-simulator/logic.ts +189 -0
  193. package/src/tool/forensic-microcrystal-drug-simulator/seo.astro +15 -0
  194. package/src/tool/forensic-sex-determinator/bibliography.astro +14 -0
  195. package/src/tool/forensic-sex-determinator/bibliography.ts +12 -0
  196. package/src/tool/forensic-sex-determinator/component.astro +463 -0
  197. package/src/tool/forensic-sex-determinator/entry.ts +32 -0
  198. package/src/tool/forensic-sex-determinator/forensic-sex-determinator.css +413 -0
  199. package/src/tool/forensic-sex-determinator/i18n/de.ts +211 -0
  200. package/src/tool/forensic-sex-determinator/i18n/en.ts +211 -0
  201. package/src/tool/forensic-sex-determinator/i18n/es.ts +211 -0
  202. package/src/tool/forensic-sex-determinator/i18n/fr.ts +211 -0
  203. package/src/tool/forensic-sex-determinator/i18n/id.ts +211 -0
  204. package/src/tool/forensic-sex-determinator/i18n/it.ts +211 -0
  205. package/src/tool/forensic-sex-determinator/i18n/ja.ts +211 -0
  206. package/src/tool/forensic-sex-determinator/i18n/ko.ts +211 -0
  207. package/src/tool/forensic-sex-determinator/i18n/nl.ts +211 -0
  208. package/src/tool/forensic-sex-determinator/i18n/pl.ts +211 -0
  209. package/src/tool/forensic-sex-determinator/i18n/pt.ts +211 -0
  210. package/src/tool/forensic-sex-determinator/i18n/ru.ts +211 -0
  211. package/src/tool/forensic-sex-determinator/i18n/sv.ts +211 -0
  212. package/src/tool/forensic-sex-determinator/i18n/tr.ts +211 -0
  213. package/src/tool/forensic-sex-determinator/i18n/zh.ts +211 -0
  214. package/src/tool/forensic-sex-determinator/index.ts +11 -0
  215. package/src/tool/forensic-sex-determinator/logic.ts +89 -0
  216. package/src/tool/forensic-sex-determinator/seo.astro +15 -0
  217. package/src/tool/forensic-stature-estimator/bibliography.astro +14 -0
  218. package/src/tool/forensic-stature-estimator/bibliography.ts +12 -0
  219. package/src/tool/forensic-stature-estimator/component.astro +49 -0
  220. package/src/tool/forensic-stature-estimator/components/EstimationPanel.astro +65 -0
  221. package/src/tool/forensic-stature-estimator/components/OsteometricBoard.astro +39 -0
  222. package/src/tool/forensic-stature-estimator/components/OsteometricSelector.astro +109 -0
  223. package/src/tool/forensic-stature-estimator/dom-utils.ts +71 -0
  224. package/src/tool/forensic-stature-estimator/entry.ts +32 -0
  225. package/src/tool/forensic-stature-estimator/forensic-stature-estimator.css +689 -0
  226. package/src/tool/forensic-stature-estimator/helpers.ts +51 -0
  227. package/src/tool/forensic-stature-estimator/i18n/de.ts +196 -0
  228. package/src/tool/forensic-stature-estimator/i18n/en.ts +196 -0
  229. package/src/tool/forensic-stature-estimator/i18n/es.ts +196 -0
  230. package/src/tool/forensic-stature-estimator/i18n/fr.ts +196 -0
  231. package/src/tool/forensic-stature-estimator/i18n/id.ts +196 -0
  232. package/src/tool/forensic-stature-estimator/i18n/it.ts +196 -0
  233. package/src/tool/forensic-stature-estimator/i18n/ja.ts +196 -0
  234. package/src/tool/forensic-stature-estimator/i18n/ko.ts +196 -0
  235. package/src/tool/forensic-stature-estimator/i18n/nl.ts +196 -0
  236. package/src/tool/forensic-stature-estimator/i18n/pl.ts +196 -0
  237. package/src/tool/forensic-stature-estimator/i18n/pt.ts +196 -0
  238. package/src/tool/forensic-stature-estimator/i18n/ru.ts +196 -0
  239. package/src/tool/forensic-stature-estimator/i18n/sv.ts +196 -0
  240. package/src/tool/forensic-stature-estimator/i18n/tr.ts +196 -0
  241. package/src/tool/forensic-stature-estimator/i18n/zh.ts +196 -0
  242. package/src/tool/forensic-stature-estimator/index.ts +11 -0
  243. package/src/tool/forensic-stature-estimator/logic.ts +119 -0
  244. package/src/tool/forensic-stature-estimator/script.ts +288 -0
  245. package/src/tool/forensic-stature-estimator/seo.astro +15 -0
  246. package/src/tool/forensic-tlc-ink-simulator/bibliography.astro +6 -0
  247. package/src/tool/forensic-tlc-ink-simulator/bibliography.ts +16 -0
  248. package/src/tool/forensic-tlc-ink-simulator/component.astro +245 -0
  249. package/src/tool/forensic-tlc-ink-simulator/entry.ts +32 -0
  250. package/src/tool/forensic-tlc-ink-simulator/forensic-tlc-ink-simulator.css +462 -0
  251. package/src/tool/forensic-tlc-ink-simulator/i18n/de.ts +243 -0
  252. package/src/tool/forensic-tlc-ink-simulator/i18n/en.ts +243 -0
  253. package/src/tool/forensic-tlc-ink-simulator/i18n/es.ts +243 -0
  254. package/src/tool/forensic-tlc-ink-simulator/i18n/fr.ts +243 -0
  255. package/src/tool/forensic-tlc-ink-simulator/i18n/id.ts +243 -0
  256. package/src/tool/forensic-tlc-ink-simulator/i18n/it.ts +243 -0
  257. package/src/tool/forensic-tlc-ink-simulator/i18n/ja.ts +235 -0
  258. package/src/tool/forensic-tlc-ink-simulator/i18n/ko.ts +235 -0
  259. package/src/tool/forensic-tlc-ink-simulator/i18n/nl.ts +243 -0
  260. package/src/tool/forensic-tlc-ink-simulator/i18n/pl.ts +243 -0
  261. package/src/tool/forensic-tlc-ink-simulator/i18n/pt.ts +243 -0
  262. package/src/tool/forensic-tlc-ink-simulator/i18n/ru.ts +243 -0
  263. package/src/tool/forensic-tlc-ink-simulator/i18n/sv.ts +243 -0
  264. package/src/tool/forensic-tlc-ink-simulator/i18n/tr.ts +243 -0
  265. package/src/tool/forensic-tlc-ink-simulator/i18n/zh.ts +235 -0
  266. package/src/tool/forensic-tlc-ink-simulator/index.ts +11 -0
  267. package/src/tool/forensic-tlc-ink-simulator/logic.ts +152 -0
  268. package/src/tool/forensic-tlc-ink-simulator/seo.astro +15 -0
  269. package/src/tool/gsr-dispersion-calculator/bibliography.astro +6 -0
  270. package/src/tool/gsr-dispersion-calculator/bibliography.ts +16 -0
  271. package/src/tool/gsr-dispersion-calculator/component.astro +294 -0
  272. package/src/tool/gsr-dispersion-calculator/entry.ts +32 -0
  273. package/src/tool/gsr-dispersion-calculator/gsr-dispersion-calculator.css +305 -0
  274. package/src/tool/gsr-dispersion-calculator/i18n/de.ts +272 -0
  275. package/src/tool/gsr-dispersion-calculator/i18n/en.ts +272 -0
  276. package/src/tool/gsr-dispersion-calculator/i18n/es.ts +272 -0
  277. package/src/tool/gsr-dispersion-calculator/i18n/fr.ts +272 -0
  278. package/src/tool/gsr-dispersion-calculator/i18n/id.ts +272 -0
  279. package/src/tool/gsr-dispersion-calculator/i18n/it.ts +272 -0
  280. package/src/tool/gsr-dispersion-calculator/i18n/ja.ts +272 -0
  281. package/src/tool/gsr-dispersion-calculator/i18n/ko.ts +272 -0
  282. package/src/tool/gsr-dispersion-calculator/i18n/nl.ts +272 -0
  283. package/src/tool/gsr-dispersion-calculator/i18n/pl.ts +272 -0
  284. package/src/tool/gsr-dispersion-calculator/i18n/pt.ts +272 -0
  285. package/src/tool/gsr-dispersion-calculator/i18n/ru.ts +272 -0
  286. package/src/tool/gsr-dispersion-calculator/i18n/sv.ts +272 -0
  287. package/src/tool/gsr-dispersion-calculator/i18n/tr.ts +272 -0
  288. package/src/tool/gsr-dispersion-calculator/i18n/zh.ts +272 -0
  289. package/src/tool/gsr-dispersion-calculator/index.ts +11 -0
  290. package/src/tool/gsr-dispersion-calculator/logic.ts +148 -0
  291. package/src/tool/gsr-dispersion-calculator/seo.astro +15 -0
  292. package/src/tool/widmark-alcohol-simulator/bibliography.astro +14 -0
  293. package/src/tool/widmark-alcohol-simulator/bibliography.ts +12 -0
  294. package/src/tool/widmark-alcohol-simulator/component.astro +453 -0
  295. package/src/tool/widmark-alcohol-simulator/entry.ts +32 -0
  296. package/src/tool/widmark-alcohol-simulator/i18n/de.ts +193 -0
  297. package/src/tool/widmark-alcohol-simulator/i18n/en.ts +206 -0
  298. package/src/tool/widmark-alcohol-simulator/i18n/es.ts +193 -0
  299. package/src/tool/widmark-alcohol-simulator/i18n/fr.ts +193 -0
  300. package/src/tool/widmark-alcohol-simulator/i18n/id.ts +193 -0
  301. package/src/tool/widmark-alcohol-simulator/i18n/it.ts +193 -0
  302. package/src/tool/widmark-alcohol-simulator/i18n/ja.ts +193 -0
  303. package/src/tool/widmark-alcohol-simulator/i18n/ko.ts +193 -0
  304. package/src/tool/widmark-alcohol-simulator/i18n/nl.ts +193 -0
  305. package/src/tool/widmark-alcohol-simulator/i18n/pl.ts +193 -0
  306. package/src/tool/widmark-alcohol-simulator/i18n/pt.ts +193 -0
  307. package/src/tool/widmark-alcohol-simulator/i18n/ru.ts +193 -0
  308. package/src/tool/widmark-alcohol-simulator/i18n/sv.ts +193 -0
  309. package/src/tool/widmark-alcohol-simulator/i18n/tr.ts +193 -0
  310. package/src/tool/widmark-alcohol-simulator/i18n/zh.ts +193 -0
  311. package/src/tool/widmark-alcohol-simulator/index.ts +11 -0
  312. package/src/tool/widmark-alcohol-simulator/logic.ts +97 -0
  313. package/src/tool/widmark-alcohol-simulator/seo.astro +15 -0
  314. package/src/tool/widmark-alcohol-simulator/widmark-alcohol-simulator.css +386 -0
  315. package/src/tools.ts +27 -0
  316. package/src/types.ts +70 -0
@@ -0,0 +1,634 @@
1
+ .forensic-age {
2
+ --forensic-ink: #211d19;
3
+ --forensic-muted: #6f675d;
4
+ --forensic-paper: #f9f7f2;
5
+ --forensic-line: rgba(92, 29, 29, 0.2);
6
+ --forensic-oxblood: #5c1d1d;
7
+ --forensic-amber: #e8a87c;
8
+ --forensic-warning: #f2b45f;
9
+ --forensic-steel: #59686a;
10
+ --dental-maturity: 0.5;
11
+ --epiphyseal-maturity: 0.5;
12
+ --molar-maturity: 0.5;
13
+ --overall-maturity: 0.5;
14
+
15
+ display: grid;
16
+ gap: clamp(1.2rem, 3vw, 2.25rem);
17
+ width: min(100%, 1320px);
18
+ margin: 0 auto;
19
+ padding: clamp(1rem, 2.4vw, 2rem);
20
+ color: var(--forensic-ink);
21
+ background: var(--forensic-paper);
22
+ }
23
+
24
+ @keyframes forensic-age-reveal {
25
+ from {
26
+ opacity: 0;
27
+ transform: translateY(12px);
28
+ }
29
+
30
+ to {
31
+ opacity: 1;
32
+ transform: translateY(0);
33
+ }
34
+ }
35
+
36
+ @keyframes forensic-age-menu {
37
+ from {
38
+ opacity: 0;
39
+ transform: translateY(-0.45rem) scale(0.98);
40
+ }
41
+
42
+ to {
43
+ opacity: 1;
44
+ transform: translateY(0) scale(1);
45
+ }
46
+ }
47
+
48
+ @keyframes forensic-age-pulse {
49
+ 0% {
50
+ filter: drop-shadow(0 0 0 transparent);
51
+ transform: scale(1);
52
+ }
53
+
54
+ 42% {
55
+ filter: drop-shadow(0 0 18px color-mix(in srgb, var(--forensic-amber) 28%, transparent));
56
+ transform: scale(1.012);
57
+ }
58
+
59
+ 100% {
60
+ filter: drop-shadow(0 0 0 transparent);
61
+ transform: scale(1);
62
+ }
63
+ }
64
+
65
+ @keyframes forensic-age-interval-pulse {
66
+ 0% {
67
+ filter: none;
68
+ }
69
+
70
+ 44% {
71
+ filter: drop-shadow(0 0 22px color-mix(in srgb, var(--forensic-amber) 20%, transparent));
72
+ }
73
+
74
+ 100% {
75
+ filter: none;
76
+ }
77
+ }
78
+
79
+ .theme-dark .forensic-age {
80
+ --forensic-ink: rgba(255, 255, 255, 0.92);
81
+ --forensic-muted: rgba(255, 255, 255, 0.7);
82
+ --forensic-paper: #141210;
83
+ --forensic-line: rgba(255, 255, 255, 0.2);
84
+ --forensic-oxblood: #c99191;
85
+ --forensic-amber: #e8a87c;
86
+ --forensic-warning: #f2b45f;
87
+ --forensic-steel: rgba(255, 255, 255, 0.68);
88
+ }
89
+
90
+ .forensic-age-panel,
91
+ .forensic-age-visual,
92
+ .forensic-age-results {
93
+ min-width: 0;
94
+ }
95
+
96
+ .forensic-age-panel,
97
+ .forensic-age-results {
98
+ display: grid;
99
+ align-content: start;
100
+ gap: 1.25rem;
101
+ }
102
+
103
+ .forensic-age-panel {
104
+ animation: forensic-age-reveal 0.48s ease-out both;
105
+ }
106
+
107
+ .forensic-age-results {
108
+ align-content: center;
109
+ gap: 0.9rem;
110
+ padding: 0;
111
+ animation: forensic-age-reveal 0.56s 0.08s ease-out both;
112
+ }
113
+
114
+ .forensic-age-band span,
115
+ .forensic-age-field span,
116
+ .forensic-age-stage-field b,
117
+ .forensic-age-stage-card strong,
118
+ .forensic-age-score-label {
119
+ color: var(--forensic-muted);
120
+ font-size: 0.66rem;
121
+ font-weight: 760;
122
+ letter-spacing: 0.05em;
123
+ line-height: 1.2;
124
+ text-transform: uppercase;
125
+ }
126
+
127
+ .forensic-age-field,
128
+ .forensic-age-stage-field,
129
+ .forensic-age-notes {
130
+ margin: 0;
131
+ padding: 0 0 1.05rem;
132
+ border: 0;
133
+ border-bottom: 1px solid var(--forensic-line);
134
+ }
135
+
136
+ .forensic-age-stage-field {
137
+ position: relative;
138
+ }
139
+
140
+ .forensic-age-field {
141
+ display: grid;
142
+ gap: 0.58rem;
143
+ }
144
+
145
+ .forensic-age-field select {
146
+ width: 100%;
147
+ min-height: 42px;
148
+ border: 0;
149
+ border-radius: 0;
150
+ color: var(--forensic-ink);
151
+ background: var(--forensic-paper);
152
+ font-size: 0.95rem;
153
+ font-weight: 650;
154
+ }
155
+
156
+ .forensic-age-field select option {
157
+ color: var(--forensic-ink);
158
+ background: var(--forensic-paper);
159
+ }
160
+
161
+ .forensic-age-stage-select {
162
+ position: relative;
163
+ display: grid;
164
+ grid-template-columns: minmax(0, 1fr) auto 0.7rem;
165
+ gap: 0.9rem;
166
+ align-items: center;
167
+ width: 100%;
168
+ min-height: 4.8rem;
169
+ padding: 0;
170
+ border: 0;
171
+ color: inherit;
172
+ background: transparent;
173
+ cursor: pointer;
174
+ text-align: left;
175
+ }
176
+
177
+ .forensic-age-stage-select::before {
178
+ position: absolute;
179
+ right: 0;
180
+ bottom: -1.05rem;
181
+ left: 0;
182
+ height: 1px;
183
+ background: var(--forensic-amber);
184
+ content: "";
185
+ opacity: 0;
186
+ transform: scaleX(0.2);
187
+ transform-origin: left;
188
+ transition:
189
+ opacity 0.26s ease-out,
190
+ transform 0.26s ease-out;
191
+ }
192
+
193
+ .forensic-age-stage-select:hover::before,
194
+ .forensic-age-stage-select[aria-expanded='true']::before {
195
+ opacity: 1;
196
+ transform: scaleX(1);
197
+ }
198
+
199
+ .forensic-age-stage-select::after {
200
+ width: 0.44rem;
201
+ height: 0.44rem;
202
+ border-right: 1px solid var(--forensic-muted);
203
+ border-bottom: 1px solid var(--forensic-muted);
204
+ content: "";
205
+ transform: rotate(45deg) translateY(-0.12rem);
206
+ transition: transform 0.2s ease-out;
207
+ }
208
+
209
+ .forensic-age-stage-select[aria-expanded='true']::after {
210
+ transform: rotate(225deg) translateY(-0.12rem);
211
+ }
212
+
213
+ .forensic-age-stage-select span {
214
+ display: grid;
215
+ gap: 0.28rem;
216
+ }
217
+
218
+ .forensic-age-stage-field small {
219
+ color: var(--forensic-muted);
220
+ font-size: 0.72rem;
221
+ font-weight: 520;
222
+ line-height: 1.35;
223
+ }
224
+
225
+ .forensic-age-stage-field output {
226
+ justify-self: end;
227
+ padding: 0.42rem 0.58rem;
228
+ border: 1px solid color-mix(in srgb, var(--forensic-amber) 62%, transparent);
229
+ color: var(--forensic-oxblood);
230
+ font-size: 0.72rem;
231
+ font-variant-numeric: tabular-nums lining-nums;
232
+ font-weight: 800;
233
+ letter-spacing: 0.05em;
234
+ text-transform: uppercase;
235
+ box-shadow: inset 0 0 18px color-mix(in srgb, var(--forensic-amber) 13%, transparent);
236
+ transition:
237
+ border-color 0.26s ease-out,
238
+ box-shadow 0.26s ease-out,
239
+ color 0.26s ease-out;
240
+ }
241
+
242
+ .forensic-age-stage-select:hover output,
243
+ .forensic-age-stage-select[aria-expanded='true'] output {
244
+ border-color: var(--forensic-amber);
245
+ color: var(--forensic-amber);
246
+ box-shadow:
247
+ inset 0 0 18px color-mix(in srgb, var(--forensic-amber) 18%, transparent),
248
+ 0 0 22px color-mix(in srgb, var(--forensic-amber) 12%, transparent);
249
+ }
250
+
251
+ .forensic-age-stage-list {
252
+ position: absolute;
253
+ top: calc(100% - 0.5rem);
254
+ left: 0;
255
+ z-index: 8;
256
+ display: grid;
257
+ grid-template-columns: repeat(3, minmax(0, 1fr));
258
+ gap: 0.42rem;
259
+ width: min(31rem, calc(100vw - 2rem));
260
+ padding: 0.65rem;
261
+ overflow: visible;
262
+ border: 1px solid var(--forensic-line);
263
+ background: color-mix(in srgb, var(--forensic-paper) 94%, transparent);
264
+ box-shadow: 0 18px 48px rgba(0, 0, 0, 0.18);
265
+ backdrop-filter: blur(14px);
266
+ animation: forensic-age-menu 0.2s ease-out both;
267
+ transform-origin: top left;
268
+ }
269
+
270
+ .forensic-age-stage-list[hidden] {
271
+ display: none;
272
+ }
273
+
274
+ .forensic-age-stage-card {
275
+ display: grid;
276
+ grid-template-columns: 1.75rem 1fr;
277
+ gap: 0.42rem 0.55rem;
278
+ align-items: start;
279
+ min-height: 4.7rem;
280
+ padding: 0.42rem 0.5rem;
281
+ border: 1px solid transparent;
282
+ color: var(--forensic-muted);
283
+ background: transparent;
284
+ cursor: pointer;
285
+ transition:
286
+ border-color 0.3s ease-out,
287
+ box-shadow 0.3s ease-out,
288
+ color 0.3s ease-out,
289
+ transform 0.3s ease-out;
290
+ }
291
+
292
+ .forensic-age-stage-card:has(input:checked) {
293
+ color: var(--forensic-ink);
294
+ border-color: var(--forensic-amber);
295
+ box-shadow:
296
+ inset 0 0 20px color-mix(in srgb, var(--forensic-amber) 16%, transparent),
297
+ 0 0 18px color-mix(in srgb, var(--forensic-amber) 10%, transparent);
298
+ }
299
+
300
+ .forensic-age-stage-card:has(input:focus-visible) {
301
+ outline: 2px solid color-mix(in srgb, var(--forensic-oxblood) 65%, transparent);
302
+ outline-offset: 2px;
303
+ }
304
+
305
+ .forensic-age-stage-card:hover {
306
+ transform: translateY(-1px);
307
+ }
308
+
309
+ .forensic-age-stage-card input {
310
+ position: absolute;
311
+ opacity: 0;
312
+ pointer-events: none;
313
+ }
314
+
315
+ .forensic-age-stage-card svg {
316
+ width: 2.04rem;
317
+ height: 2.04rem;
318
+ color: var(--forensic-steel);
319
+ }
320
+
321
+ .forensic-age-stage-card path,
322
+ .forensic-age-stage-card circle {
323
+ fill: none;
324
+ stroke: currentcolor;
325
+ stroke-linecap: round;
326
+ stroke-linejoin: round;
327
+ stroke-width: 2;
328
+ vector-effect: non-scaling-stroke;
329
+ }
330
+
331
+ .forensic-age-stage-card:has(input:checked) svg {
332
+ color: var(--forensic-oxblood);
333
+ }
334
+
335
+ .forensic-age-stage-card span {
336
+ grid-column: 2;
337
+ color: inherit;
338
+ font-size: 0.7rem;
339
+ font-weight: 540;
340
+ line-height: 1.25;
341
+ }
342
+
343
+ .forensic-age-visual {
344
+ display: grid;
345
+ place-items: center;
346
+ min-height: 520px;
347
+ animation: forensic-age-reveal 0.62s 0.04s ease-out both;
348
+ }
349
+
350
+ .forensic-age-instrument {
351
+ width: min(100%, 560px);
352
+ overflow: visible;
353
+ transform-box: fill-box;
354
+ transform-origin: center;
355
+ }
356
+
357
+ .forensic-age-instrument-pulse {
358
+ animation: forensic-age-pulse 0.46s ease-out both;
359
+ }
360
+
361
+ .forensic-age-progress-track,
362
+ .forensic-age-progress-fill {
363
+ fill: none;
364
+ stroke-width: 2;
365
+ transform: rotate(-90deg);
366
+ transform-origin: 215px 176px;
367
+ vector-effect: non-scaling-stroke;
368
+ }
369
+
370
+ .forensic-age-progress-track {
371
+ stroke: var(--forensic-line);
372
+ }
373
+
374
+ .forensic-age-progress-fill {
375
+ stroke: var(--forensic-amber);
376
+ filter: drop-shadow(0 0 8px color-mix(in srgb, var(--forensic-amber) 24%, transparent));
377
+ stroke-dasharray: 100;
378
+ stroke-dashoffset: calc(100 * (1 - var(--overall-maturity)));
379
+ transition:
380
+ filter 0.3s ease-out,
381
+ stroke-dashoffset 0.42s cubic-bezier(0.2, 0.8, 0.2, 1);
382
+ }
383
+
384
+ .forensic-age-progress-fill-complete {
385
+ stroke-dasharray: none;
386
+ stroke-dashoffset: 0;
387
+ }
388
+
389
+ .forensic-age-signal {
390
+ stroke: color-mix(in srgb, var(--forensic-line) 72%, transparent);
391
+ stroke-linecap: round;
392
+ stroke-width: 1;
393
+ vector-effect: non-scaling-stroke;
394
+ }
395
+
396
+ .forensic-age-signal-dot {
397
+ fill: var(--forensic-amber);
398
+ opacity: calc(0.48 + var(--overall-maturity) * 0.38);
399
+ filter: drop-shadow(0 0 6px color-mix(in srgb, var(--forensic-amber) 20%, transparent));
400
+ transition:
401
+ filter 0.3s ease-out,
402
+ opacity 0.3s ease-out,
403
+ transform 0.42s cubic-bezier(0.2, 0.8, 0.2, 1);
404
+ }
405
+
406
+ .forensic-age-signal-dot-dental {
407
+ transform: scale(calc(0.72 + var(--dental-maturity) * 0.72));
408
+ transform-origin: 108px 320px;
409
+ }
410
+
411
+ .forensic-age-signal-dot-epiphyseal {
412
+ transform: scale(calc(0.72 + var(--epiphyseal-maturity) * 0.72));
413
+ transform-origin: 215px 320px;
414
+ }
415
+
416
+ .forensic-age-signal-dot-molar {
417
+ transform: scale(calc(0.72 + var(--molar-maturity) * 0.72));
418
+ transform-origin: 322px 320px;
419
+ }
420
+
421
+ .forensic-age-signals text {
422
+ fill: var(--forensic-muted);
423
+ font-size: 0.58rem;
424
+ font-weight: 760;
425
+ letter-spacing: 0.05em;
426
+ text-anchor: middle;
427
+ }
428
+
429
+ .forensic-age-score-label,
430
+ .forensic-age-score-value {
431
+ text-anchor: middle;
432
+ }
433
+
434
+ .forensic-age-score-label {
435
+ fill: var(--forensic-muted);
436
+ opacity: 0.9;
437
+ }
438
+
439
+ .forensic-age-score-value {
440
+ fill: var(--forensic-amber);
441
+ font-size: 2.75rem;
442
+ font-variant-numeric: tabular-nums lining-nums;
443
+ font-weight: 820;
444
+ }
445
+
446
+ .forensic-age-band {
447
+ display: none;
448
+ gap: 0.5rem;
449
+ padding-block: 0 0.3rem;
450
+ border-bottom: 0;
451
+ }
452
+
453
+ .forensic-age-band strong {
454
+ color: var(--forensic-ink);
455
+ font-size: clamp(8rem, 15vw, 14rem);
456
+ font-variant-numeric: tabular-nums lining-nums;
457
+ font-weight: 660;
458
+ letter-spacing: 0;
459
+ line-height: 0.78;
460
+ }
461
+
462
+ .forensic-age-band-main strong {
463
+ color: var(--forensic-oxblood);
464
+ }
465
+
466
+ .forensic-age-number,
467
+ .forensic-age-unit {
468
+ display: inline-block;
469
+ }
470
+
471
+ .forensic-age-unit {
472
+ margin-left: 0.2em;
473
+ color: var(--forensic-muted);
474
+ font-size: 0.15em;
475
+ font-weight: 480;
476
+ letter-spacing: 0.05em;
477
+ text-transform: uppercase;
478
+ vertical-align: 0.5em;
479
+ }
480
+
481
+ .forensic-age-band-main .forensic-age-unit {
482
+ color: color-mix(in srgb, var(--forensic-oxblood) 72%, var(--forensic-muted));
483
+ }
484
+
485
+ .forensic-age-interval {
486
+ display: grid;
487
+ grid-template-columns: auto 1fr auto;
488
+ gap: 0.7rem 1rem;
489
+ align-items: center;
490
+ padding: 0;
491
+ border-bottom: 1px solid var(--forensic-line);
492
+ }
493
+
494
+ .forensic-age-interval strong {
495
+ color: var(--forensic-ink);
496
+ font-size: clamp(2.4rem, 4.6vw, 3.6rem);
497
+ font-variant-numeric: tabular-nums lining-nums;
498
+ font-weight: 680;
499
+ line-height: 1;
500
+ }
501
+
502
+ .forensic-age-interval i {
503
+ grid-column: 1 / -1;
504
+ grid-row: 2;
505
+ position: relative;
506
+ height: 0.62rem;
507
+ border-radius: 999px;
508
+ background: color-mix(in srgb, var(--forensic-amber) 64%, var(--forensic-line));
509
+ box-shadow:
510
+ inset 0 0 10px color-mix(in srgb, var(--forensic-paper) 24%, transparent),
511
+ 0 0 28px color-mix(in srgb, var(--forensic-amber) 18%, transparent);
512
+ }
513
+
514
+ .forensic-age-interval-pulse i {
515
+ animation: forensic-age-interval-pulse 0.44s ease-out both;
516
+ }
517
+
518
+ .forensic-age-interval i::before,
519
+ .forensic-age-interval i::after {
520
+ position: absolute;
521
+ top: 50%;
522
+ width: 1rem;
523
+ height: 1rem;
524
+ border-radius: 50%;
525
+ background: var(--forensic-amber);
526
+ content: "";
527
+ transform: translateY(-50%);
528
+ }
529
+
530
+ .forensic-age-interval i::before {
531
+ left: 0;
532
+ }
533
+
534
+ .forensic-age-interval i::after {
535
+ right: 0;
536
+ }
537
+
538
+ .forensic-age-interval strong:first-of-type {
539
+ grid-column: 1;
540
+ grid-row: 3;
541
+ }
542
+
543
+ .forensic-age-interval strong:last-of-type {
544
+ grid-column: 3;
545
+ grid-row: 3;
546
+ justify-self: end;
547
+ }
548
+
549
+ #forensic-likely-marker {
550
+ grid-column: 1 / -1;
551
+ grid-row: 1;
552
+ justify-self: center;
553
+ color: var(--forensic-amber);
554
+ font-size: clamp(3.8rem, 7.2vw, 6.2rem);
555
+ line-height: 0.85;
556
+ }
557
+
558
+ #forensic-likely-marker .forensic-age-unit {
559
+ font-size: 0.18em;
560
+ vertical-align: 0.42em;
561
+ }
562
+
563
+ .forensic-age-notes {
564
+ display: grid;
565
+ gap: 0.62rem;
566
+ padding: 0.85rem;
567
+ border: 1px solid color-mix(in srgb, var(--forensic-warning) 58%, transparent);
568
+ background: color-mix(in srgb, var(--forensic-warning) 10%, transparent);
569
+ box-shadow: inset 0 0 24px color-mix(in srgb, var(--forensic-warning) 9%, transparent);
570
+ transition:
571
+ border-color 0.3s ease-out,
572
+ box-shadow 0.3s ease-out,
573
+ transform 0.3s ease-out;
574
+ }
575
+
576
+ .forensic-age-notes:hover {
577
+ border-color: color-mix(in srgb, var(--forensic-warning) 76%, transparent);
578
+ box-shadow:
579
+ inset 0 0 24px color-mix(in srgb, var(--forensic-warning) 12%, transparent),
580
+ 0 0 30px color-mix(in srgb, var(--forensic-warning) 8%, transparent);
581
+ transform: translateY(-1px);
582
+ }
583
+
584
+ .forensic-age-notes strong {
585
+ justify-self: start;
586
+ color: var(--forensic-warning);
587
+ font-size: 1.2rem;
588
+ font-weight: 820;
589
+ text-transform: capitalize;
590
+ }
591
+
592
+ .forensic-age-notes p {
593
+ max-width: 36ch;
594
+ margin: 0;
595
+ color: var(--forensic-muted);
596
+ font-size: 0.82rem;
597
+ line-height: 1.55;
598
+ }
599
+
600
+ @media (min-width: 1080px) {
601
+ .forensic-age {
602
+ grid-template-columns: minmax(270px, 0.72fr) minmax(460px, 1.26fr) minmax(300px, 0.82fr);
603
+ align-items: center;
604
+ }
605
+ }
606
+
607
+ @media (max-width: 720px) {
608
+ .forensic-age {
609
+ padding-inline: 1rem;
610
+ }
611
+
612
+ .forensic-age-visual {
613
+ min-height: 380px;
614
+ }
615
+ }
616
+
617
+ @media (prefers-reduced-motion: reduce) {
618
+ .forensic-age-panel,
619
+ .forensic-age-results,
620
+ .forensic-age-stage-list,
621
+ .forensic-age-visual,
622
+ .forensic-age-instrument-pulse,
623
+ .forensic-age-interval-pulse i {
624
+ animation: none;
625
+ }
626
+
627
+ .forensic-age-progress-fill,
628
+ .forensic-age-signal-dot,
629
+ .forensic-age-stage-card,
630
+ .forensic-age-stage-field output,
631
+ .forensic-age-notes {
632
+ transition: none;
633
+ }
634
+ }
@@ -0,0 +1,32 @@
1
+ import type { ScienceToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+ export interface ForensicAgeEstimatorUI {
4
+ [key: string]: string;
5
+ }
6
+
7
+ export type ForensicAgeEstimatorLocaleContent = ToolLocaleContent<ForensicAgeEstimatorUI>;
8
+
9
+ export const forensicAgeEstimator: ScienceToolEntry<ForensicAgeEstimatorUI> = {
10
+ id: 'forensic-age-estimator',
11
+ icons: {
12
+ bg: 'mdi:account-search-outline',
13
+ fg: 'mdi:bone',
14
+ },
15
+ i18n: {
16
+ de: () => import('./i18n/de').then((m) => m.content),
17
+ en: () => import('./i18n/en').then((m) => m.content),
18
+ es: () => import('./i18n/es').then((m) => m.content),
19
+ fr: () => import('./i18n/fr').then((m) => m.content),
20
+ id: () => import('./i18n/id').then((m) => m.content),
21
+ it: () => import('./i18n/it').then((m) => m.content),
22
+ ja: () => import('./i18n/ja').then((m) => m.content),
23
+ ko: () => import('./i18n/ko').then((m) => m.content),
24
+ nl: () => import('./i18n/nl').then((m) => m.content),
25
+ pl: () => import('./i18n/pl').then((m) => m.content),
26
+ pt: () => import('./i18n/pt').then((m) => m.content),
27
+ ru: () => import('./i18n/ru').then((m) => m.content),
28
+ sv: () => import('./i18n/sv').then((m) => m.content),
29
+ tr: () => import('./i18n/tr').then((m) => m.content),
30
+ zh: () => import('./i18n/zh').then((m) => m.content),
31
+ },
32
+ };