@jjlmoya/utils-nautical 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 (99) hide show
  1. package/package.json +72 -71
  2. package/src/tests/i18n_coverage.test.ts +36 -0
  3. package/src/tests/locale_completeness.test.ts +42 -0
  4. package/src/tests/no_h1_in_components.test.ts +48 -0
  5. package/src/tests/schemas_fulfillment.test.ts +23 -0
  6. package/src/tests/slug_uniqueness.test.ts +81 -0
  7. package/src/tests/title_quality.test.ts +55 -0
  8. package/src/tool/endurance/component.astro +340 -1
  9. package/src/tool/endurance/i18n/de.ts +249 -0
  10. package/src/tool/endurance/i18n/id.ts +249 -0
  11. package/src/tool/endurance/i18n/it.ts +249 -0
  12. package/src/tool/endurance/i18n/ja.ts +249 -0
  13. package/src/tool/endurance/i18n/ko.ts +249 -0
  14. package/src/tool/endurance/i18n/nl.ts +249 -0
  15. package/src/tool/endurance/i18n/pl.ts +249 -0
  16. package/src/tool/endurance/i18n/pt.ts +249 -0
  17. package/src/tool/endurance/i18n/ru.ts +249 -0
  18. package/src/tool/endurance/i18n/sv.ts +249 -0
  19. package/src/tool/endurance/i18n/tr.ts +249 -0
  20. package/src/tool/endurance/i18n/zh.ts +249 -0
  21. package/src/tool/endurance/index.ts +12 -0
  22. package/src/tool/nauticalConverter/component.astro +208 -1
  23. package/src/tool/nauticalConverter/i18n/de.ts +239 -0
  24. package/src/tool/nauticalConverter/i18n/id.ts +239 -0
  25. package/src/tool/nauticalConverter/i18n/it.ts +239 -0
  26. package/src/tool/nauticalConverter/i18n/ja.ts +239 -0
  27. package/src/tool/nauticalConverter/i18n/ko.ts +239 -0
  28. package/src/tool/nauticalConverter/i18n/nl.ts +239 -0
  29. package/src/tool/nauticalConverter/i18n/pl.ts +239 -0
  30. package/src/tool/nauticalConverter/i18n/pt.ts +239 -0
  31. package/src/tool/nauticalConverter/i18n/ru.ts +239 -0
  32. package/src/tool/nauticalConverter/i18n/sv.ts +239 -0
  33. package/src/tool/nauticalConverter/i18n/tr.ts +239 -0
  34. package/src/tool/nauticalConverter/i18n/zh.ts +239 -0
  35. package/src/tool/nauticalConverter/index.ts +12 -0
  36. package/src/tool/sailArea/component.astro +355 -2
  37. package/src/tool/sailArea/i18n/de.ts +275 -0
  38. package/src/tool/sailArea/i18n/id.ts +275 -0
  39. package/src/tool/sailArea/i18n/it.ts +275 -0
  40. package/src/tool/sailArea/i18n/ja.ts +275 -0
  41. package/src/tool/sailArea/i18n/ko.ts +275 -0
  42. package/src/tool/sailArea/i18n/nl.ts +275 -0
  43. package/src/tool/sailArea/i18n/pl.ts +275 -0
  44. package/src/tool/sailArea/i18n/pt.ts +275 -0
  45. package/src/tool/sailArea/i18n/ru.ts +275 -0
  46. package/src/tool/sailArea/i18n/sv.ts +275 -0
  47. package/src/tool/sailArea/i18n/tr.ts +275 -0
  48. package/src/tool/sailArea/i18n/zh.ts +275 -0
  49. package/src/tool/sailArea/index.ts +12 -0
  50. package/src/tool/speedConverter/component.astro +242 -1
  51. package/src/tool/speedConverter/i18n/de.ts +271 -0
  52. package/src/tool/speedConverter/i18n/id.ts +271 -0
  53. package/src/tool/speedConverter/i18n/it.ts +271 -0
  54. package/src/tool/speedConverter/i18n/ja.ts +271 -0
  55. package/src/tool/speedConverter/i18n/ko.ts +271 -0
  56. package/src/tool/speedConverter/i18n/nl.ts +271 -0
  57. package/src/tool/speedConverter/i18n/pl.ts +271 -0
  58. package/src/tool/speedConverter/i18n/pt.ts +271 -0
  59. package/src/tool/speedConverter/i18n/ru.ts +194 -0
  60. package/src/tool/speedConverter/i18n/sv.ts +271 -0
  61. package/src/tool/speedConverter/i18n/tr.ts +225 -0
  62. package/src/tool/speedConverter/i18n/zh.ts +271 -0
  63. package/src/tool/speedConverter/index.ts +12 -0
  64. package/src/tool/tideCalculator/component.astro +313 -1
  65. package/src/tool/tideCalculator/i18n/de.ts +203 -0
  66. package/src/tool/tideCalculator/i18n/id.ts +203 -0
  67. package/src/tool/tideCalculator/i18n/it.ts +203 -0
  68. package/src/tool/tideCalculator/i18n/ja.ts +203 -0
  69. package/src/tool/tideCalculator/i18n/ko.ts +203 -0
  70. package/src/tool/tideCalculator/i18n/nl.ts +203 -0
  71. package/src/tool/tideCalculator/i18n/pl.ts +203 -0
  72. package/src/tool/tideCalculator/i18n/pt.ts +203 -0
  73. package/src/tool/tideCalculator/i18n/ru.ts +203 -0
  74. package/src/tool/tideCalculator/i18n/sv.ts +203 -0
  75. package/src/tool/tideCalculator/i18n/tr.ts +203 -0
  76. package/src/tool/tideCalculator/i18n/zh.ts +203 -0
  77. package/src/tool/tideCalculator/index.ts +12 -0
  78. package/src/tool/underKeel/component.astro +321 -1
  79. package/src/tool/underKeel/i18n/de.ts +189 -0
  80. package/src/tool/underKeel/i18n/en.ts +2 -2
  81. package/src/tool/underKeel/i18n/fr.ts +2 -2
  82. package/src/tool/underKeel/i18n/id.ts +189 -0
  83. package/src/tool/underKeel/i18n/it.ts +176 -0
  84. package/src/tool/underKeel/i18n/ja.ts +185 -0
  85. package/src/tool/underKeel/i18n/ko.ts +185 -0
  86. package/src/tool/underKeel/i18n/nl.ts +176 -0
  87. package/src/tool/underKeel/i18n/pl.ts +176 -0
  88. package/src/tool/underKeel/i18n/pt.ts +176 -0
  89. package/src/tool/underKeel/i18n/ru.ts +176 -0
  90. package/src/tool/underKeel/i18n/sv.ts +176 -0
  91. package/src/tool/underKeel/i18n/tr.ts +185 -0
  92. package/src/tool/underKeel/i18n/zh.ts +185 -0
  93. package/src/tool/underKeel/index.ts +12 -0
  94. package/src/tool/endurance/style.css +0 -337
  95. package/src/tool/nauticalConverter/style.css +0 -205
  96. package/src/tool/sailArea/style.css +0 -351
  97. package/src/tool/speedConverter/style.css +0 -239
  98. package/src/tool/tideCalculator/style.css +0 -310
  99. package/src/tool/underKeel/style.css +0 -318
