@jjlmoya/utils-chrono 1.17.0 → 1.19.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 (245) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/fr.ts +1 -1
  3. package/src/category/index.ts +4 -0
  4. package/src/entries.ts +7 -1
  5. package/src/index.ts +2 -0
  6. package/src/tests/locale_completeness.test.ts +1 -1
  7. package/src/tests/no_en_dash.test.ts +40 -6
  8. package/src/tests/title_quality.test.ts +2 -2
  9. package/src/tests/tool_validation.test.ts +1 -1
  10. package/src/tool/beat-rate-converter/i18n/de.ts +30 -30
  11. package/src/tool/beat-rate-converter/i18n/es.ts +33 -33
  12. package/src/tool/beat-rate-converter/i18n/fr.ts +45 -45
  13. package/src/tool/beat-rate-converter/i18n/id.ts +6 -6
  14. package/src/tool/beat-rate-converter/i18n/it.ts +28 -28
  15. package/src/tool/beat-rate-converter/i18n/ja.ts +56 -56
  16. package/src/tool/beat-rate-converter/i18n/ko.ts +56 -56
  17. package/src/tool/beat-rate-converter/i18n/nl.ts +14 -14
  18. package/src/tool/beat-rate-converter/i18n/pl.ts +48 -48
  19. package/src/tool/beat-rate-converter/i18n/pt.ts +30 -30
  20. package/src/tool/beat-rate-converter/i18n/ru.ts +56 -56
  21. package/src/tool/beat-rate-converter/i18n/sv.ts +44 -44
  22. package/src/tool/beat-rate-converter/i18n/tr.ts +51 -51
  23. package/src/tool/beat-rate-converter/i18n/zh.ts +56 -56
  24. package/src/tool/crown-reference-guide/i18n/de.ts +9 -9
  25. package/src/tool/crown-reference-guide/i18n/en.ts +8 -8
  26. package/src/tool/crown-reference-guide/i18n/es.ts +10 -10
  27. package/src/tool/crown-reference-guide/i18n/fr.ts +18 -18
  28. package/src/tool/crown-reference-guide/i18n/id.ts +9 -9
  29. package/src/tool/crown-reference-guide/i18n/it.ts +9 -9
  30. package/src/tool/crown-reference-guide/i18n/nl.ts +8 -8
  31. package/src/tool/crown-reference-guide/i18n/pl.ts +8 -8
  32. package/src/tool/crown-reference-guide/i18n/pt.ts +8 -8
  33. package/src/tool/crown-reference-guide/i18n/ru.ts +8 -8
  34. package/src/tool/crown-reference-guide/i18n/sv.ts +8 -8
  35. package/src/tool/crown-reference-guide/i18n/tr.ts +8 -8
  36. package/src/tool/crown-reference-guide/i18n/zh.ts +9 -9
  37. package/src/tool/demagnetizing-timer/i18n/fr.ts +1 -1
  38. package/src/tool/gear-train-explorer/i18n/de.ts +2 -2
  39. package/src/tool/gear-train-explorer/i18n/en.ts +2 -2
  40. package/src/tool/gear-train-explorer/i18n/es.ts +2 -2
  41. package/src/tool/gear-train-explorer/i18n/fr.ts +2 -2
  42. package/src/tool/gear-train-explorer/i18n/id.ts +2 -2
  43. package/src/tool/gear-train-explorer/i18n/it.ts +2 -2
  44. package/src/tool/gear-train-explorer/i18n/ja.ts +2 -2
  45. package/src/tool/gear-train-explorer/i18n/ko.ts +2 -2
  46. package/src/tool/gear-train-explorer/i18n/nl.ts +2 -2
  47. package/src/tool/gear-train-explorer/i18n/pl.ts +2 -2
  48. package/src/tool/gear-train-explorer/i18n/pt.ts +2 -2
  49. package/src/tool/gear-train-explorer/i18n/ru.ts +6 -6
  50. package/src/tool/gear-train-explorer/i18n/sv.ts +2 -2
  51. package/src/tool/gear-train-explorer/i18n/tr.ts +2 -2
  52. package/src/tool/gear-train-explorer/i18n/zh.ts +2 -2
  53. package/src/tool/gmt-world-timer/i18n/en.ts +7 -7
  54. package/src/tool/gmt-world-timer/i18n/es.ts +8 -8
  55. package/src/tool/gmt-world-timer/i18n/fr.ts +12 -12
  56. package/src/tool/gmt-world-timer/i18n/id.ts +7 -7
  57. package/src/tool/gmt-world-timer/i18n/it.ts +8 -8
  58. package/src/tool/gmt-world-timer/i18n/ja.ts +5 -5
  59. package/src/tool/gmt-world-timer/i18n/ko.ts +5 -5
  60. package/src/tool/gmt-world-timer/i18n/nl.ts +7 -7
  61. package/src/tool/gmt-world-timer/i18n/pl.ts +7 -7
  62. package/src/tool/gmt-world-timer/i18n/pt.ts +7 -7
  63. package/src/tool/gmt-world-timer/i18n/ru.ts +11 -11
  64. package/src/tool/gmt-world-timer/i18n/sv.ts +7 -7
  65. package/src/tool/gmt-world-timer/i18n/tr.ts +6 -6
  66. package/src/tool/gmt-world-timer/i18n/zh.ts +6 -6
  67. package/src/tool/lume-color-simulator/i18n/fr.ts +4 -4
  68. package/src/tool/lume-color-simulator/i18n/id.ts +5 -5
  69. package/src/tool/lume-color-simulator/i18n/it.ts +4 -4
  70. package/src/tool/lume-color-simulator/i18n/ja.ts +5 -5
  71. package/src/tool/lume-color-simulator/i18n/nl.ts +2 -2
  72. package/src/tool/lume-color-simulator/i18n/pt.ts +5 -5
  73. package/src/tool/lume-color-simulator/i18n/ru.ts +14 -14
  74. package/src/tool/lume-color-simulator/i18n/zh.ts +4 -4
  75. package/src/tool/mainspring-finder/bibliography.astro +16 -0
  76. package/src/tool/mainspring-finder/bibliography.ts +16 -0
  77. package/src/tool/mainspring-finder/client.ts +89 -0
  78. package/src/tool/mainspring-finder/component.astro +72 -0
  79. package/src/tool/mainspring-finder/entry.ts +50 -0
  80. package/src/tool/mainspring-finder/helpers.ts +52 -0
  81. package/src/tool/mainspring-finder/i18n/de.ts +212 -0
  82. package/src/tool/mainspring-finder/i18n/en.ts +212 -0
  83. package/src/tool/mainspring-finder/i18n/es.ts +212 -0
  84. package/src/tool/mainspring-finder/i18n/fr.ts +212 -0
  85. package/src/tool/mainspring-finder/i18n/id.ts +212 -0
  86. package/src/tool/mainspring-finder/i18n/it.ts +212 -0
  87. package/src/tool/mainspring-finder/i18n/ja.ts +212 -0
  88. package/src/tool/mainspring-finder/i18n/ko.ts +212 -0
  89. package/src/tool/mainspring-finder/i18n/nl.ts +212 -0
  90. package/src/tool/mainspring-finder/i18n/pl.ts +212 -0
  91. package/src/tool/mainspring-finder/i18n/pt.ts +212 -0
  92. package/src/tool/mainspring-finder/i18n/ru.ts +212 -0
  93. package/src/tool/mainspring-finder/i18n/sv.ts +212 -0
  94. package/src/tool/mainspring-finder/i18n/tr.ts +212 -0
  95. package/src/tool/mainspring-finder/i18n/zh.ts +212 -0
  96. package/src/tool/mainspring-finder/index.ts +11 -0
  97. package/src/tool/mainspring-finder/mainspring-finder.css +242 -0
  98. package/src/tool/mainspring-finder/seo.astro +16 -0
  99. package/src/tool/moon-phase-visualizer/i18n/fr.ts +4 -4
  100. package/src/tool/moon-phase-visualizer/i18n/id.ts +4 -4
  101. package/src/tool/moon-phase-visualizer/i18n/it.ts +4 -4
  102. package/src/tool/moon-phase-visualizer/i18n/ja.ts +2 -2
  103. package/src/tool/moon-phase-visualizer/i18n/nl.ts +2 -2
  104. package/src/tool/moon-phase-visualizer/i18n/pt.ts +4 -4
  105. package/src/tool/moon-phase-visualizer/i18n/ru.ts +7 -7
  106. package/src/tool/moon-phase-visualizer/i18n/zh.ts +4 -4
  107. package/src/tool/perpetual-calendar/i18n/de.ts +1 -1
  108. package/src/tool/perpetual-calendar/i18n/en.ts +1 -1
  109. package/src/tool/perpetual-calendar/i18n/es.ts +1 -1
  110. package/src/tool/perpetual-calendar/i18n/fr.ts +1 -1
  111. package/src/tool/perpetual-calendar/i18n/id.ts +1 -1
  112. package/src/tool/perpetual-calendar/i18n/it.ts +1 -1
  113. package/src/tool/perpetual-calendar/i18n/ja.ts +1 -1
  114. package/src/tool/perpetual-calendar/i18n/ko.ts +1 -1
  115. package/src/tool/perpetual-calendar/i18n/nl.ts +1 -1
  116. package/src/tool/perpetual-calendar/i18n/pl.ts +1 -1
  117. package/src/tool/perpetual-calendar/i18n/pt.ts +1 -1
  118. package/src/tool/perpetual-calendar/i18n/ru.ts +2 -2
  119. package/src/tool/perpetual-calendar/i18n/sv.ts +1 -1
  120. package/src/tool/perpetual-calendar/i18n/tr.ts +1 -1
  121. package/src/tool/perpetual-calendar/i18n/zh.ts +1 -1
  122. package/src/tool/power-reserve-estimator/i18n/de.ts +26 -26
  123. package/src/tool/power-reserve-estimator/i18n/es.ts +22 -22
  124. package/src/tool/power-reserve-estimator/i18n/fr.ts +36 -36
  125. package/src/tool/power-reserve-estimator/i18n/id.ts +5 -5
  126. package/src/tool/power-reserve-estimator/i18n/it.ts +18 -18
  127. package/src/tool/power-reserve-estimator/i18n/ja.ts +3 -3
  128. package/src/tool/power-reserve-estimator/i18n/ko.ts +3 -3
  129. package/src/tool/power-reserve-estimator/i18n/nl.ts +7 -7
  130. package/src/tool/power-reserve-estimator/i18n/pl.ts +9 -9
  131. package/src/tool/power-reserve-estimator/i18n/pt.ts +25 -25
  132. package/src/tool/power-reserve-estimator/i18n/ru.ts +15 -15
  133. package/src/tool/power-reserve-estimator/i18n/sv.ts +7 -7
  134. package/src/tool/power-reserve-estimator/i18n/tr.ts +7 -7
  135. package/src/tool/power-reserve-estimator/i18n/zh.ts +7 -7
  136. package/src/tool/quartz-battery-health/bibliography.astro +16 -0
  137. package/src/tool/quartz-battery-health/bibliography.ts +16 -0
  138. package/src/tool/quartz-battery-health/client.ts +198 -0
  139. package/src/tool/quartz-battery-health/component.astro +15 -0
  140. package/src/tool/quartz-battery-health/components/BatteryHealthPanel.astro +163 -0
  141. package/src/tool/quartz-battery-health/entry.ts +57 -0
  142. package/src/tool/quartz-battery-health/i18n/de.ts +327 -0
  143. package/src/tool/quartz-battery-health/i18n/en.ts +327 -0
  144. package/src/tool/quartz-battery-health/i18n/es.ts +327 -0
  145. package/src/tool/quartz-battery-health/i18n/fr.ts +327 -0
  146. package/src/tool/quartz-battery-health/i18n/id.ts +326 -0
  147. package/src/tool/quartz-battery-health/i18n/it.ts +327 -0
  148. package/src/tool/quartz-battery-health/i18n/ja.ts +327 -0
  149. package/src/tool/quartz-battery-health/i18n/ko.ts +327 -0
  150. package/src/tool/quartz-battery-health/i18n/nl.ts +327 -0
  151. package/src/tool/quartz-battery-health/i18n/pl.ts +327 -0
  152. package/src/tool/quartz-battery-health/i18n/pt.ts +327 -0
  153. package/src/tool/quartz-battery-health/i18n/ru.ts +327 -0
  154. package/src/tool/quartz-battery-health/i18n/sv.ts +326 -0
  155. package/src/tool/quartz-battery-health/i18n/tr.ts +327 -0
  156. package/src/tool/quartz-battery-health/i18n/zh.ts +327 -0
  157. package/src/tool/quartz-battery-health/index.ts +11 -0
  158. package/src/tool/quartz-battery-health/quartz-battery-health.css +447 -0
  159. package/src/tool/quartz-battery-health/seo.astro +16 -0
  160. package/src/tool/service-interval-tracker/i18n/fr.ts +1 -1
  161. package/src/tool/sidereal-time-tracker/i18n/ru.ts +2 -2
  162. package/src/tool/strap-length-calculator/i18n/fr.ts +1 -1
  163. package/src/tool/strap-length-calculator/i18n/ru.ts +4 -4
  164. package/src/tool/strap-taper-calculator/i18n/de.ts +3 -3
  165. package/src/tool/strap-taper-calculator/i18n/en.ts +1 -1
  166. package/src/tool/strap-taper-calculator/i18n/es.ts +3 -3
  167. package/src/tool/strap-taper-calculator/i18n/fr.ts +4 -4
  168. package/src/tool/strap-taper-calculator/i18n/id.ts +3 -3
  169. package/src/tool/strap-taper-calculator/i18n/it.ts +3 -3
  170. package/src/tool/strap-taper-calculator/i18n/ja.ts +2 -2
  171. package/src/tool/strap-taper-calculator/i18n/ko.ts +2 -2
  172. package/src/tool/strap-taper-calculator/i18n/nl.ts +3 -3
  173. package/src/tool/strap-taper-calculator/i18n/pl.ts +3 -3
  174. package/src/tool/strap-taper-calculator/i18n/pt.ts +3 -3
  175. package/src/tool/strap-taper-calculator/i18n/ru.ts +2 -2
  176. package/src/tool/strap-taper-calculator/i18n/sv.ts +3 -3
  177. package/src/tool/strap-taper-calculator/i18n/tr.ts +3 -3
  178. package/src/tool/strap-taper-calculator/i18n/zh.ts +3 -3
  179. package/src/tool/tachymeter-calculator/i18n/ru.ts +6 -6
  180. package/src/tool/telemeter-calculator/i18n/ru.ts +3 -3
  181. package/src/tool/telemeter-calculator/i18n/zh.ts +2 -2
  182. package/src/tool/tourbillon-visualizer/i18n/de.ts +3 -3
  183. package/src/tool/tourbillon-visualizer/i18n/en.ts +3 -3
  184. package/src/tool/tourbillon-visualizer/i18n/es.ts +3 -3
  185. package/src/tool/tourbillon-visualizer/i18n/fr.ts +3 -3
  186. package/src/tool/tourbillon-visualizer/i18n/id.ts +3 -3
  187. package/src/tool/tourbillon-visualizer/i18n/it.ts +3 -3
  188. package/src/tool/tourbillon-visualizer/i18n/ja.ts +2 -2
  189. package/src/tool/tourbillon-visualizer/i18n/ko.ts +2 -2
  190. package/src/tool/tourbillon-visualizer/i18n/nl.ts +3 -3
  191. package/src/tool/tourbillon-visualizer/i18n/pl.ts +3 -3
  192. package/src/tool/tourbillon-visualizer/i18n/pt.ts +3 -3
  193. package/src/tool/tourbillon-visualizer/i18n/ru.ts +5 -5
  194. package/src/tool/tourbillon-visualizer/i18n/sv.ts +3 -3
  195. package/src/tool/tourbillon-visualizer/i18n/tr.ts +3 -3
  196. package/src/tool/tourbillon-visualizer/i18n/zh.ts +3 -3
  197. package/src/tool/watch-accuracy-tracker/i18n/fr.ts +1 -1
  198. package/src/tool/watch-accuracy-tracker/i18n/zh.ts +1 -1
  199. package/src/tool/watch-savings-planner/i18n/de.ts +25 -25
  200. package/src/tool/watch-savings-planner/i18n/es.ts +39 -39
  201. package/src/tool/watch-savings-planner/i18n/fr.ts +51 -51
  202. package/src/tool/watch-savings-planner/i18n/id.ts +5 -5
  203. package/src/tool/watch-savings-planner/i18n/it.ts +29 -29
  204. package/src/tool/watch-savings-planner/i18n/ja.ts +73 -73
  205. package/src/tool/watch-savings-planner/i18n/ko.ts +73 -73
  206. package/src/tool/watch-savings-planner/i18n/nl.ts +10 -10
  207. package/src/tool/watch-savings-planner/i18n/pl.ts +5 -5
  208. package/src/tool/watch-savings-planner/i18n/pt.ts +43 -43
  209. package/src/tool/watch-savings-planner/i18n/ru.ts +7 -7
  210. package/src/tool/watch-savings-planner/i18n/sv.ts +54 -54
  211. package/src/tool/watch-savings-planner/i18n/tr.ts +50 -50
  212. package/src/tool/watch-savings-planner/i18n/zh.ts +73 -73
  213. package/src/tool/watch-size-comparator/i18n/de.ts +2 -2
  214. package/src/tool/watch-size-comparator/i18n/en.ts +3 -3
  215. package/src/tool/watch-size-comparator/i18n/es.ts +1 -1
  216. package/src/tool/watch-size-comparator/i18n/fr.ts +10 -10
  217. package/src/tool/watch-size-comparator/i18n/id.ts +9 -9
  218. package/src/tool/watch-size-comparator/i18n/it.ts +8 -8
  219. package/src/tool/watch-size-comparator/i18n/ja.ts +6 -6
  220. package/src/tool/watch-size-comparator/i18n/nl.ts +7 -7
  221. package/src/tool/watch-size-comparator/i18n/pl.ts +2 -2
  222. package/src/tool/watch-size-comparator/i18n/pt.ts +9 -9
  223. package/src/tool/watch-size-comparator/i18n/ru.ts +16 -16
  224. package/src/tool/watch-size-comparator/i18n/tr.ts +1 -1
  225. package/src/tool/watch-size-comparator/i18n/zh.ts +5 -5
  226. package/src/tool/water-resistance-converter/i18n/de.ts +1 -1
  227. package/src/tool/water-resistance-converter/i18n/en.ts +1 -1
  228. package/src/tool/water-resistance-converter/i18n/es.ts +1 -1
  229. package/src/tool/water-resistance-converter/i18n/fr.ts +2 -2
  230. package/src/tool/water-resistance-converter/i18n/id.ts +1 -1
  231. package/src/tool/water-resistance-converter/i18n/it.ts +1 -1
  232. package/src/tool/water-resistance-converter/i18n/ja.ts +1 -1
  233. package/src/tool/water-resistance-converter/i18n/ko.ts +1 -1
  234. package/src/tool/water-resistance-converter/i18n/nl.ts +1 -1
  235. package/src/tool/water-resistance-converter/i18n/pl.ts +1 -1
  236. package/src/tool/water-resistance-converter/i18n/pt.ts +1 -1
  237. package/src/tool/water-resistance-converter/i18n/ru.ts +1 -1
  238. package/src/tool/water-resistance-converter/i18n/sv.ts +1 -1
  239. package/src/tool/water-resistance-converter/i18n/tr.ts +1 -1
  240. package/src/tool/water-resistance-converter/i18n/zh.ts +4 -4
  241. package/src/tool/wrist-presence-calculator/i18n/en.ts +1 -1
  242. package/src/tool/wrist-presence-calculator/i18n/fr.ts +5 -5
  243. package/src/tool/wrist-presence-calculator/i18n/id.ts +1 -1
  244. package/src/tool/wrist-presence-calculator/i18n/zh.ts +1 -1
  245. package/src/tools.ts +4 -0
