@jjlmoya/utils-chrono 1.10.0 → 1.16.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 (117) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +8 -0
  3. package/src/entries.ts +13 -1
  4. package/src/tests/locale_completeness.test.ts +1 -1
  5. package/src/tests/tool_validation.test.ts +1 -1
  6. package/src/tool/gear-train-explorer/bibliography.astro +16 -0
  7. package/src/tool/gear-train-explorer/bibliography.ts +12 -0
  8. package/src/tool/gear-train-explorer/client.ts +146 -0
  9. package/src/tool/gear-train-explorer/component.astro +17 -0
  10. package/src/tool/gear-train-explorer/components/GearPanel.astro +102 -0
  11. package/src/tool/gear-train-explorer/entry.ts +53 -0
  12. package/src/tool/gear-train-explorer/gear-train-explorer.css +172 -0
  13. package/src/tool/gear-train-explorer/gears.ts +148 -0
  14. package/src/tool/gear-train-explorer/helpers.ts +49 -0
  15. package/src/tool/gear-train-explorer/i18n/de.ts +99 -0
  16. package/src/tool/gear-train-explorer/i18n/en.ts +98 -0
  17. package/src/tool/gear-train-explorer/i18n/es.ts +99 -0
  18. package/src/tool/gear-train-explorer/i18n/fr.ts +99 -0
  19. package/src/tool/gear-train-explorer/i18n/id.ts +98 -0
  20. package/src/tool/gear-train-explorer/i18n/it.ts +99 -0
  21. package/src/tool/gear-train-explorer/i18n/ja.ts +98 -0
  22. package/src/tool/gear-train-explorer/i18n/ko.ts +98 -0
  23. package/src/tool/gear-train-explorer/i18n/nl.ts +99 -0
  24. package/src/tool/gear-train-explorer/i18n/pl.ts +99 -0
  25. package/src/tool/gear-train-explorer/i18n/pt.ts +99 -0
  26. package/src/tool/gear-train-explorer/i18n/ru.ts +99 -0
  27. package/src/tool/gear-train-explorer/i18n/sv.ts +99 -0
  28. package/src/tool/gear-train-explorer/i18n/tr.ts +98 -0
  29. package/src/tool/gear-train-explorer/i18n/zh.ts +98 -0
  30. package/src/tool/gear-train-explorer/index.ts +11 -0
  31. package/src/tool/gear-train-explorer/movements.ts +61 -0
  32. package/src/tool/gear-train-explorer/scene.ts +120 -0
  33. package/src/tool/gear-train-explorer/seo.astro +16 -0
  34. package/src/tool/gear-train-explorer/state.ts +30 -0
  35. package/src/tool/gmt-world-timer/bibliography.astro +11 -0
  36. package/src/tool/gmt-world-timer/bibliography.ts +7 -0
  37. package/src/tool/gmt-world-timer/client.ts +250 -0
  38. package/src/tool/gmt-world-timer/component.astro +13 -0
  39. package/src/tool/gmt-world-timer/components/GmtPanel.astro +18 -0
  40. package/src/tool/gmt-world-timer/entry.ts +34 -0
  41. package/src/tool/gmt-world-timer/gmt-world-timer.css +239 -0
  42. package/src/tool/gmt-world-timer/helpers.ts +28 -0
  43. package/src/tool/gmt-world-timer/i18n/de.ts +72 -0
  44. package/src/tool/gmt-world-timer/i18n/en.ts +72 -0
  45. package/src/tool/gmt-world-timer/i18n/es.ts +72 -0
  46. package/src/tool/gmt-world-timer/i18n/fr.ts +72 -0
  47. package/src/tool/gmt-world-timer/i18n/id.ts +72 -0
  48. package/src/tool/gmt-world-timer/i18n/it.ts +72 -0
  49. package/src/tool/gmt-world-timer/i18n/ja.ts +72 -0
  50. package/src/tool/gmt-world-timer/i18n/ko.ts +72 -0
  51. package/src/tool/gmt-world-timer/i18n/nl.ts +72 -0
  52. package/src/tool/gmt-world-timer/i18n/pl.ts +72 -0
  53. package/src/tool/gmt-world-timer/i18n/pt.ts +72 -0
  54. package/src/tool/gmt-world-timer/i18n/ru.ts +72 -0
  55. package/src/tool/gmt-world-timer/i18n/sv.ts +72 -0
  56. package/src/tool/gmt-world-timer/i18n/tr.ts +72 -0
  57. package/src/tool/gmt-world-timer/i18n/zh.ts +72 -0
  58. package/src/tool/gmt-world-timer/index.ts +11 -0
  59. package/src/tool/gmt-world-timer/seo.astro +11 -0
  60. package/src/tool/perpetual-calendar/bibliography.astro +16 -0
  61. package/src/tool/perpetual-calendar/bibliography.ts +16 -0
  62. package/src/tool/perpetual-calendar/calendar.ts +24 -0
  63. package/src/tool/perpetual-calendar/client.ts +98 -0
  64. package/src/tool/perpetual-calendar/component.astro +17 -0
  65. package/src/tool/perpetual-calendar/components/CalendarPanel.astro +49 -0
  66. package/src/tool/perpetual-calendar/dial.ts +176 -0
  67. package/src/tool/perpetual-calendar/entry.ts +48 -0
  68. package/src/tool/perpetual-calendar/helpers.ts +49 -0
  69. package/src/tool/perpetual-calendar/i18n/de.ts +85 -0
  70. package/src/tool/perpetual-calendar/i18n/en.ts +102 -0
  71. package/src/tool/perpetual-calendar/i18n/es.ts +85 -0
  72. package/src/tool/perpetual-calendar/i18n/fr.ts +85 -0
  73. package/src/tool/perpetual-calendar/i18n/id.ts +85 -0
  74. package/src/tool/perpetual-calendar/i18n/it.ts +85 -0
  75. package/src/tool/perpetual-calendar/i18n/ja.ts +85 -0
  76. package/src/tool/perpetual-calendar/i18n/ko.ts +85 -0
  77. package/src/tool/perpetual-calendar/i18n/nl.ts +85 -0
  78. package/src/tool/perpetual-calendar/i18n/pl.ts +85 -0
  79. package/src/tool/perpetual-calendar/i18n/pt.ts +85 -0
  80. package/src/tool/perpetual-calendar/i18n/ru.ts +85 -0
  81. package/src/tool/perpetual-calendar/i18n/sv.ts +85 -0
  82. package/src/tool/perpetual-calendar/i18n/tr.ts +85 -0
  83. package/src/tool/perpetual-calendar/i18n/zh.ts +85 -0
  84. package/src/tool/perpetual-calendar/index.ts +11 -0
  85. package/src/tool/perpetual-calendar/perpetual-calendar.css +181 -0
  86. package/src/tool/perpetual-calendar/seo.astro +16 -0
  87. package/src/tool/perpetual-calendar/state.ts +26 -0
  88. package/src/tool/tourbillon-visualizer/bibliography.astro +11 -0
  89. package/src/tool/tourbillon-visualizer/bibliography.ts +7 -0
  90. package/src/tool/tourbillon-visualizer/client.ts +122 -0
  91. package/src/tool/tourbillon-visualizer/component.astro +126 -0
  92. package/src/tool/tourbillon-visualizer/components/TourbillonPanel.astro +66 -0
  93. package/src/tool/tourbillon-visualizer/entry.ts +51 -0
  94. package/src/tool/tourbillon-visualizer/helpers.ts +35 -0
  95. package/src/tool/tourbillon-visualizer/i18n/de.ts +96 -0
  96. package/src/tool/tourbillon-visualizer/i18n/en.ts +96 -0
  97. package/src/tool/tourbillon-visualizer/i18n/es.ts +96 -0
  98. package/src/tool/tourbillon-visualizer/i18n/fr.ts +96 -0
  99. package/src/tool/tourbillon-visualizer/i18n/id.ts +96 -0
  100. package/src/tool/tourbillon-visualizer/i18n/it.ts +96 -0
  101. package/src/tool/tourbillon-visualizer/i18n/ja.ts +96 -0
  102. package/src/tool/tourbillon-visualizer/i18n/ko.ts +96 -0
  103. package/src/tool/tourbillon-visualizer/i18n/nl.ts +96 -0
  104. package/src/tool/tourbillon-visualizer/i18n/pl.ts +96 -0
  105. package/src/tool/tourbillon-visualizer/i18n/pt.ts +96 -0
  106. package/src/tool/tourbillon-visualizer/i18n/ru.ts +96 -0
  107. package/src/tool/tourbillon-visualizer/i18n/sv.ts +96 -0
  108. package/src/tool/tourbillon-visualizer/i18n/tr.ts +96 -0
  109. package/src/tool/tourbillon-visualizer/i18n/zh.ts +96 -0
  110. package/src/tool/tourbillon-visualizer/index.ts +11 -0
  111. package/src/tool/tourbillon-visualizer/renderer/base.ts +78 -0
  112. package/src/tool/tourbillon-visualizer/renderer/cage.ts +115 -0
  113. package/src/tool/tourbillon-visualizer/renderer/esc.ts +160 -0
  114. package/src/tool/tourbillon-visualizer/seo.astro +11 -0
  115. package/src/tool/tourbillon-visualizer/state.ts +21 -0
  116. package/src/tool/tourbillon-visualizer/tourbillon.ts +9 -0
  117. package/src/tools.ts +8 -0
