@jjlmoya/utils-diy 1.16.0 → 1.18.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 (95) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/fr.ts +5 -5
  3. package/src/layouts/PreviewLayout.astro +1 -0
  4. package/src/tests/diacritics_density.test.ts +118 -0
  5. package/src/tests/inverted_punctuation.test.ts +84 -0
  6. package/src/tests/no_en_dash.test.ts +70 -0
  7. package/src/tests/script_density.test.ts +94 -0
  8. package/src/tool/balusterCalculator/i18n/de.ts +7 -7
  9. package/src/tool/balusterCalculator/i18n/en.ts +4 -4
  10. package/src/tool/balusterCalculator/i18n/es.ts +2 -2
  11. package/src/tool/balusterCalculator/i18n/fr.ts +3 -3
  12. package/src/tool/balusterCalculator/i18n/it.ts +16 -16
  13. package/src/tool/balusterCalculator/i18n/ru.ts +14 -14
  14. package/src/tool/balusterCalculator/i18n/tr.ts +5 -5
  15. package/src/tool/clayCalculator/i18n/fr.ts +3 -3
  16. package/src/tool/clayCalculator/i18n/ru.ts +3 -3
  17. package/src/tool/concreteCalculator/i18n/en.ts +4 -4
  18. package/src/tool/concreteCalculator/i18n/fr.ts +2 -2
  19. package/src/tool/concreteCalculator/i18n/ko.ts +2 -2
  20. package/src/tool/concreteCalculator/i18n/ru.ts +3 -3
  21. package/src/tool/cutOptimizer/i18n/en.ts +4 -4
  22. package/src/tool/cutOptimizer/i18n/fr.ts +2 -2
  23. package/src/tool/cutOptimizer/i18n/ru.ts +2 -2
  24. package/src/tool/drillCalculator/bibliography.ts +2 -2
  25. package/src/tool/drillCalculator/i18n/ru.ts +5 -5
  26. package/src/tool/drillCalculator/i18n/zh.ts +2 -2
  27. package/src/tool/drillSharpener/i18n/ru.ts +3 -3
  28. package/src/tool/epoxyCalculator/epoxy-resin-calculator.css +117 -2
  29. package/src/tool/epoxyCalculator/i18n/de.ts +2 -2
  30. package/src/tool/epoxyCalculator/i18n/en.ts +2 -2
  31. package/src/tool/epoxyCalculator/i18n/es.ts +2 -2
  32. package/src/tool/epoxyCalculator/i18n/fr.ts +3 -3
  33. package/src/tool/epoxyCalculator/i18n/id.ts +2 -2
  34. package/src/tool/epoxyCalculator/i18n/it.ts +2 -2
  35. package/src/tool/epoxyCalculator/i18n/ja.ts +2 -2
  36. package/src/tool/epoxyCalculator/i18n/ko.ts +2 -2
  37. package/src/tool/epoxyCalculator/i18n/nl.ts +2 -2
  38. package/src/tool/epoxyCalculator/i18n/pl.ts +2 -2
  39. package/src/tool/epoxyCalculator/i18n/pt.ts +2 -2
  40. package/src/tool/epoxyCalculator/i18n/ru.ts +5 -5
  41. package/src/tool/epoxyCalculator/i18n/sv.ts +2 -2
  42. package/src/tool/epoxyCalculator/i18n/tr.ts +2 -2
  43. package/src/tool/epoxyCalculator/i18n/zh.ts +4 -4
  44. package/src/tool/furnitureFit/i18n/de.ts +2 -2
  45. package/src/tool/furnitureFit/i18n/en.ts +4 -4
  46. package/src/tool/furnitureFit/i18n/es.ts +2 -2
  47. package/src/tool/furnitureFit/i18n/fr.ts +3 -3
  48. package/src/tool/furnitureFit/i18n/id.ts +2 -2
  49. package/src/tool/furnitureFit/i18n/it.ts +2 -2
  50. package/src/tool/furnitureFit/i18n/ja.ts +2 -2
  51. package/src/tool/furnitureFit/i18n/ko.ts +2 -2
  52. package/src/tool/furnitureFit/i18n/nl.ts +2 -2
  53. package/src/tool/furnitureFit/i18n/pl.ts +2 -2
  54. package/src/tool/furnitureFit/i18n/pt.ts +2 -2
  55. package/src/tool/furnitureFit/i18n/ru.ts +6 -6
  56. package/src/tool/furnitureFit/i18n/sv.ts +2 -2
  57. package/src/tool/furnitureFit/i18n/tr.ts +2 -2
  58. package/src/tool/furnitureFit/i18n/zh.ts +2 -2
  59. package/src/tool/mortarCalculator/i18n/en.ts +3 -3
  60. package/src/tool/mortarCalculator/i18n/ru.ts +6 -6
  61. package/src/tool/mortarCalculator/i18n/zh.ts +3 -3
  62. package/src/tool/passepartoutCalculator/i18n/en.ts +4 -4
  63. package/src/tool/passepartoutCalculator/i18n/ru.ts +7 -7
  64. package/src/tool/passepartoutCalculator/i18n/zh.ts +6 -6
  65. package/src/tool/passepartoutCalculator/passepartout-calculator.css +113 -3
  66. package/src/tool/pythagoreanRightAngleCalculator/i18n/fr.ts +3 -3
  67. package/src/tool/pythagoreanRightAngleCalculator/i18n/pl.ts +2 -2
  68. package/src/tool/pythagoreanRightAngleCalculator/i18n/ru.ts +5 -5
  69. package/src/tool/stairCalculator/i18n/ru.ts +6 -6
  70. package/src/tool/stairCalculator/stair-calculator.css +140 -6
  71. package/src/tool/thermalExpansionCalculator/bibliography.ts +4 -4
  72. package/src/tool/thermalExpansionCalculator/i18n/en.ts +2 -2
  73. package/src/tool/thermalExpansionCalculator/i18n/fr.ts +3 -3
  74. package/src/tool/thermalExpansionCalculator/i18n/ru.ts +4 -4
  75. package/src/tool/twoStrokeMixtureCalculator/i18n/de.ts +12 -12
  76. package/src/tool/twoStrokeMixtureCalculator/i18n/en.ts +13 -13
  77. package/src/tool/twoStrokeMixtureCalculator/i18n/fr.ts +18 -18
  78. package/src/tool/twoStrokeMixtureCalculator/i18n/id.ts +12 -12
  79. package/src/tool/twoStrokeMixtureCalculator/i18n/it.ts +4 -4
  80. package/src/tool/twoStrokeMixtureCalculator/i18n/nl.ts +6 -6
  81. package/src/tool/twoStrokeMixtureCalculator/i18n/pl.ts +6 -6
  82. package/src/tool/twoStrokeMixtureCalculator/i18n/pt.ts +10 -10
  83. package/src/tool/twoStrokeMixtureCalculator/i18n/ru.ts +9 -9
  84. package/src/tool/twoStrokeMixtureCalculator/i18n/sv.ts +8 -8
  85. package/src/tool/twoStrokeMixtureCalculator/i18n/tr.ts +4 -4
  86. package/src/tool/twoStrokeMixtureCalculator/i18n/zh.ts +7 -7
  87. package/src/tool/voltageDropCalculator/i18n/en.ts +2 -2
  88. package/src/tool/voltageDropCalculator/i18n/es.ts +4 -4
  89. package/src/tool/voltageDropCalculator/i18n/ru.ts +4 -4
  90. package/src/tool/workshopFractionConverter/bibliography.ts +2 -2
  91. package/src/tool/workshopFractionConverter/i18n/de.ts +2 -2
  92. package/src/tool/workshopFractionConverter/i18n/es.ts +2 -2
  93. package/src/tool/workshopFractionConverter/i18n/fr.ts +2 -2
  94. package/src/tool/workshopFractionConverter/i18n/ru.ts +9 -9
  95. package/src/tool/workshopFractionConverter/i18n/zh.ts +6 -6
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PythagoreanRightAngleCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -10,7 +10,7 @@ const description = 'Проверьте, идеально ли выровнен
10
10
  const faqData = [
11
11
  {
12
12
  question: 'Что такое правило 3-4-5?',
13
- answer: 'Правило 3-4-5 это простая пифагорова тройка. Если у прямоугольного треугольника стороны составляют 3, 4 и 5 единиц в любом масштабе, угол между более короткими сторонами равен ровно 90 градусам. Этот проверенный метод веками используется в строительстве.',
13
+ answer: 'Правило 3-4-5 - это простая пифагорова тройка. Если у прямоугольного треугольника стороны составляют 3, 4 и 5 единиц в любом масштабе, угол между более короткими сторонами равен ровно 90 градусам. Этот проверенный метод веками используется в строительстве.',
14
14
  },
15
15
  {
16
16
  question: 'Как пользоваться этим калькулятором?',
@@ -18,7 +18,7 @@ const faqData = [
18
18
  },
19
19
  {
20
20
  question: 'Что если моя диагональ отличается?',
21
- answer: 'Если измеренная диагональ отличается от идеальной, калькулятор покажет отклонение. Зеленый цвет означает идеал, желтый допустимое отклонение, красный отсутствие прямого угла. Он также подскажет, нужно ли увеличить или уменьшить угол.',
21
+ answer: 'Если измеренная диагональ отличается от идеальной, калькулятор покажет отклонение. Зеленый цвет означает идеал, желтый - допустимое отклонение, красный - отсутствие прямого угла. Он также подскажет, нужно ли увеличить или уменьшить угол.',
22
22
  },
23
23
  {
24
24
  question: 'Достаточно ли это точно для строительства?',
@@ -83,9 +83,9 @@ export const content: ToolLocaleContent<PythagoreanRightAngleCalculatorUI> = {
83
83
  schemas: [faqSchema, howToSchema, appSchema],
84
84
  seo: [
85
85
  { type: 'title', text: 'Теорема Пифагора на практике', level: 2 },
86
- { type: 'paragraph', html: 'Идеальный угол 90 градусов основа качественного строительства. Стены должны быть перпендикулярны, фундаменты выровнены, а каркасы идеально ровны. Теорема Пифагора обеспечивает математически гарантированный метод: a² + b² = c².' },
86
+ { type: 'paragraph', html: 'Идеальный угол 90 градусов - основа качественного строительства. Стены должны быть перпендикулярны, фундаменты - выровнены, а каркасы - идеально ровны. Теорема Пифагора обеспечивает математически гарантированный метод: a² + b² = c².' },
87
87
  { type: 'title', text: 'Почему правило 3-4-5 работает', level: 3 },
88
- { type: 'paragraph', html: 'Правило 3-4-5 это простейшая пифагорова тройка. Независимо от того, измеряете ли вы в дюймах, футах или любых других единицах: стороны в 3, 4 и 5 единиц гарантируют угол 90 градусов. Это доказано математически и проверено в строительстве на протяжении веков.' },
88
+ { type: 'paragraph', html: 'Правило 3-4-5 - это простейшая пифагорова тройка. Независимо от того, измеряете ли вы в дюймах, футах или любых других единицах: стороны в 3, 4 и 5 единиц гарантируют угол 90 градусов. Это доказано математически и проверено в строительстве на протяжении веков.' },
89
89
  { type: 'title', text: 'Точность без специальных инструментов', level: 3 },
90
90
  { type: 'paragraph', html: 'В отличие от уровней или угольников, которые могут сломаться или сбиться, теорема Пифагора неизменна. С помощью одной лишь рулетки вы можете проверить любой угол в любом масштабе. Этот калькулятор избавляет от вычислений в уме и обеспечивает точность.' },
91
91
  { type: 'title', text: 'От теории к практическому руководству', level: 3 },
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { StairCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -14,7 +14,7 @@ const faqData = [
14
14
  },
15
15
  {
16
16
  question: 'Какова максимальная высота ступени?',
17
- answer: 'В жилых домах рекомендуется не превышать 1819 см. Для общественных мест максимум по нормам обычно составляет 17,5 см. Более высокие ступени сильнее утомляют и могут быть опасны.',
17
+ answer: 'В жилых домах рекомендуется не превышать 18-19 см. Для общественных мест максимум по нормам обычно составляет 17,5 см. Более высокие ступени сильнее утомляют и могут быть опасны.',
18
18
  },
19
19
  {
20
20
  question: 'Как рассчитать, если мало места?',
@@ -33,7 +33,7 @@ const faqData = [
33
33
  const howToData = [
34
34
  { name: 'Измерить перепад высот', text: 'Измерьте общий перепад (H) от чистового пола нижнего уровня до чистового пола верхнего уровня. Это базовый параметр для всех расчетов.' },
35
35
  { name: 'Ввести доступную длину', text: 'Опционально: если у вас есть ограничения по месту, введите доступную горизонтальную длину. Используйте 0 для свободного расчета.' },
36
- { name: 'Настроить количество ступеней', text: 'Калькулятор предложит начальное количество, но вы можете его изменить. Следите за индикатором Блонделя: он должен быть зеленым (6264 см).' },
36
+ { name: 'Настроить количество ступеней', text: 'Калькулятор предложит начальное количество, но вы можете его изменить. Следите за индикатором Блонделя: он должен быть зеленым (62-64 см).' },
37
37
  { name: 'Определить параметры объекта', text: 'Укажите толщину плиты, отделку, марку бетона и ширину лестницы. Эти данные влияют на итоговый расчет материалов.' },
38
38
  ];
39
39
 
@@ -82,17 +82,17 @@ export const content: ToolLocaleContent<StairCalculatorUI> = {
82
82
  schemas: [faqSchema, howToSchema, appSchema],
83
83
  seo: [
84
84
  { type: 'title', text: 'Геометрическое проектирование лестниц: закон Блонделя', level: 2 },
85
- { type: 'paragraph', html: 'Комфорт лестницы зависит от длины человеческого шага. При подъеме или спуске тело ожидает предсказуемого ритма. Закон Блонделя гласит, что 2 высоты подступенка + 1 ширина проступи = 6264 см это стандарт, гарантирующий максимальный комфорт и безопасность.' },
85
+ { type: 'paragraph', html: 'Комфорт лестницы зависит от длины человеческого шага. При подъеме или спуске тело ожидает предсказуемого ритма. Закон Блонделя гласит, что 2 высоты подступенка + 1 ширина проступи = 62-64 см - это стандарт, гарантирующий максимальный комфорт и безопасность.' },
86
86
  { type: 'title', text: 'Учет конструкций и материалов', level: 3 },
87
87
  { type: 'paragraph', html: 'Для профессионального исполнения жизненно важно учитывать бетонную плиту основания. Игнорирование этого объема приведет к нехватке материала при заказе. Калькулятор автоматически включает этот расчет.' },
88
88
  { type: 'title', text: 'Разметка и накопленная ошибка', level: 3 },
89
- { type: 'paragraph', html: 'В строительстве главный враг миллиметровая ошибка. Если вы измеряете каждую ступень отдельно, сумма маленьких погрешностей может привести к тому, что последняя ступень окажется на 5 см выше или ниже первой.' },
89
+ { type: 'paragraph', html: 'В строительстве главный враг - миллиметровая ошибка. Если вы измеряете каждую ступень отдельно, сумма маленьких погрешностей может привести к тому, что последняя ступень окажется на 5 см выше или ниже первой.' },
90
90
  ],
91
91
  ui: {
92
92
  labelGeometry: 'Геометрия и габариты',
93
93
  labelTotalHeight: 'Общая высота (H)',
94
94
  labelAvailableLength: 'Доступная длина (L)',
95
- labelAvailableLengthHint: '0 без ограничений.',
95
+ labelAvailableLengthHint: '0 - без ограничений.',
96
96
  labelNumSteps: 'Кол-во ступеней',
97
97
  labelOptimize: 'Оптимизация (18см)',
98
98
  labelWork: 'Строительство и отделка',
@@ -27,6 +27,8 @@
27
27
  margin: 1.5rem auto;
28
28
  padding: 0 1rem;
29
29
  color: var(--sc-neutral);
30
+ container-type: inline-size;
31
+ overflow-x: clip;
30
32
  }
31
33
 
32
34
  .sc-card {
@@ -34,9 +36,10 @@
34
36
  border-radius: 2rem;
35
37
  overflow: hidden;
36
38
  display: grid;
37
- grid-template-columns: 350px 1fr;
39
+ grid-template-columns: minmax(0, 350px) minmax(0, 1fr);
38
40
  box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.1);
39
41
  border: 1px solid var(--sc-border);
42
+ min-width: 0;
40
43
  }
41
44
 
42
45
  .sc-sidebar {
@@ -46,6 +49,7 @@
46
49
  display: flex;
47
50
  flex-direction: column;
48
51
  gap: 1rem;
52
+ min-width: 0;
49
53
  }
50
54
 
51
55
  .sc-section h3 {
@@ -63,6 +67,7 @@
63
67
  flex-direction: column;
64
68
  gap: 1.5rem;
65
69
  background: var(--sc-bg);
70
+ min-width: 0;
66
71
  }
67
72
 
68
73
  .sc-results-header {
@@ -72,6 +77,7 @@
72
77
  }
73
78
 
74
79
  .sc-stat-box {
80
+ min-width: 0;
75
81
  background: rgba(255, 255, 255, 0.5);
76
82
  padding: 0.75rem 0.5rem;
77
83
  border-radius: 1.25rem;
@@ -93,9 +99,12 @@
93
99
  }
94
100
 
95
101
  .sc-stat-value {
102
+ display: inline-block;
103
+ max-width: 100%;
96
104
  font-size: 1.5rem;
97
105
  font-weight: 800;
98
106
  color: var(--sc-neutral);
107
+ overflow-wrap: anywhere;
99
108
  }
100
109
 
101
110
  .sc-stat-unit {
@@ -131,6 +140,7 @@
131
140
 
132
141
  .sc-input-group {
133
142
  margin-bottom: 0.75rem;
143
+ min-width: 0;
134
144
  }
135
145
 
136
146
  .sc-input-group label {
@@ -207,6 +217,7 @@
207
217
 
208
218
  .sc-select {
209
219
  width: 100%;
220
+ box-sizing: border-box;
210
221
  padding: 0.8rem 2.8rem 0.8rem 1rem;
211
222
  border-radius: 1rem;
212
223
  border: 2px solid var(--sc-border);
@@ -241,6 +252,7 @@
241
252
 
242
253
  .sc-optimize-btn {
243
254
  width: 100%;
255
+ box-sizing: border-box;
244
256
  padding: 0.75rem;
245
257
  background: var(--sc-primary-dark);
246
258
  color: white;
@@ -317,7 +329,7 @@
317
329
 
318
330
  .sc-table-wrapper {
319
331
  max-height: 220px;
320
- overflow-y: auto;
332
+ overflow: auto;
321
333
  }
322
334
 
323
335
  .sc-table-wrapper table {
@@ -370,6 +382,7 @@
370
382
 
371
383
  .sc-material-row {
372
384
  display: flex;
385
+ gap: 0.75rem;
373
386
  justify-content: space-between;
374
387
  align-items: baseline;
375
388
  padding-bottom: 0.4rem;
@@ -384,6 +397,7 @@
384
397
  .sc-material-row strong {
385
398
  font-size: 1.15rem;
386
399
  color: var(--sc-primary);
400
+ overflow-wrap: anywhere;
387
401
  }
388
402
 
389
403
  .sc-actions-row {
@@ -459,20 +473,140 @@
459
473
  }
460
474
 
461
475
  @media (max-width: 480px) {
476
+ .sc-root {
477
+ padding: 0 0.5rem;
478
+ }
479
+
480
+ .sc-card {
481
+ border-radius: 1rem;
482
+ }
483
+
484
+ .sc-sidebar,
485
+ .sc-main {
486
+ padding: 1rem;
487
+ }
488
+
489
+ .sc-input-grid {
490
+ grid-template-columns: 1fr;
491
+ }
492
+
493
+ .sc-step-btn {
494
+ width: 38px;
495
+ height: 38px;
496
+ font-size: 1.35rem;
497
+ }
498
+
499
+ .sc-stepper input {
500
+ height: 38px;
501
+ font-size: 1rem;
502
+ }
503
+
504
+ .sc-select {
505
+ font-size: 0.9rem;
506
+ padding: 0.7rem 2.5rem 0.7rem 0.85rem;
507
+ }
508
+
462
509
  .sc-results-header {
463
- gap: 0.4rem;
510
+ grid-template-columns: 1fr;
511
+ gap: 0.5rem;
464
512
  }
465
513
 
466
514
  .sc-stat-box {
467
- padding: 0.4rem;
468
- border-radius: 1rem;
515
+ display: grid;
516
+ grid-template-columns: 1fr auto auto;
517
+ gap: 0.35rem;
518
+ align-items: baseline;
519
+ padding: 0.65rem 0.75rem;
520
+ text-align: left;
521
+ border-radius: 0.875rem;
469
522
  }
470
523
 
471
524
  .sc-stat-value {
472
525
  font-size: 1.1rem;
473
526
  }
474
527
 
528
+ .sc-stat-unit {
529
+ font-size: 0.7rem;
530
+ }
531
+
532
+ .sc-visualizer-container {
533
+ min-height: 210px;
534
+ padding: 0.5rem;
535
+ border-radius: 1rem;
536
+ }
537
+
538
+ #sc-stair-svg {
539
+ min-width: 0;
540
+ }
541
+
542
+ .sc-table-card,
543
+ .sc-materials-card {
544
+ padding: 1rem;
545
+ border-radius: 1rem;
546
+ }
547
+
548
+ .sc-material-row {
549
+ align-items: flex-start;
550
+ flex-direction: column;
551
+ gap: 0.25rem;
552
+ }
553
+
475
554
  .sc-material-row strong {
476
555
  font-size: 1rem;
477
556
  }
478
- }
557
+ }
558
+
559
+ @container (max-width: 720px) {
560
+ .sc-root {
561
+ padding: 0;
562
+ }
563
+
564
+ .sc-card {
565
+ grid-template-columns: minmax(0, 1fr);
566
+ border-radius: 1rem;
567
+ max-width: 100%;
568
+ }
569
+
570
+ .sc-sidebar {
571
+ border-right: 0;
572
+ border-bottom: 1px solid var(--sc-border);
573
+ padding: 1rem;
574
+ }
575
+
576
+ .sc-main {
577
+ padding: 1rem;
578
+ }
579
+
580
+ .sc-results-header,
581
+ .sc-bottom-grid,
582
+ .sc-input-grid {
583
+ grid-template-columns: minmax(0, 1fr);
584
+ }
585
+
586
+ .sc-stepper,
587
+ .sc-select,
588
+ .sc-optimize-btn {
589
+ max-width: 100%;
590
+ }
591
+
592
+ .sc-step-btn {
593
+ width: 38px;
594
+ height: 38px;
595
+ }
596
+
597
+ .sc-stepper input {
598
+ height: 38px;
599
+ font-size: 1rem;
600
+ }
601
+
602
+ .sc-visualizer-container {
603
+ min-height: 210px;
604
+ padding: 0.5rem;
605
+ border-radius: 1rem;
606
+ }
607
+
608
+ #sc-stair-svg {
609
+ min-width: 0;
610
+ max-width: 100%;
611
+ }
612
+ }
@@ -1,16 +1,16 @@
1
- import type { BibliographyEntry } from '../../types';
1
+ import type { BibliographyEntry } from '../../types';
2
2
 
3
3
  export const bibliography: BibliographyEntry[] = [
4
4
  {
5
- name: 'Coefficient of Thermal Expansion Engineering Toolbox',
5
+ name: 'Coefficient of Thermal Expansion - Engineering Toolbox',
6
6
  url: 'https://www.engineeringtoolbox.com/linear-expansion-coefficients-d_95.html',
7
7
  },
8
8
  {
9
- name: 'Thermal expansion and temperature Britannica',
9
+ name: 'Thermal expansion and temperature - Britannica',
10
10
  url: 'https://www.britannica.com/science/thermal-expansion',
11
11
  },
12
12
  {
13
- name: 'Linear Thermal Expansion Physics Hypertextbook',
13
+ name: 'Linear Thermal Expansion - Physics Hypertextbook',
14
14
  url: 'https://physics.info/expansion/',
15
15
  },
16
16
  ];
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { ThermalExpansionCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -97,7 +97,7 @@ export const content: ToolLocaleContent<ThermalExpansionCalculatorUI> = {
97
97
  { type: 'title', text: 'What is Thermal Expansion and How Does It Affect Structures', level: 2 },
98
98
  {
99
99
  type: 'paragraph',
100
- html: '<strong>Thermal expansion</strong> is the physical process by which a material increases its length in response to a rise in temperature. At the microscopic level, particles vibrate with more energy and require a greater average spacing between them. In construction, this phenomenon is not a curiosity it is a force that can crack concrete, deform steel beams and buckle railway tracks.',
100
+ html: '<strong>Thermal expansion</strong> is the physical process by which a material increases its length in response to a rise in temperature. At the microscopic level, particles vibrate with more energy and require a greater average spacing between them. In construction, this phenomenon is not a curiosity - it is a force that can crack concrete, deform steel beams and buckle railway tracks.',
101
101
  },
102
102
  { type: 'title', text: 'The Linear Expansion Formula', level: 3 },
103
103
  {
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { ThermalExpansionCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -97,14 +97,14 @@ export const content: ToolLocaleContent<ThermalExpansionCalculatorUI> = {
97
97
  { type: 'title', text: 'Qu\'est-ce que la Dilatation Thermique et comment affecte-t-elle les Structures', level: 2 },
98
98
  {
99
99
  type: 'paragraph',
100
- html: 'La <strong>dilatation thermique</strong> est le processus physique par lequel un matériau augmente sa longueur en réponse à une élévation de température. À l\'échelle microscopique, les particules vibrent avec plus d\'énergie et nécessitent un espacement moyen plus grand entre elles. En construction, ce phénomène n\'est pas une curiosité : c\'est une force qui peut fissurer le béton, déformer des poutres en acier et faire se tordre les rails d\'un chemin de fer.',
100
+ html: 'La <strong>dilatation thermique</strong> est le processus physique par lequel un matériau augmente sa longueur en réponse à une élévation de température. À l\'échelle microscopique, les particules vibrent avec plus d\'énergie et nécessitent un espacement moyen plus grand entre elles. En construction, ce phénomène n\'est pas une curiosité: c\'est une force qui peut fissurer le béton, déformer des poutres en acier et faire se tordre les rails d\'un chemin de fer.',
101
101
  },
102
102
  { type: 'title', text: 'La Formule de la Dilatation Linéaire', level: 3 },
103
103
  {
104
104
  type: 'card',
105
105
  icon: 'mdi:math-log',
106
106
  title: 'Formule de Dilatation Linéaire',
107
- html: '<p>L\'expansion d\'un élément structurel se calcule avec : <code>ΔL = L₀ · α · ΔT</code>. Où <strong>ΔL</strong> est l\'allongement total, <strong>L₀</strong> est la longueur originale, <strong>α</strong> est le coefficient de dilatation du matériau (en °C⁻¹) et <strong>ΔT</strong> est la différence de température. Cette formule est à la base du dimensionnement des joints de dilatation dans les ponts, les toitures et les façades.</p>',
107
+ html: '<p>L\'expansion d\'un élément structurel se calcule avec: <code>ΔL = L₀ · α · ΔT</code>. Où <strong>ΔL</strong> est l\'allongement total, <strong>L₀</strong> est la longueur originale, <strong>α</strong> est le coefficient de dilatation du matériau (en °C⁻¹) et <strong>ΔT</strong> est la différence de température. Cette formule est à la base du dimensionnement des joints de dilatation dans les ponts, les toitures et les façades.</p>',
108
108
  },
109
109
  { type: 'title', text: 'Coefficients de Dilatation par Matériau', level: 3 },
110
110
  {
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { ThermalExpansionCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -18,7 +18,7 @@ const faqData = [
18
18
  },
19
19
  {
20
20
  question: 'Расширяется ли дерево одинаково во всех направлениях?',
21
- answer: 'Нет. Дерево анизотропный материал. Оно очень мало расширяется вдоль волокон, но значительно в поперечном направлении (в ширину и толщину).',
21
+ answer: 'Нет. Дерево - анизотропный материал. Оно очень мало расширяется вдоль волокон, но значительно в поперечном направлении (в ширину и толщину).',
22
22
  },
23
23
  {
24
24
  question: 'Какую температуру использовать в качестве начальной?',
@@ -78,9 +78,9 @@ export const content: ToolLocaleContent<ThermalExpansionCalculatorUI> = {
78
78
  schemas: [faqSchema, howToSchema, appSchema],
79
79
  seo: [
80
80
  { type: 'title', text: 'Что такое тепловое расширение и как оно влияет на конструкции', level: 2 },
81
- { type: 'paragraph', html: '<strong>Тепловое расширение</strong> это физический процесс, при котором материал увеличивает свою длину в ответ на повышение температуры. В строительстве это явление сила, способная разрушить бетон, деформировать стальные балки и искривить железнодорожные рельсы.' },
81
+ { type: 'paragraph', html: '<strong>Тепловое расширение</strong> - это физический процесс, при котором материал увеличивает свою длину в ответ на повышение температуры. В строительстве это явление - сила, способная разрушить бетон, деформировать стальные балки и искривить железнодорожные рельсы.' },
82
82
  { type: 'title', text: 'Формула линейного расширения', level: 3 },
83
- { type: 'card', icon: 'mdi:math-log', title: 'Формула линейного расширения', html: '<p>Расширение структурного элемента рассчитывается по формуле: <code>ΔL = L₀ · α · ΔT</code>. Где <strong>ΔL</strong> общий рост, <strong>L₀</strong> исходная длина, <strong>α</strong> коэффициент расширения материала (в °C⁻¹), а <strong>ΔT</strong> разница температур.</p>' },
83
+ { type: 'card', icon: 'mdi:math-log', title: 'Формула линейного расширения', html: '<p>Расширение структурного элемента рассчитывается по формуле: <code>ΔL = L₀ · α · ΔT</code>. Где <strong>ΔL</strong> - общий рост, <strong>L₀</strong> - исходная длина, <strong>α</strong> - коэффициент расширения материала (в °C⁻¹), а <strong>ΔT</strong> - разница температур.</p>' },
84
84
  ],
85
85
  ui: {
86
86
  configTitle: 'Настройка',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { TwoStrokeMixtureCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -14,7 +14,7 @@ const faqData = [
14
14
  },
15
15
  {
16
16
  question: 'Was sind gängige Kraftstoff-Öl-Mischungsverhältnisse?',
17
- answer: 'Gängige Verhältnisse sind 1:25 (fett, schützend), 1:33 (ältere Geräte), 1:40 (Standard) und 1:50 (mager, moderne Motoren). Prüfen Sie das Handbuch Ihres Motors ein falsches Verhältnis kann den Motor beschädigen.',
17
+ answer: 'Gängige Verhältnisse sind 1:25 (fett, schützend), 1:33 (ältere Geräte), 1:40 (Standard) und 1:50 (mager, moderne Motoren). Prüfen Sie das Handbuch Ihres Motors - ein falsches Verhältnis kann den Motor beschädigen.',
18
18
  },
19
19
  {
20
20
  question: 'Was passiert bei falschem Mischungsverhältnis?',
@@ -22,7 +22,7 @@ const faqData = [
22
22
  },
23
23
  {
24
24
  question: 'Welches Öl soll ich verwenden?',
25
- answer: 'Verwenden Sie Zweitaktöl, das für Ihr Gerät zugelassen ist. Hochwertige synthetische Zweitaktöle bieten besseren Schutz und verbrennen sauberer als herkömmliche Öle. Verwenden Sie niemals Viertaktöl es führt zu Motorschäden.',
25
+ answer: 'Verwenden Sie Zweitaktöl, das für Ihr Gerät zugelassen ist. Hochwertige synthetische Zweitaktöle bieten besseren Schutz und verbrennen sauberer als herkömmliche Öle. Verwenden Sie niemals Viertaktöl - es führt zu Motorschäden.',
26
26
  },
27
27
  {
28
28
  question: 'Wie mische ich Kraftstoff und Öl?',
@@ -83,10 +83,10 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
83
83
  schemas: [faqSchema, howToSchema, appSchema],
84
84
  seo: [
85
85
  { type: 'title', text: 'Zweitakt-Gemischrechner: Präzise Öl-Kraftstoff-Verhältnisse für Motorsägen und Mofas', level: 2 },
86
- { type: 'paragraph', html: 'Zweitaktmotoren benötigen ein präzises Kraftstoff-Öl-Gemisch zum Überleben. Eine falsche Mischung kann Ihren Motor in wenigen Minuten zerstören. Dieser Rechner ermittelt sofort die exakte Ölmenge für Ihre Kraftstoffmenge und Ihren Motortyp Schluss mit dem Rätselraten in der Werkstatt.' },
86
+ { type: 'paragraph', html: 'Zweitaktmotoren benötigen ein präzises Kraftstoff-Öl-Gemisch zum Überleben. Eine falsche Mischung kann Ihren Motor in wenigen Minuten zerstören. Dieser Rechner ermittelt sofort die exakte Ölmenge für Ihre Kraftstoffmenge und Ihren Motortyp - Schluss mit dem Rätselraten in der Werkstatt.' },
87
87
 
88
88
  { type: 'title', text: 'Warum Zweitaktmotoren Öl im Kraftstoff benötigen', level: 3 },
89
- { type: 'card', icon: 'mdi:engine', title: 'Der entscheidende Unterschied', html: 'Im Gegensatz zu Viertaktmotoren mit separaten Öltanks mischen Zweitaktmotoren das Öl direkt in den Kraftstoff. Bei jedem Arbeitstakt verbrennt der Motor das Gemisch sowohl für Energie als auch zur Schmierung. Es gibt keine Ölwanne, keine separate Ölpumpe nur das Mischbenzin hält die Kolben am Leben.' },
89
+ { type: 'card', icon: 'mdi:engine', title: 'Der entscheidende Unterschied', html: 'Im Gegensatz zu Viertaktmotoren mit separaten Öltanks mischen Zweitaktmotoren das Öl direkt in den Kraftstoff. Bei jedem Arbeitstakt verbrennt der Motor das Gemisch sowohl für Energie als auch zur Schmierung. Es gibt keine Ölwanne, keine separate Ölpumpe - nur das Mischbenzin hält die Kolben am Leben.' },
90
90
 
91
91
  { type: 'title', text: 'Schnellreferenz für Zweitakt-Verhältnisse', level: 3 },
92
92
  { type: 'table', headers: ['Verhältnis', 'Öl %', 'Einsatzzweck', 'Motortyp', 'Eigenschaften'], rows: [
@@ -104,8 +104,8 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
104
104
  ] },
105
105
 
106
106
  { type: 'title', text: 'Gängige Geräte-Verhältnisse', level: 3 },
107
- { type: 'card', icon: 'mdi:tree', title: 'Motorsägen', html: '<strong>Stihl, Husqvarna, Echo:</strong> Moderne Modelle benötigen typischerweise 1:40 oder 1:50. Prüfen Sie immer Ihr Handbuch 1:25 bei einer modernen Säge riskiert verrußte Kerzen. Ältere Stihl-Maschinen (90er und früher) können 1:25 oder 1:33 vorschreiben.' },
108
- { type: 'card', icon: 'mdi:motorcycle', title: 'Mofas & Motorräder', html: '<strong>Vespa, Honda, Yamaha:</strong> Die meisten benötigen 1:33 bei älteren Modellen, 1:401:50 bei modernen Versionen. Hochleistungs-Mofas und Straßenmaschinen schreiben oft 1:50 vor. Das Werkstatthandbuch ist die einzige Wahrheit.' },
107
+ { type: 'card', icon: 'mdi:tree', title: 'Motorsägen', html: '<strong>Stihl, Husqvarna, Echo:</strong> Moderne Modelle benötigen typischerweise 1:40 oder 1:50. Prüfen Sie immer Ihr Handbuch - 1:25 bei einer modernen Säge riskiert verrußte Kerzen. Ältere Stihl-Maschinen (90er und früher) können 1:25 oder 1:33 vorschreiben.' },
108
+ { type: 'card', icon: 'mdi:motorcycle', title: 'Mofas & Motorräder', html: '<strong>Vespa, Honda, Yamaha:</strong> Die meisten benötigen 1:33 bei älteren Modellen, 1:40-1:50 bei modernen Versionen. Hochleistungs-Mofas und Straßenmaschinen schreiben oft 1:50 vor. Das Werkstatthandbuch ist die einzige Wahrheit.' },
109
109
  { type: 'card', icon: 'mdi:tools', title: 'Laubbläser & Trimmer', html: '<strong>Stihl, Husqvarna, DeWalt:</strong> Typischerweise 1:50 (modern) oder 1:40 (etwas älter). Diese Geräte sind für kurzen saisonalen Einsatz konzipiert, magere Mischungen sparen Rauch ohne Zuverlässigkeitsverlust.' },
110
110
 
111
111
  { type: 'title', text: 'Ölsorte ist so wichtig wie das Verhältnis', level: 3 },
@@ -116,10 +116,10 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
116
116
  ], columns: 3 },
117
117
 
118
118
  { type: 'title', text: 'Schritt-für-Schritt Mischvorgang', level: 3 },
119
- { type: 'card', icon: 'mdi:check-circle', title: 'Der richtige Weg zum Mischen', html: '<ol style="margin: 1rem 0; padding-left: 1.5rem;"><li><strong>Verwenden Sie einen speziellen Behälter</strong> nur für Kraftstoffmischungen. Sauber, trocken, markiert.</li><li><strong>Gießen Sie zuerst die Hälfte des Benzins</strong> ein.</li><li><strong>Geben Sie die berechnete Ölmenge zu</strong> (nutzen Sie diesen Rechner für Präzision).</li><li><strong>Füllen Sie das restliche Benzin auf</strong>, um die Zielmenge zu erreichen.</li><li><strong>Schütteln Sie kräftig für 12 Minuten</strong>, bis die Farbe gleichmäßig ist. Ein homogenes Gemisch = gleichmäßige Schmierung.</li><li><strong>Beschriften Sie den Behälter</strong> mit Datum, Verhältnis und Kraftstoffart.</li><li><strong>Innerhalb von 30 Tagen verbrauchen</strong> (Synthetiköle halten bis zu 60 Tage).</li></ol>' },
119
+ { type: 'card', icon: 'mdi:check-circle', title: 'Der richtige Weg zum Mischen', html: '<ol style="margin: 1rem 0; padding-left: 1.5rem;"><li><strong>Verwenden Sie einen speziellen Behälter</strong> nur für Kraftstoffmischungen. Sauber, trocken, markiert.</li><li><strong>Gießen Sie zuerst die Hälfte des Benzins</strong> ein.</li><li><strong>Geben Sie die berechnete Ölmenge zu</strong> (nutzen Sie diesen Rechner für Präzision).</li><li><strong>Füllen Sie das restliche Benzin auf</strong>, um die Zielmenge zu erreichen.</li><li><strong>Schütteln Sie kräftig für 1-2 Minuten</strong>, bis die Farbe gleichmäßig ist. Ein homogenes Gemisch = gleichmäßige Schmierung.</li><li><strong>Beschriften Sie den Behälter</strong> mit Datum, Verhältnis und Kraftstoffart.</li><li><strong>Innerhalb von 30 Tagen verbrauchen</strong> (Synthetiköle halten bis zu 60 Tage).</li></ol>' },
120
120
 
121
121
  { type: 'title', text: 'Wann Sie das Handbuch infrage stellen sollten', level: 3 },
122
- { type: 'tip', html: '<strong>Prüfen Sie immer zuerst das Verhältnis im Gerätehandbuch.</strong> Wenn Sie es nicht finden, besuchen Sie die Website des Herstellers oder kontaktieren Sie den Support. Niemals raten ein falsches Verhältnis führt zum Erlöschen der Garantie und riskiert einen Motorschaden.' },
122
+ { type: 'tip', html: '<strong>Prüfen Sie immer zuerst das Verhältnis im Gerätehandbuch.</strong> Wenn Sie es nicht finden, besuchen Sie die Website des Herstellers oder kontaktieren Sie den Support. Niemals raten - ein falsches Verhältnis führt zum Erlöschen der Garantie und riskiert einen Motorschaden.' },
123
123
 
124
124
  { type: 'title', text: 'Glossar: Zweitakt-Begriffe erklärt', level: 3 },
125
125
  { type: 'glossary', items: [
@@ -142,12 +142,12 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
142
142
 
143
143
  { type: 'title', text: 'Häufige Fehler, die Motoren töten', level: 3 },
144
144
  { type: 'diagnostic', variant: 'error', title: 'Viertaktöl in Zweitaktmotoren verwenden', icon: 'mdi:alert', badge: 'Motortod', html: 'Viertaktöle sind für die Zirkulation im Motorblock gedacht. Im Zweitakter verbrennen sie nicht sauber und zerstören den Motor binnen Stunden.' },
145
- { type: 'diagnostic', variant: 'warning', title: 'Gründliches Mischen vergessen', icon: 'mdi:alert', badge: 'Fresser-Risiko', html: 'Wenn sich Öl und Benzin trennen, laufen Teile Ihres Motors ohne Schmierung. Mindestens 12 Minuten lang kräftig schütteln.' },
145
+ { type: 'diagnostic', variant: 'warning', title: 'Gründliches Mischen vergessen', icon: 'mdi:alert', badge: 'Fresser-Risiko', html: 'Wenn sich Öl und Benzin trennen, laufen Teile Ihres Motors ohne Schmierung. Mindestens 1-2 Minuten lang kräftig schütteln.' },
146
146
  { type: 'diagnostic', variant: 'warning', title: 'Alten Kraftstoff verwenden (über 60 Tage)', icon: 'mdi:alert', badge: 'Verharzungsgefahr', html: 'Ethanol-Benzin zersetzt sich mit der Zeit. Alte Mischung hinterlässt Harzablagerungen im Vergaser. Nur mischen, was in 30 Tagen verbraucht wird.' },
147
147
 
148
148
  { type: 'title', text: 'FAQ Zusammenfassung', level: 3 },
149
149
  { type: 'summary', title: 'Vor dem Mischen', items: [
150
- 'Prüfen Sie das Handbuch auf das exakte Verhältnis das ist die Vorgabe des Herstellers.',
150
+ 'Prüfen Sie das Handbuch auf das exakte Verhältnis - das ist die Vorgabe des Herstellers.',
151
151
  'Sicherstellen, dass Sie Zweitaktöl verwenden, kein Viertakt- oder sonstiges Öl.',
152
152
  'Verwenden Sie einen sauberen, speziellen Behälter nur zum Mischen.',
153
153
  'Frisches Benzin (nicht monatelang gelagert) und passendes Öl verwenden.',
@@ -182,7 +182,7 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
182
182
  labelRatioShort: 'Verhältnis',
183
183
  labelOilTip: '2% Öl-Mix = 1:50 Verhältnis',
184
184
  labelMixingTips: 'Tipps zum Mischen',
185
- labelMixingTipsDesc: 'In sauberem Behälter mischen erst Benzin, dann Öl, dann Restbenzin. 1-2 Minuten kräftig schütteln. Mit Datum und Verhältnis beschriften.',
185
+ labelMixingTipsDesc: 'In sauberem Behälter mischen - erst Benzin, dann Öl, dann Restbenzin. 1-2 Minuten kräftig schütteln. Mit Datum und Verhältnis beschriften.',
186
186
  recipePrefix: 'Für',
187
187
  recipeAt: 'Benzin bei',
188
188
  recipeAdd: 'fügen Sie genau',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { TwoStrokeMixtureCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -14,7 +14,7 @@ const faqData = [
14
14
  },
15
15
  {
16
16
  question: 'What are common fuel oil mix ratios?',
17
- answer: 'Common ratios are 1:25 (rich, protective), 1:33 (older equipment), 1:40 (standard), and 1:50 (lean, modern engines). Check your engine manual for the exact ratiousing the wrong ratio can damage your engine.',
17
+ answer: 'Common ratios are 1:25 (rich, protective), 1:33 (older equipment), 1:40 (standard), and 1:50 (lean, modern engines). Check your engine manual for the exact ratio-using the wrong ratio can damage your engine.',
18
18
  },
19
19
  {
20
20
  question: 'What happens if I mix wrong?',
@@ -22,7 +22,7 @@ const faqData = [
22
22
  },
23
23
  {
24
24
  question: 'What type of oil do I use?',
25
- answer: 'Use 2-stroke motor oil rated for your equipment. Premium synthetic 2-stroke oils provide better protection and cleaner burning than conventional oils. Never use 4-stroke engine oilit will cause engine damage.',
25
+ answer: 'Use 2-stroke motor oil rated for your equipment. Premium synthetic 2-stroke oils provide better protection and cleaner burning than conventional oils. Never use 4-stroke engine oil-it will cause engine damage.',
26
26
  },
27
27
  {
28
28
  question: 'How do I mix fuel and oil?',
@@ -83,15 +83,15 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
83
83
  schemas: [faqSchema, howToSchema, appSchema],
84
84
  seo: [
85
85
  { type: 'title', text: '2-Stroke Fuel Mixture Calculator: Precise Oil and Fuel Ratios for Chainsaws, Mopeds & Small Engines', level: 2 },
86
- { type: 'paragraph', html: 'Two-stroke engines require a precise fuel-oil mixture for survival. Mix wrong and destroy your engine in minutes. This calculator instantly determines the exact amount of oil needed for your fuel volume and engine typeeliminating guesswork from the workshop.' },
86
+ { type: 'paragraph', html: 'Two-stroke engines require a precise fuel-oil mixture for survival. Mix wrong and destroy your engine in minutes. This calculator instantly determines the exact amount of oil needed for your fuel volume and engine type-eliminating guesswork from the workshop.' },
87
87
 
88
88
  { type: 'title', text: 'Why 2-Stroke Engines Require Oil in Fuel', level: 3 },
89
- { type: 'card', icon: 'mdi:engine', title: 'The Critical Difference', html: 'Unlike 4-stroke engines with separate oil reservoirs, 2-stroke engines mix oil directly into fuel. On each power stroke, the engine burns the fuel-oil mixture for both energy and lubrication. There is no sump, no separate oil pumponly the mixed fuel keeping pistons alive.' },
89
+ { type: 'card', icon: 'mdi:engine', title: 'The Critical Difference', html: 'Unlike 4-stroke engines with separate oil reservoirs, 2-stroke engines mix oil directly into fuel. On each power stroke, the engine burns the fuel-oil mixture for both energy and lubrication. There is no sump, no separate oil pump-only the mixed fuel keeping pistons alive.' },
90
90
 
91
91
  { type: 'title', text: '2-Stroke Ratio Quick Reference', level: 3 },
92
92
  { type: 'table', headers: ['Ratio', 'Oil %', 'Use Case', 'Engine Type', 'Characteristics'], rows: [
93
93
  ['1:25', '3.85%', 'Maximum Protection', 'Pre-1980s equipment, high-load use, vintage motorcycles', 'Rich mixture: more smoke, more carbon buildup, maximum protection against seizure'],
94
- ['1:33', '2.94%', 'Classic Equipment', '1980s1990s small engines, older chainsaws', 'Moderate richness: balanced protection and efficiency'],
94
+ ['1:33', '2.94%', 'Classic Equipment', '1980s-1990s small engines, older chainsaws', 'Moderate richness: balanced protection and efficiency'],
95
95
  ['1:40', '2.44%', 'Industry Standard', 'Most modern chainsaws, mopeds, modern small engines', 'Standard recommendation: designed for today\'s synthetic oils'],
96
96
  ['1:50', '1.96%', 'Modern Efficiency', 'Latest chainsaws, high-performance mopeds, new motorcycles', 'Lean mixture: less smoke, cleaner burning, designed for premium synthetic oils']
97
97
  ] },
@@ -104,8 +104,8 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
104
104
  ] },
105
105
 
106
106
  { type: 'title', text: 'Common Equipment Ratios', level: 3 },
107
- { type: 'card', icon: 'mdi:tree', title: 'Chainsaws', html: '<strong>Stihl, Husqvarna, Echo:</strong> Modern models typically require 1:40 or 1:50. Always check your manualusing 1:25 on a modern chainsaw risks fouled plugs and poor performance. Older Stihl machines (1990s and earlier) may specify 1:25 or 1:33.' },
108
- { type: 'card', icon: 'mdi:motorcycle', title: 'Mopeds & Motorcycles', html: '<strong>Vespa, Honda, Yamaha:</strong> Most require 1:33 for older models, 1:401:50 for modern versions. High-performance mopeds and street bikes often specify 1:50 ratios. Check your service manualit\'s the source of truth.' },
107
+ { type: 'card', icon: 'mdi:tree', title: 'Chainsaws', html: '<strong>Stihl, Husqvarna, Echo:</strong> Modern models typically require 1:40 or 1:50. Always check your manual-using 1:25 on a modern chainsaw risks fouled plugs and poor performance. Older Stihl machines (1990s and earlier) may specify 1:25 or 1:33.' },
108
+ { type: 'card', icon: 'mdi:motorcycle', title: 'Mopeds & Motorcycles', html: '<strong>Vespa, Honda, Yamaha:</strong> Most require 1:33 for older models, 1:40-1:50 for modern versions. High-performance mopeds and street bikes often specify 1:50 ratios. Check your service manual-it\'s the source of truth.' },
109
109
  { type: 'card', icon: 'mdi:tools', title: 'Leaf Blowers & Trimmers', html: '<strong>Stihl, Husqvarna, DeWalt:</strong> Typically 1:50 (modern) or 1:40 (slightly older). These tools are designed for quick seasonal use, so lean ratios save on smoke and cost without sacrificing reliability.' },
110
110
 
111
111
  { type: 'title', text: 'Oil Type Matters as Much as Ratio', level: 3 },
@@ -116,10 +116,10 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
116
116
  ], columns: 3 },
117
117
 
118
118
  { type: 'title', text: 'Step-by-Step Mixing Process', level: 3 },
119
- { type: 'card', icon: 'mdi:check-circle', title: 'The Right Way to Mix', html: '<ol style="margin: 1rem 0; padding-left: 1.5rem;"><li><strong>Use a dedicated container</strong> reserved for fuel mixing only. Clean, dry, marked for fuel.</li><li><strong>Pour half your fuel</strong> into the container first.</li><li><strong>Add the calculated oil amount</strong> (use this calculator for precision).</li><li><strong>Add remaining fuel</strong> to reach target volume.</li><li><strong>Shake vigorously for 12 minutes</strong> until color is uniform. A homogeneous mixture = even lubrication.</li><li><strong>Label the container</strong> with date, ratio, and fuel type.</li><li><strong>Use within 30 days</strong> (synthetic oils extend this to 60 days).</li></ol>' },
119
+ { type: 'card', icon: 'mdi:check-circle', title: 'The Right Way to Mix', html: '<ol style="margin: 1rem 0; padding-left: 1.5rem;"><li><strong>Use a dedicated container</strong> reserved for fuel mixing only. Clean, dry, marked for fuel.</li><li><strong>Pour half your fuel</strong> into the container first.</li><li><strong>Add the calculated oil amount</strong> (use this calculator for precision).</li><li><strong>Add remaining fuel</strong> to reach target volume.</li><li><strong>Shake vigorously for 1-2 minutes</strong> until color is uniform. A homogeneous mixture = even lubrication.</li><li><strong>Label the container</strong> with date, ratio, and fuel type.</li><li><strong>Use within 30 days</strong> (synthetic oils extend this to 60 days).</li></ol>' },
120
120
 
121
121
  { type: 'title', text: 'When to Question Your Equipment Manual', level: 3 },
122
- { type: 'tip', html: '<strong>Always verify the ratio in your equipment manual first.</strong> If you can\'t locate it, visit the manufacturer\'s website or contact their support. Never assumea wrong ratio voids warranties and risks engine seizure. If your equipment is vintage and the manual is lost, search online for the model number. The cost of a replacement manual is far less than rebuilding an engine.' },
122
+ { type: 'tip', html: '<strong>Always verify the ratio in your equipment manual first.</strong> If you can\'t locate it, visit the manufacturer\'s website or contact their support. Never assume-a wrong ratio voids warranties and risks engine seizure. If your equipment is vintage and the manual is lost, search online for the model number. The cost of a replacement manual is far less than rebuilding an engine.' },
123
123
 
124
124
  { type: 'title', text: 'Glossary: 2-Stroke Terms Explained', level: 3 },
125
125
  { type: 'glossary', items: [
@@ -142,12 +142,12 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
142
142
 
143
143
  { type: 'title', text: 'Common Mistakes That Kill Engines', level: 3 },
144
144
  { type: 'diagnostic', variant: 'error', title: 'Using 4 Stroke Oil in 2 Stroke Engines', icon: 'mdi:alert', badge: 'Engine Death', html: '4-stroke oils are designed for circulation through an engine block. In a 2-stroke fuel tank, they don\'t burn cleanly and will destroy your engine in hours.' },
145
- { type: 'diagnostic', variant: 'warning', title: 'Forgetting to Mix Thoroughly', icon: 'mdi:alert', badge: 'Seizure Risk', html: 'If oil and fuel separate due to incomplete mixing, parts of your engine will burn without lubrication. Shake for at least 12 minutes until the mixture is uniform.' },
145
+ { type: 'diagnostic', variant: 'warning', title: 'Forgetting to Mix Thoroughly', icon: 'mdi:alert', badge: 'Seizure Risk', html: 'If oil and fuel separate due to incomplete mixing, parts of your engine will burn without lubrication. Shake for at least 1-2 minutes until the mixture is uniform.' },
146
146
  { type: 'diagnostic', variant: 'warning', title: 'Using Old Fuel (Over 60 Days Old)', icon: 'mdi:alert', badge: 'Gum Buildup', html: 'Ethanol-blend fuel separates over time. Old fuel mixture leaves gum deposits in carburetors and fuel injectors. Mix only what you\'ll use within 30 days.' },
147
147
 
148
148
  { type: 'title', text: 'FAQ Summary', level: 3 },
149
149
  { type: 'summary', title: 'Before You Mix', items: [
150
- 'Check your equipment manual for the exact ratiothis is the manufacturer\'s tested specification.',
150
+ 'Check your equipment manual for the exact ratio-this is the manufacturer\'s tested specification.',
151
151
  'Verify you\'re using 2-stroke oil, not 4-stroke or other oils.',
152
152
  'Use a clean, dedicated container reserved only for fuel mixing.',
153
153
  'Use fresh gasoline (not stored for months) and compatible 2-stroke oil.',
@@ -182,7 +182,7 @@ export const content: ToolLocaleContent<TwoStrokeMixtureCalculatorUI> = {
182
182
  labelRatioShort: 'Ratio',
183
183
  labelOilTip: '2% oil mix = 1:50 ratio',
184
184
  labelMixingTips: 'Mixing Tips',
185
- labelMixingTipsDesc: 'Mix in a clean containergasoline first, add measured oil, then remaining fuel. Shake well (1-2 minutes) for homogeneous blend. Label with date and ratio.',
185
+ labelMixingTipsDesc: 'Mix in a clean container-gasoline first, add measured oil, then remaining fuel. Shake well (1-2 minutes) for homogeneous blend. Label with date and ratio.',
186
186
  recipePrefix: 'For',
187
187
  recipeAt: 'of fuel at',
188
188
  recipeAdd: 'add exactly',