@@ -0,0 +1,447 @@
1
+ .tool-main-card {
2
+ background: var(--bg-surface);
3
+ border: 1px solid var(--border-color);
4
+ border-radius: 1.25rem;
5
+ max-width: 400px;
6
+ margin: 0 auto;
7
+ padding: 2rem;
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: 2rem;
11
+ box-shadow: var(--shadow-base);
12
+ position: relative;
13
+ overflow: hidden;
14
+ }
15
+
16
+ .battery-panel {
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: 1.5rem;
20
+ position: relative;
21
+ z-index: 1;
22
+ }
23
+
24
+ .panel-section {
25
+ display: flex;
26
+ flex-direction: column;
27
+ gap: 0.625rem;
28
+ }
29
+
30
+ .section-label {
31
+ font-size: 0.85rem;
32
+ font-weight: 600;
33
+ color: var(--text-dimmed);
34
+ text-transform: uppercase;
35
+ letter-spacing: 0.06em;
36
+ display: flex;
37
+ align-items: center;
38
+ gap: 0.3rem;
39
+ }
40
+
41
+ .label-optional {
42
+ font-size: 0.75rem;
43
+ color: var(--text-dimmed);
44
+ opacity: 0.65;
45
+ font-weight: 500;
46
+ text-transform: none;
47
+ letter-spacing: 0;
48
+ margin-left: 0.25rem;
49
+ }
50
+
51
+ .battery-select {
52
+ width: 100%;
53
+ padding: 0.75rem 0.875rem;
54
+ background: var(--bg-page);
55
+ border: 1px solid var(--border-base);
56
+ border-radius: 0.75rem;
57
+ color: var(--text-base);
58
+ font-size: 1rem;
59
+ cursor: pointer;
60
+ transition: border-color 0.2s;
61
+ appearance: none;
62
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E");
63
+ background-repeat: no-repeat;
64
+ background-position: right 0.75rem center;
65
+ padding-right: 2rem;
66
+ }
67
+
68
+ .battery-select:focus {
69
+ outline: none;
70
+ border-color: var(--accent);
71
+ }
72
+
73
+ .input-row {
74
+ display: flex;
75
+ gap: 0.75rem;
76
+ align-items: flex-end;
77
+ }
78
+
79
+ .input-group {
80
+ flex: 1;
81
+ display: flex;
82
+ flex-direction: column;
83
+ gap: 0.4rem;
84
+ }
85
+
86
+ .input-label {
87
+ font-size: 0.85rem;
88
+ color: var(--text-dimmed);
89
+ font-weight: 600;
90
+ }
91
+
92
+ .stepper-wrap {
93
+ display: flex;
94
+ align-items: center;
95
+ background: var(--bg-page);
96
+ border: 1px solid var(--border-base);
97
+ border-radius: 0.75rem;
98
+ overflow: hidden;
99
+ transition: border-color 0.2s;
100
+ }
101
+
102
+ .stepper-wrap:focus-within {
103
+ border-color: var(--accent);
104
+ }
105
+
106
+ .stepper-input {
107
+ width: 100%;
108
+ padding: 0.65rem 0.35rem;
109
+ border: none;
110
+ background: transparent;
111
+ color: var(--text-base);
112
+ font-size: 1rem;
113
+ text-align: center;
114
+ font-variant-numeric: tabular-nums;
115
+ box-sizing: border-box;
116
+ -moz-appearance: textfield;
117
+ }
118
+
119
+ .stepper-input::-webkit-inner-spin-button,
120
+ .stepper-input::-webkit-outer-spin-button {
121
+ -webkit-appearance: none;
122
+ margin: 0;
123
+ }
124
+
125
+ .stepper-input:focus {
126
+ outline: none;
127
+ }
128
+
129
+ .stepper-btn {
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: center;
133
+ min-width: 2.4rem;
134
+ padding: 0.55rem 0.45rem;
135
+ border: none;
136
+ background: transparent;
137
+ color: var(--text-dimmed);
138
+ font-size: 0.9rem;
139
+ font-weight: 700;
140
+ cursor: pointer;
141
+ transition: all 0.15s ease;
142
+ user-select: none;
143
+ }
144
+
145
+ .stepper-btn:hover {
146
+ background: var(--bg-page);
147
+ color: var(--accent);
148
+ }
149
+
150
+ .stepper-btn:active {
151
+ background: var(--border-base);
152
+ transform: scale(0.95);
153
+ }
154
+
155
+ .date-input {
156
+ width: 100%;
157
+ padding: 0.75rem 0.875rem;
158
+ background: var(--bg-page);
159
+ border: 1px solid var(--border-base);
160
+ border-radius: 0.75rem;
161
+ color: var(--text-base);
162
+ font-size: 1rem;
163
+ transition: border-color 0.2s;
164
+ }
165
+
166
+ .date-input:focus {
167
+ outline: none;
168
+ border-color: var(--accent);
169
+ }
170
+
171
+ .date-hint {
172
+ font-size: 0.8rem;
173
+ color: var(--text-dimmed);
174
+ opacity: 0.7;
175
+ }
176
+
177
+ .calc-btn {
178
+ display: flex;
179
+ align-items: center;
180
+ justify-content: center;
181
+ gap: 0.5rem;
182
+ width: 100%;
183
+ padding: 0.8rem;
184
+ border: none;
185
+ border-radius: 2rem;
186
+ background: var(--accent);
187
+ color: var(--text-on-primary, #fff);
188
+ font-size: 1rem;
189
+ font-weight: 600;
190
+ cursor: pointer;
191
+ transition: all 0.2s ease;
192
+ box-shadow: 0 2px 12px rgba(99, 102, 241, 0.25);
193
+ }
194
+
195
+ .calc-btn:hover {
196
+ opacity: 0.9;
197
+ transform: translateY(-1px);
198
+ box-shadow: 0 4px 16px rgba(99, 102, 241, 0.35);
199
+ }
200
+
201
+ .calc-btn:active {
202
+ transform: scale(0.97);
203
+ }
204
+
205
+ .result-card {
206
+ background: var(--bg-page);
207
+ border: 1px solid var(--border-base);
208
+ border-radius: 1rem;
209
+ padding: 1.5rem;
210
+ display: flex;
211
+ flex-direction: column;
212
+ gap: 1rem;
213
+ animation: fade-slide-in 0.3s ease;
214
+ }
215
+
216
+ .result-header {
217
+ display: flex;
218
+ align-items: center;
219
+ gap: 0.5rem;
220
+ color: var(--accent);
221
+ font-size: 0.9rem;
222
+ font-weight: 700;
223
+ }
224
+
225
+ .life-stats {
226
+ display: flex;
227
+ gap: 0.5rem;
228
+ }
229
+
230
+ .life-stat {
231
+ flex: 1;
232
+ display: flex;
233
+ flex-direction: column;
234
+ align-items: center;
235
+ gap: 0.25rem;
236
+ }
237
+
238
+ .stat-value {
239
+ font-size: 1.5rem;
240
+ font-weight: 800;
241
+ color: var(--text-base);
242
+ letter-spacing: -0.02em;
243
+ }
244
+
245
+ .stat-label {
246
+ font-size: 0.75rem;
247
+ font-weight: 600;
248
+ color: var(--text-dimmed);
249
+ text-transform: uppercase;
250
+ letter-spacing: 0.05em;
251
+ text-align: center;
252
+ }
253
+
254
+ .gauge-wrap {
255
+ display: flex;
256
+ flex-direction: column;
257
+ gap: 0.25rem;
258
+ }
259
+
260
+ .gauge-track {
261
+ width: 100%;
262
+ height: 14px;
263
+ background: var(--border-base);
264
+ border-radius: 7px;
265
+ overflow: hidden;
266
+ }
267
+
268
+ .gauge-fill {
269
+ height: 100%;
270
+ border-radius: 6px;
271
+ transition: width 0.6s ease, background 0.6s ease;
272
+ }
273
+
274
+ .gauge-marks {
275
+ display: flex;
276
+ justify-content: space-between;
277
+ padding: 0 0.1rem;
278
+ }
279
+
280
+ .gauge-mark {
281
+ font-size: 0.7rem;
282
+ font-weight: 700;
283
+ color: var(--text-base);
284
+ opacity: 0.4;
285
+ }
286
+
287
+ .gauge-mark.gauge-danger {
288
+ color: var(--color-danger, #ef4444);
289
+ opacity: 0.9;
290
+ font-weight: 800;
291
+ }
292
+
293
+ .gauge-mark.gauge-warning {
294
+ color: var(--color-warning, #f59e0b);
295
+ opacity: 0.85;
296
+ font-weight: 800;
297
+ }
298
+
299
+ .gauge-mark.gauge-ok {
300
+ color: var(--color-success, #22c55e);
301
+ opacity: 0.85;
302
+ font-weight: 800;
303
+ }
304
+
305
+ .health-row {
306
+ display: flex;
307
+ align-items: center;
308
+ justify-content: space-between;
309
+ gap: 0.5rem;
310
+ padding: 0.65rem 0.875rem;
311
+ background: var(--bg-surface);
312
+ border-radius: 0.75rem;
313
+ }
314
+
315
+ .health-label {
316
+ font-size: 0.9rem;
317
+ font-weight: 600;
318
+ color: var(--text-dimmed);
319
+ }
320
+
321
+ .health-badge {
322
+ font-size: 0.85rem;
323
+ font-weight: 700;
324
+ color: var(--text-on-primary, #fff);
325
+ padding: 0.3rem 0.75rem;
326
+ border-radius: 1rem;
327
+ background: var(--color-success, #22c55e);
328
+ }
329
+
330
+ .change-date-row {
331
+ display: flex;
332
+ align-items: center;
333
+ justify-content: space-between;
334
+ gap: 0.5rem;
335
+ padding: 0.65rem 0.875rem;
336
+ background: var(--bg-surface);
337
+ border-radius: 0.75rem;
338
+ }
339
+
340
+ .change-date-label {
341
+ font-size: 0.9rem;
342
+ font-weight: 600;
343
+ color: var(--text-dimmed);
344
+ }
345
+
346
+ .change-date-value {
347
+ font-size: 1rem;
348
+ font-weight: 700;
349
+ color: var(--text-base);
350
+ }
351
+
352
+ .change-date-hint {
353
+ font-size: 0.85rem;
354
+ color: var(--text-dimmed);
355
+ opacity: 0.7;
356
+ text-align: center;
357
+ }
358
+
359
+ .steps-section {
360
+ display: flex;
361
+ flex-direction: column;
362
+ gap: 0.75rem;
363
+ padding: 1.125rem 1.25rem;
364
+ background: var(--bg-page);
365
+ border-radius: 0.875rem;
366
+ border: 1px solid var(--border-base);
367
+ }
368
+
369
+ .step-row {
370
+ display: flex;
371
+ align-items: center;
372
+ gap: 0.875rem;
373
+ }
374
+
375
+ .step-marker {
376
+ width: 1.5rem;
377
+ height: 1.5rem;
378
+ border-radius: 50%;
379
+ background: var(--accent);
380
+ color: var(--text-on-primary, #fff);
381
+ font-size: 0.75rem;
382
+ font-weight: 700;
383
+ display: flex;
384
+ align-items: center;
385
+ justify-content: center;
386
+ flex-shrink: 0;
387
+ }
388
+
389
+ .step-text {
390
+ font-size: 0.9rem;
391
+ color: var(--text-base);
392
+ line-height: 1.45;
393
+ opacity: 0.85;
394
+ }
395
+
396
+ .tip-row {
397
+ display: flex;
398
+ gap: 0.625rem;
399
+ padding: 0.875rem 1.125rem;
400
+ background: var(--bg-page);
401
+ border-radius: 0.75rem;
402
+ border: 1px solid var(--border-base);
403
+ }
404
+
405
+ .tip-icon {
406
+ flex-shrink: 0;
407
+ margin-top: 0.1rem;
408
+ color: var(--accent);
409
+ }
410
+
411
+ .tip-text {
412
+ font-size: 0.9rem;
413
+ color: var(--text-base);
414
+ line-height: 1.5;
415
+ opacity: 0.85;
416
+ }
417
+
418
+ @keyframes fade-slide-in {
419
+ from {
420
+ opacity: 0;
421
+ transform: translateY(-6px);
422
+ }
423
+ to {
424
+ opacity: 1;
425
+ transform: translateY(0);
426
+ }
427
+ }
428
+
429
+ @media (max-width: 520px) {
430
+ .tool-main-card {
431
+ padding: 1.25rem;
432
+ gap: 1.5rem;
433
+ }
434
+
435
+ .input-row {
436
+ flex-direction: column;
437
+ gap: 0.5rem;
438
+ }
439
+
440
+ .life-stats {
441
+ flex-wrap: wrap;
442
+ }
443
+
444
+ .life-stat {
445
+ min-width: 30%;
446
+ }
447
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { quartzBatteryHealth } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'en' } = Astro.props;
11
+ const loader = quartzBatteryHealth.i18n[locale] || quartzBatteryHealth.i18n.en;
12
+ const content = await loader?.();
13
+ if (!content) return null;
14
+ ---
15
+
16
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -37,7 +37,7 @@ export const content: ToolLocaleContent<ServiceIntervalTrackerUI> = {
37
37
  collectionHealth: 'Santé de la collection',
38
38
  },
39
39
  seo: [
40
- { type: 'title', text: 'Suivi des Intervalles d\'Entretien : Prenez soin de vos montres', level: 2 },
40
+ { type: 'title', text: 'Suivi des Intervalles d\'Entretien: Prenez soin de vos montres', level: 2 },
41
41
  { type: 'paragraph', html: 'Une montre mécanique est un instrument de précision comportant des centaines de pièces mobiles. Les lubrifiants sèchent, les joints s\'usent et la précision dérive avec le temps.' },
42
42
  { type: 'title', text: 'Pourquoi planifier les révisions de vos montres', level: 3 },
43
43
  {
@@ -66,9 +66,9 @@ export const content: ToolLocaleContent<SiderealTimeTrackerUI> = {
66
66
  },
67
67
  seo: [
68
68
  { type: 'title', text: 'Что такое звездное время?', level: 2 },
69
- { type: 'paragraph', html: 'Звездное время это система измерения времени, которую астрономы используют для определения местоположения небесных объектов. Звездные сутки составляют примерно 23 часа, 56 минут и 4,09 секунды. Это время, за которое Земля совершает один полный оборот вокруг своей оси относительно точки весеннего равноденствия или далеких звезд, а не Солнца.' },
69
+ { type: 'paragraph', html: 'Звездное время - это система измерения времени, которую астрономы используют для определения местоположения небесных объектов. Звездные сутки составляют примерно 23 часа, 56 минут и 4,09 секунды. Это время, за которое Земля совершает один полный оборот вокруг своей оси относительно точки весеннего равноденствия или далеких звезд, а не Солнца.' },
70
70
  { type: 'title', text: 'Солнечные сутки против звездных суток', level: 3 },
71
- { type: 'paragraph', html: 'Солнечные сутки измеряют время между последовательными прохождениями Солнца через местный меридиан. Поскольку Земля проходит примерно 1/365 своей орбиты вокруг Солнца каждый день, ей приходится поворачиваться чуть более чем на 360 градусов, чтобы снова выровняться с Солнцем. Звездные сутки это истинный поворот на 360 градусов относительно звезд, что делает их на 3 минуты и 56 секунд короче.' },
71
+ { type: 'paragraph', html: 'Солнечные сутки измеряют время между последовательными прохождениями Солнца через местный меридиан. Поскольку Земля проходит примерно 1/365 своей орбиты вокруг Солнца каждый день, ей приходится поворачиваться чуть более чем на 360 градусов, чтобы снова выровняться с Солнцем. Звездные сутки - это истинный поворот на 360 градусов относительно звезд, что делает их на 3 минуты и 56 секунд короче.' },
72
72
  { type: 'title', text: 'Почему это важно для астрономов и часовщиков', level: 3 },
73
73
  { type: 'paragraph', html: 'Для астрономов звезда всегда находится в одном и том же положении на небе в одно и то же звездное время. Для отслеживания звезд монтировки телескопов должны вращаться ровно один раз за звездные сутки. Часовые бренды высокого класса (такие как Patek Philippe, Vacheron Constantin и IWC) создают сверхсложные астрономические часы со звездными зубчатыми передачами для отслеживания LST прямо на запястье.' },
74
74
  { type: 'title', text: 'Таблица звездного и солнечного дрейфа', level: 3 },
@@ -53,7 +53,7 @@ export const content: ToolLocaleContent<StrapLengthCalculatorUI> = {
53
53
  },
54
54
  {
55
55
  type: 'title',
56
- text: 'Comprendre les bracelets deux pièces : côté long vs. côté court',
56
+ text: 'Comprendre les bracelets deux pièces: côté long vs. côté court',
57
57
  level: 3,
58
58
  },
59
59
  {
@@ -37,7 +37,7 @@ export const content: ToolLocaleContent<StrapLengthCalculatorUI> = {
37
37
  { type: "paragraph", html: "Выбор идеального ремешка для часов важен как для комфорта, так и для эстетического баланса. Слишком длинный ремешок оставляет некрасивый свисающий конец, а слишком короткий может не застегнуться надёжно. Это руководство поможет определить стандартные размеры, индивидуальные измерения и длины ремешков NATO в зависимости от запястья, дизайна часов и желаемой посадки." },
38
38
  { type: "stats", items: [{ value: "120/80мм", label: "Стандартный размер" }, { value: "160-190мм", label: "Подходит для большинства запястий" }, { value: "7 отверстий", label: "Типичные варианты регулировки" }], columns: 3 },
39
39
  { type: "title", text: "Понимание двухчастных ремешков: длинная и короткая сторона", level: 3 },
40
- { type: "paragraph", html: "Двухчастный ремешок определяется двумя числами, например <strong>120/80 мм</strong>. Первое число (например, 120 мм) это <strong>длинная сторона</strong> (сторона с отверстиями), которая крепится к позиции 6 часов. Второе число (например, 80 мм) это <strong>короткая сторона</strong> (сторона пряжки), которая крепится к позиции 12 часов. Сама пряжка не входит в эти измерения." },
40
+ { type: "paragraph", html: "Двухчастный ремешок определяется двумя числами, например <strong>120/80 мм</strong>. Первое число (например, 120 мм) - это <strong>длинная сторона</strong> (сторона с отверстиями), которая крепится к позиции 6 часов. Второе число (например, 80 мм) - это <strong>короткая сторона</strong> (сторона пряжки), которая крепится к позиции 12 часов. Сама пряжка не входит в эти измерения." },
41
41
  { type: "title", text: "Таблица стандартных размеров по обхвату запястья", level: 3 },
42
42
  { type: "table", headers: ["Размер запястья", "Кожа/резина", "Ремешок NATO", "Рекомендуемая посадка"], rows: [["150-164 мм (5.9\"-6.5\")", "110/70 мм", "260 мм", "Тугая/маленькая"], ["165-178 мм (6.5\"-7.0\")", "120/80 мм", "270 мм", "Стандартная средняя"], ["179-190 мм (7.0\"-7.5\")", "130/80 мм", "280 мм", "Стандартная большая"], ["191-203 мм (7.5\"-8.0\")", "135/85 мм", "290 мм", "Очень большая"], ["204 мм+ (8.0\"+)", "140/85 мм", "300 мм", "Двойная очень большая"]] },
43
43
  { type: "title", text: "Индивидуальные размеры: объяснение", level: 3 },
@@ -47,12 +47,12 @@ export const content: ToolLocaleContent<StrapLengthCalculatorUI> = {
47
47
  { type: "glossary", items: [{ term: "Расстояние между ушками (Lug-to-Lug)", definition: "Общее вертикальное расстояние от кончика верхнего ушка до кончика нижнего ушка. Это не диаметр корпуса, а общая длина жёсткой головы часов, лежащей на запястье." }, { term: "Короткая сторона (Пряжка)", definition: "Часть ремешка, крепящаяся к позиции 12 часов корпуса. Включает пряжку, но исключается из измерений длины." }, { term: "Длинная сторона (Конец)", definition: "Часть ремешка, крепящаяся к позиции 6 часов. Имеет отверстия для регулировки натяжения." }, { term: "Ремешок NATO", definition: "Цельный нейлоновый ремешок, который проходит под корпусом часов через пружинные штифты. Он очень регулируемый и прочный." }] },
48
48
  { type: "tip", title: "Правильное измерение запястья", html: "Для точного измерения оберните гибкую сантиметровую ленту (не слишком туго) вокруг того места, где вы обычно носите часы. Если ленты нет, используйте нитку или полоску бумаги, отметьте перекрытие и измерьте длину линейкой." },
49
49
  { type: "title", text: "Почему расстояние между ушками критически важно для размера ремешка", level: 3 },
50
- { type: "paragraph", html: "Многие коллекционеры забывают, что корпус часов действует как жёсткое продолжение ремешка. Часы с большим расстоянием между ушками 50 мм занимают больше места на запястье, чем часы 40 мм. Следовательно, более крупные часы требуют более коротких ремешков для достижения того же общего размера петли. Неучёт расстояния между ушками главная причина плохо сидящих ремешков." },
50
+ { type: "paragraph", html: "Многие коллекционеры забывают, что корпус часов действует как жёсткое продолжение ремешка. Часы с большим расстоянием между ушками 50 мм занимают больше места на запястье, чем часы 40 мм. Следовательно, более крупные часы требуют более коротких ремешков для достижения того же общего размера петли. Неучёт расстояния между ушками - главная причина плохо сидящих ремешков." },
51
51
  { type: "diagnostic", variant: "warning", title: "Избегайте смещения пряжки и свешивания корпуса", html: "Если короткая сторона ремешка слишком длинна или коротка для вашего запястья, пряжка соскользнёт в сторону. Это смещает корпус часов с центра, вызывая дискомфорт и увеличивая риск царапин на корпусе или застёжке. Всегда стремитесь к тому, чтобы пряжка была центрирована на плоской нижней стороне запястья." },
52
52
  { type: "proscons", title: "Ремешок NATO vs. двухчастный ремешок", items: [{ pro: "Ремешки NATO очень регулируемы и предотвращают потерю часов при поломке пружинного штифта.", con: "Ремешки NATO увеличивают толщину под корпусом часов." }, { pro: "Двухчастные ремешки позволяют корпусу плотно прилегать к коже для более тонкого профиля.", con: "Двухчастные ремешки требуют точного подбора размера и предлагают меньше регулировок." }] },
53
53
  ],
54
54
  faq: [
55
- { question: "Как измерить длину ремешка для часов?", answer: "Длина ремешка обычно выражается двумя числами, например 120/80 мм. Первое число это длина длинной стороны (конца), а второе короткой стороны (пряжки)." },
55
+ { question: "Как измерить длину ремешка для часов?", answer: "Длина ремешка обычно выражается двумя числами, например 120/80 мм. Первое число - это длина длинной стороны (конца), а второе - короткой стороны (пряжки)." },
56
56
  { question: "Где должна располагаться пряжка на запястье?", answer: "В идеале пряжка должна быть центрирована на нижней стороне запястья. Если она смещена, корпус часов сместится с центра. Регулировка соотношения длинной и короткой стороны помогает добиться идеального центрирования." },
57
57
  { question: "Как расстояние между ушками влияет на необходимую длину ремешка?", answer: "Корпус часов является жёсткой частью общей петли ремешка. Более крупные часы с большим расстоянием между ушками (например, 50 мм) уменьшают необходимую длину ремешка по сравнению с меньшими часами (например, 40 мм) на том же запястье." },
58
58
  { question: "С какой стороны находится длинный конец ремешка?", answer: "Традиционно длинная сторона ремешка (с регулировочными отверстиями) крепится к позиции 6 часов корпуса, указывая на вас. Короткая сторона (с пряжкой) крепится к позиции 12 часов." },
@@ -68,7 +68,7 @@ export const content: ToolLocaleContent<StrapLengthCalculatorUI> = {
68
68
  ],
69
69
  schemas: [
70
70
  { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [
71
- { "@type": "Question", "name": "Как измерить длину ремешка для часов?", "acceptedAnswer": { "@type": "Answer", "text": "Длина ремешка обычно выражается двумя числами, например 120/80 мм. Первое число это длина длинной стороны (конца), а второе короткой стороны (пряжки)." } },
71
+ { "@type": "Question", "name": "Как измерить длину ремешка для часов?", "acceptedAnswer": { "@type": "Answer", "text": "Длина ремешка обычно выражается двумя числами, например 120/80 мм. Первое число - это длина длинной стороны (конца), а второе - короткой стороны (пряжки)." } },
72
72
  { "@type": "Question", "name": "Где должна располагаться пряжка на запястье?", "acceptedAnswer": { "@type": "Answer", "text": "В идеале пряжка должна быть центрирована на нижней стороне запястья. Если она смещена, корпус часов сместится с центра. Регулировка соотношения длинной и короткой стороны помогает добиться идеального центрирования." } },
73
73
  { "@type": "Question", "name": "Как расстояние между ушками влияет на необходимую длину ремешка?", "acceptedAnswer": { "@type": "Answer", "text": "Корпус часов является жёсткой частью общей петли ремешка. Более крупные часы с большим расстоянием между ушками (например, 50 мм) уменьшают необходимую длину ремешка по сравнению с меньшими часами (например, 40 мм) на том же запястье." } },
74
74
  { "@type": "Question", "name": "С какой стороны находится длинный конец ремешка?", "acceptedAnswer": { "@type": "Answer", "text": "Традиционно длинная сторона ремешка (с регулировочными отверстиями) крепится к позиции 6 часов корпуса, указывая на вас. Короткая сторона (с пряжкой) крепится к позиции 12 часов." } },
@@ -29,7 +29,7 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
29
29
  proportionFair: 'Akzeptabel',
30
30
  proportionUnbalanced: 'Unausgewogen',
31
31
  mmUnit: 'mm',
32
- arrow: '\u2192',
32
+ arrow: '',
33
33
  noteTitle: 'Hinweis',
34
34
  noteContent: 'Eine klassische Verjüngung von 4 mm (z. B. von 20 auf 16 mm) passt zu eleganteren Uhren. Taucher- und Werkzeughuhren wirken oft besser mit einer geraden oder 2 mm Verjüngung für einen robusten Look.',
35
35
  step1: 'Gib Gehäusedurchmesser und Stegbreite ein.',
@@ -37,10 +37,10 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
37
37
  step3: 'Lies die Proportionen und die visuelle Darstellung ab.',
38
38
  },
39
39
  seo: [
40
- { type: 'title', text: 'Armbandverjüngung Rechner \u2014 Proportionen, Schließenbreite und Leitfaden', level: 2 },
40
+ { type: 'title', text: 'Armbandverjüngung Rechner - Proportionen, Schließenbreite und Leitfaden', level: 2 },
41
41
  { type: 'paragraph', html: 'Ein gut proportioniertes Armband macht oder zerbricht den Eindruck einer Uhr. Zu viel Verjüngung bei einem Tauchermodell wirkt fragil. Keine Verjüngung bei einer eleganten Uhr wirkt klobig. Dieser Rechner hilft dir, das ideale <strong>Verjüngungsverhältnis</strong> anhand von Gehäusedurchmesser und Stegbreite zu finden.' },
42
42
  { type: 'title', text: 'Was ist Armbandverjüngung?', level: 3 },
43
- { type: 'paragraph', html: 'Armbandverjüngung bezeichnet die Verringerung der Breite vom Steg zum Schließenende eines Uhrarmbands. Eine klassische elegante Uhr könnte von 20 mm an den Stegen auf 16 mm an der Schließe verjüngen \u2014 eine Verjüngung um 4 mm. Eine Taucheruhr könnte durchgehend bei 20 mm bleiben, um einen robusteren Werkzeughuhrencharakter zu erzielen.' },
43
+ { type: 'paragraph', html: 'Armbandverjüngung bezeichnet die Verringerung der Breite vom Steg zum Schließenende eines Uhrarmbands. Eine klassische elegante Uhr könnte von 20 mm an den Stegen auf 16 mm an der Schließe verjüngen - eine Verjüngung um 4 mm. Eine Taucheruhr könnte durchgehend bei 20 mm bleiben, um einen robusteren Werkzeughuhrencharakter zu erzielen.' },
44
44
  { type: 'title', text: 'Der goldene Schnitt für Armbandproportionen', level: 3 },
45
45
  { type: 'paragraph', html: 'Uhrenliebhaber sind sich weitgehend einig, dass eine Stegbreite zwischen 45 % und 55 % des Gehäusedurchmessers am besten aussieht. Bei der Verjüngung sorgt eine Schließenbreite von 75 % bis 85 % der Stegbreite für eine ausgewogene, elegante Silhouette. Verhältnisse außerhalb dieses Bereichs können die Uhr kopflastig oder zu filigran wirken lassen.' },
46
46
  { type: 'title', text: 'Verjüngung nach Uhrenstil', level: 3 },
@@ -29,7 +29,7 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
29
29
  proportionFair: 'Fair',
30
30
  proportionUnbalanced: 'Unbalanced',
31
31
  mmUnit: 'mm',
32
- arrow: '\u2192',
32
+ arrow: '',
33
33
  noteTitle: 'Note',
34
34
  noteContent: 'A classic taper of 4 mm (e.g., 20 to 16 mm) suits dress watches. Divers and tool watches often look better with a straight or 2 mm taper for a robust feel.',
35
35
  step1: 'Enter your case diameter and lug width.',
@@ -29,7 +29,7 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
29
29
  proportionFair: 'Aceptable',
30
30
  proportionUnbalanced: 'Desequilibrada',
31
31
  mmUnit: 'mm',
32
- arrow: '\u2192',
32
+ arrow: '',
33
33
  noteTitle: 'Nota',
34
34
  noteContent: 'Un estrechamiento clásico de 4 mm (p. ej., de 20 a 16 mm) es ideal para relojes formales. Los relojes de buceo y herramientas suelen lucir mejor con un estrechamiento recto o de 2 mm para un aspecto robusto.',
35
35
  step1: 'Ingresa el diámetro de la caja y el ancho entre asas.',
@@ -37,10 +37,10 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
37
37
  step3: 'Lee las proporciones y la representación visual.',
38
38
  },
39
39
  seo: [
40
- { type: 'title', text: 'Calculadora de estrechamiento de correa \u2014 Proporciones, ancho de hebilla y guía visual', level: 2 },
40
+ { type: 'title', text: 'Calculadora de estrechamiento de correa - Proporciones, ancho de hebilla y guía visual', level: 2 },
41
41
  { type: 'paragraph', html: 'Una correa bien proporcionada realza o arruina un reloj. Demasiado estrechamiento en un buceador lo hace ver frágil. Sin estrechamiento en un reloj formal se ve tosco. Esta calculadora te ayuda a encontrar la <strong>proporción de estrechamiento</strong> ideal según el diámetro de tu caja y el ancho entre asas.' },
42
42
  { type: 'title', text: '¿Qué es el estrechamiento de correa?', level: 3 },
43
- { type: 'paragraph', html: 'El estrechamiento de correa es la reducción de ancho desde las asas hasta la hebilla. Un reloj formal clásico puede estrechar de 20 mm en las asas a 16 mm en la hebilla \u2014 un estrechamiento de 4 mm. Un reloj de buceo puede mantenerse en 20 mm recto para una apariencia más robusta.' },
43
+ { type: 'paragraph', html: 'El estrechamiento de correa es la reducción de ancho desde las asas hasta la hebilla. Un reloj formal clásico puede estrechar de 20 mm en las asas a 16 mm en la hebilla - un estrechamiento de 4 mm. Un reloj de buceo puede mantenerse en 20 mm recto para una apariencia más robusta.' },
44
44
  { type: 'title', text: 'La proporción áurea para las proporciones de la correa', level: 3 },
45
45
  { type: 'paragraph', html: 'Los entusiastas del reloj coinciden en que un ancho entre asas de entre el 45 % y el 55 % del diámetro de la caja es el más favorecedor. En cuanto al estrechamiento, un ancho de hebilla del 75 % al 85 % del ancho entre asas crea una silueta equilibrada y elegante. Proporciones fuera de este rango pueden hacer que el reloj se vea descompensado o demasiado frágil.' },
46
46
  { type: 'title', text: 'Estrechamiento según el estilo del reloj', level: 3 },
@@ -29,7 +29,7 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
29
29
  proportionFair: 'Correct',
30
30
  proportionUnbalanced: 'Déséquilibré',
31
31
  mmUnit: 'mm',
32
- arrow: '\u2192',
32
+ arrow: '',
33
33
  noteTitle: 'Remarque',
34
34
  noteContent: 'Une conicité classique de 4 mm (p. ex., de 20 à 16 mm) convient aux montres habillées. Les montres de plongée et les montres-outils sont souvent plus belles avec une conicité droite ou de 2 mm pour un aspect robuste.',
35
35
  step1: 'Entrez le diamètre du boîtier et l\'entrecorne.',
@@ -37,14 +37,14 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
37
37
  step3: 'Consultez les proportions et la représentation visuelle.',
38
38
  },
39
39
  seo: [
40
- { type: 'title', text: 'Calculateur de conicité de bracelet \u2014 Proportions, largeur de boucle et guide visuel', level: 2 },
40
+ { type: 'title', text: 'Calculateur de conicité de bracelet - Proportions, largeur de boucle et guide visuel', level: 2 },
41
41
  { type: 'paragraph', html: 'Un bracelet bien proportionné peut faire ou défaire une montre. Trop de conicité sur une plongeuse la rend fragile. Pas de conicité sur une montre habillée la rend grossière. Ce calculateur vous aide à trouver le <strong>ratio de conicité</strong> idéal selon le diamètre de votre boîtier et votre entrecorne.' },
42
42
  { type: 'title', text: 'Qu\'est-ce que la conicité d\'un bracelet?', level: 3 },
43
- { type: 'paragraph', html: 'La conicité d\'un bracelet est la réduction de largeur entre l\'entrecorne et la boucle. Une montre habillée classique peut passer de 20 mm aux cornes à 16 mm à la boucle \u2014 une conicité de 4 mm. Une montre de plongée peut rester à 20 mm droit pour un aspect plus utilitaire.' },
43
+ { type: 'paragraph', html: 'La conicité d\'un bracelet est la réduction de largeur entre l\'entrecorne et la boucle. Une montre habillée classique peut passer de 20 mm aux cornes à 16 mm à la boucle - une conicité de 4 mm. Une montre de plongée peut rester à 20 mm droit pour un aspect plus utilitaire.' },
44
44
  { type: 'title', text: 'Le ratio idéal pour les proportions du bracelet', level: 3 },
45
45
  { type: 'paragraph', html: 'Les passionnés de montres s\'accordent généralement à dire qu\'un entrecorne entre 45 % et 55 % du diamètre du boîtier est le plus flatteur. Pour la conicité, une largeur de boucle entre 75 % et 85 % de l\'entrecorne crée une silhouette équilibrée et élégante. Les ratios en dehors de cette plage peuvent donner l\'impression que la montre est trop lourde ou trop fragile.' },
46
46
  { type: 'title', text: 'Conicité selon le style de montre', level: 3 },
47
- { type: 'paragraph', html: 'Montres habillées : conicité de 4 mm (20 à 16 mm). Montres sportives : conicité de 2 à 3 mm. Montres de plongée : conicité de 0 à 2 mm. Montres militaires ou de terrain : conicité droite pour un look robuste. Montres de pilote : conicité minimale pour correspondre à l\'esthétique d\'instrument.' },
47
+ { type: 'paragraph', html: 'Montres habillées: conicité de 4 mm (20 à 16 mm). Montres sportives: conicité de 2 à 3 mm. Montres de plongée: conicité de 0 à 2 mm. Montres militaires ou de terrain: conicité droite pour un look robuste. Montres de pilote: conicité minimale pour correspondre à l\'esthétique d\'instrument.' },
48
48
  ],
49
49
  faq: [
50
50
  {
@@ -29,7 +29,7 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
29
29
  proportionFair: 'Cukup',
30
30
  proportionUnbalanced: 'Tidak Seimbang',
31
31
  mmUnit: 'mm',
32
- arrow: '\u2192',
32
+ arrow: '',
33
33
  noteTitle: 'Catatan',
34
34
  noteContent: 'Taper klasik 4 mm (mis., dari 20 ke 16 mm) cocok untuk jam tangan dress. Jam tangan selam dan tool sering terlihat lebih baik dengan taper lurus atau 2 mm untuk kesan kokoh.',
35
35
  step1: 'Masukkan diameter case dan lebar lug.',
@@ -37,10 +37,10 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
37
37
  step3: 'Baca proporsi dan representasi visualnya.',
38
38
  },
39
39
  seo: [
40
- { type: 'title', text: 'Kalkulator Taper Strap \u2014 Proporsi, Lebar Buckle, dan Panduan Visual', level: 2 },
40
+ { type: 'title', text: 'Kalkulator Taper Strap - Proporsi, Lebar Buckle, dan Panduan Visual', level: 2 },
41
41
  { type: 'paragraph', html: 'Strap yang proporsional bisa membuat atau merusak tampilan jam tangan. Terlalu banyak taper pada jam selam membuatnya terlihat rapuh. Tanpa taper pada jam dress membuatnya terlihat kaku. Kalkulator ini membantu Anda menemukan <strong>rasio taper strap</strong> ideal berdasarkan diameter case dan lebar lug.' },
42
42
  { type: 'title', text: 'Apa Itu Taper Strap?', level: 3 },
43
- { type: 'paragraph', html: 'Taper strap adalah pengurangan lebar dari ujung lug ke ujung buckle. Jam dress klasik mungkin mengecil dari 20 mm di lug ke 16 mm di buckle \u2014 taper 4 mm. Jam selam mungkin tetap di 20 mm lurus untuk tampilan yang lebih kokoh.' },
43
+ { type: 'paragraph', html: 'Taper strap adalah pengurangan lebar dari ujung lug ke ujung buckle. Jam dress klasik mungkin mengecil dari 20 mm di lug ke 16 mm di buckle - taper 4 mm. Jam selam mungkin tetap di 20 mm lurus untuk tampilan yang lebih kokoh.' },
44
44
  { type: 'title', text: 'Rasio Emas untuk Proporsi Strap', level: 3 },
45
45
  { type: 'paragraph', html: 'Penggemar jam tangan umumnya setuju bahwa lebar lug antara 45% dan 55% dari diameter case adalah yang terbaik. Untuk taper, lebar buckle yang 75% hingga 85% dari lebar lug menciptakan siluet yang seimbang dan elegan. Rasio di luar kisaran ini dapat membuat jam terlihat berat di atas atau terlalu rapuh.' },
46
46
  { type: 'title', text: 'Taper Berdasarkan Gaya Jam', level: 3 },