@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,250 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import { bibliography } from '../bibliography';
3
+
4
+ const slug = 'forensischer-faservergleich-mikroskop';
5
+ const title = 'Forensischer Faservergleich Mikroskop Simulator';
6
+ const description = 'Erstellen Sie ein Profil für eine fragliche Textilfaser, vergleichen Sie es mit bekannten Referenzen und interpretieren Sie Morphologie, Polarisation und UV-Vis-Farbstoffspektren.';
7
+
8
+ const howTo = [
9
+ {
10
+ name: 'Erstellen Sie das Profil der fraglichen Faser',
11
+ text: 'Legen Sie Material, Durchmesser, Zwirnrichtung, Polarisationsverhalten und Farbstoffprofil für die gefundene Faser fest.',
12
+ },
13
+ {
14
+ name: 'Wählen Sie eine bekannte Vergleichsfaser',
15
+ text: 'Wählen Sie auf der rechten Seite eine Faser eines verdächtigen Kleidungsstücks wie Baumwolle, Wolle, Polyester oder Nylon.',
16
+ },
17
+ {
18
+ name: 'Fokus und Polarisation anpassen',
19
+ text: 'Verschieben Sie den Fokusregler und drehen Sie den Polarisator, um Schärfe, Oberflächenstrukturen und Doppelbrechung zu beobachten.',
20
+ },
21
+ {
22
+ name: 'Morphologie und UV-Vis-Spektren vergleichen',
23
+ text: 'Vergleichen Sie Morphologiewert, Spektrumwert, Gesamtübereinstimmung und Absorptionskurven, um zu entscheiden, ob die Proben übereinstimmen oder sich deutlich unterscheiden.',
24
+ },
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ question: 'Kann die Fasermikroskopie das genaue Kleidungsstück bestimmen, aus dem eine Faser stammt?',
30
+ answer: 'In der Regel nein. Der Faservergleich kann Übereinstimmungen oder Unterschiede zwischen einer fraglichen Faser und einem bekannten Textil aufzeigen. Eine individuelle Zuordnung erfordert jedoch sorgfältige Kontextanalysen, validierte Methoden und häufig zusätzliche chemische oder instrumentelle Analysen.',
31
+ },
32
+ {
33
+ question: 'Warum wird beim Faservergleich polarisiertes Licht verwendet?',
34
+ answer: 'Polarisiertes Licht hilft, Doppelbrechung, Auslöschungsverhalten und strukturelle Unterschiede zwischen Natur- und Synthesefasern sichtbar zu machen. Synthetische Fasern zeigen aufgrund der molekularen Ausrichtung oft ein stärkeres Polarisationsverhalten.',
35
+ },
36
+ {
37
+ question: 'Was bringt das UV-Vis-Spektrum zusätzlich?',
38
+ answer: 'Während die Mikroskopie Form und optisches Verhalten beschreibt, vergleicht die UV-Vis-Absorbanz das Verhalten von Farbstoffen über verschiedene Wellenlängen hinweg. Ähnliche Fasern mit unterschiedlichen Farbstoffen können sich im Spektraldiagramm deutlich voneinander abheben.',
39
+ },
40
+ {
41
+ question: 'Warum werden die Ergebnisse als Werte und nicht als endgültige Identifizierung dargestellt?',
42
+ answer: 'Forensische Spurenspuren sollten verhältnismäßig bewertet werden. Die Werte sind pädagogische Zusammenfassungen der morphologischen und farblichen Ähnlichkeit, keine Laborergebnisse oder rechtlichen Gutachten.',
43
+ },
44
+ ];
45
+
46
+ export const content: ToolLocaleContent = {
47
+ slug,
48
+ title,
49
+ description,
50
+ ui: {
51
+ viewerAria: 'Virtuelles forensisches Vergleichsmikroskop zum Vergleich zweier Textilfasern',
52
+ chartAria: 'UV-Vis-Absorptionsdiagramm zum Vergleich von Farbstoffspektren der fraglichen und bekannten Faser',
53
+ questionedSample: 'Fragliche Faser',
54
+ fixedEvidence: 'Gesichertes Beweismittel',
55
+ builderSummaryDefault: 'Baumwolle / 18 µm / unregelmäßig / Indigo',
56
+ customQuestionedLabel: 'Fragliche Fallfaser',
57
+ material: 'Material',
58
+ cotton: 'Baumwolle',
59
+ woolMaterial: 'Wolle',
60
+ polyesterMaterial: 'Polyester',
61
+ nylonMaterial: 'Nylon',
62
+ materialcotton: 'Baumwolle',
63
+ materialwool: 'Wolle',
64
+ materialpolyester: 'Polyester',
65
+ materialnylon: 'Nylon',
66
+ twist: 'Zwirnrichtung',
67
+ irregularTwist: 'Unregelmäßig',
68
+ sTwist: 'S',
69
+ zTwist: 'Z',
70
+ diameter: 'Durchmesser',
71
+ polarResponse: 'Polarisationsverhalten',
72
+ dyeProfile: 'Farbstoffprofil',
73
+ indigoDye: 'Indigo',
74
+ crimsonDye: 'Karmesinrot',
75
+ navyDye: 'Marineblau',
76
+ violetDye: 'Violett',
77
+ dyeindigo: 'Indigo',
78
+ dyecrimson: 'Karmesinrot',
79
+ dyenavy: 'Marineblau',
80
+ dyeviolet: 'Violett',
81
+ knownSample: 'Bekannter Vergleich',
82
+ questionedCotton: 'Fragliche blaue Baumwollfaser',
83
+ suspectCotton: 'Verdächtige Hemden-Baumwollfaser',
84
+ wool: 'Rote Wollpulloverfaser',
85
+ polyester: 'Marineblaue Polyesterjackenfaser',
86
+ nylon: 'Violette Nylonfutterfaser',
87
+ focus: 'Feinfokus',
88
+ polarizer: 'Polarisatorwinkel',
89
+ morphology: 'Morphologie',
90
+ spectrum: 'UV-Vis',
91
+ birefringence: 'Doppelbrechung',
92
+ combinedMatch: 'Gesamtübereinstimmung',
93
+ uvVisTitle: 'UV-Vis-Absorptionsüberlagerung',
94
+ statusStrong: 'Hohe Übereinstimmung',
95
+ statusPartial: 'Eingeschränkter Vergleich',
96
+ statusDifferent: 'Ausschluss gestützt',
97
+ verdictStrong: 'Die fragliche und die bekannte Faser stimmen in Durchmesser, Zwirnrichtung, optischem Verhalten und Farbstoffspektrum weitgehend überein. In einem echten Fall wird dies als Beleg für eine mögliche gemeinsame Textilquelle gewertet, nicht als individuelle Identifizierung.',
98
+ verdictPartial: 'Der Vergleich ist gemischt. Einige Klassenmerkmale stimmen überein, aber Morphologie, Farbstoffverhalten oder Doppelbrechung weisen genügend Unterschiede auf, sodass vor einer vorsichtigen Zuordnung weitere Untersuchungen erforderlich wären.',
99
+ verdictDifferent: 'Die Fasern stimmen in wesentlichen Klassenmerkmalen nicht überein. Das simulierte Ergebnis stützt den Ausschluss dieses bekannten Textils als wahrscheinliche Quelle für die fragliche Faser.',
100
+ disclaimer: 'Nur zu Bildungszwecken. Der reale forensische Faservergleich erfordert validierte Mikroskopie, Kontrollen, Dokumentation, Schutzmaßnahmen gegen Kontamination, Peer-Review und qualifizierte Spurenauswertung.',
101
+ },
102
+ seo: [
103
+ {
104
+ type: 'title',
105
+ text: 'Forensischer Faservergleich mit Vergleichsmikroskopie und UV-Vis-Spektren',
106
+ level: 2,
107
+ },
108
+ {
109
+ type: 'diagnostic',
110
+ variant: 'info',
111
+ icon: 'mdi:microscope',
112
+ badge: 'Lehr-Simulator',
113
+ title: 'Was dieses virtuelle Fasermikroskop zeigt',
114
+ html: 'Dieser Simulator modelliert den praktischen Ablauf beim <strong>forensischen Faservergleich</strong>: Beschreiben der fraglichen Textilfaser, Vergleichen mit einer bekannten Referenz, Anpassen des Fokus, Drehen von Polarisationsfiltern und Vergleichen der Farbstoffabsorption über eine vereinfachte UV-Vis-Kurve. Er wurde für Studierende der Spurenkunde entwickelt, nicht für Fallentscheidungen.',
115
+ },
116
+ {
117
+ type: 'stats',
118
+ columns: 4,
119
+ items: [
120
+ { value: '2 Felder', label: 'Vergleichsmikroskop-Ansicht', icon: 'mdi:compare-horizontal' },
121
+ { value: '380-720 nm', label: 'sichtbarer Spektralbereich', icon: 'mdi:chart-bell-curve' },
122
+ { value: '4 Klassen', label: 'Baumwolle, Wolle, Polyester, Nylon', icon: 'mdi:tshirt-crew' },
123
+ { value: '0-180°', label: 'Polarisatordrehung', icon: 'mdi:rotate-3d-variant' },
124
+ ],
125
+ },
126
+ {
127
+ type: 'summary',
128
+ title: 'Wesentliche Beobachtungen beim Textilfaservergleich',
129
+ items: [
130
+ 'Messen oder schätzen Sie den Faserdurchmesser und dokumentieren Sie natürliche Schwankungen entlang des Fadens.',
131
+ 'Erfassen Sie Zwirnrichtung, Oberflächenrillen, markkanalähnliche Merkmale, Mattierungspartikel und Querschnittsmerkmale, falls vorhanden.',
132
+ 'Nutzen Sie polarisiertes Licht, um Doppelbrechung, Auslöschungsverhalten und Helligkeitsänderungen bei Drehung zu vergleichen.',
133
+ 'Vergleichen Sie die Farbe mikroskopisch und nutzen Sie instrumentelle Farbstoffanalysen, falls der Fall eine höhere Unterscheidbarkeit erfordert.',
134
+ 'Geben Sie an, ob die Ergebnisse übereinstimmend, unterschiedlich oder uneindeutig sind; vermeiden Sie Formulierungen, die ohne Belege auf ein einziges Kleidungsstück hindeuten.',
135
+ ],
136
+ },
137
+ {
138
+ type: 'table',
139
+ headers: ['Beobachtung', 'Welche Frage sie beantwortet', 'Einschränkung'],
140
+ rows: [
141
+ ['Durchmesser und Morphologie', 'Sind die Fasern physikalisch ähnlich?', 'Herstellungsbedingte Schwankungen können sich zwischen Kleidungsstücken überschneiden.'],
142
+ ['Zwirnung und Oberflächendetails', 'Stimmen natürliche oder synthetische Merkmale überein?', 'Beschädigungen, Dehnung und Einbettung können das Aussehen verändern.'],
143
+ ['Verhalten im polarisierten Licht', 'Stimmen die optischen Eigenschaften überein?', 'Doppelbrechung ist ein Klassenmerkmal, kein individueller Nachweis.'],
144
+ ['UV-Vis-Farbstoffspektrum', 'Sind die Farbstoffe konsistent?', 'Ähnliche Farbstoffe können sich ähneln; Extraktion und Geräteeinstellungen sind entscheidend.'],
145
+ ],
146
+ },
147
+ {
148
+ type: 'comparative',
149
+ columns: 2,
150
+ items: [
151
+ {
152
+ title: 'Was für eine Übereinstimmung spricht',
153
+ icon: 'mdi:check-circle-outline',
154
+ highlight: true,
155
+ description: 'Mehrere unabhängige Klassenmerkmale zwischen der fraglichen und bekannten Faser stimmen überein.',
156
+ points: ['Vergleichbarer Durchmesserbereich', 'Gleicher allgemeiner Fasertyp', 'Ähnliches Polarisationsverhalten', 'Überlagernde Absorptionsmaxima des Farbstoffs'],
157
+ },
158
+ {
159
+ title: 'Was für einen Ausschluss spricht',
160
+ icon: 'mdi:close-circle-outline',
161
+ description: 'Es zeigt sich ein klarer, reproduzierbarer Unterschied in einem Merkmal, das bei einer gemeinsamen Textilquelle übereinstimmen müsste.',
162
+ points: ['Abweichung zwischen Natur- und Synthesefaser', 'Unterschiedliche Zwirnung oder Oberflächenmorphologie', 'Deutlich abweichendes Farbstoffspektrum', 'Unvereinbares Doppelbrechungsverhalten'],
163
+ },
164
+ ],
165
+ },
166
+ {
167
+ type: 'title',
168
+ text: 'Funktionsweise des Simulationsmodells',
169
+ level: 3,
170
+ },
171
+ {
172
+ type: 'paragraph',
173
+ html: 'Das Modell nutzt eine kleine Referenzdatenbank mit Werten für Durchmesser, Zwirnrichtung, Faserklasse, Doppelbrechung, Farbstoffgruppe und UV-Vis-Absorptionspunkten. Die fragliche Faser ist benutzerkonfigurierbar, sodass der Vergleichswert auf das Fallprofil reagiert und nicht auf eine feste Beispielprobe. Die visuelle Mikroskopansicht reagiert auf Fokus und Polarisatorwinkel, um Studierenden die Bedeutung optischer Einstellungen zu verdeutlichen.',
174
+ },
175
+ {
176
+ type: 'paragraph',
177
+ html: 'Die Polarisatorsteuerung ist besonders nützlich für Synthesefasern. Polyester und Nylon sind stärkere Doppelbrechungswerte zugewiesen, sodass sich ihre Helligkeit bei Drehung des Polarisators deutlicher verändert. Natürliche Baumwolle und Wolle reagieren ebenfalls, jedoch dezenter. Dies vermittelt den Lerneffekt, dass molekulare Ausrichtung und Faserstruktur das optische Verhalten beeinflussen.',
178
+ },
179
+ {
180
+ type: 'paragraph',
181
+ html: 'Das UV-Vis-Diagramm ist eine vereinfachte Überlagerung und kein Ersatz für ein Spektrophotometer. In der realen Spurenarbeit erfordert der Farbstoffvergleich Mikrospektrophotometrie, Dünnschichtchromatographie, Extraktionschemie, Referenzkontrollen und dokumentierte Messunsicherheiten. Das Diagramm verdeutlicht, warum zwei mikroskopisch ähnlich aussehende Fasern dennoch unterschiedliche Farbstoffchemikalien aufweisen können.',
182
+ },
183
+ {
184
+ type: 'paragraph',
185
+ html: 'Forensische Gutachter müssen jeden Schritt des Faseranalyseprozesses dokumentieren. Dies umfasst detaillierte Fotoaufnahmen, das Protokollieren von Messungen und die Einhaltung der Asservatenkette für alle physischen Beweismittel. Der Simulator hilft Studierenden, die Bedeutung einer systematischen Dokumentation und eines objektiven Vergleichs in der forensischen Arbeit zu verstehen. Durch die Interaktion mit verschiedenen Einstellungen können Benutzer lernen, wie sich Lichtweg, Probendicke und Farbstoffkonzentration auf die Spektralkurven und das physische Erscheinungsbild auswirken.',
186
+ },
187
+ {
188
+ type: 'paragraph',
189
+ html: 'Forensische Gutachter müssen jeden Schritt des Faseranalyseprozesses dokumentieren. Dies umfasst detaillierte Fotoaufnahmen, das Protokollieren von Messungen und die Einhaltung der Asservatenkette für alle physischen Beweismittel. Der Simulator hilft Studierenden, die Bedeutung einer systematischen Dokumentation und eines objektiven Vergleichs in der forensischen Arbeit zu verstehen. Durch die Interaktion mit verschiedenen Einstellungen können Benutzer lernen, wie sich Lichtweg, Probendicke und Farbstoffkonzentration auf die Spektralkurven und das physische Erscheinungsbild auswirken.',
190
+ },
191
+ {
192
+ type: 'glossary',
193
+ items: [
194
+ { term: 'Fragliche Faser', definition: 'Eine am Tatort, am Opfer, am Verdächtigen, an einem Werkzeug oder Fahrzeug gesicherte Faser unbekannter Herkunft.' },
195
+ { term: 'Bekannte Faser', definition: 'Eine von einem bekannten Textil oder Objekt gesicherte Referenzfaser zum Vergleich mit der fraglichen Probe.' },
196
+ { term: 'Doppelbrechung', definition: 'Optisches Verhalten, bei dem ein Material je nach Lichtrichtung oder Polarisation unterschiedliche Brechungsindizes aufweist.' },
197
+ { term: 'UV-Vis-Spektrum', definition: 'Diagramm, das zeigt, wie stark ein Farbstoff oder Material Licht bei verschiedenen Wellenlängen absorbiert.' },
198
+ { term: 'Klassenmerkmal', definition: 'Eine Eigenschaft, die ein Beweismittel einer Gruppe möglicher Quellen zuordnet, anstatt eine einzige Quelle eindeutig zu bestimmen.' },
199
+ ],
200
+ },
201
+ {
202
+ type: 'tip',
203
+ title: 'Interpretationstipp für Studierende',
204
+ html: 'Ein hoher Ähnlichkeitswert sollte als <strong>Übereinstimmung</strong> und nicht als Identität verstanden werden. Spurenbelege sind am stärksten, wenn Mikroskopie, Chemie, Übertragungskontext, Persistenz, Sicherungsmethode und Kontaminationskontrollen übereinstimmen.',
205
+ },
206
+ {
207
+ type: 'diagnostic',
208
+ variant: 'warning',
209
+ icon: 'mdi:scale-balance',
210
+ badge: 'Forensic caution',
211
+ title: 'Schlussfolgerungen auf Beweiswert beschränken',
212
+ html: 'Ein Browsermikroskop kann keine Faserübereinstimmung validieren. Formelle Berichte sollten Beobachtungen, Vergleichsgrundlagen, Einschränkungen und den Grad der Unterstützung beschreiben, ohne die Zuordnung zur Quelle zu übertreiben.',
213
+ },
214
+ ],
215
+ faq,
216
+ bibliography,
217
+ howTo,
218
+ schemas: [
219
+ {
220
+ '@context': 'https://schema.org',
221
+ '@type': 'SoftwareApplication',
222
+ name: title,
223
+ description,
224
+ applicationCategory: 'ForensicApplication',
225
+ operatingSystem: 'Any',
226
+ },
227
+ {
228
+ '@context': 'https://schema.org',
229
+ '@type': 'FAQPage',
230
+ mainEntity: faq.map((item) => ({
231
+ '@type': 'Question',
232
+ name: item.question,
233
+ acceptedAnswer: {
234
+ '@type': 'Answer',
235
+ text: item.answer,
236
+ },
237
+ })),
238
+ },
239
+ {
240
+ '@context': 'https://schema.org',
241
+ '@type': 'HowTo',
242
+ name: title,
243
+ step: howTo.map((step) => ({
244
+ '@type': 'HowToStep',
245
+ name: step.name,
246
+ text: step.text,
247
+ })),
248
+ },
249
+ ],
250
+ };
@@ -0,0 +1,246 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import { bibliography } from '../bibliography';
3
+
4
+ const slug = 'forensic-fiber-comparison-microscope';
5
+ const title = 'Forensic Fiber Comparison Microscope Simulator';
6
+ const description = 'Build a questioned textile fiber profile, compare it against known references, and interpret morphology, polarization, and UV-Vis dye evidence.';
7
+
8
+ const howTo = [
9
+ {
10
+ name: 'Build the questioned fiber profile',
11
+ text: 'Set the material, diameter, twist direction, polarization response, and dye profile for the recovered fiber.',
12
+ },
13
+ {
14
+ name: 'Choose a known comparison fiber',
15
+ text: 'Select a suspect garment fiber such as cotton, wool, polyester, or nylon on the right side.',
16
+ },
17
+ {
18
+ name: 'Adjust focus and polarization',
19
+ text: 'Move the focus slider and rotate the polarizer to observe sharpness, surface ridges, and birefringence response.',
20
+ },
21
+ {
22
+ name: 'Compare morphology and UV-Vis spectra',
23
+ text: 'Use the morphology score, spectrum score, combined match, and absorption curves to decide whether the samples are consistent or clearly different.',
24
+ },
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ question: 'Can fiber microscopy identify the exact garment a fiber came from?',
30
+ answer: 'Usually no. Fiber comparison can show consistency or differences between a questioned fiber and a known textile, but individual source attribution requires careful context, validated methods, and often additional chemical or instrumental analysis.',
31
+ },
32
+ {
33
+ question: 'Why use polarized light in fiber comparison?',
34
+ answer: 'Polarized light helps reveal birefringence, extinction behavior, and structural differences between natural and synthetic fibers. Synthetic fibers often show a stronger polarization response because of molecular orientation.',
35
+ },
36
+ {
37
+ question: 'What does the UV-Vis spectrum add?',
38
+ answer: 'Microscopy describes shape and optical behavior, while UV-Vis absorbance can compare dye behavior across wavelengths. Similar fibers with different dyes may separate clearly in the spectral plot.',
39
+ },
40
+ {
41
+ question: 'Why are the results shown as scores rather than a final identification?',
42
+ answer: 'Forensic trace evidence should be reported proportionally. The scores are educational summaries of morphology and dye similarity, not a laboratory conclusion or legal opinion.',
43
+ },
44
+ ];
45
+
46
+ export const content: ToolLocaleContent = {
47
+ slug,
48
+ title,
49
+ description,
50
+ ui: {
51
+ viewerAria: 'Virtual split-field forensic microscope comparing two textile fibers',
52
+ chartAria: 'UV-Vis absorbance chart comparing questioned and known fiber dye spectra',
53
+ questionedSample: 'Questioned sample',
54
+ fixedEvidence: 'Fixed recovered evidence',
55
+ builderSummaryDefault: 'Cotton / 18 µm / irregular / indigo',
56
+ customQuestionedLabel: 'Questioned case fiber',
57
+ material: 'Material',
58
+ cotton: 'Cotton',
59
+ woolMaterial: 'Wool',
60
+ polyesterMaterial: 'Polyester',
61
+ nylonMaterial: 'Nylon',
62
+ materialcotton: 'cotton',
63
+ materialwool: 'wool',
64
+ materialpolyester: 'polyester',
65
+ materialnylon: 'nylon',
66
+ twist: 'Twist',
67
+ irregularTwist: 'Irregular',
68
+ sTwist: 'S',
69
+ zTwist: 'Z',
70
+ diameter: 'Diameter',
71
+ polarResponse: 'Polar response',
72
+ dyeProfile: 'Dye profile',
73
+ indigoDye: 'Indigo',
74
+ crimsonDye: 'Crimson',
75
+ navyDye: 'Navy',
76
+ violetDye: 'Violet',
77
+ dyeindigo: 'indigo',
78
+ dyecrimson: 'crimson',
79
+ dyenavy: 'navy',
80
+ dyeviolet: 'violet',
81
+ knownSample: 'Known comparison',
82
+ questionedCotton: 'Questioned blue cotton fiber',
83
+ suspectCotton: 'Suspect shirt cotton fiber',
84
+ wool: 'Red wool sweater fiber',
85
+ polyester: 'Navy polyester jacket fiber',
86
+ nylon: 'Violet nylon lining fiber',
87
+ focus: 'Fine focus',
88
+ polarizer: 'Polarizer angle',
89
+ morphology: 'Morphology',
90
+ spectrum: 'UV-Vis',
91
+ birefringence: 'Birefringence',
92
+ combinedMatch: 'Combined match',
93
+ uvVisTitle: 'UV-Vis absorbance overlay',
94
+ statusStrong: 'High consistency',
95
+ statusPartial: 'Mixed comparison',
96
+ statusDifferent: 'Exclusion supported',
97
+ verdictStrong: 'The questioned and known fibers are highly consistent in diameter, twist, optical behavior, and dye spectrum. In a real case, report this as support for a possible common textile source, not as individual identification.',
98
+ verdictPartial: 'The comparison is mixed. Some class characteristics agree, but morphology, dye response, or birefringence leaves enough difference that more examination would be required before any cautious association.',
99
+ verdictDifferent: 'The fibers are not consistent across key class characteristics. The simulated result supports exclusion of this known textile as the likely source for the questioned fiber.',
100
+ disclaimer: 'Educational simulation only. Real forensic fiber comparison requires validated microscopy, controls, documentation, contamination safeguards, peer review, and qualified trace-evidence interpretation.',
101
+ },
102
+ seo: [
103
+ {
104
+ type: 'title',
105
+ text: 'Forensic Fiber Comparison with Split-Field Microscopy and UV-Vis Spectra',
106
+ level: 2,
107
+ },
108
+ {
109
+ type: 'diagnostic',
110
+ variant: 'info',
111
+ icon: 'mdi:microscope',
112
+ badge: 'Teaching simulator',
113
+ title: 'What this virtual fiber microscope demonstrates',
114
+ html: 'This simulator models the practical workflow behind <strong>forensic fiber comparison</strong>: describe the questioned textile fiber, compare it with a known reference, adjust focus, rotate polarizing filters, and compare the dye response with a simplified UV-Vis absorbance curve. It is designed for students learning trace evidence, not for making casework decisions.',
115
+ },
116
+ {
117
+ type: 'stats',
118
+ columns: 4,
119
+ items: [
120
+ { value: '2 fields', label: 'split microscope view', icon: 'mdi:compare-horizontal' },
121
+ { value: '380-720 nm', label: 'visible spectrum range', icon: 'mdi:chart-bell-curve' },
122
+ { value: '4 classes', label: 'cotton, wool, polyester, nylon', icon: 'mdi:tshirt-crew' },
123
+ { value: '0-180°', label: 'polarizer rotation', icon: 'mdi:rotate-3d-variant' },
124
+ ],
125
+ },
126
+ {
127
+ type: 'summary',
128
+ title: 'Core observations in textile fiber comparison',
129
+ items: [
130
+ 'Measure or estimate fiber diameter while noting natural variation along the strand.',
131
+ 'Record twist direction, surface ridges, medulla-like features, delustering particles, and cross-sectional clues when available.',
132
+ 'Use polarized light to compare birefringence, extinction, and brightness changes under rotation.',
133
+ 'Compare color microscopically, then use instrumental dye information when the case requires greater discrimination.',
134
+ 'Report whether findings are consistent, different, or inconclusive; avoid wording that implies a unique garment source without support.',
135
+ ],
136
+ },
137
+ {
138
+ type: 'table',
139
+ headers: ['Observation', 'What it helps answer', 'Limit'],
140
+ rows: [
141
+ ['Diameter and morphology', 'Are the fibers physically similar?', 'Manufacturing variation can overlap between garments.'],
142
+ ['Twist and surface detail', 'Do natural or synthetic features agree?', 'Damage, stretching, and mounting can alter appearance.'],
143
+ ['Polarized light response', 'Do optical properties match?', 'Birefringence is class-level evidence, not a unique signature.'],
144
+ ['UV-Vis dye spectrum', 'Are colorants consistent?', 'Similar dyes may appear close; extraction and instrument settings matter.'],
145
+ ],
146
+ },
147
+ {
148
+ type: 'comparative',
149
+ columns: 2,
150
+ items: [
151
+ {
152
+ title: 'What supports consistency',
153
+ icon: 'mdi:check-circle-outline',
154
+ highlight: true,
155
+ description: 'Multiple independent class characteristics agree between the questioned and known fibers.',
156
+ points: ['Comparable diameter range', 'Same general fiber type', 'Similar polarization behavior', 'Overlapping dye absorbance peaks'],
157
+ },
158
+ {
159
+ title: 'What supports exclusion',
160
+ icon: 'mdi:close-circle-outline',
161
+ description: 'A clear, repeatable difference appears in a characteristic that should match for a common textile source.',
162
+ points: ['Natural versus synthetic mismatch', 'Different twist or surface morphology', 'Strongly different dye spectrum', 'Incompatible birefringence response'],
163
+ },
164
+ ],
165
+ },
166
+ {
167
+ type: 'title',
168
+ text: 'How the Simulation Model Works',
169
+ level: 3,
170
+ },
171
+ {
172
+ type: 'paragraph',
173
+ html: 'The model stores a small reference database with diameter, twist direction, fiber class, birefringence, dye family, and UV-Vis absorbance points. The questioned fiber is user-configurable, so the comparison score responds to the case profile instead of a fixed classroom sample. The visual microscope view then responds to focus and polarizer angle so students can see why optical settings matter.',
174
+ },
175
+ {
176
+ type: 'paragraph',
177
+ html: 'The polarizer control is especially useful for synthetic fibers. Polyester and nylon are assigned stronger birefringence values, so their brightness changes more visibly as the polarizer rotates. Natural cotton and wool still respond, but the simulated effect is subtler. This reflects the teaching idea that molecular orientation and fiber structure affect optical behavior.',
178
+ },
179
+ {
180
+ type: 'paragraph',
181
+ html: 'The UV-Vis chart is a simplified overlay, not a replacement for a spectrophotometer. In actual trace evidence work, dye comparison may require microspectrophotometry, thin-layer chromatography, extraction chemistry, reference controls, and documented uncertainty. The chart exists to teach why two fibers that look similar under a microscope may still separate by dye chemistry.',
182
+ },
183
+ {
184
+ type: 'paragraph',
185
+ html: 'Forensic examiners must document every step of the fiber analysis process. This includes taking detailed photographs, recording measurements, and keeping a chain of custody for all physical evidence. The simulator helps students understand the importance of systematic documentation and objective comparison in forensic casework. By interacting with different settings, users can learn how light path, sample thickness, and dye concentration affect spectral curves and physical appearance.',
186
+ },
187
+ {
188
+ type: 'glossary',
189
+ items: [
190
+ { term: 'Questioned fiber', definition: 'A fiber recovered from a scene, victim, suspect, tool, vehicle, or other item whose source is unknown.' },
191
+ { term: 'Known fiber', definition: 'A reference fiber collected from a textile or object for comparison against the questioned sample.' },
192
+ { term: 'Birefringence', definition: 'Optical behavior in which a material has different refractive indices depending on light direction or polarization.' },
193
+ { term: 'UV-Vis spectrum', definition: 'A plot showing how strongly a dye or material absorbs light at different wavelengths.' },
194
+ { term: 'Class characteristic', definition: 'A property that can associate evidence with a group of possible sources rather than one unique source.' },
195
+ ],
196
+ },
197
+ {
198
+ type: 'tip',
199
+ title: 'Interpretation tip for students',
200
+ html: 'A high similarity score should be read as <strong>consistency</strong>, not identity. Trace evidence is strongest when microscopy, chemistry, transfer context, persistence, recovery method, and contamination controls all point in the same direction.',
201
+ },
202
+ {
203
+ type: 'diagnostic',
204
+ variant: 'warning',
205
+ icon: 'mdi:scale-balance',
206
+ badge: 'Forensic caution',
207
+ title: 'Keep the conclusion within the evidence',
208
+ html: 'A browser microscope cannot validate a fiber match. Formal reports should describe the observations, comparison basis, limitations, and the level of support without overstating source attribution.',
209
+ },
210
+ ],
211
+ faq,
212
+ bibliography,
213
+ howTo,
214
+ schemas: [
215
+ {
216
+ '@context': 'https://schema.org',
217
+ '@type': 'SoftwareApplication',
218
+ name: title,
219
+ description,
220
+ applicationCategory: 'ForensicApplication',
221
+ operatingSystem: 'Any',
222
+ },
223
+ {
224
+ '@context': 'https://schema.org',
225
+ '@type': 'FAQPage',
226
+ mainEntity: faq.map((item) => ({
227
+ '@type': 'Question',
228
+ name: item.question,
229
+ acceptedAnswer: {
230
+ '@type': 'Answer',
231
+ text: item.answer,
232
+ },
233
+ })),
234
+ },
235
+ {
236
+ '@context': 'https://schema.org',
237
+ '@type': 'HowTo',
238
+ name: title,
239
+ step: howTo.map((step) => ({
240
+ '@type': 'HowToStep',
241
+ name: step.name,
242
+ text: step.text,
243
+ })),
244
+ },
245
+ ],
246
+ };