@@ -0,0 +1,66 @@
1
+ ---
2
+ interface Props { labels: Record<string, string>; }
3
+ const { labels } = Astro.props;
4
+ ---
5
+ <div class="tourb-col">
6
+ <div class="tourb-canvas">
7
+ <canvas id="tourb-canvas" width="700" height="700"></canvas>
8
+ </div>
9
+ <div class="tourb-controls">
10
+ <div class="tourb-block">
11
+ <span class="tourb-lbl">{labels.typeLabel || 'Type'}</span>
12
+ <span class="tourb-btns">
13
+ <button class="tourb-btn active" data-opt="type" data-val="classic">{labels.typeClassic || 'Classic'}</button>
14
+ <button class="tourb-btn" data-opt="type" data-val="flying">{labels.typeFlying || 'Flying'}</button>
15
+ <button class="tourb-btn" data-opt="type" data-val="gyro">Gyro</button>
16
+ </span>
17
+ </div>
18
+ <div class="tourb-block">
19
+ <span class="tourb-lbl">{labels.beatRateLabel || 'Rate'}</span>
20
+ <span class="tourb-btns">
21
+ <button class="tourb-btn" data-opt="beat" data-val="18000" title="Slow majestic beat">18k</button>
22
+ <button class="tourb-btn active" data-opt="beat" data-val="28800" title="Standard modern beat">28.8k</button>
23
+ <button class="tourb-btn" data-opt="beat" data-val="36000" title="High frequency rapid beat">36k</button>
24
+ </span>
25
+ </div>
26
+ <div class="tourb-block">
27
+ <span class="tourb-lbl">{labels.speedLabel || 'Speed'}</span>
28
+ <span class="tourb-btns">
29
+ <button class="tourb-btn" data-opt="speed" data-val="0.5">Slow</button>
30
+ <button class="tourb-btn active" data-opt="speed" data-val="1">1x</button>
31
+ <button class="tourb-btn" data-opt="speed" data-val="2">2x</button>
32
+ <button class="tourb-btn" data-opt="speed" data-val="5">5x</button>
33
+ <button class="tourb-btn" data-opt="speed" data-val="0">||</button>
34
+ </span>
35
+ </div>
36
+ <div class="tourb-block">
37
+ <span class="tourb-lbl">View</span>
38
+ <span class="tourb-btns">
39
+ <button class="tourb-btn active" data-opt="view" data-val="full">Full</button>
40
+ <button class="tourb-btn" data-opt="view" data-val="zoom">Zoom</button>
41
+ </span>
42
+ </div>
43
+ </div>
44
+ <div class="tourb-data">
45
+ <div class="tourb-cell" data-highlight="cage">
46
+ <span class="tourb-cell-lbl">{labels.cageRotationLabel || 'Cage'}</span>
47
+ <span class="tourb-cell-val" id="cage-info">0&deg;</span>
48
+ </div>
49
+ <div class="tourb-cell" data-highlight="balance">
50
+ <span class="tourb-cell-lbl">{labels.balanceLabel || 'Balance'}</span>
51
+ <span class="tourb-cell-val" id="balance-info">0 Hz</span>
52
+ </div>
53
+ <div class="tourb-cell" data-highlight="escape">
54
+ <span class="tourb-cell-lbl">{labels.escapeLabel || 'Escape'}</span>
55
+ <span class="tourb-cell-val" id="escape-info">0 rpm</span>
56
+ </div>
57
+ <div class="tourb-cell" data-highlight="pallet">
58
+ <span class="tourb-cell-lbl">{labels.palletLabel || 'Pallet'}</span>
59
+ <span class="tourb-cell-val" id="pallet-info">0 bph</span>
60
+ </div>
61
+ <div class="tourb-cell" data-highlight="hairspring">
62
+ <span class="tourb-cell-lbl">Spring</span>
63
+ <span class="tourb-cell-val" id="spring-info">4 Hz</span>
64
+ </div>
65
+ </div>
66
+ </div>
@@ -0,0 +1,51 @@
1
+ import type { ChronoToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+ export type TourbillonUI = {
4
+ title: string;
5
+ typeLabel: string;
6
+ typeClassic: string;
7
+ typeFlying: string;
8
+ speedLabel: string;
9
+ speedNormal: string;
10
+ speedSlow: string;
11
+ speedPaused: string;
12
+ beatRateLabel: string;
13
+ rate18k: string;
14
+ rate28k: string;
15
+ rate36k: string;
16
+ cageRotationLabel: string;
17
+ showLabelsLabel: string;
18
+ step1: string;
19
+ step2: string;
20
+ step3: string;
21
+ tipTitle: string;
22
+ tipContent: string;
23
+ balanceLabel: string;
24
+ escapeLabel: string;
25
+ palletLabel: string;
26
+ cageLabel: string;
27
+ };
28
+
29
+ export type TourbillonLocaleContent = ToolLocaleContent<TourbillonUI>;
30
+
31
+ export const tourbillonVisualizer: ChronoToolEntry<TourbillonUI> = {
32
+ id: 'tourbillon-visualizer',
33
+ icons: { bg: 'mdi:rotate-orbit', fg: 'mdi:circle-outline' },
34
+ i18n: {
35
+ de: () => import('./i18n/de').then((m) => m.content),
36
+ en: () => import('./i18n/en').then((m) => m.content),
37
+ es: () => import('./i18n/es').then((m) => m.content),
38
+ fr: () => import('./i18n/fr').then((m) => m.content),
39
+ id: () => import('./i18n/id').then((m) => m.content),
40
+ it: () => import('./i18n/it').then((m) => m.content),
41
+ ja: () => import('./i18n/ja').then((m) => m.content),
42
+ ko: () => import('./i18n/ko').then((m) => m.content),
43
+ nl: () => import('./i18n/nl').then((m) => m.content),
44
+ pl: () => import('./i18n/pl').then((m) => m.content),
45
+ pt: () => import('./i18n/pt').then((m) => m.content),
46
+ ru: () => import('./i18n/ru').then((m) => m.content),
47
+ sv: () => import('./i18n/sv').then((m) => m.content),
48
+ tr: () => import('./i18n/tr').then((m) => m.content),
49
+ zh: () => import('./i18n/zh').then((m) => m.content),
50
+ },
51
+ };
@@ -0,0 +1,35 @@
1
+ import type { WithContext, Thing } from 'schema-dts';
2
+ import type { FAQItem, HowToStep } from '../../types';
3
+
4
+ function buildFAQ(faq: FAQItem[]): WithContext<Thing> {
5
+ return {
6
+ '@context': 'https://schema.org',
7
+ '@type': 'FAQPage',
8
+ 'mainEntity': faq.map((f) => ({
9
+ '@type': 'Question',
10
+ 'name': f.question,
11
+ 'acceptedAnswer': { '@type': 'Answer', 'text': f.answer },
12
+ })),
13
+ } as unknown as WithContext<Thing>;
14
+ }
15
+
16
+ function buildApp(title: string): WithContext<Thing> {
17
+ return {
18
+ '@context': 'https://schema.org',
19
+ '@type': 'SoftwareApplication',
20
+ 'name': title, 'operatingSystem': 'All',
21
+ 'applicationCategory': 'UtilitiesApplication',
22
+ 'browserRequirements': 'Requires HTML5. Requires JavaScript.',
23
+ } as unknown as WithContext<Thing>;
24
+ }
25
+
26
+ function buildHowTo(title: string, howTo: HowToStep[]): WithContext<Thing> {
27
+ return {
28
+ '@context': 'https://schema.org', '@type': 'HowTo', 'name': title,
29
+ 'step': howTo.map((h) => ({ '@type': 'HowToStep', 'name': h.name, 'text': h.text })),
30
+ } as unknown as WithContext<Thing>;
31
+ }
32
+
33
+ export function buildSchemas(title: string, faq: FAQItem[], howTo: HowToStep[]): WithContext<Thing>[] {
34
+ return [buildFAQ(faq), buildApp(title), buildHowTo(title, howTo)];
35
+ }
@@ -0,0 +1,96 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { TourbillonUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+ import { buildSchemas } from '../helpers';
5
+
6
+ const faq = [
7
+ {
8
+ question: 'Was ist ein Tourbillon?',
9
+ answer: 'Ein Tourbillon ist ein rotierender Käfig, der die Hemmung (Unruh, Anker und Hemmungsrad) einer mechanischen Uhr enthält. Er dreht sich kontinuierlich — typischerweise einmal pro Minute — um positionsbedingte Fehler durch die Schwerkraft auszugleichen und die Genauigkeit zu verbessern.',
10
+ },
11
+ {
12
+ question: 'Was ist der Unterschied zwischen einem klassischen und einem fliegenden Tourbillon?',
13
+ answer: 'Ein klassisches Tourbillon wird sowohl von einer oberen als auch einer unteren Brücke gestützt, während ein fliegendes Tourbillon von unten freitragend ist und keine sichtbare obere Abstützung hat. Fliegende Tourbillons bieten eine unverdeckte Sicht auf die rotierende Hemmung und gelten als ästhetisch anspruchsvoller in der Konstruktion.',
14
+ },
15
+ {
16
+ question: 'Verbessert ein Tourbillon tatsächlich die Genauigkeit?',
17
+ answer: 'Bei modernen Armbanduhren ist der Genauigkeitsvorteil minimal, da Positionsfehler bereits gut ausgeglichen werden. Bei Taschenuhren (für die Breguet das Tourbillon 1801 erfand) eliminierte die ständige Rotation jedoch die Gangunterschiede zwischen vertikalen Positionen. Heute sind Tourbillons vor allem eine Demonstration hoher uhrmacherischer Kunstfertigkeit.',
18
+ },
19
+ ];
20
+
21
+ const howTo = [
22
+ {
23
+ name: 'Tourbillon-Typ ändern',
24
+ text: 'Wechseln Sie zwischen klassischem und fliegendem Tourbillon, um den strukturellen Unterschied zu sehen. Das fliegende Tourbillon hat keine obere Brücke und gibt den vollen Käfig frei.',
25
+ },
26
+ {
27
+ name: 'Schlagzahl anpassen',
28
+ text: 'Probieren Sie verschiedene Schlagzahlen (18k, 28.8k, 36k VPH) aus, um zu sehen, wie sich die Geschwindigkeit von Unruh und Hemmungsrad verändert.',
29
+ },
30
+ {
31
+ name: 'Geschwindigkeit steuern',
32
+ text: 'Verlangsamen Sie die Geschwindigkeit, um das komplexe Zusammenspiel der Hemmung zu beobachten, oder beschleunigen Sie sie, um den vollen Käfigrotationszyklus zu sehen.',
33
+ },
34
+ ];
35
+
36
+ const title = 'Tourbillon: Kunst der rotierenden Hemmung';
37
+
38
+ export const content: ToolLocaleContent<TourbillonUI> = {
39
+ slug: 'tourbillon-betrachter',
40
+ title,
41
+ description: 'Erleben Sie die faszinierende Kunst des Tourbillons — ein rotierender Käfig, der die Hemmung beherbergt. Beobachten Sie die oszillierende Unruh, die atmende Spirale und den sich drehenden Käfig in einem eleganten mechanischen Ballett.',
42
+ ui: {
43
+ title: 'Tourbillon Visualizer',
44
+ typeLabel: 'Typ',
45
+ typeClassic: 'Klassisch',
46
+ typeFlying: 'Fliegend',
47
+ speedLabel: 'Geschwindigkeit',
48
+ speedNormal: '1x',
49
+ speedSlow: '0.5x',
50
+ speedPaused: 'Pausiert',
51
+ beatRateLabel: 'Schlagzahl',
52
+ rate18k: '18k',
53
+ rate28k: '28.8k',
54
+ rate36k: '36k',
55
+ cageRotationLabel: 'Käfig',
56
+ showLabelsLabel: 'Beschriftung',
57
+ step1: 'Wechseln Sie zwischen klassischem und fliegendem Tourbillon, um die Architektur zu vergleichen.',
58
+ step2: 'Passen Sie die Schlagzahl an, um zu sehen, wie sie den Hemmungsrhythmus beeinflusst.',
59
+ step3: 'Nutzen Sie die Geschwindigkeitsregler, um den präzisen mechanischen Tanz in jedem Tempo zu beobachten.',
60
+ tipTitle: 'Tipp',
61
+ tipContent: 'Breguet erfand das Tourbillon 1801. Das Wort "Tourbillon" bedeutet "Wirbelwind" auf Französisch und beschreibt die Erscheinung des rotierenden Käfigs in Bewegung.',
62
+ balanceLabel: 'Unruh',
63
+ escapeLabel: 'Hemmung',
64
+ palletLabel: 'Anker',
65
+ cageLabel: 'Käfig',
66
+ },
67
+ seo: [
68
+ { type: 'title', text: 'Tourbillon Visualizer: Animierte Hemmungskunst', level: 2 },
69
+ { type: 'paragraph', html: 'Das <strong>Tourbillon</strong> ist eine der faszinierendsten Komplikationen der Haute Horlogerie. Dieser interaktive Visualizer erweckt die rotierende Hemmung zum Leben mit einer detaillierten animierten Darstellung von Unruh, Spirale, Anker, Hemmungsrad und dem ikonischen rotierenden Käfig. Entdecken Sie die mechanische Poesie von Breguets Meisterwerk.' },
70
+ { type: 'title', text: 'Wie ein Tourbillon funktioniert', level: 3 },
71
+ { type: 'paragraph', html: 'Ein Tourbillon beherbergt die gesamte Hemmung — <strong>Unruh, Spirale, Anker und Hemmungsrad</strong> — in einem rotierenden Käfig. Der Käfig vollendet typischerweise eine Umdrehung pro Minute und verändert kontinuierlich die Position der Hemmung relativ zur Schwerkraft. Dies mittelt positionsbedingte Gangfehler aus, ein Konzept, das revolutionär war, als Abraham-Louis Breguet es 1801 patentierte. Die <strong>Unruh</strong> oszilliert mit der Schlagzahl der Uhr (typischerweise 4 Hz / 28.800 vph), während das <strong>Hemmungsrad</strong> pro Schlag einen Zahn weiterrückt und die charakteristische Tickbewegung erzeugt.' },
72
+ { type: 'title', text: 'Klassisches vs. Fliegendes Tourbillon', level: 3 },
73
+ {
74
+ type: 'table', headers: ['Merkmal', 'Klassisches Tourbillon', 'Fliegendes Tourbillon'], rows: [
75
+ ['Obere Abstützung', 'Sichtbare Brücke', 'Keine (freitragend)'],
76
+ ['Sichtbarkeit', 'Teilweise (Brücke im Blick)', 'Vollständig (ungehindert)'],
77
+ ['Schwierigkeit', 'Hoch', 'Extrem hoch'],
78
+ ['Erfunden', '1801 (Breguet)', '1920er (Alfred Helwig)'],
79
+ ['Verbreitet in', 'Traditionellen Marken', 'Modernen Independenten'],
80
+ ]
81
+ },
82
+ { type: 'title', text: 'Schlagzahlvergleich', level: 3 },
83
+ {
84
+ type: 'table', headers: ['Rate (vph)', 'Frequenz', 'Hemmungsrad RPM', 'Schläge/Sekunde', 'Typische Verwendung'], rows: [
85
+ ['18.000', '2,5 Hz', '20 RPM', '5', 'Vintage-Taschenuhren'],
86
+ ['28.800', '4 Hz', '32 RPM', '8', 'Moderner Standard (ETA, Rolex)'],
87
+ ['36.000', '5 Hz', '40 RPM', '10', 'Hochfrequenz (Zenith)'],
88
+ ]
89
+ },
90
+ { type: 'diagnostic', variant: 'info', title: 'Mechanische Kunst in Bewegung', icon: 'mdi:rotate-orbit', badge: 'UHRMACHEREI', html: 'Dieser Visualizer ist eine künstlerische Interpretation einer Tourbillon-Hemmung. Die Käfigrotation, die Unruhoszillation, die Spiralenatmung, die Ankerbewegung und der Hemmungsradschritt sind nach realen mechanischen Beziehungen synchronisiert. Nutzen Sie die Steuerung, um dieses Meisterwerk mikromechanischer Ingenieurskunst zu erkunden.' },
91
+ ],
92
+ faq,
93
+ bibliography,
94
+ howTo,
95
+ schemas: buildSchemas(title, faq, howTo),
96
+ };
@@ -0,0 +1,96 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { TourbillonUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+ import { buildSchemas } from '../helpers';
5
+
6
+ const faq = [
7
+ {
8
+ question: 'What is a tourbillon?',
9
+ answer: 'A tourbillon is a rotating cage that contains the escapement (balance wheel, pallet fork, and escape wheel) of a mechanical watch. It rotates continuously — typically once per minute — to average out positional errors caused by gravity, improving accuracy.',
10
+ },
11
+ {
12
+ question: 'What is the difference between a classic and a flying tourbillon?',
13
+ answer: 'A classic tourbillon is supported by both a top and bottom bridge, while a flying tourbillon is cantilevered from below with no visible upper support. Flying tourbillons offer an unobstructed view of the rotating escapement and are considered more aesthetically demanding to construct.',
14
+ },
15
+ {
16
+ question: 'Does a tourbillon actually improve accuracy?',
17
+ answer: 'In modern wristwatches, the accuracy benefit is minimal since positional errors are already well-compensated. However, in pocket watches (where the tourbillon was invented in 1801 by Breguet), the constant rotation eliminated rate differences between vertical positions. Today, tourbillons are primarily a demonstration of high horological artistry.',
18
+ },
19
+ ];
20
+
21
+ const howTo = [
22
+ {
23
+ name: 'Change tourbillon type',
24
+ text: 'Switch between Classic and Flying tourbillon to see the structural difference. The flying tourbillon has no upper bridge, revealing the full cage.',
25
+ },
26
+ {
27
+ name: 'Adjust beat rate',
28
+ text: 'Try different beat rates (18k, 28.8k, 36k VPH) to see how the balance wheel speed and escape wheel rotation change.',
29
+ },
30
+ {
31
+ name: 'Control speed',
32
+ text: 'Use speed controls to slow down and observe the intricate dance of the escapement, or speed up to see the full cage rotation cycle.',
33
+ },
34
+ ];
35
+
36
+ const title = 'Tourbillon: Art of the Rotating Escapement';
37
+
38
+ export const content: ToolLocaleContent<TourbillonUI> = {
39
+ slug: 'tourbillon-visualizer',
40
+ title,
41
+ description: 'Experience the mesmerizing art of the tourbillon — a rotating cage housing the escapement. Watch the balance wheel oscillate, the hairspring breathe, and the cage rotate in an elegant mechanical ballet.',
42
+ ui: {
43
+ title: 'Tourbillon Visualizer',
44
+ typeLabel: 'Type',
45
+ typeClassic: 'Classic',
46
+ typeFlying: 'Flying',
47
+ speedLabel: 'Speed',
48
+ speedNormal: '1x',
49
+ speedSlow: '0.5x',
50
+ speedPaused: 'Paused',
51
+ beatRateLabel: 'Beat Rate',
52
+ rate18k: '18k',
53
+ rate28k: '28.8k',
54
+ rate36k: '36k',
55
+ cageRotationLabel: 'Cage',
56
+ showLabelsLabel: 'Labels',
57
+ step1: 'Switch between Classic and Flying tourbillon to compare their architecture.',
58
+ step2: 'Adjust the beat rate to see how it affects the escapement rhythm.',
59
+ step3: 'Use speed controls to observe the precise mechanical dance at any pace.',
60
+ tipTitle: 'Tip',
61
+ tipContent: 'Breguet invented the tourbillon in 1801. The word "tourbillon" means "whirlwind" in French, describing the rotating cage\'s appearance when in motion.',
62
+ balanceLabel: 'Balance',
63
+ escapeLabel: 'Escape',
64
+ palletLabel: 'Pallet',
65
+ cageLabel: 'Cage',
66
+ },
67
+ seo: [
68
+ { type: 'title', text: 'Tourbillon Visualizer: Animated Watch Escapement Art', level: 2 },
69
+ { type: 'paragraph', html: 'The <strong>tourbillon</strong> is one of the most captivating complications in haute horlogerie. This interactive visualizer brings the rotating escapement to life with a detailed animated rendering of the balance wheel, hairspring, pallet fork, escape wheel, and the iconic rotating cage. Explore the mechanical poetry of Breguet\'s masterpiece.' },
70
+ { type: 'title', text: 'How a Tourbillon Works', level: 3 },
71
+ { type: 'paragraph', html: 'A tourbillon houses the entire escapement — <strong>balance wheel, hairspring, pallet fork, and escape wheel</strong> — inside a rotating cage. The cage typically completes one rotation per minute, continuously changing the position of the escapement relative to gravity. This averages out positional timing errors, a concept that was revolutionary when Abraham-Louis Breguet patented it in 1801. The <strong>balance wheel</strong> oscillates at the watch\'s beat rate (typically 4 Hz / 28,800 vph), while the <strong>escape wheel</strong> advances one tooth per beat, creating the characteristic ticking motion.' },
72
+ { type: 'title', text: 'Classic vs Flying Tourbillon', level: 3 },
73
+ {
74
+ type: 'table', headers: ['Feature', 'Classic Tourbillon', 'Flying Tourbillon'], rows: [
75
+ ['Upper support', 'Visible bridge / cock', 'None (cantilevered)'],
76
+ ['Visibility', 'Partial (bridge in view)', 'Full (unobstructed)'],
77
+ ['Difficulty', 'High', 'Extremely high'],
78
+ ['Invented', '1801 (Breguet)', '1920s (Alfred Helwig)'],
79
+ ['Common in', 'Traditional brands', 'Modern independents'],
80
+ ]
81
+ },
82
+ { type: 'title', text: 'Beat Rate Comparison', level: 3 },
83
+ {
84
+ type: 'table', headers: ['Rate (vph)', 'Frequency', 'Escape Wheel RPM', 'Beat / Second', 'Typical Use'], rows: [
85
+ ['18,000', '2.5 Hz', '20 RPM', '5', 'Vintage pocket watches'],
86
+ ['28,800', '4 Hz', '32 RPM', '8', 'Modern standard (ETA, Rolex)'],
87
+ ['36,000', '5 Hz', '40 RPM', '10', 'High-frequency (Zenith)'],
88
+ ]
89
+ },
90
+ { type: 'diagnostic', variant: 'info', title: 'Mechanical Art in Motion', icon: 'mdi:rotate-orbit', badge: 'HOROLOGY', html: 'This visualizer is an artistic interpretation of a tourbillon escapement. The cage rotation, balance oscillation, hairspring breathing, pallet fork rocking, and escape wheel stepping are synchronized according to real mechanical relationships. Use the controls to explore this masterpiece of micromechanical engineering.' },
91
+ ],
92
+ faq,
93
+ bibliography,
94
+ howTo,
95
+ schemas: buildSchemas(title, faq, howTo),
96
+ };
@@ -0,0 +1,96 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { TourbillonUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+ import { buildSchemas } from '../helpers';
5
+
6
+ const faq = [
7
+ {
8
+ question: '¿Qué es un tourbillon?',
9
+ answer: 'Un tourbillon es una jaula giratoria que contiene el escape (volante, áncora y rueda de escape) de un reloj mecánico. Gira continuamente — generalmente una vez por minuto — para promediar los errores posicionales causados por la gravedad, mejorando la precisión.',
10
+ },
11
+ {
12
+ question: '¿Cuál es la diferencia entre un tourbillon clásico y uno volante?',
13
+ answer: 'Un tourbillon clásico está soportado por un puente superior e inferior, mientras que un tourbillon volante está en voladizo desde abajo sin soporte superior visible. Los tourbillons volantes ofrecen una vista sin obstrucciones del escape giratorio y se consideran más exigentes estéticamente de construir.',
14
+ },
15
+ {
16
+ question: '¿Realmente mejora la precisión un tourbillon?',
17
+ answer: 'En los relojes de pulsera modernos, el beneficio en precisión es mínimo ya que los errores posicionales ya están bien compensados. Sin embargo, en los relojes de bolsillo (para los que Breguet inventó el tourbillon en 1801), la rotación constante eliminaba las diferencias de ritmo entre posiciones verticales. Hoy, los tourbillons son principalmente una demostración de la alta artistry relojera.',
18
+ },
19
+ ];
20
+
21
+ const howTo = [
22
+ {
23
+ name: 'Cambiar tipo de tourbillon',
24
+ text: 'Cambie entre tourbillon clásico y volante para ver la diferencia estructural. El tourbillon volante no tiene puente superior, revelando la jaula completa.',
25
+ },
26
+ {
27
+ name: 'Ajustar frecuencia de batido',
28
+ text: 'Pruebe diferentes frecuencias (18k, 28.8k, 36k VPH) para ver cómo cambian la velocidad del volante y la rotación de la rueda de escape.',
29
+ },
30
+ {
31
+ name: 'Controlar velocidad',
32
+ text: 'Use los controles de velocidad para ralentizar y observar la intrincada danza del escape, o acelere para ver el ciclo completo de rotación de la jaula.',
33
+ },
34
+ ];
35
+
36
+ const title = 'Tourbillon: Arte del Escape Rotatorio';
37
+
38
+ export const content: ToolLocaleContent<TourbillonUI> = {
39
+ slug: 'tourbillon-visualizador',
40
+ title,
41
+ description: 'Experimente el fascinante arte del tourbillon — una jaula giratoria que alberga el escape. Observe el volante oscilar, el espiral respirar y la jaula girar en un elegante ballet mecánico.',
42
+ ui: {
43
+ title: 'Tourbillon Visualizer',
44
+ typeLabel: 'Tipo',
45
+ typeClassic: 'Clásico',
46
+ typeFlying: 'Volante',
47
+ speedLabel: 'Velocidad',
48
+ speedNormal: '1x',
49
+ speedSlow: '0.5x',
50
+ speedPaused: 'Pausado',
51
+ beatRateLabel: 'Frecuencia',
52
+ rate18k: '18k',
53
+ rate28k: '28.8k',
54
+ rate36k: '36k',
55
+ cageRotationLabel: 'Jaula',
56
+ showLabelsLabel: 'Etiquetas',
57
+ step1: 'Cambie entre tourbillon clásico y volante para comparar su arquitectura.',
58
+ step2: 'Ajuste la frecuencia para ver cómo afecta el ritmo del escape.',
59
+ step3: 'Use los controles de velocidad para observar la precisa danza mecánica a cualquier ritmo.',
60
+ tipTitle: 'Consejo',
61
+ tipContent: 'Breguet inventó el tourbillon en 1801. La palabra "tourbillon" significa "torbellino" en francés, describiendo la apariencia de la jaula giratoria en movimiento.',
62
+ balanceLabel: 'Volante',
63
+ escapeLabel: 'Escape',
64
+ palletLabel: 'Áncora',
65
+ cageLabel: 'Jaula',
66
+ },
67
+ seo: [
68
+ { type: 'title', text: 'Tourbillon Visualizer: Arte Animado del Escape', level: 2 },
69
+ { type: 'paragraph', html: 'El <strong>tourbillon</strong> es una de las complicaciones más cautivadoras de la alta relojería. Este visualizador interactivo da vida al escape giratorio con una representación animada detallada del volante, espiral, áncora, rueda de escape y la icónica jaula giratoria. Explore la poesía mecánica de la obra maestra de Breguet.' },
70
+ { type: 'title', text: 'Cómo funciona un tourbillon', level: 3 },
71
+ { type: 'paragraph', html: 'Un tourbillon alberga el escape completo — <strong>volante, espiral, áncora y rueda de escape</strong> — dentro de una jaula giratoria. La jaula completa típicamente una rotación por minuto, cambiando continuamente la posición del escape respecto a la gravedad. Esto promedia los errores de tiempo posicionales, un concepto que fue revolucionario cuando Abraham-Louis Breguet lo patentó en 1801. El <strong>volante</strong> oscila a la frecuencia del reloj (típicamente 4 Hz / 28.800 vph), mientras que la <strong>rueda de escape</strong> avanza un diente por batido, creando el característico movimiento de tic.' },
72
+ { type: 'title', text: 'Tourbillon Clásico vs Volante', level: 3 },
73
+ {
74
+ type: 'table', headers: ['Característica', 'Tourbillon Clásico', 'Tourbillon Volante'], rows: [
75
+ ['Soporte superior', 'Puente visible', 'Ninguno (voladizo)'],
76
+ ['Visibilidad', 'Parcial (puente visible)', 'Completa (sin obstrucciones)'],
77
+ ['Dificultad', 'Alta', 'Extremadamente alta'],
78
+ ['Inventado', '1801 (Breguet)', 'Años 1920 (Alfred Helwig)'],
79
+ ['Común en', 'Marcas tradicionales', 'Independientes modernos'],
80
+ ]
81
+ },
82
+ { type: 'title', text: 'Comparación de Frecuencias', level: 3 },
83
+ {
84
+ type: 'table', headers: ['Ritmo (vph)', 'Frecuencia', 'Rueda Escape RPM', 'Golpes/Segundo', 'Uso típico'], rows: [
85
+ ['18.000', '2,5 Hz', '20 RPM', '5', 'Relojes de bolsillo vintage'],
86
+ ['28.800', '4 Hz', '32 RPM', '8', 'Estándar moderno (ETA, Rolex)'],
87
+ ['36.000', '5 Hz', '40 RPM', '10', 'Alta frecuencia (Zenith)'],
88
+ ]
89
+ },
90
+ { type: 'diagnostic', variant: 'info', title: 'Arte Mecánico en Movimiento', icon: 'mdi:rotate-orbit', badge: 'RELOJERÍA', html: 'Este visualizador es una interpretación artística de un escape tourbillon. La rotación de la jaula, la oscilación del volante, la respiración del espiral, el balanceo del áncora y el avance de la rueda de escape están sincronizados según relaciones mecánicas reales. Use los controles para explorar esta obra maestra de la ingeniería micromecánica.' },
91
+ ],
92
+ faq,
93
+ bibliography,
94
+ howTo,
95
+ schemas: buildSchemas(title, faq, howTo),
96
+ };
@@ -0,0 +1,96 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { TourbillonUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+ import { buildSchemas } from '../helpers';
5
+
6
+ const faq = [
7
+ {
8
+ question: 'Quest-ce qu\'un tourbillon?',
9
+ answer: 'Un tourbillon est une cage rotative qui contient l\'échappement (balancier, ancre et roue d\'échappement) d\'une montre mécanique. Il tourne en continu — généralement une fois par minute — pour moyenner les erreurs de position causées par la gravité, améliorant ainsi la précision.',
10
+ },
11
+ {
12
+ question: 'Quelle est la différence entre un tourbillon classique et un tourbillon volant?',
13
+ answer: 'Un tourbillon classique est soutenu par un pont supérieur et inférieur, tandis qu\'un tourbillon volant est en porte-à-faux par le bas sans support supérieur visible. Les tourbillons volants offrent une vue dégagée sur l\'échappement rotatif et sont considérés comme plus exigeants esthétiquement à construire.',
14
+ },
15
+ {
16
+ question: 'Un tourbillon améliore-t-il réellement la précision?',
17
+ answer: 'Dans les montres-bracelets modernes, le bénéfice en précision est minime car les erreurs de position sont déjà bien compensées. Cependant, dans les montres de poche (pour lesquelles Breguet a inventé le tourbillon en 1801), la rotation constante éliminait les différences de marche entre les positions verticales. Aujourd\'hui, les tourbillons sont avant tout une démonstration du haut artisanat horloger.',
18
+ },
19
+ ];
20
+
21
+ const howTo = [
22
+ {
23
+ name: 'Changer le type de tourbillon',
24
+ text: 'Passez du tourbillon classique au tourbillon volant pour voir la différence structurelle. Le tourbillon volant n\'a pas de pont supérieur, révélant la cage complète.',
25
+ },
26
+ {
27
+ name: 'Ajuster la fréquence',
28
+ text: 'Essayez différentes fréquences (18k, 28.8k, 36k VPH) pour voir comment la vitesse du balancier et la rotation de la roue d\'échappement changent.',
29
+ },
30
+ {
31
+ name: 'Contrôler la vitesse',
32
+ text: 'Utilisez les contrôles de vitesse pour ralentir et observer la danse complexe de l\'échappement, ou accélérez pour voir le cycle complet de rotation de la cage.',
33
+ },
34
+ ];
35
+
36
+ const title = 'Tourbillon: Art de l\'Échappement Rotatif';
37
+
38
+ export const content: ToolLocaleContent<TourbillonUI> = {
39
+ slug: 'visualiseur-tourbillon',
40
+ title,
41
+ description: 'Découvrez l\'art fascinant du tourbillon — une cage rotative abritant l\'échappement. Regardez le balancier osciller, le spiral respirer et la cage tourner dans un ballet mécanique élégant.',
42
+ ui: {
43
+ title: 'Tourbillon Visualizer',
44
+ typeLabel: 'Type',
45
+ typeClassic: 'Classique',
46
+ typeFlying: 'Volant',
47
+ speedLabel: 'Vitesse',
48
+ speedNormal: '1x',
49
+ speedSlow: '0.5x',
50
+ speedPaused: 'Pause',
51
+ beatRateLabel: 'Fréquence',
52
+ rate18k: '18k',
53
+ rate28k: '28.8k',
54
+ rate36k: '36k',
55
+ cageRotationLabel: 'Cage',
56
+ showLabelsLabel: 'Étiquettes',
57
+ step1: 'Passez du tourbillon classique au volant pour comparer leur architecture.',
58
+ step2: 'Ajustez la fréquence pour voir comment elle affecte le rythme de l\'échappement.',
59
+ step3: 'Utilisez les contrôles de vitesse pour observer la danse mécanique précise à tout rythme.',
60
+ tipTitle: 'Astuce',
61
+ tipContent: 'Breguet a inventé le tourbillon en 1801. Le mot "tourbillon" signifie "tourbillon de vent" en français, décrivant l\'apparence de la cage rotative en mouvement.',
62
+ balanceLabel: 'Balancier',
63
+ escapeLabel: 'Échappement',
64
+ palletLabel: 'Ancre',
65
+ cageLabel: 'Cage',
66
+ },
67
+ seo: [
68
+ { type: 'title', text: 'Tourbillon Visualizer: Art Animé de l\'Échappement', level: 2 },
69
+ { type: 'paragraph', html: 'Le <strong>tourbillon</strong> est l\'une des complications les plus captivantes de la haute horlogerie. Ce visualiseur interactif donne vie à l\'échappement rotatif avec un rendu animé détaillé du balancier, du spiral, de l\'ancre, de la roue d\'échappement et de l\'iconique cage rotative. Explorez la poésie mécanique du chef-d\'œuvre de Breguet.' },
70
+ { type: 'title', text: 'Comment fonctionne un tourbillon', level: 3 },
71
+ { type: 'paragraph', html: 'Un tourbillon abrite l\'ensemble de l\'échappement — <strong>balancier, spiral, ancre et roue d\'échappement</strong> — à l\'intérieur d\'une cage rotative. La cage effectue généralement une rotation par minute, changeant continuellement la position de l\'échappement par rapport à la gravité. Cela moyenne les erreurs de timing positionnelles, un concept révolutionnaire quand Abraham-Louis Breguet l\'a breveté en 1801. Le <strong>balancier</strong> oscille à la fréquence de la montre (généralement 4 Hz / 28 800 VPH), tandis que la <strong>roue d\'échappement</strong> avance d\'une dent par battement, créant le mouvement de tic caractéristique.' },
72
+ { type: 'title', text: 'Tourbillon Classique vs Volant', level: 3 },
73
+ {
74
+ type: 'table', headers: ['Caractéristique', 'Tourbillon Classique', 'Tourbillon Volant'], rows: [
75
+ ['Support supérieur', 'Pont visible', 'Aucun (en porte-à-faux)'],
76
+ ['Visibilité', 'Partielle (pont visible)', 'Complète (sans obstruction)'],
77
+ ['Difficulté', 'Élevée', 'Extrêmement élevée'],
78
+ ['Inventé', '1801 (Breguet)', 'Années 1920 (Alfred Helwig)'],
79
+ ['Courant dans', 'Marques traditionnelles', 'Indépendants modernes'],
80
+ ]
81
+ },
82
+ { type: 'title', text: 'Comparaison des Fréquences', level: 3 },
83
+ {
84
+ type: 'table', headers: ['Rythme (vph)', 'Fréquence', 'Roue Échappement tr/min', 'Battements/s', 'Utilisation typique'], rows: [
85
+ ['18 000', '2,5 Hz', '20 tr/min', '5', 'Montres de poche vintage'],
86
+ ['28 800', '4 Hz', '32 tr/min', '8', 'Standard moderne (ETA, Rolex)'],
87
+ ['36 000', '5 Hz', '40 tr/min', '10', 'Haute fréquence (Zenith)'],
88
+ ]
89
+ },
90
+ { type: 'diagnostic', variant: 'info', title: 'Art Mécanique en Mouvement', icon: 'mdi:rotate-orbit', badge: 'HORLOGERIE', html: 'Ce visualiseur est une interprétation artistique d\'un échappement à tourbillon. La rotation de la cage, l\'oscillation du balancier, la respiration du spiral, le balancement de l\'ancre et l\'avance de la roue d\'échappement sont synchronisés selon des relations mécaniques réelles. Utilisez les commandes pour explorer ce chef-d\'œuvre d\'ingénierie micromécanique.' },
91
+ ],
92
+ faq,
93
+ bibliography,
94
+ howTo,
95
+ schemas: buildSchemas(title, faq, howTo),
96
+ };
@@ -0,0 +1,96 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { TourbillonUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+ import { buildSchemas } from '../helpers';
5
+
6
+ const faq = [
7
+ {
8
+ question: 'Apa itu tourbillon?',
9
+ answer: 'Tourbillon adalah sangkar berputar yang berisi escapement (roda keseimbangan, garpu palet, dan roda escapement) dari jam tangan mekanis. Ia berputar terus menerus — biasanya sekali per menit — untuk merata-ratakan kesalahan posisi yang disebabkan oleh gravitasi, meningkatkan akurasi.',
10
+ },
11
+ {
12
+ question: 'Apa perbedaan antara tourbillon klasik dan terbang?',
13
+ answer: 'Tourbillon klasik didukung oleh jembatan atas dan bawah, sementara tourbillon terbang adalah kantilever dari bawah tanpa dukungan atas yang terlihat. Tourbillon terbang menawarkan pandangan tanpa halangan dari escapement yang berputar dan dianggap lebih menuntut secara estetis untuk dibangun.',
14
+ },
15
+ {
16
+ question: 'Apakah tourbillon benar-benar meningkatkan akurasi?',
17
+ answer: 'Dalam jam tangan modern, manfaat akurasinya minimal karena kesalahan posisi sudah dikompensasi dengan baik. Namun, dalam jam saku (yang untuknya Breguet menemukan tourbillon pada 1801), rotasi konstan menghilangkan perbedaan laju antara posisi vertikal. Saat ini, tourbillon terutama merupakan demonstrasi dari artistry horologi tinggi.',
18
+ },
19
+ ];
20
+
21
+ const howTo = [
22
+ {
23
+ name: 'Ubah tipe tourbillon',
24
+ text: 'Beralih antara tourbillon Klasik dan Terbang untuk melihat perbedaan struktural. Tourbillon terbang tidak memiliki jembatan atas, mengungkapkan sangkar penuh.',
25
+ },
26
+ {
27
+ name: 'Sesuaikan kecepatan detak',
28
+ text: 'Coba kecepatan detak yang berbeda (18k, 28.8k, 36k VPH) untuk melihat bagaimana kecepatan roda keseimbangan dan rotasi roda escapement berubah.',
29
+ },
30
+ {
31
+ name: 'Kontrol kecepatan',
32
+ text: 'Gunakan kontrol kecepatan untuk memperlambat dan mengamati tarian rumit escapement, atau percepat untuk melihat siklus rotasi sangkar penuh.',
33
+ },
34
+ ];
35
+
36
+ const title = 'Tourbillon: Seni Escapement Berputar';
37
+
38
+ export const content: ToolLocaleContent<TourbillonUI> = {
39
+ slug: 'tourbillon-visualisator',
40
+ title,
41
+ description: 'Alami seni tourbillon yang memukau — sebuah sangkar berputar yang menampung escapement. Saksikan roda keseimbangan berosilasi, pegas bernapas, dan sangkar berputar dalam balet mekanis yang elegan.',
42
+ ui: {
43
+ title: 'Tourbillon Visualizer',
44
+ typeLabel: 'Tipe',
45
+ typeClassic: 'Klasik',
46
+ typeFlying: 'Terbang',
47
+ speedLabel: 'Kecepatan',
48
+ speedNormal: '1x',
49
+ speedSlow: '0.5x',
50
+ speedPaused: 'Dijeda',
51
+ beatRateLabel: 'Kecepatan Detak',
52
+ rate18k: '18k',
53
+ rate28k: '28.8k',
54
+ rate36k: '36k',
55
+ cageRotationLabel: 'Sangkar',
56
+ showLabelsLabel: 'Label',
57
+ step1: 'Beralih antara tourbillon Klasik dan Terbang untuk membandingkan arsitektur mereka.',
58
+ step2: 'Sesuaikan kecepatan detak untuk melihat bagaimana ia mempengaruhi ritme escapement.',
59
+ step3: 'Gunakan kontrol kecepatan untuk mengamati tarian mekanis yang presisi pada kecepatan apa pun.',
60
+ tipTitle: 'Tip',
61
+ tipContent: 'Breguet menemukan tourbillon pada 1801. Kata "tourbillon" berarti "angin puyuh" dalam bahasa Prancis, menggambarkan penampilan sangkar berputar saat bergerak.',
62
+ balanceLabel: 'Keseimbangan',
63
+ escapeLabel: 'Escapement',
64
+ palletLabel: 'Palet',
65
+ cageLabel: 'Sangkar',
66
+ },
67
+ seo: [
68
+ { type: 'title', text: 'Tourbillon Visualizer: Seni Escapement Animasi', level: 2 },
69
+ { type: 'paragraph', html: '<strong>Tourbillon</strong> adalah salah satu komplikasi paling memikat dalam haute horlogerie. Visualisator interaktif ini menghidupkan escapement berputar dengan rendering animasi detail dari roda keseimbangan, pegas, garpu palet, roda escapement, dan sangkar berputar yang ikonik. Jelajahi puisi mekanis dari mahakarya Breguet.' },
70
+ { type: 'title', text: 'Bagaimana tourbillon bekerja', level: 3 },
71
+ { type: 'paragraph', html: 'Sebuah tourbillon menampung seluruh escapement — <strong>roda keseimbangan, pegas, garpu palet, dan roda escapement</strong> — di dalam sangkar berputar. Sangkar biasanya menyelesaikan satu rotasi per menit, terus-menerus mengubah posisi escapement relatif terhadap gravitasi. Ini merata-ratakan kesalahan waktu posisional, sebuah konsep yang revolusioner ketika Abraham-Louis Breguet mempatenkannya pada 1801. <strong>Roda keseimbangan</strong> berosilasi pada kecepatan detak jam (biasanya 4 Hz / 28.800 vph), sementara <strong>roda escapement</strong> maju satu gigi per detak, menciptakan gerakan tik yang khas.' },
72
+ { type: 'title', text: 'Tourbillon Klasik vs Terbang', level: 3 },
73
+ {
74
+ type: 'table', headers: ['Fitur', 'Tourbillon Klasik', 'Tourbillon Terbang'], rows: [
75
+ ['Dukungan atas', 'Jembatan terlihat', 'Tidak ada (kantilever)'],
76
+ ['Visibilitas', 'Sebagian (jembatan terlihat)', 'Penuh (tanpa halangan)'],
77
+ ['Kesulitan', 'Tinggi', 'Sangat tinggi'],
78
+ ['Diciptakan', '1801 (Breguet)', '1920-an (Alfred Helwig)'],
79
+ ['Umum di', 'Merek tradisional', 'Independen modern'],
80
+ ]
81
+ },
82
+ { type: 'title', text: 'Perbandingan Kecepatan Detak', level: 3 },
83
+ {
84
+ type: 'table', headers: ['Kecepatan (vph)', 'Frekuensi', 'Roda Escapement rpm', 'Detak/dtk', 'Penggunaan Khas'], rows: [
85
+ ['18.000', '2,5 Hz', '20 rpm', '5', 'Jam saku vintage'],
86
+ ['28.800', '4 Hz', '32 rpm', '8', 'Standar modern (ETA, Rolex)'],
87
+ ['36.000', '5 Hz', '40 rpm', '10', 'Frekuensi tinggi (Zenith)'],
88
+ ]
89
+ },
90
+ { type: 'diagnostic', variant: 'info', title: 'Seni Mekanis dalam Gerakan', icon: 'mdi:rotate-orbit', badge: 'HOROLOGI', html: 'Visualisator ini adalah interpretasi artistik dari escapement tourbillon. Rotasi sangkar, osilasi keseimbangan, napas pegas, goyangan palet, dan langkah roda escapement disinkronkan sesuai dengan hubungan mekanis nyata. Gunakan kontrol untuk menjelajahi mahakarya teknik mikromekanis ini.' },
91
+ ],
92
+ faq,
93
+ bibliography,
94
+ howTo,
95
+ schemas: buildSchemas(title, faq, howTo),
96
+ };