.elementor img {
height: 100%;
}
/* Namespace: nst = Nautigo Stepper */
.nst-root * {
box-sizing: border-box;
}
.nst-root {
font-family: 'Poppins', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
/* === Theme Gradient === */
background-color: #f8fafc;
background-image:
radial-gradient(ellipse 70% 40% at 0% 55%, rgba(1, 187, 254, 0.15) 0%, transparent 65%),
radial-gradient(ellipse 55% 35% at 100% 85%, rgba(255, 240, 0, 0.13) 0%, transparent 65%);
background-size: 100% 100%, 100% 100%;
background-repeat: no-repeat, no-repeat;
}
/* Hero fade-in */
@keyframes nst-fadeInUp {
from {
opacity: 0;
transform: translateY(24px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.nst-fadeInUp {
animation: nst-fadeInUp 0.6s ease-out forwards;
}
.nst-fadeInUp-d1 {
animation: nst-fadeInUp 0.6s 0.15s ease-out forwards;
opacity: 0;
}
.nst-fadeInUp-d2 {
animation: nst-fadeInUp 0.6s 0.3s ease-out forwards;
opacity: 0;
}
/* Step transitions */
.nst-step-panel {
position: absolute;
inset: 0;
opacity: 0;
transform: translateX(40px);
pointer-events: none;
transition: opacity 300ms ease, transform 300ms ease;
}
.nst-step-panel.nst-active {
position: relative;
opacity: 1;
transform: translateX(0);
pointer-events: auto;
}
.nst-step-panel.nst-exit-back {
transform: translateX(40px);
}
.nst-step-panel.nst-exit-forward {
transform: translateX(-40px);
}
/* Radio card selection */
.nst-radio-card.nst-selected {
border-color: #01bbfe;
background: linear-gradient(135deg, rgba(1, 187, 254, 0.04) 0%, transparent 100%);
box-shadow: 0 0 0 3px rgba(1, 187, 254, 0.15);
}
/* FAQ Accordion */
.nst-faq-item {
border-bottom: 1px solid #e4e4e7;
}
.nst-faq-item:last-child {
border-bottom: none;
}
.nst-faq-item.nst-open .nst-faq-chevron {
transform: rotate(180deg);
color: #01bbfe;
}
.nst-faq-body {
max-height: 0;
overflow: hidden;
transition: max-height 350ms cubic-bezier(0.16, 1, 0.3, 1), opacity 250ms ease;
opacity: 0;
}
.nst-faq-item.nst-open .nst-faq-body {
opacity: 1;
}
/* CTA Button: Aktivierungs-Animation */
@keyframes nst-cta-attention {
0%,
100% {
transform: scale(1);
}
4% {
transform: scale(1.035) rotate(0.5deg);
}
8% {
transform: scale(1) rotate(-0.5deg);
}
12% {
transform: scale(1.02) rotate(0.3deg);
}
16% {
transform: scale(1) rotate(0deg);
}
}
@keyframes nst-border-rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
/* Shimmer-Sweep über den Button */
@keyframes nst-shimmer-sweep {
0% {
transform: translateX(-100%) skewX(-15deg);
}
100% {
transform: translateX(200%) skewX(-15deg);
}
}
/* Einmal-Pop wenn Button aktiv wird */
@keyframes nst-activate-pop {
0% {
transform: scale(1);
}
30% {
transform: scale(1.08);
}
50% {
transform: scale(0.96);
}
70% {
transform: scale(1.03);
}
100% {
transform: scale(1);
}
}
.nst-btn-checkout {
position: relative;
width: 100%;
color: white;
border-radius: 14px;
padding: 20px 32px;
font-size: 18px;
font-weight: 700;
line-height: 1.2;
text-align: center;
cursor: pointer;
transition: all 0.5s cubic-bezier(0.16, 1, 0.3, 1);
font-family: inherit;
outline: none;
box-sizing: border-box;
border: none;
background: #01bbfe;
overflow: hidden;
isolation: isolate;
box-shadow: 0 12px 30px rgba(1, 187, 254, 0.35);
animation: nst-cta-attention 3s ease-in-out infinite;
}
/* Rotating conic-gradient border glow */
.nst-btn-checkout::before {
content: '';
position: absolute;
inset: -150%;
background: conic-gradient(rgba(1, 187, 254, 0) 0deg,
#fff000 90deg,
#01bbfe 180deg,
#fff000 270deg,
rgba(1, 187, 254, 0) 360deg);
animation: nst-border-rotate 2.5s linear infinite;
z-index: -1;
transition: opacity 0.5s ease;
}
/* Inner fill */
.nst-btn-checkout::after {
content: '';
position: absolute;
inset: 2px;
background: linear-gradient(135deg, #01bbfe 0%, #0098d6 100%);
border-radius: 12px;
z-index: -1;
transition: background 0.5s ease;
}
/* Shimmer-Highlight (extra pseudo via wrapper) */
.nst-btn-checkout .nst-shimmer {
position: absolute;
inset: 0;
overflow: hidden;
border-radius: 14px;
pointer-events: none;
}
.nst-btn-checkout .nst-shimmer::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 50%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.25), transparent);
animation: nst-shimmer-sweep 2.5s ease-in-out infinite;
animation-delay: 1s;
}
.nst-btn-checkout:hover:not(:disabled) {
box-shadow: 0 20px 45px rgba(1, 187, 254, 0.5);
transform: translateY(-3px) scale(1.03);
}
.nst-btn-checkout:active:not(:disabled) {
transform: translateY(0) scale(0.96);
}
/* ---- DISABLED STATE: grau, stumm, leblos ---- */
.nst-btn-checkout:disabled {
background: #d4d4d8;
cursor: not-allowed;
animation: none;
transform: none;
box-shadow: none;
color: rgba(255, 255, 255, 0.6);
font-size: 16px;
padding: 18px 32px;
}
.nst-btn-checkout:disabled::before {
opacity: 0;
animation: none;
}
.nst-btn-checkout:disabled::after {
background: #d4d4d8;
}
.nst-btn-checkout:disabled .nst-shimmer::after {
animation: none;
}
/* Activation pop: JS fügt diese Klasse einmalig hinzu */
.nst-btn-checkout.nst-just-activated {
animation: nst-activate-pop 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
/* Progress line fill with energy shimmer */
.nst-progress-line-fill {
transition: width 600ms cubic-bezier(0.16, 1, 0.3, 1);
background: linear-gradient(90deg, #01bbfe 0%, #01bbfe 60%, #4dd9ff 80%, #01bbfe 100%);
background-size: 200% 100%;
}
.nst-progress-line-fill.nst-charging {
animation: nst-line-charge 0.8s ease-out forwards;
}
@keyframes nst-line-charge {
0% {
background-position: 100% 0;
}
100% {
background-position: 0% 0;
}
}
/* Step circle: completion pop */
@keyframes nst-circle-complete {
0% {
transform: scale(1);
}
25% {
transform: scale(1.25);
}
50% {
transform: scale(0.9);
}
75% {
transform: scale(1.08);
}
100% {
transform: scale(1);
}
}
@keyframes nst-circle-glow {
0% {
box-shadow: 0 0 0 0 rgba(1, 187, 254, 0.5);
}
50% {
box-shadow: 0 0 0 10px rgba(1, 187, 254, 0);
}
100% {
box-shadow: 0 0 0 0 rgba(1, 187, 254, 0);
}
}
.nst-prog-complete {
animation: nst-circle-complete 0.5s cubic-bezier(0.16, 1, 0.3, 1),
nst-circle-glow 0.8s ease-out;
}
.nst-prog-activate {
animation: nst-circle-complete 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
/* Animated checkmark inside completed circle */
@keyframes nst-draw-check {
0% {
stroke-dashoffset: 20;
}
100% {
stroke-dashoffset: 0;
}
}
.nst-check-drawn {
stroke-dasharray: 20;
stroke-dashoffset: 20;
animation: nst-draw-check 0.35s 0.15s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
/* Spinner */
@keyframes nst-spin {
to {
transform: rotate(360deg);
}
}
.nst-spinner {
display: inline-block;
width: 18px;
height: 18px;
border: 2px solid transparent;
border-top-color: #ffffff;
border-radius: 50%;
animation: nst-spin 0.6s linear infinite;
margin-left: 8px;
vertical-align: text-top;
}
/* Scroll-Offset: hält Progress-Indikator bei Sprung zum Stepper sichtbar
(Sticky-Header + Atemraum). Wirkt für scrollIntoView und :target. */
#stepper-form {
scroll-margin-top: 120px;
}
/* Social proof pulse */
.nst-social-proof .nst-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: #10b981;
animation: nst-breathe 2s ease-in-out infinite;
}
@keyframes nst-breathe {
0%,
100% {
opacity: 0.4;
transform: scale(0.8);
}
50% {
opacity: 1;
transform: scale(1);
}
}
/* Selection checkmark animation */
@keyframes nst-check-pop {
0% {
transform: scale(0);
opacity: 0;
}
60% {
transform: scale(1.15);
}
100% {
transform: scale(1);
opacity: 1;
}
}
.nst-selected .nst-check-anim {
animation: nst-check-pop 0.3s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
/* Headlines: prevent orphaned words */
.nst-root h1,
.nst-root h2 {
text-wrap: balance;
}
/* Suppress browser focus outline on programmatically-focused headings (tabindex="-1") */
.nst-root h1[tabindex="-1"]:focus,
.nst-root h2[tabindex="-1"]:focus {
outline: none;
}
/* Fix: SVG-Checkmarks in Feature-Tags auf konsistente Größe setzen */
.nst-incl-tag svg {
width: 12px;
height: 12px;
flex-shrink: 0;
}
/* ===== Impressionen Galerie ===== */
.nst-gallery-video-wrap video {
width: 100%;
height: 100%;
display: block;
object-fit: cover;
}
.nst-video-cover.nst-cover-hidden {
opacity: 0;
pointer-events: none;
}
.nst-video-play-btn:hover {
background: #fff;
}
.nst-video-play-btn:hover .nst-play-circle {
transform: scale(1.1);
}
/* Lightbox */
.nst-lightbox.nst-lb-open {
opacity: 1;
pointer-events: auto;
}
/* ===== Standorte Map ===== */
.nst-map-shimmer {
position: absolute;
inset: -40%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.65), transparent);
transform: translateX(-100%);
animation: nst-map-shimmer-anim 1.4s linear infinite;
}
@keyframes nst-map-shimmer-anim {
to {
transform: translateX(100%);
}
}
.nst-map-wrap.nst-map-ready .nst-map-skeleton,
.nst-map-wrap.nst-map-ready .nst-map-notice,
.nst-map-wrap.nst-map-ready .nst-map-activate {
display: none !important;
}
.nst-map-pill-active {
background: #01bbfe !important;
color: #fff !important;
border-color: #01bbfe !important;
}
/* ===== Preis-Aufschlüsselungs-Modal ===== */
.nst-pm-overlay {
position: fixed;
inset: 0;
z-index: 11000;
display: flex;
align-items: flex-end;
justify-content: center;
background: rgba(0, 0, 0, 0);
pointer-events: none;
visibility: hidden;
/* verzögert bis nach dem Slide-Out (380ms Panel-Transition) */
transition: background 280ms ease, visibility 0s linear 420ms;
padding: 0;
}
@media (min-width: 640px) {
.nst-pm-overlay {
align-items: center;
padding: 20px;
}
}
.nst-pm-overlay.nst-pm-open {
background: rgba(0, 0, 0, 0.55);
pointer-events: auto;
visibility: visible;
/* sofort sichtbar beim Öffnen */
transition: background 280ms ease, visibility 0s linear 0s;
backdrop-filter: blur(2px);
-webkit-backdrop-filter: blur(2px);
}
.nst-pm-panel {
width: 100%;
max-width: 480px;
max-height: 88dvh;
overflow-y: auto;
background: #ffffff;
border-radius: 24px 24px 0 0;
transform: translateY(110%);
transition: transform 380ms cubic-bezier(0.16, 1, 0.3, 1);
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
box-shadow: 0 -4px 40px rgba(0, 0, 0, 0.18);
scrollbar-width: none;
}
.nst-pm-panel::-webkit-scrollbar {
display: none;
}
@media (min-width: 640px) {
.nst-pm-panel {
border-radius: 24px;
max-height: 80dvh;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
}
}
.nst-pm-overlay.nst-pm-open .nst-pm-panel {
transform: translateY(0);
}
.nst-pm-item+.nst-pm-item {
border-top: 1px solid #f4f4f5;
}
.nst-pm-price-row+.nst-pm-price-row {
border-top: 1px solid #f4f4f5;
}
/* === Mobile Stepper Compact (< 640px) ===
Blendet sekundäre Infos aus, damit der Stepper
auf kleinen Screens in die Viewport-Höhe passt. */
@media (max-width: 639px) {
.nst-radio-card {
padding: 13px 15px;
}
.nst-incl-tags,
.nst-social-proof,
.nst-value-badge,
.nst-feature-strip,
.nst-trust-strip,
.nst-mobile-hide {
display: none !important;
}
}
/* DSV / DMYV Verbands-Logos: harte Constraint, weil Tailwind h-9/h-10 + w-auto vom WP-Theme
teilweise ueberschrieben werden (preflight=false, kein img-Reset). */
.nst-verband-logo {
display: inline-block;
height: 36px !important;
width: auto !important;
max-width: 120px !important;
max-height: 36px !important;
object-fit: contain;
flex-shrink: 0;
}
@media (min-width: 640px) {
.nst-verband-logo {
height: 40px !important;
max-height: 40px !important;
max-width: 140px !important;
}
}
*gesammelt auf Google, Trustpilot, App Store & Play Store (01/2023–10/2026).
Kein Chaos, kein Suchen — nur ein klarer Weg: moderne App, echte Praxisausbildung an
50+ Standorten und persönliche Betreuung bis du bestanden hast.
Ab 14 Tagen zum Bootsschein
365 Tage Zugang
Geld Zurück Garantie
.elementor img {
height: 100%;
}
/* Namespace: ncfg = Nautigo Konfigurator 2.0 (ersetzt nst-Stepper) */
.ncfg * {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.ncfg {
font-family: 'Poppins', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--nc-ink: #111113;
--nc-text: #1a1a1a;
--nc-muted: #66707f;
--nc-line: #e6e8ec;
--nc-line-strong: #d0d5dd;
--nc-accent: #00a9f4;
--nc-accent-deep: #0090d4;
--nc-yellow: #ffd400;
--nc-green: #12a150;
background: #f5f6f8;
color: var(--nc-text);
padding: 40px 16px 56px;
line-height: 1.5;
}
.ncfg .ncfg-wrap {
max-width: 1120px;
margin: 0 auto;
}
.ncfg .ncfg-grid {
display: grid;
grid-template-columns: 1fr;
gap: 20px;
align-items: start;
}
.ncfg .ncfg-step {
background: #fff;
border: 1px solid var(--nc-line);
border-radius: 20px;
box-shadow: 0 1px 2px rgba(17, 17, 19, .05), 0 8px 28px rgba(17, 17, 19, .06);
padding: 20px 18px;
}
.ncfg .ncfg-step-head {
display: flex;
align-items: center;
gap: 12px;
}
.ncfg .ncfg-step-no {
width: 30px;
height: 30px;
border-radius: 999px;
flex: none;
background: var(--nc-ink);
color: #fff;
font-weight: 700;
font-size: 14px;
display: grid;
place-items: center;
}
.ncfg h3.ncfg-q {
font-size: 19px;
font-weight: 700;
letter-spacing: -.01em;
color: var(--nc-ink);
}
.ncfg .ncfg-hint {
color: var(--nc-muted);
font-size: 13.5px;
margin: 4px 0 14px 42px;
}
.ncfg .ncfg-opts {
display: grid;
gap: 10px;
}
.ncfg label.ncfg-opt {
display: block;
cursor: pointer;
position: relative;
}
.ncfg .ncfg-opt input {
position: absolute;
opacity: 0;
width: 1px;
height: 1px;
pointer-events: none;
}
.ncfg .ncfg-card {
display: grid;
grid-template-columns: 22px minmax(0, 1fr) auto;
gap: 12px;
align-items: start;
border: 1.5px solid var(--nc-line);
border-radius: 14px;
background: #fff;
padding: 14px 16px;
min-height: 44px;
transition: border-color .18s, box-shadow .18s;
}
.ncfg .ncfg-opt:hover .ncfg-card {
border-color: var(--nc-line-strong);
}
.ncfg .ncfg-opt input:checked+.ncfg-card {
border-color: var(--nc-accent);
box-shadow: 0 0 0 3px rgba(0, 169, 244, .13);
}
.ncfg .ncfg-opt input:focus-visible+.ncfg-card {
outline: 3px solid var(--nc-accent);
outline-offset: 2px;
}
.ncfg .ncfg-radio {
width: 22px;
height: 22px;
border-radius: 999px;
border: 2px solid var(--nc-line-strong);
margin-top: 1px;
display: grid;
place-items: center;
transition: border-color .18s;
}
.ncfg .ncfg-radio::after {
content: "";
width: 10px;
height: 10px;
border-radius: 999px;
background: var(--nc-accent);
transform: scale(0);
transition: transform .15s;
}
.ncfg .ncfg-opt input:checked+.ncfg-card .ncfg-radio {
border-color: var(--nc-accent);
}
.ncfg .ncfg-opt input:checked+.ncfg-card .ncfg-radio::after {
transform: scale(1);
}
.ncfg .ncfg-card.ncfg-fixed {
border-color: var(--nc-accent);
box-shadow: 0 0 0 3px rgba(0, 169, 244, .13);
}
.ncfg .ncfg-check {
width: 22px;
height: 22px;
border-radius: 999px;
background: var(--nc-accent);
margin-top: 1px;
display: grid;
place-items: center;
}
.ncfg .ncfg-t {
font-weight: 700;
font-size: 16px;
color: var(--nc-ink);
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.ncfg .ncfg-d {
color: var(--nc-muted);
font-size: 13px;
margin-top: 2px;
}
.ncfg .ncfg-f {
display: flex;
flex-wrap: wrap;
gap: 4px 14px;
margin-top: 8px;
font-size: 12.5px;
color: #3d4552;
}
.ncfg .ncfg-f span::before {
content: "✓";
color: var(--nc-green);
font-weight: 700;
margin-right: 5px;
}
.ncfg .ncfg-p {
text-align: right;
white-space: nowrap;
}
.ncfg .ncfg-p .ncfg-pv {
font-weight: 700;
font-size: 18px;
color: var(--nc-ink);
font-variant-numeric: tabular-nums;
}
.ncfg .ncfg-p .ncfg-ps {
display: block;
font-size: 12px;
color: var(--nc-muted);
text-decoration: line-through;
font-variant-numeric: tabular-nums;
}
.ncfg .ncfg-p .ncfg-pn {
display: block;
font-size: 11.5px;
color: var(--nc-muted);
font-variant-numeric: tabular-nums;
}
.ncfg .ncfg-badge {
font-size: 10.5px;
font-weight: 700;
letter-spacing: .06em;
text-transform: uppercase;
padding: 3px 9px;
border-radius: 999px;
white-space: nowrap;
background: var(--nc-ink);
color: var(--nc-yellow);
}
.ncfg .ncfg-badge.ncfg-blue {
background: #e3f5fe;
color: #026ea0;
}
.ncfg .ncfg-chip {
display: inline-flex;
align-items: center;
background: var(--nc-yellow);
color: #151306;
font-weight: 700;
font-size: 12px;
padding: 2px 10px;
border-radius: 999px;
white-space: nowrap;
font-variant-numeric: tabular-nums;
}
/* Zusammenfassung */
.ncfg .ncfg-sum {
position: static;
}
.ncfg .ncfg-sum-card {
background: #fff;
border: 1px solid var(--nc-line);
border-radius: 20px;
overflow: hidden;
box-shadow: 0 1px 2px rgba(17, 17, 19, .05), 0 8px 28px rgba(17, 17, 19, .06);
}
.ncfg .ncfg-sum-head {
background: var(--nc-ink);
color: #fff;
padding: 14px 20px;
}
.ncfg .ncfg-sum-eyebrow {
font-size: 10.5px;
font-weight: 700;
letter-spacing: .12em;
text-transform: uppercase;
color: #9aa1ad;
}
.ncfg .ncfg-sum-pkg {
font-size: 17px;
font-weight: 700;
letter-spacing: -.01em;
margin-top: 2px;
}
.ncfg .ncfg-sum-body {
padding: 18px 20px 20px;
}
.ncfg .ncfg-price-row {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
}
.ncfg .ncfg-price {
font-size: 42px;
font-weight: 700;
letter-spacing: -.03em;
line-height: 1;
color: var(--nc-ink);
font-variant-numeric: tabular-nums;
}
.ncfg .ncfg-price small {
font-size: 17px;
font-weight: 700;
}
.ncfg ul.ncfg-bd {
list-style: none;
margin: 0 0 12px;
padding: 0 0 12px;
border-bottom: 1px dashed var(--nc-line);
display: grid;
gap: 3px;
}
.ncfg ul.ncfg-bd li {
display: flex;
justify-content: space-between;
align-items: baseline;
gap: 12px;
font-size: 14px;
color: var(--nc-ink);
}
.ncfg ul.ncfg-bd li b {
font-weight: 600;
white-space: nowrap;
font-variant-numeric: tabular-nums;
}
.ncfg ul.ncfg-bd li.ncfg-bd-off {
color: var(--nc-muted);
}
.ncfg ul.ncfg-bd li.ncfg-bd-off b {
font-weight: 500;
}
.ncfg .ncfg-price-l {
font-size: 14px;
font-weight: 600;
color: var(--nc-muted);
}
.ncfg .ncfg-cmp {
color: var(--nc-muted);
font-size: 13px;
font-variant-numeric: tabular-nums;
}
.ncfg .ncfg-cmp s {
color: #98a0ac;
}
.ncfg .ncfg-save {
margin-top: 8px;
}
.ncfg ul.ncfg-inc {
list-style: none;
margin: 14px 0 0;
display: grid;
gap: 8px;
}
.ncfg ul.ncfg-inc li {
display: flex;
gap: 9px;
font-size: 13.5px;
align-items: flex-start;
}
.ncfg ul.ncfg-inc li::before {
content: "✓";
color: var(--nc-green);
font-weight: 700;
flex: none;
}
.ncfg ul.ncfg-inc li.ncfg-off {
color: #b3bac4;
}
.ncfg ul.ncfg-inc li.ncfg-off::before {
content: "—";
color: #c9ced6;
}
.ncfg .ncfg-fees {
margin-top: 14px;
padding: 10px 13px;
border-radius: 12px;
background: #f2f4f7;
font-size: 12px;
color: var(--nc-muted);
}
.ncfg .ncfg-fees a {
color: inherit;
text-decoration: underline;
}
.ncfg a.ncfg-cta {
position: relative;
display: flex;
align-items: center;
justify-content: center;
gap: 9px;
width: 100%;
margin-top: 14px;
padding: 16px 20px;
border-radius: 14px;
background: var(--nc-accent);
color: #fff !important;
font-size: 16.5px;
font-weight: 700;
text-decoration: none;
overflow: hidden;
box-shadow: 0 12px 36px rgba(0, 169, 244, .25);
transition: background .18s, transform .12s;
}
.ncfg a.ncfg-cta:hover {
background: var(--nc-accent-deep);
}
.ncfg a.ncfg-cta:active {
transform: scale(.985);
}
.ncfg a.ncfg-cta:focus-visible {
outline: 3px solid var(--nc-ink);
outline-offset: 2px;
}
.ncfg .ncfg-shine {
position: absolute;
inset: 0;
pointer-events: none;
background: linear-gradient(115deg, transparent 30%, rgba(255, 255, 255, .35) 50%, transparent 70%);
transform: translateX(-110%);
animation: ncfgShine 3.2s ease-in-out infinite;
}
@keyframes ncfgShine {
0%,
58% {
transform: translateX(-110%);
}
88%,
100% {
transform: translateX(110%);
}
}
.ncfg .ncfg-micro {
display: flex;
justify-content: center;
gap: 6px 14px;
flex-wrap: wrap;
margin-top: 12px;
font-size: 11.5px;
color: var(--nc-muted);
}
.ncfg .ncfg-micro span::before {
content: "✓";
color: var(--nc-green);
font-weight: 700;
margin-right: 4px;
}
.ncfg .ncfg-later {
margin-top: 12px;
border: 1.5px dashed var(--nc-line-strong);
border-radius: 12px;
padding: 11px 13px;
font-size: 12px;
color: var(--nc-muted);
display: none;
font-variant-numeric: tabular-nums;
}
.ncfg .ncfg-later b {
color: var(--nc-text);
}
.ncfg .ncfg-later.ncfg-show {
display: block;
}
/* Mobile Sticky-Leiste */
.ncfg-mbar {
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 999;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
background: rgba(255, 255, 255, .97);
border-top: 1px solid #e6e8ec;
padding: 10px 14px calc(10px + env(safe-area-inset-bottom));
font-family: 'Poppins', ui-sans-serif, system-ui, sans-serif;
transform: translateY(110%);
transition: transform .25s ease;
}
.ncfg-mbar.ncfg-on {
transform: translateY(0);
}
.ncfg-mbar .ncfg-mp-l {
font-size: 10.5px;
color: #66707f;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .06em;
}
.ncfg-mbar .ncfg-mp-v {
font-size: 19px;
font-weight: 700;
color: #111113;
letter-spacing: -.02em;
font-variant-numeric: tabular-nums;
}
.ncfg-mbar a.ncfg-mgo {
flex: none;
display: inline-flex;
align-items: center;
gap: 7px;
background: #00a9f4;
color: #fff !important;
border-radius: 12px;
padding: 13px 18px;
font-size: 14.5px;
font-weight: 700;
text-decoration: none;
min-height: 44px;
}
@media (min-width: 960px) {
.ncfg {
padding: 56px 24px 72px;
}
.ncfg .ncfg-grid {
grid-template-columns: minmax(0, 1fr) 360px;
gap: 24px;
}
.ncfg .ncfg-steps {
display: flex;
flex-direction: column;
gap: 22px;
}
.ncfg .ncfg-step {
padding: 26px 28px;
}
.ncfg .ncfg-sum {
position: sticky;
top: 90px;
}
.ncfg-mbar {
display: none;
}
}
@media (prefers-reduced-motion: reduce) {
.ncfg *,
.ncfg-mbar {
animation: none !important;
transition: none !important;
}
}
/* Complianz-Manage-Tab: kollidiert rechts unten mit dem Sticky-CTA dieser LP
-> auf dieser Seite nach unten links; auf Mobile ueber die Sticky-Leiste heben */
button.cmplz-manage-consent.cmplz-show {
right: auto !important;
left: 16px !important;
}
@media (max-width: 959px) {
button.cmplz-manage-consent.cmplz-show {
left: 8px !important;
bottom: 84px !important;
}
}
(function () {
"use strict";
/* Produkt-IDs & Live-Preise (WooCommerce, Stand 07/2026) */
var THEORIE = {
binnen: { price: 99, name: "SBF Binnen" },
see: { price: 149, name: "SBF See" },
kombi: { price: 199, name: "SBF See und Binnen" }
};
var ZIEL = {
none: {
binnen: { cart: "105900", price: 99, pkg: "SBF Binnen Basispaket" },
see: { cart: "105897", price: 149, pkg: "SBF See Basispaket" },
kombi: { cart: "10378", price: 199, pkg: "SBF See und Binnen Basispaket" }
},
komplett: {
binnen: { cart: "36210", price: 299, pkg: "Premiumpaket SBF Binnen" },
see: { cart: "36206", price: 349, pkg: "Premiumpaket SBF See" },
kombi: { cart: "36196", price: 349, pkg: "Premiumpaket SBF See und Binnen", single: 398 }
},
plus: {
binnen: { cart: "105900%2C99744", price: 348, pkg: "SBF Binnen Basispaket + Praxis Pro+" },
see: { cart: "105897%2C99744", price: 398, pkg: "SBF See Basispaket + Praxis Pro+" },
kombi: { cart: "110029", price: 448, pkg: "Premiumpaket Plus SBF See und Binnen" }
}
};
var INC = {
theorieBase: ["Theorie-Onlinekurs: 4K-Lernvideos, Prüfungssimulator, Knotentrainer", "365 Tage Zeit zu lernen & Sofort-Zugang", "Persönliche Betreuung bis zur Prüfung"],
kombiExtra: "Gratis Willkommensbox",
komplett: ["2 Praxisfahrten auf dem Fahrschulboot", "Prüfungsfahrt inklusive · 50+ Standorte"],
plus: ["3 Praxisfahrten auf dem Fahrschulboot", "Prüfungsfahrt inklusive · 50+ Standorte"],
noneOff: "Praxisfahrten (jederzeit nachbuchbar)"
};
function eur(n) { return n.toLocaleString("de-DE") + " €"; }
function q(sel) { return document.querySelector('[data-ncfg="' + sel + '"]'); }
function val(name) {
var el = document.querySelector('input[name="' + name + '"]:checked');
return el ? el.value : null;
}
function render() {
var s = val("ncfg-schein") || "kombi";
var p = val("ncfg-praxis") || "komplett";
var t = THEORIE[s];
var z = ZIEL[p][s];
var href = "/kasse/?add-to-cart=" + z.cart;
/* Schritt-2-Preise: Praxis-Aufpreis zum gewählten Schein */
q("p-komplett").innerHTML = "+ " + eur(ZIEL.komplett[s].price - t.price);
q("p-plus").innerHTML = "+ " + eur(ZIEL.plus[s].price - t.price);
q("p-none").innerHTML = "+ " + eur(ZIEL.none[s].price - t.price);
/* Zusammenfassung: Theorie + Praxis = Gesamt */
q("pkg").textContent = z.pkg;
var praxis = z.price - t.price;
var bd = "
Theorie-Onlinekurs " + eur(t.price) + " ";
if (p === "komplett") bd += "
2 Praxisfahrten à 120 Min. + " + eur(praxis) + " ";
else if (p === "plus") bd += "
3 Praxisfahrten à 120 Min. + " + eur(praxis) + " ";
else bd += '
Praxisfahrten jederzeit nachbuchbar ';
q("bd").innerHTML = bd;
q("price").innerHTML = z.price.toLocaleString("de-DE") + "
€ ";
var items = INC.theorieBase.slice();
if (s === "kombi") items.splice(1, 0, INC.kombiExtra);
var off = null;
if (p === "komplett") items = INC.komplett.concat(items);
else if (p === "plus") items = INC.plus.concat(items);
else off = INC.noneOff;
q("inc").innerHTML = items.map(function (i) { return "
" + i + " "; }).join("") +
(off ? '
' + off + " " : "");
q("cta").setAttribute("href", href);
q("mbar-cta").setAttribute("href", href);
q("mbar-price").innerHTML = eur(z.price);
q("mbar-pkg").textContent = p === "none" ? "Nur Theorie" : (p === "plus" ? "Plus-Paket" : "Komplett-Paket");
if (window.dataLayer) {
window.dataLayer.push({ event: "ncfg_selection", ncfg_schein: s, ncfg_praxis: p, ncfg_value: z.price });
}
}
var radios = document.querySelectorAll('input[name="ncfg-schein"], input[name="ncfg-praxis"]');
for (var i = 0; i = 960) { mbar.classList.remove("ncfg-on"); return; }
var r = section.getBoundingClientRect();
var c = cta.getBoundingClientRect();
var sectionActive = r.top 120;
var ctaVisible = c.top 0;
mbar.classList.toggle("ncfg-on", sectionActive && !ctaVisible);
mbar.setAttribute("aria-hidden", mbar.classList.contains("ncfg-on") ? "false" : "true");
}
window.addEventListener("scroll", mbarTick, { passive: true });
window.addEventListener("resize", mbarTick, { passive: true });
render();
mbarTick();
})();
(function () {
"use strict";
function domReady(fn) { if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", fn); } else { fn(); } }
domReady(function () {
// ---- FAQ Accordion ----
var faqContainer = document.getElementById('nst-faq');
if (faqContainer) {
faqContainer.addEventListener('click', function (e) {
var trigger = e.target.closest('.nst-faq-trigger');
if (!trigger) return;
var item = trigger.closest('.nst-faq-item');
if (!item) return;
var body = item.querySelector('.nst-faq-body');
var inner = item.querySelector('.nst-faq-body-inner');
if (!body || !inner) return;
var isOpen = item.classList.contains('nst-open');
// Alle anderen schließen
faqContainer.querySelectorAll('.nst-faq-item.nst-open').forEach(function (openItem) {
if (openItem !== item) {
openItem.classList.remove('nst-open');
openItem.querySelector('.nst-faq-trigger').setAttribute('aria-expanded', 'false');
openItem.querySelector('.nst-faq-body').style.maxHeight = '0';
}
});
if (isOpen) {
item.classList.remove('nst-open');
trigger.setAttribute('aria-expanded', 'false');
body.style.maxHeight = '0';
} else {
item.classList.add('nst-open');
trigger.setAttribute('aria-expanded', 'true');
body.style.maxHeight = inner.scrollHeight + 'px';
}
});
}
// ---- Preis-Aufschlüsselungs-Modal ----
});
})();
Häufige Fragen
Alles was du wissen musst
Benötige ich Vorkenntnisse?
Nein, du benötigst keinerlei theoretische oder praktische Vorkenntnisse. Die Lernvideos
sind auf Anfänger zugeschnitten und wir erklären alles von Grund auf, auch wie der
organisatorische Ablauf ist und wie du dich in der App zurechtfindest.
Die meisten Schüler waren vorher noch nie auf einem Boot, deshalb helfen dir
unsere Praxisvideos, die Zusammenhänge noch besser zu verstehen und dir die Nervosität
vor deiner ersten Fahrstunde zu nehmen.
Kann ich die Theorie komplett online lernen?
Ja. Du lernst flexibel per App mit Videos, Trainer und Lernfortschritt – wann und
wo du willst. Du kannst dich mit unseren Videos sogar perfekt auf deine Praxisausbildung
vorbereiten.
Zusätzlich kannst du an einigen Standorten als Ergänzung zur Onlinetheorie
auch unsere Vor-Ort Theoriekurse für z.B. die Navigation besuchen. Die Buchung der
Vor-Ort Termine geht ganz bequem über dein Kundenkonto.
Wann und wo findet die praktische Ausbildung und Prüfung statt?
Deutschlandweit an 50+ Standorten – eigene Nautigo Standorte und Partner. Standort
& Termine wählst du bequem in der App.
Die Fahrstunden finden an fast allen Standorten ganzjährig und an 7 Tagen
die Woche statt bis abends, sodass du immer einen passenden Termin findest.
Prüfungstermine gibt es i.d.R. alle 14 Tage, wobei kleinere Regionen auch monatliche
Termine anbieten.
Wie buche ich die praktischen Fahrstunden und Prüfung?
Die Fahrstunden und die Prüfung buchst du einfach online in deinem Kundenkonto, flexibel
nach deinem Zeitplan.
Was passiert, wenn ich die Prüfung nicht bestehe?
Die absolute Mehrheit unserer Schüler besteht im 1. Versuch – wir haben eine sehr
hohe Bestehensquote! Solltest du die Prüfung ausnahmsweise nicht auf Anhieb bestehen,
kannst du sie beliebig oft wiederholen – es gibt also keinen Grund sich unnötigen
Druck zu machen. Du musst dann nur noch einmal die anteilige Prüfungsgebühr von dem Teil
zahlen, den du nicht bestanden hast.
Wir unterstützen dich mit zusätzlichem Lernmaterial und Tipps, um beim
nächsten Mal erfolgreich zu sein!
Gibt es Sonderangebote für Gruppen oder Studenten?
Ja, unsere Gruppenrabatte findest du hier und wir bieten spezielle
Rabatte für Studenten. Bitte kontaktiere uns direkt für weitere Informationen.
Wie erreiche ich euch bei Fragen?
Die persönliche Unterstützung durch unser erfahrenes Team steht dir zu unseren regulären
Öffnungszeiten an 6 Tagen die Woche per WhatsApp und Telefon zur Verfügung. Du erhältst
jederzeit Zugang zu unserer Lernplattform mit Hilfe-Funktion.
Warum Nautigo
Nicht der billigste Einstieg zählt. Sondern der echte Gesamtweg.
Viele vergleichen nur den Kaufpreis. Was sie übersehen: Reibung, Zeitverlust und unklare
Abläufe können am Ende teurer werden als ein günstigerer Einstieg.
Struktur statt Chaos
Klare Abläufe von Buchung bis
Prüfung — du weißt immer, wo du stehst und was als nächstes kommt.
Echte Videos statt leerer
Versprechen
Sieh vorab, was dich erwartet:
echte Boote, echte Standorte, echte Fahrlehrer und wie die App wirklich
aussieht.
Praxis mit System
50+ Standorte deutschlandweit,
geprüfte Ausbilder, flexible Terminbuchung — kein Suchen, kein eigenes
Organisieren.
Transparenz statt
Überraschungen
Was drin ist, steht drin. Keine
versteckten Zusatzkosten, keine unklaren Schritte nach dem Kauf.
Worauf du beim
Vergleich wirklich achten solltest
Was ist wirklich enthalten — und was kostet
später extra?
Wie läuft die Praxis ab — gibt es klare
Abläufe oder musst du selbst organisieren?
Wer steht hinter dem Angebot — und gibt es
echten Support wenn du Fragen hast?
Alles aus einer
Hand
Premium-Komplettpaket
Theorie, Praxis, Prüfung & persönliche Betreuung — alles inklusive, ein Preis.
Kein Suchen, kein Organisieren, kein Stress.
Premiumpaket entdecken
Nicht nur gesagt. Gezeigt.
Was andere nur versprechen,zeigen wir dir.
Echte Boote, echte Fahrlehrer,
echter Ablauf — sieh dir vor der Buchung an, was dich bei Nautigo wirklich erwartet.
50+ Standorte
Dein Schein. Dein Standort.
Mache deinen Bootsführerschein an einem
der 50+ Standorte in Deutschland. Entweder direkt bei uns oder bei einem Partner.
Standortkarte aktivieren
Mit deinem Klick werden Karten-Kacheln von OpenStreetMap
sowie die Leaflet-Bibliothek (unpkg) geladen. Dabei wird deine IP-Adresse an die
jeweiligen Server übertragen.
Es werden keine Cookies gesetzt
– nur einmalige Datenanfragen für die Anzeige der Karte.
Mehr Infos: OSM-Datenschutz
· Datenschutzerklärung
Karte einmalig laden
Einwilligung gem. Art. 6 Abs. 1 lit. a DSGVO · jederzeit per Seiten-Reload
widerrufbar
1 / 12
So setzt sich dein
Preis zusammen
Vollständige Übersicht aller Leistungen
Preiskomponenten
Theorie-Paket
199,00 €
Praxisausbildung
249,00 €
Gesamtpreis
Kostenlos
dabei
Kostenlos testen vorab
Lerne die Nautigo App kennen, bevor
du zahlst
App Zugang &
Online-TheoriekursWert
149 €
Strukturierte Lerninhalte mit
4K-Videos, Prüfungssimulator & KI-Features
Gratis Willkommensbox Wert
59 €
Knotenübungsset, Navigationsbesteck,
Seekarten & Schreibset
Sicherheit für 3x Praxis
Wert
249 €
Nicht bestanden? Wir kümmern uns
– ohne Zusatzkosten
Standortgarantie
Garantierter Kursplatz an einem
unserer 50+ Standorte
Persönlicher Support &
Prüfungsservice Wert
45 €
Individuelle Unterstützung per
WhatsApp & Telefon
365 Tage Zugang mit
Verlängerungsoption
Lerne in deinem eigenen Tempo
Warum Nautigo?
Nur 5 % der Lernenden schließen einen Online-Kurs ab* – nicht weil sie es
nicht können, sondern weil Struktur und Begleitung fehlen. Wir haben Nautigo genau dagegen
gebaut: mit KI-Lernpfad, persönlichem Support und einer Praxisausbildung, die fest im Paket
steckt. Unser Ziel ist, dass du nicht nur buchst – sondern
deinen Schein wirklich machst.
*Quelle: Reich & Ruipérez-Valiente, MIT/Harvard, Science
2019 – Analyse von 5,6 Mio. Lernenden auf edX.
/*! flyingpress:no-rucss cloudflare:no-minify – Marquee-Keyframes & Reel-Animations dürfen nicht entfernt werden */
.elementor img {
height: 100%;
}
/* ===== Reel Wall – Testimonial Video Gallery ===== */
/* ===== Marquee Keyframes ===== */
@keyframes nst-marquee-left {
from {
transform: translateX(0);
}
to {
transform: translateX(-50%);
}
}
@keyframes nst-marquee-right {
from {
transform: translateX(-50%);
}
to {
transform: translateX(0);
}
}
/* Fade-Edges + overflow clip */
.nst-reel-track-wrap {
overflow: hidden;
-webkit-mask-image: linear-gradient(to right,
transparent 0px, black 48px,
black calc(100% - 48px), transparent 100%);
mask-image: linear-gradient(to right,
transparent 0px, black 48px,
black calc(100% - 48px), transparent 100%);
}
.nst-reel-track {
display: flex;
gap: 12px;
width: max-content;
padding: 8px 0 16px;
animation: nst-marquee-left 65s linear infinite;
will-change: transform;
}
.nst-reel-track:hover {
animation-play-state: paused;
}
/* Einzelne Video-Kachel */
.nst-reel-item {
flex: 0 0 auto;
width: 160px;
height: 340px;
position: relative;
border-radius: 1.25rem;
overflow: hidden;
background: #18181b;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.10);
transition: box-shadow 300ms ease;
cursor: pointer;
user-select: none;
-webkit-user-select: none;
}
@media (min-width: 1024px) {
.nst-reel-item {
width: 180px;
height: 380px;
}
}
/* Aktives Video: Cyan Glow */
.nst-reel-item.nst-reel-active {
box-shadow: 0 0 0 2px rgba(1, 187, 254, 0.5),
0 4px 32px rgba(1, 187, 254, 0.25),
0 2px 12px rgba(0, 0, 0, 0.12);
}
.nst-reel-item video {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* Poster-Bild */
.nst-reel-poster {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
display: block;
z-index: 2;
transition: opacity 400ms ease;
}
.nst-reel-item.nst-reel-playing .nst-reel-poster {
opacity: 0;
pointer-events: none;
}
/* Sound-Icon oben-rechts */
.nst-reel-sound-icon {
position: absolute;
top: 10px;
right: 10px;
z-index: 10;
width: 28px;
height: 28px;
border-radius: 50%;
background: rgba(0, 0, 0, 0.45);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
transition: opacity 300ms ease;
pointer-events: none;
}
.nst-reel-item.nst-reel-playing .nst-reel-sound-icon {
opacity: 1;
}
.nst-reel-item.nst-reel-unmuted .nst-reel-sound-icon {
background: rgba(1, 187, 254, 0.65);
}
.nst-reel-item.nst-reel-unmuted {
box-shadow: 0 0 0 2.5px #01bbfe,
0 8px 40px rgba(1, 187, 254, 0.3),
0 2px 12px rgba(0, 0, 0, 0.12);
z-index: 5;
}
/* Hint-Pill */
.nst-reel-hint {
position: absolute;
bottom: 12px;
left: 50%;
transform: translateX(-50%) translateY(6px);
background: rgba(0, 0, 0, 0.65);
color: #fff;
font-size: 11px;
font-weight: 500;
padding: 4px 10px;
border-radius: 99px;
white-space: nowrap;
z-index: 10;
opacity: 0;
transition: opacity 250ms ease, transform 250ms ease;
pointer-events: none;
font-family: inherit;
}
.nst-reel-item.nst-reel-hint-visible .nst-reel-hint {
opacity: 1;
transform: translateX(-50%) translateY(0);
}
/* Name-Overlay unten */
.nst-reel-name {
position: absolute;
bottom: 0;
left: 0;
right: 0;
z-index: 3;
padding: 32px 12px 12px;
background: linear-gradient(to top, rgba(0, 0, 0, 0.72) 0%, transparent 100%);
pointer-events: none;
}
.nst-reel-name-text {
font-size: 12px;
font-weight: 700;
color: #fff;
line-height: 1.3;
display: block;
}
.nst-reel-name-course {
font-size: 9.5px;
font-weight: 400;
color: rgba(255, 255, 255, 0.72);
display: block;
margin-top: 2px;
}
/* ===== Text-Rezensionen Strip ===== */
.nst-rev-strip {
margin-top: 28px;
overflow: hidden;
-webkit-mask-image: linear-gradient(to right, transparent 0px, black 48px, black calc(100% - 48px), transparent 100%);
mask-image: linear-gradient(to right, transparent 0px, black 48px, black calc(100% - 48px), transparent 100%);
}
.nst-rev-track {
display: flex;
gap: 12px;
width: max-content;
padding: 4px 0 16px;
animation: nst-marquee-right 55s linear infinite;
will-change: transform;
}
.nst-rev-track:hover {
animation-play-state: paused;
}
.nst-rev-card {
flex: 0 0 auto;
width: 280px;
background: #ffffff;
border-radius: 16px;
padding: 16px 18px 14px;
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.07), 0 0 0 1px rgba(0, 0, 0, 0.04);
display: flex;
flex-direction: column;
}
.nst-rev-stars {
color: #f59e0b;
font-size: 14px;
letter-spacing: 2px;
margin-bottom: 8px;
line-height: 1;
}
.nst-rev-text {
font-size: 12.5px;
color: #3f3f46;
line-height: 1.6;
margin: 0 0 12px;
flex: 1;
display: -webkit-box;
-webkit-line-clamp: 5;
line-clamp: 5;
-webkit-box-orient: vertical;
overflow: hidden;
font-family: inherit;
}
.nst-rev-meta {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: auto;
gap: 8px;
}
.nst-rev-name {
font-size: 11.5px;
font-weight: 600;
color: #18181b;
font-family: inherit;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.nst-rev-date {
font-size: 10.5px;
color: #a1a1aa;
font-family: inherit;
white-space: nowrap;
flex-shrink: 0;
}
/* Footer */
.nst-reel-footer {
text-align: center;
padding: 0 16px;
margin-top: 20px;
}
.nst-reel-disclaimer {
font-size: 10.5px;
color: #a1a1aa;
line-height: 1.5;
font-family: inherit;
}
Ben S.
SBF See · Binnen · Funk ·
Skippertraining
Ton an
Alex I.
SBF See · Binnen · Skippertraining
Ton an
Nico W.
SBF See · Binnen
Ton an
Roberto F.
SBF See · Binnen
Ton an
Nico K.
SBF See · Binnen · Skippertraining
Ton an
Bekim H.
SBF See · Binnen · Funk ·
Skippertraining
Ton an
Nils
SBF See · Binnen
Ton an
Sebastian
SBF See · Binnen
Ton an
Mark, Nic & Paul
Bootsmiete
Ton an
Diverse Prüflinge
SBF See · Binnen
Ton an
Alex
Jetski Training
Ton an
Torben
Boot & Jetski
Ton an
Ben S. SBF See · Binnen · Funk ·
Skippertraining
Ton an
Alex I. SBF See · Binnen · Skippertraining
Ton an
Nico W. SBF See · Binnen
Ton an
Roberto F. SBF See · Binnen
Ton an
Nico K. SBF See · Binnen · Skippertraining
Ton an
Bekim H. SBF See · Binnen · Funk ·
Skippertraining
Ton an
Nils SBF See · Binnen
Ton an
Sebastian SBF See · Binnen
Ton an
Mark, Nic & Paul Bootsmiete
Ton an
Diverse Prüflinge SBF See · Binnen
Ton an
Alex Jetski Training
Ton an
Torben Boot & Jetski
Ton an
★★★★★
Julian hat mir vom Kaufen der richtigen Pakete bis hin zu Fragen zur Theorie am
frühen Morgen immer sofort geantwortet. Die Videos sind einfach nur mega gut und lassen absolut
keine Fragen offen. Durch das gute Hintergrundwissen war die Theorie dann ein Klacks – alles
in allem eine sehr gute Fahrschule die ich jedem nur empfehlen kann.
Stephan Mc Donald
März 2026
★★★★★
Heute SBF Binnen & See bestanden. Alles an einem Tag (Theorie & Praxis).
Hat alles super geklappt – wir wurden Top auf die Prüfung vorbereitet. Nautigo und das
ganze Team um Julian herum kann ich jedem empfehlen. Saison 2026 kann kommen!
Michael
Feb. 2026
★★★★★
Der SKS-Kurs ist gut strukturiert und verständlich erklärt. Die
KI-gestützte Auswertung meiner Antworten gibt gute Tipps zur Verbesserung. Ich war damit sehr
gut auf die Prüfung vorbereitet und habe diese auch im ersten Versuch gleich komplett
bestanden. Dank an Julian und sein Team!
Uve
Feb. 2026
★★★★★
Ich habe mich mit der Plattform von Nautigo auf die Prüfungen für
beide Funkscheine vorbereitet. Die Lektionen sind sehr gut erklärt. Ich habe beide Scheine
bestanden, dank toller Lernplattform. Hast du mal eine Frage, meldet sich schnell das nette
Nautigo-Team. Jetzt bereite ich mich auf den nächsten Schein vor.
Rene V.
Okt. 2025
★★★★★
Die Mitarbeiter sind alle sehr freundlich, kompetent, hilfsbereit und schnell zu
erreichen. Die Boote für die Praxisfahrstunden sind alle neuwertig und auch für das Fahren
auf dem Rhein ausreichend motorisiert. Das Unternehmen ist gut aufgestellt und strukturiert.
Udo Gottschling
Nov. 2025
★★★★★
Top Bootsschule mit sehr nettem Team. Bei Fragen jederzeit unkompliziert
erreichbar. Gut ausgearbeitete Lernunterlagen und Videos für das Selbststudium. Sehr zu
empfehlen wenn man entspannt zum Bootsführerschein kommen will.
Fabian Belke Okt.
2025
★★★★★
Ich habe bei Nautigo den See- und Binnenführerschein mit Praxisteil und
Prüfung in Leverkusen gemacht. Ich kann die Bootsschule jedem empfehlen – die Inhalte
sind super erklärt und digital leicht zu lernen. Julian und sein Team sind immer erreichbar und
sehr sympathisch.
Alex Ibakasap Aug.
2025
★★★★★
Super kompetent, Service weit über dem, was man erwartet. Für jede
Frage mit Rat und Tat bereit. Mehr als glücklich und zufrieden meinen Schein mit Nautigo
gemacht zu haben. Fahrstunde und Unterricht praxisnah und absolut verständlich.
Nico Kessler Aug.
2025
★★★★★
Die Online-Ausbildung ist super strukturiert und in den Lernvideos alles bestens
erklärt. Die Fahrstunden machen auch richtig Spaß! Engjell – bester Mann! Er
erklärt alles mega entspannt und gibt jedem sofort ein gutes Gefühl. Da kann die
Prüfung nicht mehr schief gehen!
Guido Sept.
2025
★★★★★
Der Service ist Top. Ich hatte ein bestimmtes Anliegen, weil ich den Schein
verschenken wollte – jederzeit wurden meine Fragen telefonisch oder per WhatsApp beantwortet.
Vielen Dank!
Isabella Kolbe Sept. 2025
★★★★★
Julian hat mir vom Kaufen der richtigen Pakete bis hin zu Fragen zur Theorie am
frühen Morgen immer sofort geantwortet. Die Videos lassen absolut keine Fragen offen. Durch das
gute Hintergrundwissen war die Theorie dann ein Klacks – eine sehr gute Fahrschule die ich
jedem empfehlen kann.
Stephan Mc Donald März 2026
★★★★★
Heute SBF Binnen & See bestanden. Alles an einem Tag. Hat alles super
geklappt – wir wurden Top auf die Prüfung vorbereitet. Nautigo und das ganze Team um
Julian herum kann ich jedem empfehlen.
Michael Feb.
2026
★★★★★
Der SKS-Kurs ist gut strukturiert und verständlich erklärt. Die
KI-gestützte Auswertung gibt gute Tipps. Ich habe die Prüfung im ersten Versuch gleich
komplett bestanden. Dank an Julian und sein Team!
Uve Feb.
2026
★★★★★
Ich habe mich mit der Plattform von Nautigo auf beide Funkscheine vorbereitet.
Die Lektionen sind sehr gut erklärt. Ich habe beide Scheine bestanden, dank toller
Lernplattform. Jetzt bereite ich mich auf den nächsten Schein vor.
Rene V. Okt.
2025
★★★★★
Die Mitarbeiter sind alle sehr freundlich, kompetent, hilfsbereit und schnell zu
erreichen. Die Boote für die Praxisfahrstunden sind neuwertig. Das Unternehmen ist gut
aufgestellt und strukturiert.
Udo Gottschling Nov. 2025
★★★★★
Top Bootsschule mit sehr nettem Team. Bei Fragen jederzeit unkompliziert
erreichbar. Gut ausgearbeitete Lernunterlagen und Videos für das Selbststudium. Sehr zu
empfehlen.
Fabian Belke Okt.
2025
★★★★★
Ich habe bei Nautigo den See- und Binnenführerschein gemacht. Julian und
sein Team sind immer erreichbar und sehr sympathisch. Der Lernstoff ist super erklärt und
digital leicht zu lernen.
Alex Ibakasap Aug.
2025
★★★★★
Super kompetent, Service weit über dem, was man erwartet. Für jede
Frage mit Rat und Tat bereit. Mehr als glücklich meinen Schein mit Nautigo gemacht zu haben.
Fahrstunde praxisnah und verständlich.
Nico Kessler Aug.
2025
★★★★★
Die Online-Ausbildung ist super strukturiert. Die Fahrstunden machen richtig
Spaß! Engjell erklärt alles mega entspannt – da kann die Prüfung nicht mehr
schief gehen!
Guido Sept.
2025
★★★★★
Der Service ist Top. Ich wollte den Schein verschenken – jederzeit wurden
meine Fragen telefonisch oder per WhatsApp beantwortet. Vielen Dank!
Isabella Kolbe Sept. 2025
.nst-final-cta {
position: relative;
padding: 80px 24px 88px;
background: #0f172a;
overflow: hidden;
font-family: 'Poppins', ui-sans-serif, system-ui, sans-serif;
text-align: center;
}
/* Radial Glow im Hintergrund */
.nst-final-cta::before {
content: '';
position: absolute;
top: -60px;
left: 50%;
transform: translateX(-50%);
width: 600px;
height: 400px;
background: radial-gradient(ellipse at center, rgba(1, 187, 254, 0.12) 0%, transparent 70%);
pointer-events: none;
}
.nst-final-cta h2 {
font-size: clamp(1.875rem, 6vw, 3rem);
font-weight: 800;
color: #fff;
line-height: 1.15;
margin: 12px 0 16px;
text-wrap: balance;
letter-spacing: -0.02em;
}
Jetzt starten
Woraufwartest du?
Konfiguriere deinen Kurs in 3 Minuten — oder lass dich von uns
beraten. Wir antworten innerhalb von Minuten.
(function () {
'use strict';
function domReady(fn) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', fn);
} else {
fn();
}
}
domReady(function () {
var form = document.getElementById('nst-form');
if (!form) return;
// ---- State ----
var STATE = {
currentStep: 1,
theorie: { id: '10378', price: 199, name: 'SBF See & Binnen ' },
praxis: { id: '99744', price: 249, name: '3x Praxis mit Sicherheit' }
};
// ---- DOM Refs ----
var stepPanels = [
document.getElementById('nst-step-1'),
document.getElementById('nst-step-2')
];
var progCircles = [
document.getElementById('nst-prog-1'),
document.getElementById('nst-prog-2')
];
var progLines = [
document.getElementById('nst-line-1')
];
var progLabels = [
null,
document.getElementById('nst-label-2')
];
var checkoutBtn = document.getElementById('nst-checkout');
var sumTheorieName = document.getElementById('nst-sum-theorie-name');
var sumTheoriePrice = document.getElementById('nst-sum-theorie-price');
var sumPraxisName = document.getElementById('nst-sum-praxis-name');
var sumPraxisPrice = document.getElementById('nst-sum-praxis-price');
var sumTotal = document.getElementById('nst-sum-total');
// ---- Helpers ----
function fmt(v) {
return Number(v).toLocaleString('de-DE', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
}) + '\u20AC';
}
// ---- Step Navigation ----
function goToStep(step) {
if (step 2) return;
var direction = step > STATE.currentStep ? 'forward' : 'back';
var prevStep = STATE.currentStep;
STATE.currentStep = step;
// Animate panels
stepPanels.forEach(function (panel, i) {
if (!panel) return;
var panelStep = i + 1;
panel.classList.remove('nst-active', 'nst-exit-back', 'nst-exit-forward');
if (panelStep === step) {
panel.classList.add('nst-active');
} else if (panelStep === prevStep) {
panel.classList.add(direction === 'forward' ? 'nst-exit-forward' : 'nst-exit-back');
}
});
updateProgress();
if (step === 2) {
updateSummary();
}
// Scroll to form (Offset hält Progress-Indikator unter Sticky-Header sichtbar)
var formSection = document.getElementById('stepper-form');
if (formSection) {
var offset = formSection.getBoundingClientRect().top + window.pageYOffset - 120;
window.scrollTo({ top: offset, behavior: 'smooth' });
}
trackStepProgression(step);
// Focus management: move focus to new step heading
setTimeout(function () {
var activePanel = stepPanels[step - 1];
if (activePanel) {
var heading = activePanel.querySelector('h2');
if (heading) {
heading.setAttribute('tabindex', '-1');
heading.focus({ preventScroll: true });
}
}
}, 350);
}
var animatedCheckSvg = '';
function updateProgress() {
var step = STATE.currentStep;
progCircles.forEach(function (circle, i) {
if (!circle) return;
var circleStep = i + 1;
circle.classList.remove('bg-primary', 'text-white', 'ring-4', 'ring-primary/20', 'bg-zinc-200', 'text-zinc-400', 'nst-prog-complete', 'nst-prog-activate');
if (circleStep lineAfterStep;
line.style.width = shouldFill ? '100%' : '0%';
line.classList.remove('nst-charging');
if (shouldFill) {
void line.offsetWidth;
line.classList.add('nst-charging');
}
});
// Labels
if (progLabels[1]) {
progLabels[1].classList.toggle('text-primary', step >= 2);
progLabels[1].classList.toggle('text-zinc-400', step 0;
if (sumPraxisRow) sumPraxisRow.style.display = hasPraxis ? '' : 'none';
if (hasPraxis) {
if (sumPraxisName) sumPraxisName.textContent = STATE.praxis.name;
if (sumPraxisPrice) sumPraxisPrice.textContent = fmt(STATE.praxis.price);
}
if (sumTotal) sumTotal.textContent = fmt(STATE.theorie.price + (hasPraxis ? STATE.praxis.price : 0));
}
// ---- Card Selection UI ----
function updateCardSelection(name) {
var cards = form.querySelectorAll('input[name="' + name + '"]');
cards.forEach(function (input) {
var label = input.closest('[data-card]');
if (!label) return;
if (input.checked) {
label.classList.add('nst-selected');
} else {
label.classList.remove('nst-selected');
}
});
}
// ---- Event Listeners ----
// Radio changes
form.addEventListener('change', function (e) {
var input = e.target;
if (!input || !input.name) return;
if (input.name === 'theorie') {
STATE.theorie = {
id: input.dataset.productId || '10378',
price: Number(input.dataset.price) || 149,
name: input.dataset.name || ''
};
updateCardSelection('theorie');
updateSummary();
}
if (input.name === 'praxis') {
var rawId = input.dataset.productId;
var rawPrice = Number(input.dataset.price);
STATE.praxis = {
id: (rawId !== undefined && rawId !== null) ? rawId : '99744',
price: !isNaN(rawPrice) ? rawPrice : 249,
name: input.dataset.name || 'Praxis'
};
updateCardSelection('praxis');
updateSummary();
}
});
// Navigation buttons
var next1 = document.getElementById('nst-next-1');
var back2 = document.getElementById('nst-back-2');
if (next1) next1.addEventListener('click', function () { goToStep(2); });
if (back2) back2.addEventListener('click', function () { goToStep(1); });
// Checkout
if (checkoutBtn) {
checkoutBtn.addEventListener('click', function (e) {
e.preventDefault();
handleCheckout();
});
}
// Hero CTA scroll
var heroCta = document.getElementById('nst-hero-cta');
if (heroCta) {
heroCta.addEventListener('click', function (e) {
e.preventDefault();
var target = document.getElementById('stepper-form');
if (target) {
var offset = target.getBoundingClientRect().top + window.pageYOffset - 120;
window.scrollTo({ top: offset, behavior: 'smooth' });
}
});
}
// Prevent form submit
form.addEventListener('submit', function (e) { e.preventDefault(); });
// ---- Checkout Handler ----
function handleCheckout() {
var productIds = [STATE.theorie.id];
if (STATE.praxis.id) productIds.push(STATE.praxis.id);
var total = STATE.theorie.price + (STATE.praxis.id ? STATE.praxis.price : 0);
// Fire tracking events
fireCheckoutTracking(productIds, total);
// Disable button + show loading (Pitfall: verhindert Doppel-Add-to-Cart)
if (checkoutBtn) {
checkoutBtn.disabled = true;
checkoutBtn.innerHTML = 'Weiterleitung
';
}
// Redirect after short delay for tracking
setTimeout(function () {
var url = buildCheckoutURL(productIds);
window.location.href = url;
}, 350);
}
function buildCheckoutURL(productIds) {
var currentParams = new URLSearchParams(window.location.search);
var checkoutParams = new URLSearchParams();
checkoutParams.set('add-to-cart', productIds.join(','));
checkoutParams.set('nautigo_tracked', '1');
currentParams.forEach(function (value, key) {
if (value && value.trim() !== '') {
checkoutParams.set(key, value);
}
});
return '/kasse/?' + checkoutParams.toString();
}
// ---- Init ----
updateCardSelection('theorie');
updateCardSelection('praxis');
updateSummary();
updateProgress();
// ---- FAQ Accordion ----
var faqContainer = document.getElementById('nst-faq');
if (faqContainer) {
faqContainer.addEventListener('click', function (e) {
var trigger = e.target.closest('.nst-faq-trigger');
if (!trigger) return;
var item = trigger.closest('.nst-faq-item');
if (!item) return;
var body = item.querySelector('.nst-faq-body');
var inner = item.querySelector('.nst-faq-body-inner');
if (!body || !inner) return;
var isOpen = item.classList.contains('nst-open');
// Alle anderen schließen
faqContainer.querySelectorAll('.nst-faq-item.nst-open').forEach(function (openItem) {
if (openItem !== item) {
openItem.classList.remove('nst-open');
openItem.querySelector('.nst-faq-trigger').setAttribute('aria-expanded', 'false');
openItem.querySelector('.nst-faq-body').style.maxHeight = '0';
}
});
if (isOpen) {
item.classList.remove('nst-open');
trigger.setAttribute('aria-expanded', 'false');
body.style.maxHeight = '0';
} else {
item.classList.add('nst-open');
trigger.setAttribute('aria-expanded', 'true');
body.style.maxHeight = inner.scrollHeight + 'px';
}
});
}
// ---- Preis-Aufschlüsselungs-Modal ----
(function () {
var pmOverlay = document.getElementById('nst-pm-overlay');
var pmTrigger = document.getElementById('nst-pm-trigger');
var pmClose = document.getElementById('nst-pm-close');
var pmBackdrop = document.getElementById('nst-pm-backdrop');
if (!pmOverlay || !pmTrigger) return;
function syncModalPrices() {
var thNameEl = document.getElementById('nst-pm-theorie-name');
var thPriceEl = document.getElementById('nst-pm-theorie-price');
var praxisRow = document.getElementById('nst-pm-praxis-row');
var prNameEl = document.getElementById('nst-pm-praxis-name');
var prPriceEl = document.getElementById('nst-pm-praxis-price');
var totalEl = document.getElementById('nst-pm-total');
if (thNameEl) thNameEl.textContent = STATE.theorie.name || 'Theorie-Paket';
if (thPriceEl) thPriceEl.textContent = STATE.theorie.price.toFixed(2).replace('.', ',') + '\u00a0\u20ac';
if (praxisRow) {
if (STATE.praxis.id) {
praxisRow.style.display = '';
if (prNameEl) prNameEl.textContent = STATE.praxis.name || 'Praxisausbildung';
if (prPriceEl) prPriceEl.textContent = STATE.praxis.price.toFixed(2).replace('.', ',') + '\u00a0\u20ac';
} else {
praxisRow.style.display = 'none';
}
}
var total = STATE.theorie.price + (STATE.praxis.id ? STATE.praxis.price : 0);
if (totalEl) totalEl.textContent = total.toFixed(2).replace('.', ',') + '\u00a0\u20ac';
}
function openModal() {
syncModalPrices();
pmOverlay.classList.add('nst-pm-open');
pmOverlay.setAttribute('aria-hidden', 'false');
document.body.style.overflow = 'hidden';
var focusEl = pmOverlay.querySelector('button');
if (focusEl) setTimeout(function () { focusEl.focus(); }, 50);
}
function closeModal() {
pmOverlay.classList.remove('nst-pm-open');
pmOverlay.setAttribute('aria-hidden', 'true');
document.body.style.overflow = '';
if (pmTrigger) pmTrigger.focus();
}
pmTrigger.addEventListener('click', openModal);
if (pmClose) pmClose.addEventListener('click', closeModal);
if (pmBackdrop) pmBackdrop.addEventListener('click', closeModal);
pmOverlay.addEventListener('keydown', function (e) {
if (e.key === 'Escape') closeModal();
});
})();
console.log('[Nautigo Stepper] Initialisiert');
});
})();
(function () {
'use strict';
var CURRENCY = 'EUR';
window.nautigoTracking = window.nautigoTracking || {
firedEvents: new Set(),
customImplementation: true
};
var uuid = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0;
var v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
var canFireEvent = function (eventName, productIds) {
var key = eventName + '_' + productIds.slice().sort().join('_');
if (window.nautigoTracking.firedEvents.has(key)) {
return false;
}
window.nautigoTracking.firedEvents.add(key);
return true;
};
function isMetaPixelReady() {
if (typeof fbq === 'undefined') {
return false;
}
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.indexOf('cmplz_marketing=') === 0) {
return cookie.substring('cmplz_marketing='.length) === 'allow';
}
}
return false;
}
function hasStatisticsConsent() {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.indexOf('cmplz_statistics=') === 0) {
return cookie.substring('cmplz_statistics='.length) === 'allow';
}
}
return false;
}
function getProductName(productId) {
var input = document.querySelector('input[data-product-id="' + productId + '"]');
return input ? (input.dataset.name || '').trim() : String(productId);
}
// ---- Global tracking functions (called from stepper logic) ----
window.trackStepProgression = function (step) {
if (typeof gtag !== 'undefined' && hasStatisticsConsent()) {
gtag('event', 'stepper_step_reached', {
event_category: 'stepper_konfigurator',
event_label: 'step_' + step,
value: step
});
}
console.log('[Nautigo Tracking] Step ' + step + ' erreicht');
};
window.fireCheckoutTracking = function (productIds, total) {
var eventIdATC = uuid();
var eventIdIC = uuid();
// GA4 events via dataLayer (nur mit Statistics-Consent)
if (hasStatisticsConsent()) {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'add_to_cart',
ecommerce: {
currency: CURRENCY,
value: total,
items: productIds.map(function (id) {
return {
item_id: id,
item_name: getProductName(id),
item_brand: 'Nautigo',
item_category: 'Stepper-Konfigurator',
quantity: 1
};
})
}
});
}
// Meta Pixel
if (isMetaPixelReady()) {
var content_ids = productIds.slice();
var contents = productIds.map(function (id) {
return { id: id, quantity: 1 };
});
if (canFireEvent('AddToCart', content_ids)) {
fbq('track', 'AddToCart', {
content_type: 'product',
content_ids: content_ids,
contents: contents,
value: parseFloat(total.toFixed(2)),
currency: CURRENCY
}, { eventID: eventIdATC });
console.log('[Nautigo Tracking] Meta Pixel: AddToCart', content_ids);
}
if (canFireEvent('InitiateCheckout', content_ids)) {
fbq('track', 'InitiateCheckout', {
content_type: 'product',
content_ids: content_ids,
contents: contents,
value: parseFloat(total.toFixed(2)),
currency: CURRENCY,
num_items: productIds.length
}, { eventID: eventIdIC });
console.log('[Nautigo Tracking] Meta Pixel: InitiateCheckout', content_ids);
}
}
// Tracking cookie for server-side dedup
setTrackingCookie(eventIdATC, eventIdIC);
};
function setTrackingCookie(eventIdATC, eventIdIC) {
var data = JSON.stringify({
atc: eventIdATC,
ic: eventIdIC,
timestamp: Date.now()
});
var expires = new Date(Date.now() + 5 * 60 * 1000).toUTCString();
document.cookie = 'nautigo_tracking_ids=' + encodeURIComponent(data) + '; expires=' + expires + '; path=/; SameSite=Lax';
}
// ---- Initial ViewContent on page load ----
function trackInitialView() {
var form = document.getElementById('nst-form');
if (!form) return;
var theorie = form.querySelector('input[name="theorie"]:checked');
var praxis = form.querySelector('input[name="praxis"]:checked');
var theorieId = theorie ? (theorie.dataset.productId || '10378') : '10378';
var praxisId = praxis ? praxis.dataset.productId : '99744';
var theoriePrice = theorie ? Number(theorie.dataset.price || 199) : 199;
var praxisPrice = praxis ? Number(praxis.dataset.price) : 249;
var content_ids = praxisId ? [theorieId, praxisId] : [theorieId];
var total = theoriePrice + (praxisId ? praxisPrice : 0);
if (isMetaPixelReady() && canFireEvent('ViewContent', content_ids)) {
var eventId = uuid();
fbq('track', 'ViewContent', {
content_type: 'product',
content_ids: content_ids,
contents: content_ids.map(function (id) {
return { id: id, quantity: 1 };
}),
value: parseFloat(total.toFixed(2)),
currency: CURRENCY
}, { eventID: eventId });
console.log('[Nautigo Tracking] Meta Pixel: ViewContent', content_ids);
}
}
// Attempt 1: DOM-ready (falls fbq bereits geladen)
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', trackInitialView);
} else {
trackInitialView();
}
// Attempt 2: cmplz_fire_categories (falls fbq erst nach Consent geladen wird)
document.addEventListener('cmplz_fire_categories', function () {
trackInitialView(); // canFireEvent() verhindert Doppel-Firing
});
console.log('[Nautigo Tracking] Stepper Tracking initialisiert');
})();
(function () {
'use strict';
// domReady Helper (FlyingPress-kompatibel)
function domReady(fn) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', fn);
} else { fn(); }
}
// Counter Animation beim Scrollen
function animateCounter(element, target) {
let current = 0;
const increment = target / 60; // 60 steps für smooth animation
const timer = setInterval(() => {
current += increment;
if (current >= target) {
element.textContent = target.toLocaleString('de-DE') + '+';
clearInterval(timer);
} else {
element.textContent = Math.floor(current).toLocaleString('de-DE');
}
}, 25);
}
domReady(function () {
// Intersection Observer für Counter
const counterObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const element = entry.target;
const count = parseInt(element.dataset.counter);
animateCounter(element, count);
counterObserver.unobserve(element);
}
});
}, { threshold: 0.5 });
// Alle Counter beobachten
document.querySelectorAll('[data-counter]').forEach(el => {
counterObserver.observe(el);
});
// Step Cards Hover Effekte
document.querySelectorAll('.step-card').forEach((card, index) => {
card.addEventListener('mouseenter', () => {
setTimeout(() => {
card.classList.add('success-bounce');
}, index * 100);
});
card.addEventListener('mouseleave', () => {
card.classList.remove('success-bounce');
});
});
// CTA Button Click Tracking
const ctaButton = document.querySelector('.cta-button');
if (ctaButton) {
ctaButton.addEventListener('click', () => {
// CTA Button clicked tracking
});
}
// Progress Line Animation on Scroll
const progressObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const lines = entry.target.querySelectorAll('.progress-line');
lines.forEach((line, index) => {
setTimeout(() => {
line.classList.add('draw');
}, index * 300);
});
progressObserver.unobserve(entry.target);
}
});
}, { threshold: 0.3 });
// Section für Progress Animation beobachten
const stepsSection = document.querySelector('.steps-section section');
if (stepsSection) {
progressObserver.observe(stepsSection);
}
// Mobile Touch Feedback
if ('ontouchstart' in window) {
document.querySelectorAll('.step-card').forEach(card => {
card.addEventListener('touchstart', () => {
card.style.transform = 'translateY(0)';
});
card.addEventListener('touchend', () => {
setTimeout(() => {
card.style.transform = '';
}, 100);
});
});
}
}); // domReady Ende
// Hero Video Play Functions — global, da per onclick aufgerufen
// Inline-Logik statt NautigoVideo-Dependency (nur in premiumpaket-Widget definiert)
window.playHeroVideo = function () {
var video = document.getElementById('hero-video');
if (!video) return;
video.muted = false;
video.volume = 1;
video.controls = true;
video.style.objectFit = 'contain';
// Custom Controls ausblenden - native Controls uebernehmen
var ctrl = document.getElementById('hero-video-controls');
if (ctrl) { ctrl.style.opacity = '0'; ctrl.style.pointerEvents = 'none'; }
// Overlay entfernen mit Fade-Out
var overlay = document.getElementById('video-overlay-btn');
if (overlay) {
overlay.style.opacity = '0';
overlay.style.pointerEvents = 'none';
setTimeout(function () { if (overlay.parentNode) overlay.remove(); }, 500);
}
var p = video.play();
if (p !== undefined) {
p.catch(function () { video.controls = true; });
}
};
window.playDemoVideo = function () {
var video = document.getElementById('demo-video');
if (!video) return;
video.muted = false;
video.volume = 1;
video.controls = true;
video.style.objectFit = 'contain';
var overlay = document.getElementById('demo-video-overlay-btn');
if (overlay) {
overlay.style.opacity = '0';
overlay.style.pointerEvents = 'none';
setTimeout(function () { if (overlay.parentNode) overlay.remove(); }, 500);
}
var p = video.play();
if (p !== undefined) {
p.then(function () {
if (video.requestFullscreen) {
video.requestFullscreen().catch(function () { });
} else if (video.webkitEnterFullscreen) {
video.webkitEnterFullscreen();
}
}).catch(function () { video.controls = true; });
}
};
// Hero Video Autoplay + Custom Controls (FlyingPress-kompatibel)
domReady(function () {
var video = document.getElementById('hero-video');
var overlay = document.getElementById('video-overlay-btn');
var controls = document.getElementById('hero-video-controls');
var playPauseBtn = document.getElementById('hero-play-pause-btn');
var muteBtn = document.getElementById('hero-mute-btn');
var pauseIcon = document.getElementById('hero-pause-icon');
var playIcon = document.getElementById('hero-play-icon');
var mutedIcon = document.getElementById('hero-muted-icon');
var unmutedIcon = document.getElementById('hero-unmuted-icon');
if (!video || !controls) return;
var autoplayStarted = false;
var isMobile = window.innerWidth = 3 (HAVE_FUTURE_DATA) = genug Daten zum Abspielen
if (video.readyState >= 3) {
tryPlay();
} else {
video.addEventListener('canplay', function onCanPlay() {
video.removeEventListener('canplay', onCanPlay);
tryPlay();
});
// Sicherheits-Fallback: Video laden erzwingen
if (video.readyState === 0) video.load();
}
}
// Mobile: IntersectionObserver (Video komplett im Viewport)
if (isMobile) {
if ('IntersectionObserver' in window) {
var observer = new IntersectionObserver(function (entries) {
entries.forEach(function (entry) {
if (entry.isIntersecting && !autoplayStarted && !video.controls) {
startAutoplay();
observer.disconnect();
}
});
}, { threshold: 0.85 });
observer.observe(video);
// FlyingPress js_delay: Script kann erst nach User-Scroll laufen.
// Video ist dann evtl. bereits im Viewport — Observer feuert nicht mehr.
// Daher: sofort pruefen ob Video bereits sichtbar ist.
var rect = video.getBoundingClientRect();
if (rect.top 0) {
startAutoplay();
observer.disconnect();
}
}
} else {
// Desktop: Verzoegert nach Page Load
// FlyingPress kann load-Event bereits gefeuert haben
if (document.readyState === 'complete') {
setTimeout(startAutoplay, 1500);
} else {
window.addEventListener('load', function () {
setTimeout(startAutoplay, 1500);
});
}
}
// Play/Pause Button
playPauseBtn.addEventListener('click', function (e) {
e.stopPropagation();
if (video.paused || video.ended) {
video.play().then(function () {
updatePlayPauseIcon();
}).catch(function () { });
} else {
video.pause();
updatePlayPauseIcon();
}
});
// Mute/Unmute Button
muteBtn.addEventListener('click', function (e) {
e.stopPropagation();
video.muted = !video.muted;
if (!video.muted) video.volume = 1;
updateMuteIcon();
});
// Video Events synchronisieren (nur wenn Custom Controls aktiv)
video.addEventListener('play', function () {
if (!video.controls) {
updatePlayPauseIcon();
showControls();
}
});
video.addEventListener('pause', function () {
if (!video.controls) updatePlayPauseIcon();
});
video.addEventListener('ended', function () {
if (!video.controls) {
updatePlayPauseIcon();
showOverlay();
hideControls();
autoplayStarted = false;
}
});
video.addEventListener('volumechange', function () {
if (!video.controls) updateMuteIcon();
});
}); // domReady Ende
})(); // IIFE Ende
(function () {
'use strict';
function domReady(fn) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', fn);
} else { fn(); }
}
domReady(function () {
// ---- Video Cover ----
var videoCover = document.getElementById('nst-video-cover');
var galleryVideo = document.getElementById('nst-gallery-video');
if (videoCover && galleryVideo) {
videoCover.addEventListener('click', function () {
videoCover.classList.add('nst-cover-hidden');
galleryVideo.controls = true;
galleryVideo.play();
});
// Show cover again if video ends
galleryVideo.addEventListener('ended', function () {
galleryVideo.controls = false;
videoCover.classList.remove('nst-cover-hidden');
});
}
// ---- Gallery Grid ----
var grid = document.getElementById('nst-gallery-grid');
var lightbox = document.getElementById('nst-lightbox');
var lbImg = document.getElementById('nst-lb-img');
var lbCaption = document.getElementById('nst-lb-caption');
var lbCounter = document.getElementById('nst-lb-counter');
var lbClose = document.getElementById('nst-lb-close');
var lbPrev = document.getElementById('nst-lb-prev');
var lbNext = document.getElementById('nst-lb-next');
if (!grid || !lightbox) return;
var cards = Array.prototype.slice.call(grid.querySelectorAll('.nst-gallery-card'));
var currentIdx = 0;
var total = cards.length;
function getCardData(idx) {
var card = cards[idx];
var img = card.querySelector('img');
var caption = card.querySelector('.nst-gallery-caption');
return {
src: img ? img.src : '',
alt: img ? img.alt : '',
caption: caption ? caption.textContent.trim() : ''
};
}
function openLightbox(idx) {
currentIdx = (idx + total) % total;
var data = getCardData(currentIdx);
lbImg.src = data.src;
lbImg.alt = data.alt;
lbCaption.textContent = data.caption;
lbCounter.textContent = (currentIdx + 1) + ' / ' + total;
lightbox.classList.add('nst-lb-open');
lightbox.setAttribute('aria-hidden', 'false');
document.body.style.overflow = 'hidden';
lbClose.focus();
}
function closeLightbox() {
lightbox.classList.remove('nst-lb-open');
lightbox.setAttribute('aria-hidden', 'true');
document.body.style.overflow = '';
if (cards[currentIdx]) cards[currentIdx].focus();
}
function navigate(dir) {
currentIdx = (currentIdx + dir + total) % total;
var data = getCardData(currentIdx);
lbImg.style.opacity = '0';
setTimeout(function () {
lbImg.src = data.src;
lbImg.alt = data.alt;
lbCaption.textContent = data.caption;
lbCounter.textContent = (currentIdx + 1) + ' / ' + total;
lbImg.style.opacity = '1';
}, 120);
}
// Open on click / Enter / Space
grid.addEventListener('click', function (e) {
var card = e.target.closest('.nst-gallery-card');
if (!card) return;
var idx = parseInt(card.getAttribute('data-gallery-idx'), 10);
openLightbox(idx);
});
grid.addEventListener('keydown', function (e) {
if (e.key !== 'Enter' && e.key !== ' ') return;
var card = e.target.closest('.nst-gallery-card');
if (!card) return;
e.preventDefault();
var idx = parseInt(card.getAttribute('data-gallery-idx'), 10);
openLightbox(idx);
});
// Lightbox controls
lbClose.addEventListener('click', closeLightbox);
lbPrev.addEventListener('click', function () { navigate(-1); });
lbNext.addEventListener('click', function () { navigate(1); });
// Close on backdrop click
lightbox.addEventListener('click', function (e) {
if (e.target === lightbox) closeLightbox();
});
// Keyboard navigation
document.addEventListener('keydown', function (e) {
if (!lightbox.classList.contains('nst-lb-open')) return;
if (e.key === 'Escape') closeLightbox();
if (e.key === 'ArrowLeft') navigate(-1);
if (e.key === 'ArrowRight') navigate(1);
});
// Touch swipe
var touchStartX = 0;
lightbox.addEventListener('touchstart', function (e) {
touchStartX = e.touches[0].clientX;
}, { passive: true });
lightbox.addEventListener('touchend', function (e) {
var dx = e.changedTouches[0].clientX - touchStartX;
if (Math.abs(dx) > 50) navigate(dx < 0 ? 1 : -1);
}, { passive: true });
});
})();
(function () {
'use strict';
function domReady(fn) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', fn);
} else { fn(); }
}
domReady(function () {
var LOCATIONS = [
{ title: 'Köln', lat: 50.8951278, lng: 6.9958818, place: 'Nautigo Bootsschule', bl: 'NRW' },
{ title: 'Düsseldorf', lat: 51.2052305, lng: 6.7717578, place: 'Nautigo Bootsschule', bl: 'NRW' },
{ title: 'Dortmund', lat: 51.5328413, lng: 7.4423293, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'NRW' },
{ title: 'Bielefeld', lat: 52.0068764, lng: 8.5880011, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'NRW' },
{ title: 'Duisburg', lat: 51.4397798, lng: 6.7633992, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'NRW' },
{ title: 'Bonn', lat: 50.7337620, lng: 7.1052810, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'NRW' },
{ title: 'Münster', lat: 51.9520863, lng: 7.6213414, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'NRW' },
{ title: 'Bad Oeynhausen', lat: 52.2041803, lng: 8.8453871, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'NRW' },
{ title: 'München', lat: 48.0582136, lng: 11.1031005, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Nürnberg', lat: 49.4314303, lng: 11.0167226, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Regensburg', lat: 49.0283951, lng: 12.1059856, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Hof/Saale', lat: 50.3191547, lng: 11.9683313, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Rieden am Forggensee', lat: 47.6348738, lng: 10.7366202, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Absberg', lat: 49.1405211, lng: 10.8971574, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Bamberg', lat: 49.9124068, lng: 10.8329397, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Rosenheim', lat: 47.8496331, lng: 12.1015002, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Würzburg', lat: 49.7920090, lng: 9.9334131, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Passau', lat: 48.5746398, lng: 13.4131699, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bayern' },
{ title: 'Mannheim/Ludwigshafen', lat: 49.4672033, lng: 8.4518965, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Baden-Württemberg' },
{ title: 'Stuttgart', lat: 48.7224275, lng: 9.3430254, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Baden-Württemberg' },
{ title: 'Bodensee', lat: 47.5862007, lng: 9.5605356, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Baden-Württemberg' },
{ title: 'Karlsruhe', lat: 49.0380716, lng: 8.3085650, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Baden-Württemberg' },
{ title: 'Freiburg', lat: 47.9884305, lng: 7.8324664, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Baden-Württemberg' },
{ title: 'Hannover', lat: 52.3551680, lng: 9.7464303, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Niedersachsen' },
{ title: 'Lingen (Ems)', lat: 52.5219640, lng: 7.3299985, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Niedersachsen' },
{ title: 'Hüde', lat: 52.4943107, lng: 8.3567315, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Niedersachsen' },
{ title: 'Braunschweig', lat: 52.3115529, lng: 10.4529535, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Niedersachsen' },
{ title: 'Osnabrück', lat: 52.2724961, lng: 8.0547406, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Niedersachsen' },
{ title: 'Emden', lat: 53.3484463, lng: 7.1552861, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Niedersachsen' },
{ title: 'Rostock', lat: 54.0962160, lng: 12.1276906, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Mecklenburg-Vorpommern' },
{ title: 'Waren (Müritz)', lat: 53.5113914, lng: 12.6954282, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Mecklenburg-Vorpommern' },
{ title: 'Stralsund', lat: 54.3181141, lng: 13.0951547, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Mecklenburg-Vorpommern' },
{ title: 'Wolgast', lat: 54.0520727, lng: 13.7801863, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Mecklenburg-Vorpommern' },
{ title: 'Greifswald', lat: 54.1000748, lng: 13.3954650, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Mecklenburg-Vorpommern' },
{ title: 'Schwerin', lat: 53.6323791, lng: 11.4231462, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Mecklenburg-Vorpommern' },
{ title: 'Frankfurt a.M.', lat: 50.0900489, lng: 8.6100484, place: 'Nautigo Bootsschule', bl: 'Hessen' },
{ title: 'Mainz/Wiesbaden', lat: 50.0248044, lng: 8.2613832, place: 'Nautigo Bootsschule', bl: 'Hessen' },
{ title: 'Kassel', lat: 51.3163789, lng: 9.5088644, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Hessen' },
{ title: 'Leipzig', lat: 51.2644570, lng: 12.3442760, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Sachsen' },
{ title: 'Dresden', lat: 51.0581447, lng: 13.8077524, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Sachsen' },
{ title: 'Chemnitz', lat: 50.8234537, lng: 12.9218727, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Sachsen' },
{ title: 'Lübeck', lat: 53.8968842, lng: 10.7663436, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Schleswig-Holstein' },
{ title: 'Kiel', lat: 54.4283300, lng: 10.1690100, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Schleswig-Holstein' },
{ title: 'Wyk auf Föhr', lat: 54.6912732, lng: 8.5673008, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Schleswig-Holstein' },
{ title: 'Koblenz', lat: 50.3641975, lng: 7.5821390, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Rheinland-Pfalz' },
{ title: 'Trier', lat: 49.7578948, lng: 6.6340078, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Rheinland-Pfalz' },
{ title: 'Hamburg', lat: 53.5333333, lng: 9.8794225, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Hamburg' },
{ title: 'Bremen', lat: 53.0696577, lng: 8.8068809, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Bremen' },
{ title: 'Berlin', lat: 52.4553581, lng: 13.3859582, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Berlin' },
{ title: 'Potsdam', lat: 52.3894227, lng: 13.0989428, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Brandenburg' },
{ title: 'Magdeburg', lat: 52.1195275, lng: 11.6205418, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Sachsen-Anhalt' },
{ title: 'Erfurt', lat: 50.9748491, lng: 11.0187594, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Thüringen' },
{ title: 'Saarbrücken', lat: 49.2235139, lng: 7.0160667, place: 'Bootsführerschein Ausbildung Anfragen', bl: 'Saarland' }
];
var ROOT = document.getElementById('nst-map-section');
var WRAP = document.getElementById('nst-mapwrap');
var CANVAS = document.getElementById('nst-map-canvas');
var PILLS_EL = document.getElementById('nst-map-pills');
if (!ROOT || !WRAP || !CANVAS || !PILLS_EL) return;
// ---- Bundesland-Gruppen aufbauen ----
var blCount = {};
LOCATIONS.forEach(function (l) { blCount[l.bl] = (blCount[l.bl] || 0) + 1; });
var bundeslaender = ['Alle'].concat(
Object.keys(blCount).sort(function (a, b) { return blCount[b] - blCount[a]; })
);
// ---- Pills erzeugen ----
bundeslaender.forEach(function (bl) {
var btn = document.createElement('button');
btn.type = 'button';
var label = bl === 'Alle' ? 'Alle (' + LOCATIONS.length + ')' : bl + ' (' + blCount[bl] + ')';
btn.textContent = label;
var baseClass = 'px-3 py-1 rounded-full text-xs font-semibold border transition-all duration-150 cursor-pointer focus:outline-none ';
btn.className = baseClass + (bl === 'Alle'
? 'nst-map-pill-active'
: 'bg-white text-zinc-600 border-zinc-200 hover:border-primary/60 hover:text-primary');
btn.dataset.bl = bl;
btn.setAttribute('aria-pressed', bl === 'Alle' ? 'true' : 'false');
btn.addEventListener('click', function () { filterByBl(bl); });
PILLS_EL.appendChild(btn);
});
// ---- Map State ----
var mapsLoaded = false, mapsLoading = false, mapInit = false;
var loadQueue = [];
var leafletMap = null;
var allMarkers = [];
function loadLeaflet(cb) {
if (mapsLoaded) { if (cb) cb(); return; }
if (cb) loadQueue.push(cb);
if (mapsLoading) return;
mapsLoading = true;
var css = document.createElement('link');
css.rel = 'stylesheet';
css.href = 'https://unpkg.com/
[email protected] /dist/leaflet.css';
css.integrity = 'sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=';
css.crossOrigin = '';
document.head.appendChild(css);
var s = document.createElement('script');
s.src = 'https://unpkg.com/
[email protected] /dist/leaflet.js';
s.integrity = 'sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=';
s.crossOrigin = '';
s.onload = function () {
setTimeout(function () {
mapsLoaded = true; mapsLoading = false;
while (loadQueue.length) { (loadQueue.shift())(); }
}, 100);
};
s.onerror = function () { mapsLoading = false; };
document.head.appendChild(s);
}
function initMap() {
if (mapInit || !window.L) return;
mapInit = true;
var nstIcon = L.icon({
iconUrl: 'https://nautigo-bootsschule.de/wp-content/uploads/2025/05/cropped-Logo-Rund-Icon-512x512-1.avif',
iconSize: [24, 24],
iconAnchor: [18, 18],
popupAnchor: [0, -20]
});
leafletMap = L.map(CANVAS).setView([51.1657, 10.4515], 6);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '©
OpenStreetMap '
}).addTo(leafletMap);
LOCATIONS.forEach(function (loc) {
var marker = L.marker([loc.lat, loc.lng], { icon: nstIcon });
var msg = encodeURIComponent('Liebes Nautigo-Team,\n\nIch interessiere mich für den Bootsführerschein und würde gern wissen, wann ich in der Nähe von ' + loc.title + ' meinen SBF machen kann.\n\nVielen Dank!');
var waLink = 'https://wa.me/4915121277699?text=' + msg;
marker.bindPopup('
' + loc.title + '
' + loc.place + '
Anfragen ');
marker._nstBl = loc.bl;
marker.addTo(leafletMap);
allMarkers.push(marker);
});
fitMarkers(allMarkers);
WRAP.classList.add('nst-map-ready');
}
function fitMarkers(markers) {
if (!leafletMap || !markers.length) return;
var bounds = L.latLngBounds(markers.map(function (m) { return m.getLatLng(); }));
leafletMap.fitBounds(bounds, { padding: [30, 30] });
}
function filterByBl(bl) {
// Pills updaten
PILLS_EL.querySelectorAll('button').forEach(function (btn) {
var active = btn.dataset.bl === bl;
btn.classList.toggle('nst-map-pill-active', active);
btn.classList.toggle('bg-white', !active);
btn.classList.toggle('text-zinc-600', !active);
btn.classList.toggle('border-zinc-200', !active);
btn.setAttribute('aria-pressed', active ? 'true' : 'false');
});
if (!mapInit) return;
var visible = [];
allMarkers.forEach(function (m) {
var show = bl === 'Alle' || m._nstBl === bl;
if (show) {
if (!leafletMap.hasLayer(m)) m.addTo(leafletMap);
visible.push(m);
} else {
if (leafletMap.hasLayer(m)) leafletMap.removeLayer(m);
}
});
if (visible.length) fitMarkers(visible);
}
// ---- Aktivierung NUR per expliziten Klick ----
// Es werden keine Cookies gesetzt, daher kein Complianz-Marketing-Consent erforderlich.
// Vor dem Klick gehen KEINE externen Requests raus (kein Auto-Load via Scroll/IO/Consent).
window.nstActivateMap = function (e) {
if (e) e.preventDefault();
loadLeaflet(initMap);
};
});
})();
(function () {
'use strict';
var _initialized = false;
function init() {
if (_initialized) return true;
var track = document.getElementById('nst-reel-track');
if (!track) return false;
var wrapper = track.parentElement;
var sectionEl = document.getElementById('nst-reel-section');
var items = Array.prototype.slice.call(track.querySelectorAll('.nst-reel-item[role="listitem"]'));
if (!items.length) return false;
var allItems = Array.prototype.slice.call(track.querySelectorAll('.nst-reel-item'));
_initialized = true;
// prefers-reduced-motion: Poster only, kein Video, kein Marquee
if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
track.style.animationPlayState = 'paused';
return true;
}
var activeUnmuted = null;
var allPlaying = false;
var visInterval = null;
/* ---- Helpers ---- */
function setSoundIcon(item, muted) {
var m = item.querySelector('.nst-reel-icon-muted');
var u = item.querySelector('.nst-reel-icon-unmuted');
if (m) m.style.display = muted ? '' : 'none';
if (u) u.style.display = muted ? 'none' : '';
}
function showHint(item, text) {
var hint = item.querySelector('.nst-reel-hint');
if (!hint) return;
hint.textContent = text;
item.classList.add('nst-reel-hint-visible');
if (item._ht) clearTimeout(item._ht);
item._ht = setTimeout(function () {
item.classList.remove('nst-reel-hint-visible');
item._ht = null;
}, 1800);
}
/* ---- Poster-Gate: Poster erst ausblenden wenn Video-Frame gerendert ---- */
function attachReveal(item) {
if (item._rv) return;
item._rv = true;
var video = item.querySelector('video');
if (!video) return;
video.addEventListener('timeupdate', function () {
if (!video.paused && video.currentTime > 0) {
item.classList.add('nst-reel-playing');
}
});
}
/* ---- Sichtbarkeitspruefung: nur sichtbare Videos abspielen ---- */
function checkVisibleAndPlay() {
if (!wrapper) return;
var wr = wrapper.getBoundingClientRect();
allItems.forEach(function (item) {
var video = item.querySelector('video');
if (!video) return;
var r = item.getBoundingClientRect();
var isVisible = r.right > wr.left - 50 && r.left 0 && rect.top = 20) clearInterval(iv);
}, 500);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', tryInit);
} else {
tryInit();
}
})();