@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,32 @@
1
+ import type { ScienceToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+ export interface GlassBeckeLineSimulatorUI {
4
+ [key: string]: string;
5
+ }
6
+
7
+ export type GlassBeckeLineSimulatorLocaleContent = ToolLocaleContent<GlassBeckeLineSimulatorUI>;
8
+
9
+ export const forensicGlassBeckeLineSimulator: ScienceToolEntry<GlassBeckeLineSimulatorUI> = {
10
+ id: 'forensic-glass-becke-line-simulator',
11
+ icons: {
12
+ bg: 'mdi:microscope',
13
+ fg: 'mdi:glass-fragile',
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
+ };
@@ -0,0 +1,392 @@
1
+ .becke-shell {
2
+ width: 100%;
3
+ color: #122029;
4
+ }
5
+
6
+ .becke-scope {
7
+ display: grid;
8
+ grid-template-columns: minmax(0, 1.45fr) minmax(280px, 0.75fr);
9
+ gap: 16px;
10
+ padding: 16px;
11
+ border: 1px solid rgba(17, 24, 39, 0.12);
12
+ border-radius: 8px;
13
+ background: linear-gradient(135deg, #effaf6, #dbeee9 58%, #f5eddc);
14
+ box-shadow: 0 18px 42px rgba(15, 23, 42, 0.1);
15
+ }
16
+
17
+ .becke-viewer {
18
+ position: relative;
19
+ min-height: 380px;
20
+ overflow: hidden;
21
+ border-radius: 8px;
22
+ background: #13202a;
23
+ box-shadow: inset 0 0 0 12px rgba(18, 32, 41, 0.82);
24
+ }
25
+
26
+ .becke-viewer canvas {
27
+ display: block;
28
+ width: 100%;
29
+ height: 100%;
30
+ min-height: 380px;
31
+ }
32
+
33
+ .becke-reticle {
34
+ position: absolute;
35
+ inset: 12%;
36
+ pointer-events: none;
37
+ border: 1px solid rgba(255, 255, 255, 0.22);
38
+ border-radius: 50%;
39
+ }
40
+
41
+ .becke-reticle::before,
42
+ .becke-reticle::after {
43
+ position: absolute;
44
+ content: "";
45
+ background: rgba(255, 255, 255, 0.24);
46
+ }
47
+
48
+ .becke-reticle::before {
49
+ top: 50%;
50
+ left: 8%;
51
+ width: 84%;
52
+ height: 1px;
53
+ }
54
+
55
+ .becke-reticle::after {
56
+ top: 8%;
57
+ left: 50%;
58
+ width: 1px;
59
+ height: 84%;
60
+ }
61
+
62
+ .becke-badge {
63
+ position: absolute;
64
+ right: 18px;
65
+ bottom: 18px;
66
+ display: grid;
67
+ gap: 2px;
68
+ min-width: 112px;
69
+ padding: 10px 12px;
70
+ border-radius: 8px;
71
+ background: rgba(18, 32, 41, 0.82);
72
+ color: #f8fafc;
73
+ }
74
+
75
+ .becke-material-chip {
76
+ position: absolute;
77
+ top: 18px;
78
+ left: 18px;
79
+ max-width: min(68%, 360px);
80
+ padding: 8px 11px;
81
+ border-radius: 8px;
82
+ background: rgba(18, 32, 41, 0.76);
83
+ color: #f8fafc;
84
+ font-size: 0.86rem;
85
+ font-weight: 800;
86
+ line-height: 1.15;
87
+ overflow: hidden;
88
+ text-overflow: ellipsis;
89
+ white-space: nowrap;
90
+ }
91
+
92
+ .becke-badge span,
93
+ .becke-readouts span {
94
+ font-size: 0.78rem;
95
+ font-weight: 700;
96
+ text-transform: uppercase;
97
+ letter-spacing: 0;
98
+ }
99
+
100
+ .becke-badge strong {
101
+ font-size: 1.7rem;
102
+ line-height: 1;
103
+ }
104
+
105
+ .becke-controls {
106
+ display: flex;
107
+ flex-direction: column;
108
+ gap: 12px;
109
+ }
110
+
111
+ .becke-unit-toggle,
112
+ .becke-focus {
113
+ display: grid;
114
+ grid-template-columns: 1fr 1fr;
115
+ gap: 6px;
116
+ padding: 5px;
117
+ border-radius: 8px;
118
+ background: rgba(255, 255, 255, 0.78);
119
+ }
120
+
121
+ .becke-unit-toggle button,
122
+ .becke-focus button {
123
+ min-height: 42px;
124
+ border: 0;
125
+ border-radius: 6px;
126
+ background: transparent;
127
+ color: #334155;
128
+ cursor: pointer;
129
+ font-size: 0.96rem;
130
+ font-weight: 750;
131
+ line-height: 1.1;
132
+ }
133
+
134
+ .becke-unit-toggle button[data-active="true"],
135
+ .becke-focus button[data-active="true"] {
136
+ background: #122029;
137
+ color: #f8fafc;
138
+ }
139
+
140
+ .becke-field,
141
+ .becke-slider {
142
+ display: grid;
143
+ gap: 8px;
144
+ padding: 14px;
145
+ border-radius: 8px;
146
+ background: rgba(255, 255, 255, 0.78);
147
+ }
148
+
149
+ .becke-field span,
150
+ .becke-slider span {
151
+ color: #263746;
152
+ font-size: 0.9rem;
153
+ font-weight: 800;
154
+ }
155
+
156
+ .becke-choice {
157
+ position: relative;
158
+ }
159
+
160
+ .becke-choice-trigger {
161
+ display: flex;
162
+ align-items: center;
163
+ justify-content: space-between;
164
+ width: 100%;
165
+ min-height: 44px;
166
+ border: 1px solid rgba(15, 23, 42, 0.12);
167
+ border-radius: 6px;
168
+ padding: 0 12px 0 14px;
169
+ color: #122029;
170
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(246, 250, 248, 0.94));
171
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85);
172
+ text-align: left;
173
+ cursor: pointer;
174
+ font-size: 0.96rem;
175
+ font-weight: 750;
176
+ line-height: 1.2;
177
+ }
178
+
179
+ .becke-choice-trigger:focus-visible,
180
+ .becke-choice-menu button:focus-visible {
181
+ outline: 3px solid rgba(232, 93, 4, 0.34);
182
+ outline-offset: 2px;
183
+ }
184
+
185
+ .becke-choice-icon {
186
+ flex: 0 0 auto;
187
+ width: 10px;
188
+ height: 10px;
189
+ margin-left: 10px;
190
+ border-right: 2px solid currentcolor;
191
+ border-bottom: 2px solid currentcolor;
192
+ transform: translateY(-2px) rotate(45deg);
193
+ }
194
+
195
+ .becke-choice-menu {
196
+ position: absolute;
197
+ z-index: 5;
198
+ top: calc(100% - 8px);
199
+ right: 14px;
200
+ left: 14px;
201
+ display: grid;
202
+ gap: 5px;
203
+ padding: 7px;
204
+ border: 1px solid rgba(15, 23, 42, 0.12);
205
+ border-radius: 8px;
206
+ background: rgba(255, 255, 255, 0.98);
207
+ box-shadow: 0 18px 34px rgba(15, 23, 42, 0.18);
208
+ opacity: 0;
209
+ pointer-events: none;
210
+ transform: translateY(-4px);
211
+ transition: opacity 140ms ease, transform 140ms ease;
212
+ }
213
+
214
+ .becke-choice-menu.is-open {
215
+ opacity: 1;
216
+ pointer-events: auto;
217
+ transform: translateY(0);
218
+ }
219
+
220
+ .becke-choice-menu button {
221
+ display: flex;
222
+ align-items: center;
223
+ justify-content: space-between;
224
+ min-height: 40px;
225
+ border: 0;
226
+ border-radius: 6px;
227
+ padding: 0 10px;
228
+ color: #263746;
229
+ background: transparent;
230
+ text-align: left;
231
+ cursor: pointer;
232
+ font-size: 0.92rem;
233
+ font-weight: 700;
234
+ line-height: 1.15;
235
+ }
236
+
237
+ .becke-choice-menu button:hover,
238
+ .becke-choice-menu button[aria-selected="true"] {
239
+ background: #122029;
240
+ color: #f8fafc;
241
+ }
242
+
243
+ .becke-choice-menu button[aria-selected="true"]::after {
244
+ content: "";
245
+ width: 7px;
246
+ height: 12px;
247
+ margin-left: 10px;
248
+ border-right: 2px solid currentcolor;
249
+ border-bottom: 2px solid currentcolor;
250
+ transform: rotate(45deg);
251
+ }
252
+
253
+ .becke-slider strong {
254
+ color: #122029;
255
+ font-size: 1.7rem;
256
+ line-height: 1;
257
+ }
258
+
259
+ .becke-slider input {
260
+ width: 100%;
261
+ accent-color: #e85d04;
262
+ }
263
+
264
+ .becke-readouts {
265
+ display: grid;
266
+ grid-template-columns: repeat(3, 1fr);
267
+ gap: 7px;
268
+ }
269
+
270
+ .becke-readouts div {
271
+ display: grid;
272
+ gap: 5px;
273
+ min-width: 0;
274
+ padding: 11px;
275
+ border-radius: 8px;
276
+ background: rgba(18, 32, 41, 0.92);
277
+ color: #f8fafc;
278
+ }
279
+
280
+ .becke-readouts strong {
281
+ font-size: 1.06rem;
282
+ overflow-wrap: anywhere;
283
+ }
284
+
285
+ .becke-interpretation,
286
+ .becke-disclaimer {
287
+ margin: 0;
288
+ line-height: 1.55;
289
+ }
290
+
291
+ .becke-interpretation {
292
+ padding: 14px;
293
+ border-left: 4px solid #e85d04;
294
+ border-radius: 8px;
295
+ background: rgba(255, 255, 255, 0.72);
296
+ color: #122029;
297
+ font-weight: 650;
298
+ }
299
+
300
+ .becke-disclaimer {
301
+ grid-column: 1 / -1;
302
+ padding: 12px 14px;
303
+ border-radius: 8px;
304
+ background: rgba(255, 255, 255, 0.58);
305
+ color: #475569;
306
+ font-size: 0.9rem;
307
+ }
308
+
309
+ .theme-dark .becke-shell {
310
+ color: #e5edf2;
311
+ }
312
+
313
+ .theme-dark .becke-scope {
314
+ border-color: rgba(255, 255, 255, 0.12);
315
+ background: linear-gradient(135deg, #111b22, #1b2a31 55%, #302817);
316
+ box-shadow: 0 18px 40px rgba(0, 0, 0, 0.36);
317
+ }
318
+
319
+ .theme-dark .becke-unit-toggle,
320
+ .theme-dark .becke-focus,
321
+ .theme-dark .becke-field,
322
+ .theme-dark .becke-slider,
323
+ .theme-dark .becke-interpretation {
324
+ background: rgba(15, 23, 32, 0.76);
325
+ }
326
+
327
+ .theme-dark .becke-unit-toggle button,
328
+ .theme-dark .becke-focus button {
329
+ color: #dbe7ee;
330
+ }
331
+
332
+ .theme-dark .becke-unit-toggle button[data-active="true"],
333
+ .theme-dark .becke-focus button[data-active="true"] {
334
+ background: #f8fafc;
335
+ color: #122029;
336
+ }
337
+
338
+ .theme-dark .becke-choice-trigger {
339
+ border-color: rgba(255, 255, 255, 0.16);
340
+ color: #f8fafc;
341
+ background: linear-gradient(180deg, rgba(22, 34, 43, 0.98), rgba(13, 23, 31, 0.96));
342
+ }
343
+
344
+ .theme-dark .becke-choice-menu {
345
+ border-color: rgba(255, 255, 255, 0.14);
346
+ background: rgba(12, 22, 30, 0.98);
347
+ box-shadow: 0 18px 34px rgba(0, 0, 0, 0.42);
348
+ }
349
+
350
+ .theme-dark .becke-choice-menu button {
351
+ color: #e5edf2;
352
+ }
353
+
354
+ .theme-dark .becke-choice-menu button:hover,
355
+ .theme-dark .becke-choice-menu button[aria-selected="true"] {
356
+ background: #f8fafc;
357
+ color: #122029;
358
+ }
359
+
360
+ .theme-dark .becke-field span,
361
+ .theme-dark .becke-slider span,
362
+ .theme-dark .becke-slider strong,
363
+ .theme-dark .becke-interpretation {
364
+ color: #f8fafc;
365
+ }
366
+
367
+ .theme-dark .becke-readouts div,
368
+ .theme-dark .becke-badge,
369
+ .theme-dark .becke-material-chip {
370
+ background: rgba(0, 0, 0, 0.58);
371
+ }
372
+
373
+ .theme-dark .becke-disclaimer {
374
+ background: rgba(15, 23, 32, 0.62);
375
+ color: #b8c5cf;
376
+ }
377
+
378
+ @media (max-width: 820px) {
379
+ .becke-scope {
380
+ grid-template-columns: 1fr;
381
+ padding: 10px;
382
+ }
383
+
384
+ .becke-viewer,
385
+ .becke-viewer canvas {
386
+ min-height: 320px;
387
+ }
388
+
389
+ .becke-readouts {
390
+ grid-template-columns: 1fr;
391
+ }
392
+ }
@@ -0,0 +1,231 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import { bibliography } from '../bibliography';
3
+
4
+ const slug = 'becke-linien-glas-brechungsindex-simulator';
5
+ const title = 'Forensischer Becke Linien Simulator für Glas Brechungsindex';
6
+ const description = 'Simulieren Sie die Becke-Linien-Methode für den forensischen Glasvergleich, indem Sie eine Immersionsflüssigkeit erhitzen, die Brechungsindizes abgleichen und das Verschwinden des hellen Halos beobachten.';
7
+
8
+ const howTo = [
9
+ {
10
+ name: 'Fragliches Glasprofil auswählen',
11
+ text: 'Wählen Sie ein gängiges Glasreferenzprofil wie Natronkalkglas, Borosilikatglas, Bleikristall oder gehärtetes Fensterglas.',
12
+ },
13
+ {
14
+ name: 'Heiztisch-Temperatur anpassen',
15
+ text: 'Bewegen Sie den Temperaturregler, um den Brechungsindex der virtuellen Immersionsflüssigkeit zu ändern.',
16
+ },
17
+ {
18
+ name: 'Bewegung der Becke-Linie beobachten',
19
+ text: 'Verwenden Sie die Fokussierungsrichtung, um zu sehen, ob sich die helle Linie nach innen oder außen bewegt oder am Übereinstimmungspunkt fast verschwindet.',
20
+ },
21
+ {
22
+ name: 'Indexdifferenz ablesen',
23
+ text: 'Vergleichen Sie Flüssigkeits-RI, Glas-RI, Delta-RI und Übereinstimmungsprozentsatz, um zu verstehen, warum der Halo nahe der Indexübereinstimmung schwächer wird.',
24
+ },
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ question: 'Was ist die Becke-Linie bei der forensischen Glasanalyse?',
30
+ answer: 'Die Becke-Linie ist ein heller Lichtsaum (Halo), der nahe der Grenze zwischen einem Glasfragment und einer Immersionsflüssigkeit zu sehen ist, wenn sich deren Brechungsindizes unterscheiden. Ihre Bewegung beim Fokussieren hilft zu bestimmen, welches Material den höheren Brechungsindex hat.',
31
+ },
32
+ {
33
+ question: 'Warum ist das Erhitzen der Immersionsflüssigkeit wichtig?',
34
+ answer: 'Der Brechungsindex vieler Immersionsflüssigkeiten sinkt mit steigender Temperatur. Durch Erhitzen der Flüssigkeit, bis ihr Index dem des Glases entspricht, verblasst der Grenzkontrast und die Fragmentkante wird schwer erkennbar.',
35
+ },
36
+ {
37
+ question: 'Kann der Brechungsindex allein eine Glasquelle identifizieren?',
38
+ answer: 'Nein. Der Brechungsindex kann den Klassenvergleich und den Ausschluss unterstützen, aber die forensische Quelleninterpretation berücksichtigt auch die Elementarzusammensetzung, Dicke, Farbe, den Bruchkontext, Kontrollen, Messunsicherheiten und validierte Laborverfahren.',
39
+ },
40
+ {
41
+ question: 'Was bedeutet es, wenn die Becke-Linie verschwindet?',
42
+ answer: 'Es bedeutet, dass Flüssigkeit und Glas unter diesen simulierten Bedingungen sehr ähnliche Brechungsindizes aufweisen. In der realen Mikroskopie wird das Verschwinden mit kalibrierter Temperaturregelung und Referenzmaterialien beurteilt.',
43
+ },
44
+ ];
45
+
46
+ export const content: ToolLocaleContent = {
47
+ slug,
48
+ title,
49
+ description,
50
+ ui: {
51
+ viewerAria: 'Virtuelle Mikroskopansicht mit einem Glasfragment in Immersionsflüssigkeit',
52
+ units: 'Temperatureinheitensystem',
53
+ metric: 'Metrisch',
54
+ imperial: 'Imperial',
55
+ unitCelsius: 'C',
56
+ unitFahrenheit: 'F',
57
+ glassSample: 'Glasreferenz',
58
+ sodaLime: 'Natronkalk-Behälterglas',
59
+ borosilicate: 'Borosilikat-Laborglas',
60
+ leadCrystal: 'Bleikristall-Dekorglas',
61
+ tempered: 'Gehärtetes Fensterglas',
62
+ stageTemperature: 'Heiztisch-Temperatur',
63
+ focusDirection: 'Fokusrichtung',
64
+ focusRaised: 'Fokus anheben',
65
+ focusLowered: 'Fokus absenken',
66
+ liquidRi: 'Flüssigkeits-RI',
67
+ glassRi: 'Glas-RI',
68
+ deltaRi: 'Delta-RI',
69
+ matchMeter: 'RI-Übereinstimmung',
70
+ canvasHalo: 'sichtbarer Becke-Halo',
71
+ canvasFocusSeparator: ' - ',
72
+ canvasMatched: 'Kante fast übereinstimmend',
73
+ interpMatched: 'Die Grenze befindet sich nahe der optischen Übereinstimmung. Bei einem realen Becke-Linien-Test ist dies der Bereich, in dem der Halo schwach wird und die Fragmentkante am schwersten zu lokalisieren ist.',
74
+ interpGlassHigher: 'Das Glas hat den höheren Brechungsindex. Bei angehobenem Fokus zeigt das Verhalten der Becke-Linie, dass sich das Licht zur Glasseite der Grenze hin konzentriert.',
75
+ interpLiquidHigher: 'Die Immersionsflüssigkeit hat den höheren Brechungsindex. Der Halo verschiebt sich zur Flüssigkeitsseite, bis die Temperatur den Flüssigkeitsindex näher an das Glas bringt.',
76
+ disclaimer: 'Nur zu Bildungszwecken. Der reale forensische Glasvergleich erfordert kalibrierte Brechungsindex-Geräte, bekannte Standards, Unsicherheitsberichte und eine qualifizierte Interpretation.',
77
+ },
78
+ seo: [
79
+ {
80
+ type: 'title',
81
+ text: 'Becke-Linien-Brechungsindex-Prüfung für forensisches Glas',
82
+ level: 2,
83
+ },
84
+ {
85
+ type: 'diagnostic',
86
+ variant: 'info',
87
+ icon: 'mdi:microscope',
88
+ badge: 'Lehr-Simulator',
89
+ title: 'Was dieser Glas RI Simulator demonstriert',
90
+ html: 'Dieser Simulator zeigt, warum ein Glasfragment in Immersionsöl mehr oder weniger sichtbar wird, wenn sich der Brechungsindex der Flüssigkeit dem Brechungsindex des Glases nähert. Er wurde für Studenten der Forensik entwickelt, die <strong>Becke-Linien-Mikroskopie</strong>, Heiztisch-RI-Abgleich und die Grenzen von Glasvergleichs-Beweisen erlernen.',
91
+ },
92
+ {
93
+ type: 'stats',
94
+ columns: 4,
95
+ items: [
96
+ { value: 'n Glas - n Flüssigkeit', label: 'gezeigter Indexkontrast', icon: 'mdi:delta' },
97
+ { value: '15-145 C', label: 'Heiztisch-Bereich', icon: 'mdi:thermometer' },
98
+ { value: '4', label: 'Glasprofile', icon: 'mdi:glass-fragile' },
99
+ { value: 'C / F', label: 'konvertierbare Temperatureinheiten', icon: 'mdi:swap-horizontal' },
100
+ ],
101
+ },
102
+ {
103
+ type: 'summary',
104
+ title: 'Praktische Checkliste zur Beobachtung der Becke Linie',
105
+ items: [
106
+ 'Verwenden Sie ein sauberes, kleines Glasfragment, das vollständig in eine geeignete Brechungsindex-Flüssigkeit eingetaucht ist.',
107
+ 'Fokussieren Sie leicht über und unter der Grenze und beobachten Sie, in welche Richtung sich die helle Linie zu bewegen scheint.',
108
+ 'Erhöhen Sie die Temperatur in der Nähe des geschätzten Übereinstimmungspunkts langsam, da die Linie in einem engen Bereich verblassen kann.',
109
+ 'Notieren Sie Temperatur, Flüssigkeitstyp, Kalibrierstandard, beobachtetes Übereinstimmungsverhalten und Unsicherheit.',
110
+ 'Behandeln Sie den RI als Klassenmerkmal: Eine Nichtübereinstimmung kann ausschließen, während eine Übereinstimmung zusätzlichen Kontext erfordert.',
111
+ ],
112
+ },
113
+ {
114
+ type: 'comparative',
115
+ columns: 2,
116
+ items: [
117
+ {
118
+ title: 'Was ein RI Vergleich unterstützen kann',
119
+ icon: 'mdi:check-circle-outline',
120
+ highlight: true,
121
+ description: 'Der Brechungsindex kann helfen, fragliche Glasfragmente unter kontrollierten Bedingungen mit bekannten Referenzgläsern zu vergleichen.',
122
+ points: ['Klassenmerkmals-Vergleich', 'Ausschluss bei deutlicher RI-Abweichung', 'Screening vor der Elementaranalyse', 'Vermittlung des optischen Grenzverhaltens'],
123
+ },
124
+ {
125
+ title: 'Was der RI allein nicht beweisen kann',
126
+ icon: 'mdi:alert-circle-outline',
127
+ description: 'Ein übereinstimmender RI identifiziert keine Scheibe, Flasche, Autoscheibe oder Tatortquelle eindeutig.',
128
+ points: ['Keine individuelle Quellenzuordnung für sich allein', 'Keine Rekonstruktion ohne Tatortkontext', 'Kein Ersatz für Kontrollen', 'Keine rechtliche Schlussfolgerung aus einem Browsermodell'],
129
+ },
130
+ ],
131
+ },
132
+ {
133
+ type: 'table',
134
+ headers: ['Benutzerfrage', 'Mikroskopiekonzept', 'Sorgfältige Antwort'],
135
+ rows: [
136
+ ['Warum bewegt sich die helle Kante?', 'Brechung an einer Grenze zwischen zwei Brechungsindizes.', 'Die Becke-Linie tendiert dazu, sich zum Material mit dem höheren Brechungsindex zu bewegen, wenn der Fokus angehoben wird.'],
137
+ ['Warum verschwindet die Kante?', 'Indexabgleich.', 'Wenn Glas- und Flüssigkeits-RI fast gleich sind, sinkt der Grenzkontrast und der Halo wird schwach.'],
138
+ ['Warum die Flüssigkeit erhitzen?', 'Thermischer RI-Koeffizient.', 'Der simulierte Flüssigkeits-RI nimmt mit der Temperatur ab, was einen Abgleich mit verschiedenen Glastypen ermöglicht.'],
139
+ ['Ist eine Übereinstimmung schlüssig?', 'Einschränkung durch Klassenmerkmale.', 'Eine Übereinstimmung stützt nur die Konsistenz; viele Glasobjekte können einen ähnlichen RI aufweisen.'],
140
+ ],
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'Wie das Simulationsmodell funktioniert',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'Das Modell weist jedem Glasprofil einen Referenz-Brechungsindex zu und behandelt die Immersionsflüssigkeit als temperatursensitives Medium. Wenn sich der Heiztisch erwärmt, sinkt der Flüssigkeitsindex um einen festen thermischen Koeffizienten. Der Simulator berechnet dann die Differenz zwischen Glas-RI und Flüssigkeits-RI und steuert damit Halo-Helligkeit, Halo-Versatz, Übereinstimmungsprozentsatz und die Interpretationsmeldung.',
150
+ },
151
+ {
152
+ type: 'paragraph',
153
+ html: 'Das visuelle Mikroskopfeld ist absichtlich qualitativ gehalten. Es versucht nicht, jeden optischen Pfad physikalisch exakt nachzuzeichnen. Stattdessen bewahrt es die wesentliche didaktische Beziehung: Starker RI-Kontrast erzeugt eine helle Grenze, geringerer Kontrast eine schwache Grenze und nahe dem Übereinstimmungspunkt scheint die Glaskante in der Flüssigkeit zu verschwinden.',
154
+ },
155
+ {
156
+ type: 'paragraph',
157
+ html: 'In professionellen forensischen Labors wird die Kalibrierung des Heiztischs mit Glasreferenzproben bekannter Brechungsindizes durchgeführt. Da sich der Brechungsindex der Immersionsflüssigkeit vorhersehbar mit der Temperatur ändert (normalerweise als dn/dT bezeichnet), ermöglicht die genaue Temperatur, bei der die Becke-Linie verschwindet, dem Wissenschaftler, den Brechungsindex des Glases bis auf vier Dezimalstellen genau zu berechnen. Dieser Simulator modelliert dieses temperaturabhängige Verhalten mithilfe einer linearen Formel, sodass die Schüler das Auffinden des genauen Übereinstimmungspunkts durch sorgfältige Steuerung der Heizstufe üben können.',
158
+ },
159
+ {
160
+ type: 'paragraph',
161
+ html: 'Bei der Analyse von Glasbeweisen wird der Brechungsindex als Klassenmerkmal eingestuft. Obwohl ein übereinstimmender Brechungsindex zwischen einem Fragment vom Tatort und der Kleidung eines Verdächtigen mit einer gemeinsamen Quelle übereinstimmt, identifiziert er die Quelle nicht eindeutig, da viele Glasobjekte identische Brechungsindizes aufweisen. Daher müssen forensische Experten übereinstimmende Ergebnisse zurückhaltend interpretieren und die Übereinstimmung im Sinne der Konsistenz melden, während sie gleichzeitig betonen, dass eine endgültige Quellenzuordnung allein auf der Grundlage optischer Eigenschaften nicht möglich ist.',
162
+ },
163
+ {
164
+ type: 'glossary',
165
+ items: [
166
+ { term: 'Brechungsindex', definition: 'Ein Maß dafür, wie stark ein Material Licht im Vergleich zum Vakuum ablenkt.' },
167
+ { term: 'Immersionsflüssigkeit', definition: 'Eine Flüssigkeit mit bekannten optischen Eigenschaften, die verwendet wird, um ein Fragment beim mikroskopischen RI-Vergleich zu umgeben.' },
168
+ { term: 'Becke-Linie', definition: 'Die helle Linie oder der Halo, der an einer Grenze zu sehen ist, wenn zwei transparente Materialien unterschiedliche Brechungsindizes haben.' },
169
+ { term: 'Übereinstimmungspunkt', definition: 'Der Temperaturbereich, in dem die Immersionsflüssigkeit und das Glas fast denselben Brechungsindex haben.' },
170
+ { term: 'Klassenbeweis', definition: 'Beweismittel, die ein Objekt eher mit einer Gruppe möglicher Quellen als mit einer einzelnen, eindeutigen Quelle in Verbindung bringen können.' },
171
+ ],
172
+ },
173
+ {
174
+ type: 'tip',
175
+ title: 'Interpretationstipp für Studenten',
176
+ html: 'Bei Glasbeweisen ist eine klare RI-Abweichung oft aussagekräftiger als eine Übereinstimmung, da sie eine vermutete Quelle ausschließen kann. Eine Übereinstimmung ist nützlich, aber ihre Aussagekraft hängt von Populationsdaten, der Messpräzision, der Elementarzusammensetzung und dem Fallkontext ab.',
177
+ },
178
+ {
179
+ type: 'proscons',
180
+ title: 'Stärken und Grenzen der Becke Linien Glas RI Prüfung',
181
+ items: [
182
+ { pro: 'Schnell, visuell und hervorragend zur Vermittlung des Vergleichs transparenter Materialien.', con: 'Beobachterurteil und Fokussierungstechnik können die scheinbare Linienbewegung beeinflussen.' },
183
+ { pro: 'Der Temperaturabgleich kann den RI bei Kalibrierung mit nützlicher Präzision schätzen.', con: 'Temperaturregelung, Flüssigkeitsalterung, Kontamination und Standards sind in der realen Praxis von Bedeutung.' },
184
+ { pro: 'Nützlich zum Ausschluss von Glasfragmenten mit deutlich unterschiedlichen optischen Eigenschaften.', con: 'Kann eine Quelle nicht ohne breitere analytische und kontextuelle Beweise individualisieren.' },
185
+ ],
186
+ },
187
+ {
188
+ type: 'diagnostic',
189
+ variant: 'warning',
190
+ icon: 'mdi:scale-balance',
191
+ badge: 'Forensische Vorsicht',
192
+ title: 'Die Schlussfolgerung verhältnismäßig halten',
193
+ html: 'Eine Browser-Becke-Linien-Simulation ist eine Lernhilfe, keine Labormethode. Die formelle Interpretation von Glasbeweisen sollte sich auf validierte Instrumente, schriftliche Verfahren, Kalibrierprotokolle, Unsicherheitsschätzungen, Peer-Reviews und eine der jeweiligen Gerichtsbarkeit angemessene Berichterstattung stützen.',
194
+ },
195
+ ],
196
+ faq,
197
+ bibliography,
198
+ howTo,
199
+ schemas: [
200
+ {
201
+ '@context': 'https://schema.org',
202
+ '@type': 'SoftwareApplication',
203
+ name: title,
204
+ description,
205
+ applicationCategory: 'ForensicApplication',
206
+ operatingSystem: 'Any',
207
+ },
208
+ {
209
+ '@context': 'https://schema.org',
210
+ '@type': 'FAQPage',
211
+ mainEntity: faq.map((item) => ({
212
+ '@type': 'Question',
213
+ name: item.question,
214
+ acceptedAnswer: {
215
+ '@type': 'Answer',
216
+ text: item.answer,
217
+ },
218
+ })),
219
+ },
220
+ {
221
+ '@context': 'https://schema.org',
222
+ '@type': 'HowTo',
223
+ name: title,
224
+ step: howTo.map((step) => ({
225
+ '@type': 'HowToStep',
226
+ name: step.name,
227
+ text: step.text,
228
+ })),
229
+ },
230
+ ],
231
+ };