@jjlmoya/utils-chrono 1.5.0 → 1.7.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 (64) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +4 -0
  3. package/src/entries.ts +7 -1
  4. package/src/index.ts +2 -0
  5. package/src/tests/locale_completeness.test.ts +1 -1
  6. package/src/tests/tool_validation.test.ts +1 -1
  7. package/src/tool/service-interval-tracker/bibliography.astro +16 -0
  8. package/src/tool/service-interval-tracker/bibliography.ts +12 -0
  9. package/src/tool/service-interval-tracker/client.ts +233 -0
  10. package/src/tool/service-interval-tracker/component.astro +50 -0
  11. package/src/tool/service-interval-tracker/components/AddEditModal.astro +75 -0
  12. package/src/tool/service-interval-tracker/components/DashboardHeader.astro +14 -0
  13. package/src/tool/service-interval-tracker/components/EmptyState.astro +26 -0
  14. package/src/tool/service-interval-tracker/entry.ts +56 -0
  15. package/src/tool/service-interval-tracker/helpers.ts +82 -0
  16. package/src/tool/service-interval-tracker/i18n/de.ts +117 -0
  17. package/src/tool/service-interval-tracker/i18n/en.ts +170 -0
  18. package/src/tool/service-interval-tracker/i18n/es.ts +117 -0
  19. package/src/tool/service-interval-tracker/i18n/fr.ts +98 -0
  20. package/src/tool/service-interval-tracker/i18n/id.ts +89 -0
  21. package/src/tool/service-interval-tracker/i18n/it.ts +88 -0
  22. package/src/tool/service-interval-tracker/i18n/ja.ts +88 -0
  23. package/src/tool/service-interval-tracker/i18n/ko.ts +88 -0
  24. package/src/tool/service-interval-tracker/i18n/nl.ts +88 -0
  25. package/src/tool/service-interval-tracker/i18n/pl.ts +88 -0
  26. package/src/tool/service-interval-tracker/i18n/pt.ts +88 -0
  27. package/src/tool/service-interval-tracker/i18n/ru.ts +88 -0
  28. package/src/tool/service-interval-tracker/i18n/sv.ts +88 -0
  29. package/src/tool/service-interval-tracker/i18n/tr.ts +88 -0
  30. package/src/tool/service-interval-tracker/i18n/zh.ts +88 -0
  31. package/src/tool/service-interval-tracker/index.ts +11 -0
  32. package/src/tool/service-interval-tracker/renderer.ts +91 -0
  33. package/src/tool/service-interval-tracker/seo.astro +16 -0
  34. package/src/tool/service-interval-tracker/service-interval-tracker.css +767 -0
  35. package/src/tool/service-interval-tracker/utils.ts +58 -0
  36. package/src/tool/strap-length-calculator/bibliography.astro +16 -0
  37. package/src/tool/strap-length-calculator/bibliography.ts +12 -0
  38. package/src/tool/strap-length-calculator/client.ts +151 -0
  39. package/src/tool/strap-length-calculator/component.astro +46 -0
  40. package/src/tool/strap-length-calculator/components/BespokeResults.astro +60 -0
  41. package/src/tool/strap-length-calculator/components/CalculatorInputs.astro +64 -0
  42. package/src/tool/strap-length-calculator/components/Visualizer.astro +8 -0
  43. package/src/tool/strap-length-calculator/drawing.ts +265 -0
  44. package/src/tool/strap-length-calculator/entry.ts +52 -0
  45. package/src/tool/strap-length-calculator/helpers.ts +110 -0
  46. package/src/tool/strap-length-calculator/i18n/de.ts +311 -0
  47. package/src/tool/strap-length-calculator/i18n/en.ts +311 -0
  48. package/src/tool/strap-length-calculator/i18n/es.ts +311 -0
  49. package/src/tool/strap-length-calculator/i18n/fr.ts +311 -0
  50. package/src/tool/strap-length-calculator/i18n/id.ts +86 -0
  51. package/src/tool/strap-length-calculator/i18n/it.ts +311 -0
  52. package/src/tool/strap-length-calculator/i18n/ja.ts +86 -0
  53. package/src/tool/strap-length-calculator/i18n/ko.ts +86 -0
  54. package/src/tool/strap-length-calculator/i18n/nl.ts +311 -0
  55. package/src/tool/strap-length-calculator/i18n/pl.ts +311 -0
  56. package/src/tool/strap-length-calculator/i18n/pt.ts +311 -0
  57. package/src/tool/strap-length-calculator/i18n/ru.ts +86 -0
  58. package/src/tool/strap-length-calculator/i18n/sv.ts +86 -0
  59. package/src/tool/strap-length-calculator/i18n/tr.ts +86 -0
  60. package/src/tool/strap-length-calculator/i18n/zh.ts +86 -0
  61. package/src/tool/strap-length-calculator/index.ts +11 -0
  62. package/src/tool/strap-length-calculator/seo.astro +16 -0
  63. package/src/tool/strap-length-calculator/strap-length-calculator.css +234 -0
  64. package/src/tools.ts +4 -0