@@ -1,5 +1,4 @@
1
1
  ---
2
- import './style.css';
3
2
  import type { TideCalculatorUI } from './index';
4
3
 
5
4
  interface Props {
@@ -312,3 +311,316 @@ const { ui } = Astro.props;
312
311
 
313
312
  new TideCalculator();
314
313
  </script>
314
+
315
+ <style>
316
+ .tide-calculator {
317
+ --n-bg: #fff;
318
+ --n-bg-muted: #f1f5f9;
319
+ --n-text: #0f172a;
320
+ --n-text-muted: #475569;
321
+ --n-text-dim: #64748b;
322
+ --n-border: #e2e8f0;
323
+ --n-shadow: rgba(0, 0, 0, 0.05);
324
+ --n-primary: #3b82f6;
325
+ --n-primary-on: #fff;
326
+ --n-accent: #6366f1;
327
+ --n-cyan: #0891b2;
328
+ --n-success: #10b981;
329
+ --n-warning: #f59e0b;
330
+ --n-error: #f43f5e;
331
+
332
+ display: flex;
333
+ flex-direction: column;
334
+ gap: 1.5rem;
335
+ max-width: 1000px;
336
+ margin: 0 auto;
337
+ }
338
+
339
+ :global(.theme-dark) .tide-calculator {
340
+ --n-bg: #0f172a;
341
+ --n-bg-muted: #1e293b;
342
+ --n-text: #f8fafc;
343
+ --n-text-muted: #94a3b8;
344
+ --n-text-dim: #64748b;
345
+ --n-border: #334155;
346
+ --n-shadow: rgba(0, 0, 0, 0.3);
347
+ --n-primary: #60a5fa;
348
+ --n-primary-on: #fff;
349
+ --n-accent: #818cf8;
350
+ --n-cyan: #22d3ee;
351
+ --n-success: #34d399;
352
+ --n-warning: #fbbf24;
353
+ --n-error: #fb7185;
354
+ }
355
+
356
+ .tc-main-card {
357
+ background: var(--n-bg);
358
+ border: 1px solid var(--n-border);
359
+ border-radius: 2rem;
360
+ display: grid;
361
+ grid-template-columns: 320px 1fr;
362
+ overflow: hidden;
363
+ box-shadow: 0 20px 40px var(--n-shadow);
364
+ }
365
+
366
+ @media (max-width: 850px) {
367
+ .tc-main-card {
368
+ grid-template-columns: 1fr;
369
+ }
370
+ }
371
+
372
+ .tc-calc-sidebar {
373
+ background: var(--n-primary);
374
+ color: var(--n-primary-on);
375
+ padding: 2rem;
376
+ display: flex;
377
+ flex-direction: column;
378
+ gap: 2rem;
379
+ }
380
+
381
+ .tc-sidebar-header {
382
+ display: flex;
383
+ justify-content: space-between;
384
+ align-items: center;
385
+ }
386
+
387
+ .tc-sidebar-header h3 {
388
+ font-size: 1.1rem;
389
+ margin: 0;
390
+ font-weight: 700;
391
+ text-transform: uppercase;
392
+ letter-spacing: 0.05em;
393
+ opacity: 0.9;
394
+ }
395
+
396
+ :global(#invert-btn) {
397
+ background: rgba(255, 255, 255, 0.1);
398
+ border: none;
399
+ color: var(--n-primary-on);
400
+ width: 36px;
401
+ height: 36px;
402
+ border-radius: 50%;
403
+ cursor: pointer;
404
+ display: flex;
405
+ align-items: center;
406
+ justify-content: center;
407
+ transition: background 0.2s;
408
+ }
409
+
410
+ :global(#invert-btn:hover) {
411
+ background: rgba(255, 255, 255, 0.2);
412
+ }
413
+
414
+ .tc-input-set {
415
+ display: flex;
416
+ flex-direction: column;
417
+ gap: 1.5rem;
418
+ }
419
+
420
+ .tc-input-block {
421
+ display: flex;
422
+ flex-direction: column;
423
+ gap: 0.5rem;
424
+ }
425
+
426
+ .tc-input-block label {
427
+ font-size: 0.85rem;
428
+ font-weight: 700;
429
+ color: var(--n-primary-on);
430
+ opacity: 0.85;
431
+ }
432
+
433
+ .tc-input-block .row {
434
+ display: flex;
435
+ gap: 0.5rem;
436
+ }
437
+
438
+ .tide-calculator input[type='time'],
439
+ .tide-calculator input[type='number'] {
440
+ background: rgba(255, 255, 255, 0.1);
441
+ border: 1px solid rgba(255, 255, 255, 0.2);
442
+ border-radius: 0.8rem;
443
+ padding: 0.8rem;
444
+ color: var(--n-primary-on);
445
+ font-size: 1rem;
446
+ outline: none;
447
+ }
448
+
449
+ .tc-unit-input {
450
+ position: relative;
451
+ display: flex;
452
+ align-items: center;
453
+ }
454
+
455
+ .tc-unit-input input {
456
+ width: 80px;
457
+ padding-right: 25px;
458
+ }
459
+
460
+ .tc-unit-input span {
461
+ position: absolute;
462
+ right: 10px;
463
+ font-size: 0.8rem;
464
+ opacity: 0.5;
465
+ }
466
+
467
+ .tc-featured label {
468
+ color: var(--n-primary-on);
469
+ opacity: 1;
470
+ font-size: 0.95rem;
471
+ }
472
+
473
+ .tide-calculator input[type='time'].large-time {
474
+ background: var(--n-primary-on);
475
+ color: var(--n-primary);
476
+ font-size: 1.8rem;
477
+ font-weight: 800;
478
+ text-align: center;
479
+ }
480
+
481
+ .tc-calc-content {
482
+ padding: 2.5rem;
483
+ display: flex;
484
+ flex-direction: column;
485
+ gap: 2rem;
486
+ background: var(--n-bg-muted);
487
+ }
488
+
489
+ .tc-top-row {
490
+ display: flex;
491
+ justify-content: space-between;
492
+ align-items: flex-start;
493
+ }
494
+
495
+ .tc-result-display {
496
+ display: flex;
497
+ flex-direction: column;
498
+ }
499
+
500
+ .tc-result-display .label {
501
+ font-size: 0.85rem;
502
+ font-weight: 600;
503
+ color: var(--n-text-muted);
504
+ text-transform: uppercase;
505
+ letter-spacing: 0.05em;
506
+ }
507
+
508
+ .tc-value-box {
509
+ display: flex;
510
+ align-items: baseline;
511
+ gap: 0.5rem;
512
+ margin: 0.5rem 0;
513
+ }
514
+
515
+ :global(#target-value) {
516
+ font-size: 4rem;
517
+ font-weight: 800;
518
+ color: var(--n-accent);
519
+ line-height: 1;
520
+ }
521
+
522
+ .tc-value-box small {
523
+ font-size: 1.2rem;
524
+ font-weight: 600;
525
+ color: var(--n-text-dim);
526
+ }
527
+
528
+ .tc-status-indicator {
529
+ padding: 0.4rem 1rem;
530
+ border-radius: 2rem;
531
+ font-size: 0.85rem;
532
+ font-weight: 700;
533
+ display: inline-block;
534
+ width: fit-content;
535
+ background: var(--n-bg-muted);
536
+ color: var(--n-text-dim);
537
+ }
538
+
539
+ .tc-status-indicator.up {
540
+ background: color-mix(in srgb, var(--n-success), transparent 80%);
541
+ color: var(--n-success);
542
+ }
543
+
544
+ .tc-status-indicator.down {
545
+ background: color-mix(in srgb, var(--n-error), transparent 80%);
546
+ color: var(--n-error);
547
+ }
548
+
549
+ .tc-summary-info {
550
+ display: flex;
551
+ gap: 1.5rem;
552
+ }
553
+
554
+ .tc-stat {
555
+ display: flex;
556
+ flex-direction: column;
557
+ text-align: right;
558
+ }
559
+
560
+ .tc-s-label {
561
+ font-size: 0.75rem;
562
+ font-weight: 600;
563
+ color: var(--n-text-muted);
564
+ text-transform: uppercase;
565
+ }
566
+
567
+ .tc-stat span:last-child {
568
+ font-size: 1.1rem;
569
+ font-weight: 700;
570
+ color: var(--n-text);
571
+ }
572
+
573
+ .tc-chart-area {
574
+ background: var(--n-bg);
575
+ border: 1px solid var(--n-border);
576
+ border-radius: 1.5rem;
577
+ padding: 1.5rem;
578
+ height: 250px;
579
+ position: relative;
580
+ }
581
+
582
+ .tc-table-card {
583
+ background: var(--n-bg);
584
+ border: 1px solid var(--n-border);
585
+ border-radius: 1.5rem;
586
+ padding: 1.5rem;
587
+ }
588
+
589
+ .tc-table-card h4 {
590
+ margin: 0 0 1rem;
591
+ font-size: 1rem;
592
+ color: var(--n-text-muted);
593
+ }
594
+
595
+ .tc-table-wrapper {
596
+ overflow-x: auto;
597
+ }
598
+
599
+ .tide-calculator table {
600
+ width: 100%;
601
+ border-collapse: collapse;
602
+ }
603
+
604
+ .tide-calculator th {
605
+ text-align: left;
606
+ padding: 1rem;
607
+ font-size: 0.8rem;
608
+ color: var(--n-text-muted);
609
+ text-transform: uppercase;
610
+ border-bottom: 2px solid var(--n-bg-muted);
611
+ }
612
+
613
+ .tide-calculator td {
614
+ padding: 1rem;
615
+ font-size: 0.95rem;
616
+ color: var(--n-text-muted);
617
+ border-bottom: 1px solid var(--n-bg-muted);
618
+ }
619
+
620
+ @media (max-width: 640px) {
621
+ .tc-top-row {
622
+ flex-direction: column;
623
+ gap: 1.5rem;
624
+ }
625
+ }
626
+ </style>
@@ -0,0 +1,203 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TideCalculatorUI, TideCalculatorLocaleContent } from '../index';
3
+
4
+ const slug = 'gezeiten-rechner-de';
5
+ const title = 'Gezeitenhöhenrechner';
6
+ const description =
7
+ 'Schätzen Sie die Wassertiefe zu jedem Zeitpunkt des Gezeitenzyklus mithilfe der nautischen Zwölftel-Regel. Ideal für die Küstenplanung und das Studium für den Sportbootführerschein.';
8
+
9
+ const ui: TideCalculatorUI = {
10
+ parametersLabel: 'Parameter',
11
+ highTideLabel: 'Hochwasser',
12
+ lowTideLabel: 'Niedrigwasser',
13
+ targetTimeLabel: 'Abfragezeitpunkt',
14
+ estimatedHeightLabel: 'Geschätzte Höhe',
15
+ metersLabel: 'Meter',
16
+ amplitudeLabel: 'Tidenhub',
17
+ durationLabel: 'Dauer',
18
+ tableBreakdownLabel: 'Zwölftel-Aufschlüsselung',
19
+ tableHourLabel: 'Zeit',
20
+ tableStateLabel: 'Zustand',
21
+ tableStartLabel: 'Beginn',
22
+ tableEndLabel: 'Ende',
23
+ statusUpLabel: 'Auflaufend',
24
+ statusDownLabel: 'Ablaufend',
25
+ statusOutOfRange: 'Außerhalb des Bereichs',
26
+ faqTitle: 'Häufig gestellte Fragen',
27
+ bibliographyTitle: 'Bibliografie',
28
+ };
29
+
30
+ const faq: TideCalculatorLocaleContent['faq'] = [
31
+ {
32
+ question: 'Was ist die Zwölftel-Regel und wofür wird sie verwendet?',
33
+ answer:
34
+ 'Die Zwölftel-Regel ist eine vereinfachte mathematische Methode in der Navigation, um die Gezeitenhöhe zu jedem Zeitpunkt zwischen Hoch- und Niedrigwasser zu schätzen. Sie basiert auf der Beobachtung, dass der Gezeitenfluss einer annähernden Sinuskurve folgt, wobei der gesamte Tidenhub über 6 Stunden in 12 Teile unterteilt wird (1/12, 2/12, 3/12, 3/12, 2/12, 1/12).',
35
+ },
36
+ {
37
+ question: 'Ist diese Methode für die reale Navigation zuverlässig?',
38
+ answer:
39
+ 'Es ist eine sehr nützliche theoretische Schätzmethode für die schnelle Planung und zu Ausbildungszwecken. Sie berücksichtigt jedoch keine meteorologischen Faktoren wie Luftdruck oder Wind, die den Meeresspiegel um mehrere Dezimeter verändern können. Konsultieren Sie für die reale Navigation immer offizielle Gezeitentafeln.',
40
+ },
41
+ {
42
+ question: 'Welche Daten benötige ich, um die Gezeitenhöhe zu berechnen?',
43
+ answer:
44
+ 'Sie benötigen die Uhrzeit und die Höhe (in Metern) des Hochwassers und des Niedrigwassers, die dem Zeitpunkt Ihrer Abfrage am nächsten liegen. Diese Daten finden Sie in Gezeitenkalendern oder Marine-Wetter-Apps.',
45
+ },
46
+ {
47
+ question: 'Warum steigt die Gezeit nicht immer mit der gleichen Geschwindigkeit?',
48
+ answer:
49
+ 'Aufgrund der Trägheit großer Wassermassen und der Konfiguration der Ozeanbecken. Die Gezeit beginnt nach dem Niedrigwasser langsam zu steigen, erreicht in den mittleren Stunden (den 3/12-Stunden) ihre maximale Geschwindigkeit und verlangsamt sich wieder, wenn sie sich dem Hochwasser nähert.',
50
+ },
51
+ {
52
+ question: 'Wie beeinflusst der Luftdruck die Gezeiten?',
53
+ answer:
54
+ 'Hoher Luftdruck (Antizyklon) drückt das Wasser nach unten und verringert die tatsächliche Höhe. Niedriger Luftdruck (Depression) lässt das Wasser höher steigen. Als Faustgel gilt: Eine Abweichung von 1 hPa vom Mittelwert entspricht etwa 1 cm Veränderung des Meeresspiegels.',
55
+ },
56
+ {
57
+ question: 'Was ist der Tidenhub?',
58
+ answer:
59
+ 'Es ist der vertikale Höhenunterschied zwischen einem Hochwasser und dem unmittelbar vorangehenden oder folgenden Niedrigwasser. Dieses Maß variiert je nach Mondphase (Spring- und Nipptiden) und geografischer Lage.',
60
+ },
61
+ ];
62
+
63
+ const howTo: TideCalculatorLocaleContent['howTo'] = [
64
+ {
65
+ name: 'Hoch- und Niedrigwasser identifizieren',
66
+ text: 'Schauen Sie in Ihrem Gezeitenkalender nach den Zeiten und Höhen für den Gezeitenzyklus, der Sie interessiert.',
67
+ },
68
+ {
69
+ name: 'Daten in den Rechner eingeben',
70
+ text: 'Geben Sie Uhrzeit und Höhe von Hoch- und Niedrigwasser ein. Das Tool ermittelt Dauer und Amplitude automatisch.',
71
+ },
72
+ {
73
+ name: 'Abfragezeitpunkt festlegen',
74
+ text: 'Stellen Sie die Zeit ein, für die Sie den Wasserstand wissen möchten. Sie sehen den genauen Punkt im Diagramm markiert.',
75
+ },
76
+ {
77
+ name: 'Zwölftel-Tabelle analysieren',
78
+ text: 'Überprüfen Sie die stündliche Aufschlüsselung, um zu verstehen, wie der Wasserstand über den gesamten Zeitraum schwankt.',
79
+ },
80
+ ];
81
+
82
+ const bibliography: TideCalculatorLocaleContent['bibliography'] = [
83
+ {
84
+ name: 'Puertos del Estado - Tide Prediction',
85
+ url: 'https://portus.puertos.es/#/',
86
+ },
87
+ {
88
+ name: 'Instituto Hidrografico de la Marina',
89
+ url: 'https://armada.defensa.gob.es/ihm/',
90
+ },
91
+ ];
92
+
93
+ const seo: TideCalculatorLocaleContent['seo'] = [
94
+ {
95
+ type: 'title',
96
+ text: 'Die Gezeiten meistern: Die Zwölftel-Regel in der Navigation',
97
+ level: 2,
98
+ },
99
+ {
100
+ type: 'paragraph',
101
+ html: 'Küstennavigation und das Einlaufen in Häfen mit geringer Wassertiefe erfordern genaue Kenntnisse über den aktuellen Wasserstand. Obwohl heute digitale Anwendungen und GPS zur Verfügung stehen, bleibt die <strong>Zwölftel-Regel</strong> ein grundlegendes Werkzeug in der Ausbildung jedes Skippers. Diese Regel ist eine mathematische Schätzmethode, mit der Sie die Gezeitenhöhe zu jedem Zeitpunkt eines Gezeitenzyklus näherungsweise berechnen können.',
102
+ },
103
+ {
104
+ type: 'title',
105
+ text: 'Was genau ist die Zwölftel-Regel?',
106
+ level: 3,
107
+ },
108
+ {
109
+ type: 'paragraph',
110
+ html: 'Die Zwölftel-Regel basiert auf der Beobachtung, dass der Gezeitenfluss nicht konstant ist. Das Wasser steigt oder fällt während der etwa sechs Stunden zwischen Hochwasser und Niedrigwasser nicht gleichmäßig schnell. Stattdessen folgt die Bewegung einer Sinuskurve. In der ersten Stunde bewegt sich die Gezeit langsam, beschleunigt in den mittleren Stunden und verlangsamt sich wieder, wenn sie das nächste Extrem erreicht.',
111
+ },
112
+ {
113
+ type: 'table',
114
+ headers: ['Stunde des Zyklus', 'Anteil', 'Flusszustand'],
115
+ rows: [
116
+ ['<strong>1. Stunde</strong>', '1/12 des Tidenhubs', 'Langsamer Beginn (Stillwasser)'],
117
+ ['<strong>2. Stunde</strong>', '2/12 des Tidenhubs', 'Beschleunigender Fluss'],
118
+ ['<strong>3. Stunde</strong>', '3/12 des Tidenhubs', 'Maximaler Fluss (Starke Strömung)'],
119
+ ['<strong>4. Stunde</strong>', '3/12 des Tidenhubs', 'Anhaltender Fluss'],
120
+ ['<strong>5. Stunde</strong>', '2/12 des Tidenhubs', 'Spürbare Verlangsamung'],
121
+ ['<strong>6. Stunde</strong>', '1/12 des Tidenhubs', 'Finale Verlangsamung (Richtung Stillwasser)'],
122
+ ],
123
+ },
124
+ {
125
+ type: 'title',
126
+ text: 'Technische Einschränkungen: Faktoren, die die reale Gezeit beeinflussen',
127
+ level: 3,
128
+ },
129
+ {
130
+ type: 'glossary',
131
+ items: [
132
+ { term: 'Luftdruck', definition: 'Ein Tiefdruckgebiet lässt den Meeresspiegel steigen, ein Hochdruckgebiet lässt ihn sinken. Faustregel: ~1 cm Abweichung pro hPa Differenz zum Mittelwert.' },
133
+ { term: 'Küstenwind', definition: 'Anhaltender auflandiger Wind kann das Wasser über die in den Gezeitentafeln vorhergesagten Werte aufstauen.' },
134
+ { term: 'Lokale Topografie', definition: 'Küstenform, Wassertiefe und das Vorhandensein von Flussmündungen können den Gezeitenfluss erheblich verzögern oder beschleunigen.' },
135
+ ],
136
+ },
137
+ {
138
+ type: 'tip',
139
+ title: 'Sicherheitshinweis',
140
+ html: 'Dieses Tool verwendet eine mathematische Schätzmethode. Meteorologische Faktoren oder lokale Topografie werden nicht berücksichtigt. Konsultieren Sie für die reale Navigation immer offizielle Gezeitentafeln.',
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'Kernkonzepte für neue Segler',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'glossary',
149
+ items: [
150
+ {
151
+ term: 'Tidenhub',
152
+ definition: 'Vertikaler Unterschied zwischen Hochwasser und Niedrigwasser. In der Biskaya kann er mehrere Meter betragen, im Mittelmeer ist er fast vernachlässigbar.',
153
+ },
154
+ {
155
+ term: 'Gezeitendauer',
156
+ definition: 'Zeitintervall zwischen Hochwasser und dem nächsten Niedrigwasser. Typischerweise etwa 6 Stunden und 12 Minuten.',
157
+ },
158
+ {
159
+ term: 'Seekartennull',
160
+ definition: 'Bezugsniveau, von dem alle Tiefenangaben in Seekarten gemessen werden. Die tatsächliche Tiefe ist fast nie geringer als angegeben.',
161
+ },
162
+ ],
163
+ },
164
+ ];
165
+
166
+ const schemas: TideCalculatorLocaleContent['schemas'] = [
167
+ {
168
+ '@context': 'https://schema.org',
169
+ '@type': 'SoftwareApplication',
170
+ name: title,
171
+ description,
172
+ applicationCategory: 'UtilityApplication',
173
+ operatingSystem: 'Web',
174
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
175
+ } as WithContext<SoftwareApplication>,
176
+ {
177
+ '@context': 'https://schema.org',
178
+ '@type': 'FAQPage',
179
+ mainEntity: faq.map((item) => ({
180
+ '@type': 'Question',
181
+ name: item.question,
182
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
183
+ })),
184
+ } as WithContext<FAQPage>,
185
+ {
186
+ '@context': 'https://schema.org',
187
+ '@type': 'HowTo',
188
+ name: `Benutzung: ${title}`,
189
+ step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
190
+ } as WithContext<HowTo>,
191
+ ];
192
+
193
+ export const content: TideCalculatorLocaleContent = {
194
+ slug,
195
+ title,
196
+ description,
197
+ ui,
198
+ seo,
199
+ faq,
200
+ bibliography,
201
+ howTo,
202
+ schemas,
203
+ };