@@ -0,0 +1,86 @@
1
+ import type { ToolLocaleContent } from "../../../types";
2
+ import type { StrapLengthCalculatorUI } from "../entry";
3
+ import { bibliography } from "../bibliography";
4
+
5
+ export const content: ToolLocaleContent<StrapLengthCalculatorUI> = {
6
+ slug: "strap-length-calculator",
7
+ title: "手表表带长度计算器",
8
+ description: "计算适合您手腕的理想表带尺寸。根据手腕尺寸和手表尺寸获取两件式表带和NATO表带的推荐。",
9
+ ui: {
10
+ title: "表带长度计算器",
11
+ wristLabel: "手腕周长",
12
+ wristPlaceholder: "例如 170",
13
+ lugLabel: "表耳间距",
14
+ lugPlaceholder: "例如 45",
15
+ fitLabel: "偏好贴合度",
16
+ fitTight: "紧",
17
+ fitRegular: "标准",
18
+ fitLoose: "松",
19
+ unitLabel: "单位",
20
+ standardLabel: "标准尺寸",
21
+ bespokeLabel: "定制尺寸",
22
+ natoLabel: "NATO表带长度",
23
+ longSide: "长侧",
24
+ shortSide: "短侧",
25
+ totalLength: "总长度",
26
+ millimeters: "毫米",
27
+ inches: "英寸",
28
+ sizeXS: "Extra Small (XS) - 手腕 < 6.0 in",
29
+ sizeS: "Small (S) - 手腕 6.0~6.5 in",
30
+ sizeM: "Medium (M) - 手腕 6.5~7.0 in",
31
+ sizeL: "Large (L) - 手腕 7.0~7.5 in",
32
+ sizeXL: "Extra Large (XL) - 手腕 7.5~8.0 in",
33
+ sizeXXL: "Double Extra Large (XXL) - 手腕 > 8.0 in",
34
+ },
35
+ seo: [
36
+ { type: "title", text: "手表表带尺寸指南和长度计算器", level: 2 },
37
+ { type: "paragraph", html: "选择完美的手表表带对于佩戴舒适度和美学平衡都至关重要。太长的表带会留下难看的多余部分,而太短的 表带可能无法安全扣紧。本指南帮助您根据手腕尺寸、手表设计和所需的贴合度来确定标准尺寸、定制尺寸和NATO表带长度。" },
38
+ { type: "stats", items: [{ value: "120/80mm", label: "标准尺寸" }, { value: "160-190mm", label: "适合大多数手腕" }, { value: "7个孔", label: "典型调节选项" }], columns: 3 },
39
+ { type: "title", text: "了解两件式表带:长侧 vs. 短侧", level: 3 },
40
+ { type: "paragraph", html: "两件式手表表带由两个数字定义,例如<strong>120/80 毫米</strong>。第一个数字(例如120毫米)是<strong>长侧</strong>(尖端侧),固定在6点钟位置。第二个数字(例如80毫米)是<strong>短侧</strong>(表扣侧),固定在12点钟位置。表扣本身不包括在这些测量中。" },
41
+ { type: "title", text: "按手腕周长划分的标准尺寸表", level: 3 },
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
+ { type: "title", text: "定制尺寸说明", level: 3 },
44
+ { type: "paragraph", html: "订购定制表带时,您可以追求完美的贴合度。定制表带不是满足于标准孔位,而是计算每侧的精确长度,使表扣恰好位于手腕下侧的中心。该公式使用手腕总周长,减去手表的表耳间距,然后根据手腕几何形状分割剩余长度。" },
45
+ { type: "comparative", items: [{ title: "定制表带", description: "根据您的手腕和表壳尺寸量身定制。保证表扣完美居中,消除多余表带头。", points: ["表扣完美居中", "定制孔位", "无多余表带头", "优质外观和手感"] }, { title: "标准表带", description: "大规模生产的尺寸,通过多个调节孔适合广泛的手腕范围。快速且经济。", points: ["成本更低", "即时可用", "适用于多款手表", "标准化尺寸"] }], columns: 2 },
46
+ { type: "title", text: "关键手表表带术语", level: 3 },
47
+ { type: "glossary", items: [{ term: "表耳间距(Lug-to-Lug)", definition: "从上表耳尖端到下表耳尖端的垂直总距离。这不是表壳直径,而是放在手腕上的刚性手表头部的总长度。" }, { term: "短侧(表扣)", definition: "固定在表壳12点钟位置的表带部分。包含表扣,但不计入长度测量。" }, { term: "长侧(尖端)", definition: "固定在表壳6点钟位置的表带部分。有调节孔用于调整松紧。" }, { term: "NATO表带", definition: "一种一体式尼龙表带,通过弹簧杆缠绕在手表表壳下方。高度可调且耐用。" }] },
48
+ { type: "tip", title: "正确测量手腕", html: "为了准确测量,将软尺(不要太紧)绕在您通常佩戴手表的部位。如果没有软尺,可以使用绳子或纸条,标记重叠处,然后用尺子测量平放的长度。" },
49
+ { type: "title", text: "为什么表耳间距对表带尺寸至关重要", level: 3 },
50
+ { type: "paragraph", html: "许多收藏者忘记手表表壳是表带的刚性延伸部分。表耳间距50毫米的大手表比40毫米的正装表在手腕上占据更多空间。因此,较大的手表需要较短的表带才能达到相同的总环尺寸。不考虑表耳间距是表带不合身的首要原因。" },
51
+ { type: "diagnostic", variant: "warning", title: "避免表扣偏移和表壳悬空", html: "如果表带的短侧对手腕来说太长或太短,表扣会滑向一侧。这会导致手表表壳偏离中心,引起不适并增加表壳或扣具刮伤的风险。始终确保表扣位于手腕平坦下侧的中心。" },
52
+ { type: "proscons", title: "NATO表带 vs. 两件式表带", items: [{ pro: "NATO表带高度可调,可在弹簧杆断裂时防止手表丢失。", con: "NATO表带会增加手表表壳下方的厚度。" }, { pro: "两件式表带使表壳紧贴皮肤,轮廓更薄。", con: "两件式表带需要精确的尺寸测量,调节余地较小。" }] },
53
+ ],
54
+ faq: [
55
+ { question: "如何测量手表表带长度?", answer: "表带长度通常用两个数字表示,如120/80毫米。第一个数字是长侧(尖端)的长度,第二个是短侧(表扣)的长度。" },
56
+ { question: "表扣应该位于手腕的什么位置?", answer: "理想情况下,表扣应位于手腕下侧的中心。如果偏移,手表表壳会偏离中心。调整长侧和短侧的比例有助于实现完美居中。" },
57
+ { question: "表耳间距如何影响我需要的表带长度?", answer: "手表表壳是整个表带环的刚性部分。表耳间距较长(例如50毫米)的大手表比同一手腕上较小的手表(例如40毫米)需要的表带长度更短。" },
58
+ { question: "表带的长端在哪一侧?", answer: "传统上,表带的长侧(带调节孔)固定在表壳的6点钟位置,朝向您。短侧(带表扣)固定在12点钟位置。" },
59
+ { question: "手表表带应该多紧?", answer: "表带应贴合但舒适。您应该能够在不费力的情况下将一根手指伸入表带下方。太紧的表带会限制血液循环,而太松的表带会导致表壳旋转。" },
60
+ { question: "我可以在任何手表上使用NATO表带吗?", answer: "可以,只要手表有标准弹簧杆,并且表壳与杆之间有足够的间隙。NATO表带缠绕在表壳下方,因此间隙非常窄的情况可能需要弯曲弹簧杆或更薄的表带材料。" },
61
+ ],
62
+ bibliography,
63
+ howTo: [
64
+ { name: "测量手腕", text: "使用软尺以毫米或英寸为单位测量手腕周长。" },
65
+ { name: "测量表耳间距", text: "从上表耳尖端到下表耳尖端测量手表表壳的高度。" },
66
+ { name: "选择偏好的贴合度", text: "选择紧、标准或松的贴合度。" },
67
+ { name: "计算推荐", text: "查看标准尺寸、长侧/短侧的定制尺寸以及理想的NATO长度。" },
68
+ ],
69
+ schemas: [
70
+ { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [
71
+ { "@type": "Question", "name": "如何测量手表表带长度?", "acceptedAnswer": { "@type": "Answer", "text": "表带长度通常用两个数字表示,如120/80毫米。第一个数字是长侧(尖端)的长度,第二个是短侧(表扣)的长度。" } },
72
+ { "@type": "Question", "name": "表扣应该位于手腕的什么位置?", "acceptedAnswer": { "@type": "Answer", "text": "理想情况下,表扣应位于手腕下侧的中心。如果偏移,手表表壳会偏离中心。调整长侧和短侧的比例有助于实现完美居中。" } },
73
+ { "@type": "Question", "name": "表耳间距如何影响我需要的表带长度?", "acceptedAnswer": { "@type": "Answer", "text": "手表表壳是整个表带环的刚性部分。表耳间距较长(例如50毫米)的大手表比同一手腕上较小的手表(例如40毫米)需要的表带长度更短。" } },
74
+ { "@type": "Question", "name": "表带的长端在哪一侧?", "acceptedAnswer": { "@type": "Answer", "text": "传统上,表带的长侧(带调节孔)固定在表壳的6点钟位置,朝向您。短侧(带表扣)固定在12点钟位置。" } },
75
+ { "@type": "Question", "name": "手表表带应该多紧?", "acceptedAnswer": { "@type": "Answer", "text": "表带应贴合但舒适。您应该能够在不费力的情况下将一根手指伸入表带下方。太紧的表带会限制血液循环,而太松的表带会导致表壳旋转。" } },
76
+ { "@type": "Question", "name": "我可以在任何手表上使用NATO表带吗?", "acceptedAnswer": { "@type": "Answer", "text": "可以,只要手表有标准弹簧杆,并且表壳与杆之间有足够的间隙。NATO表带缠绕在表壳下方,因此间隙非常窄的情况可能需要弯曲弹簧杆或更薄的表带材料。" } }
77
+ ] } as any,
78
+ { "@context": "https://schema.org", "@type": "SoftwareApplication", "name": "手表表带长度计算器", "operatingSystem": "All", "applicationCategory": "LifestyleApplication", "browserRequirements": "Requires HTML5. Requires JavaScript." } as any,
79
+ { "@context": "https://schema.org", "@type": "HowTo", "name": "手表表带长度计算器", "step": [
80
+ { "@type": "HowToStep", "name": "测量手腕", "text": "使用软尺以毫米或英寸为单位测量手腕周长。" },
81
+ { "@type": "HowToStep", "name": "测量表耳间距", "text": "从上表耳尖端到下表耳尖端测量手表表壳的高度。" },
82
+ { "@type": "HowToStep", "name": "选择偏好的贴合度", "text": "选择紧、标准或松的贴合度。" },
83
+ { "@type": "HowToStep", "name": "计算推荐", "text": "查看标准尺寸、长侧/短侧的定制尺寸以及理想的NATO长度。" }
84
+ ] } as any
85
+ ]
86
+ };
@@ -0,0 +1,11 @@
1
+ import type { ToolDefinition } from '../../types';
2
+ import { strapLengthCalculator } from './entry';
3
+
4
+ export * from './entry';
5
+
6
+ export const STRAP_LENGTH_CALCULATOR_TOOL: ToolDefinition = {
7
+ entry: strapLengthCalculator,
8
+ Component: () => import('./component.astro'),
9
+ SEOComponent: () => import('./seo.astro'),
10
+ BibliographyComponent: () => import('./bibliography.astro'),
11
+ };
@@ -0,0 +1,16 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { strapLengthCalculator } 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 = strapLengthCalculator.i18n[locale] || strapLengthCalculator.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 }} />}
@@ -0,0 +1,234 @@
1
+ .str {
2
+ width: 100%;
3
+ max-width: 1200px;
4
+ margin: 0 auto;
5
+ background: var(--bg-surface);
6
+ border: 1px solid var(--border-color);
7
+ border-radius: 1.5rem;
8
+ padding: 1.5rem;
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: 1.5rem;
12
+ box-shadow: var(--shadow-base);
13
+ box-sizing: border-box;
14
+ }
15
+
16
+ .str-top {
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: space-between;
20
+ }
21
+
22
+ .str-h {
23
+ font-size: 1.5rem;
24
+ font-weight: 800;
25
+ color: var(--text-base);
26
+ margin: 0;
27
+ letter-spacing: -0.03em;
28
+ background: linear-gradient(135deg, var(--text-base) 0%, color-mix(in srgb, var(--text-base) 70%, var(--accent)) 100%);
29
+ -webkit-background-clip: text;
30
+ -webkit-text-fill-color: transparent;
31
+ }
32
+
33
+ .str-body {
34
+ display: flex;
35
+ flex-direction: column;
36
+ gap: 1.5rem;
37
+ }
38
+
39
+ .str-inputs {
40
+ display: grid;
41
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
42
+ gap: 1rem;
43
+ }
44
+
45
+ .str-field {
46
+ display: flex;
47
+ flex-direction: column;
48
+ gap: 0.35rem;
49
+ }
50
+
51
+ .str-label {
52
+ font-size: 0.6875rem;
53
+ font-weight: 700;
54
+ text-transform: uppercase;
55
+ letter-spacing: 0.05em;
56
+ color: var(--text-base);
57
+ opacity: 0.5;
58
+ }
59
+
60
+ .str-input-wrapper {
61
+ position: relative;
62
+ display: flex;
63
+ align-items: center;
64
+ }
65
+
66
+ .str-input {
67
+ padding: 0.65rem 0.85rem;
68
+ border: 1px solid var(--border-color);
69
+ border-radius: 0.75rem;
70
+ background: var(--bg-page);
71
+ color: var(--text-base);
72
+ font-size: 0.875rem;
73
+ font-weight: 500;
74
+ box-sizing: border-box;
75
+ width: 100%;
76
+ transition: all 0.2s;
77
+ }
78
+
79
+ .str-input:focus {
80
+ outline: none;
81
+ border-color: var(--accent);
82
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent);
83
+ background: var(--bg-surface);
84
+ }
85
+
86
+ .str-input-unit {
87
+ position: absolute;
88
+ right: 0.85rem;
89
+ font-size: 0.75rem;
90
+ font-weight: 700;
91
+ color: var(--text-base);
92
+ opacity: 0.4;
93
+ pointer-events: none;
94
+ }
95
+
96
+ select.str-input {
97
+ appearance: none;
98
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none' stroke='%23888888' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1l4 4 4-4'/%3E%3C/svg%3E");
99
+ background-repeat: no-repeat;
100
+ background-position: right 0.85rem center;
101
+ padding-right: 2.2rem;
102
+ }
103
+
104
+ .str-visualizer-container {
105
+ display: grid;
106
+ grid-template-columns: 1fr;
107
+ gap: 1.5rem;
108
+ }
109
+
110
+ @media (min-width: 768px) {
111
+ .str-visualizer-container {
112
+ grid-template-columns: 1.5fr 1fr;
113
+ }
114
+ }
115
+
116
+ .str-vis-block {
117
+ display: flex;
118
+ flex-direction: column;
119
+ background: color-mix(in srgb, var(--bg-page) 40%, var(--bg-surface));
120
+ border: 1px solid var(--border-color);
121
+ border-radius: 1.25rem;
122
+ overflow: hidden;
123
+ padding: 1rem;
124
+ align-items: center;
125
+ justify-content: center;
126
+ min-height: 160px;
127
+ }
128
+
129
+ .str-svg {
130
+ display: block;
131
+ max-width: 100%;
132
+ }
133
+
134
+ .str-results {
135
+ display: grid;
136
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
137
+ gap: 1rem;
138
+ }
139
+
140
+ .str-result-card {
141
+ display: flex;
142
+ gap: 1rem;
143
+ background: var(--bg-surface);
144
+ border: 1px solid var(--border-color);
145
+ border-radius: 1.25rem;
146
+ padding: 1.25rem;
147
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.02);
148
+ align-items: center;
149
+ }
150
+
151
+ .str-result-bespoke {
152
+ border-color: color-mix(in srgb, var(--accent) 30%, var(--border-color));
153
+ background: color-mix(in srgb, var(--accent) 3%, var(--bg-surface));
154
+ box-shadow: 0 4px 16px color-mix(in srgb, var(--accent) 5%, transparent);
155
+ }
156
+
157
+ .str-result-icon {
158
+ width: 44px;
159
+ height: 44px;
160
+ border-radius: 0.75rem;
161
+ display: flex;
162
+ align-items: center;
163
+ justify-content: center;
164
+ color: var(--text-base);
165
+ background: color-mix(in srgb, var(--text-base) 8%, var(--bg-page));
166
+ flex-shrink: 0;
167
+ }
168
+
169
+ .str-result-bespoke .str-result-icon {
170
+ color: var(--accent);
171
+ background: color-mix(in srgb, var(--accent) 10%, var(--bg-surface));
172
+ }
173
+
174
+ .str-result-icon svg {
175
+ width: 22px;
176
+ height: 22px;
177
+ }
178
+
179
+ .str-result-info {
180
+ display: flex;
181
+ flex-direction: column;
182
+ min-width: 0;
183
+ flex: 1;
184
+ }
185
+
186
+ .str-result-title {
187
+ font-size: 0.6875rem;
188
+ font-weight: 700;
189
+ text-transform: uppercase;
190
+ letter-spacing: 0.05em;
191
+ color: var(--text-base);
192
+ opacity: 0.45;
193
+ }
194
+
195
+ .str-result-value {
196
+ font-size: 1.25rem;
197
+ font-weight: 800;
198
+ color: var(--text-base);
199
+ margin-top: 0.25rem;
200
+ }
201
+
202
+ .str-result-desc {
203
+ font-size: 0.75rem;
204
+ font-weight: 500;
205
+ color: var(--text-base);
206
+ opacity: 0.6;
207
+ margin-top: 0.15rem;
208
+ }
209
+
210
+ .str-result-split-values {
211
+ display: flex;
212
+ gap: 1.5rem;
213
+ margin-top: 0.35rem;
214
+ }
215
+
216
+ .str-split-item {
217
+ display: flex;
218
+ flex-direction: column;
219
+ }
220
+
221
+ .str-split-lbl {
222
+ font-size: 0.625rem;
223
+ font-weight: 700;
224
+ text-transform: uppercase;
225
+ color: var(--text-base);
226
+ opacity: 0.4;
227
+ }
228
+
229
+ .str-split-val {
230
+ font-size: 1.125rem;
231
+ font-weight: 800;
232
+ color: var(--text-base);
233
+ margin-top: 0.1rem;
234
+ }
package/src/tools.ts CHANGED
@@ -13,6 +13,8 @@ import { WATCH_SIZE_COMPARATOR_TOOL } from './tool/watch-size-comparator';
13
13
  import { LUME_COLOR_SIMULATOR_TOOL } from './tool/lume-color-simulator';
14
14
  import { MOON_PHASE_VISUALIZER_TOOL } from './tool/moon-phase-visualizer';
15
15
  import { TACHYMETER_CALCULATOR_TOOL } from './tool/tachymeter-calculator';
16
+ import { SERVICE_INTERVAL_TRACKER_TOOL } from './tool/service-interval-tracker';
17
+ import { STRAP_LENGTH_CALCULATOR_TOOL } from './tool/strap-length-calculator';
16
18
 
17
19
  export const ALL_TOOLS: ToolDefinition[] = [
18
20
  WATCH_ACCURACY_TRACKER_TOOL,
@@ -28,6 +30,8 @@ export const ALL_TOOLS: ToolDefinition[] = [
28
30
  LUME_COLOR_SIMULATOR_TOOL,
29
31
  MOON_PHASE_VISUALIZER_TOOL,
30
32
  TACHYMETER_CALCULATOR_TOOL,
33
+ SERVICE_INTERVAL_TRACKER_TOOL,
34
+ STRAP_LENGTH_CALCULATOR_TOOL,
31
35
  ];
32
36
 
33
37