{"id":5651,"date":"2026-06-17T16:16:38","date_gmt":"2026-06-17T14:16:38","guid":{"rendered":"https:\/\/mvfaehrtgut.de\/?page_id=5651"},"modified":"2026-08-03T17:17:24","modified_gmt":"2026-08-03T15:17:24","slug":"regiobus","status":"publish","type":"page","link":"https:\/\/mvfaehrtgut.de\/en\/mobilitaetsoffensive\/regiobus\/","title":{"rendered":"Regiobus"},"content":{"rendered":"\n<div class=\"wp-block-media-text alignfull has-media-on-the-right is-stacked-on-mobile is-vertically-aligned-center is-style-vmv-bogen-links\" style=\"grid-template-columns:auto 60%\"><div class=\"wp-block-media-text__content\">\n<div class=\"wp-block-group is-vertical is-content-justification-left is-nowrap is-layout-flex wp-container-core-group-is-layout-47321a39 wp-block-group-is-layout-flex\" style=\"padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--0)\">\n<figure class=\"wp-block-image size-full is-resized\" style=\"margin-right:var(--wp--preset--spacing--60);margin-left:var(--wp--preset--spacing--60)\"><img decoding=\"async\" src=\"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/06\/icon-regiobus-56.svg\" alt=\"\" class=\"wp-image-5863\" style=\"width:59px;height:auto\"\/><\/figure>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\" style=\"margin-right:var(--wp--preset--spacing--60);margin-left:var(--wp--preset--spacing--60);font-style:normal;font-weight:600;line-height:1.2;text-transform:none\">Immer im Takt \u2013<br>Der Regiobus MV<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\" style=\"margin-right:var(--wp--preset--spacing--60);margin-left:var(--wp--preset--spacing--60)\">Verl\u00e4ssliche Mobilit\u00e4t f\u00fcr jeden Tag \u2013 komfortabel, p\u00fcnktlich und \u00fcberregional vernetzt, auch in l\u00e4ndlichen Regionen von Mecklenburg-Vorpommern.<\/p>\n<\/div>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1100\" height=\"550\" src=\"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/08\/hero-regiobus-1100x550.jpg\" alt=\"\" class=\"wp-image-6762 size-full\" srcset=\"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/08\/hero-regiobus-1100x550.jpg 1100w, https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/08\/hero-regiobus-600x300.jpg 600w, https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/08\/hero-regiobus-768x384.jpg 768w, https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/08\/hero-regiobus-1536x768.jpg 1536w, https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/08\/hero-regiobus-2048x1024.jpg 2048w, https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/08\/hero-regiobus-18x9.jpg 18w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-tertiary-background-color has-background has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\" style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--80);padding-bottom:var(--wp--preset--spacing--80)\">\n<h2 class=\"wp-block-heading has-text-align-center has-primary-color has-text-color has-link-color has-large-font-size wp-elements-1\" style=\"text-transform:none\">Ein neues Mobilit\u00e4tskonzept f\u00fcr Mecklenburg-Vorpommern<\/h2>\n\n\n\n<p class=\"has-text-align-center has-primary-color has-text-color has-link-color has-medium-font-size wp-elements-2 wp-block-paragraph\">Das Land m\u00f6chte gemeinsam mit den Verkehrsunternehmen und kommunalen Aufgabentr\u00e4gern die Mobilit\u00e4t in Mecklenburg-Vorpommern verbessern. Unter anderem werden hierf\u00fcr landkreis\u00fcbergreifende Regiobuslinien mit einheitlichen Qualit\u00e4tsstandards eingef\u00fchrt.<\/p>\n\n\n\n<p class=\"has-text-align-center has-primary-color has-text-color has-link-color has-medium-font-size wp-elements-3 wp-block-paragraph\">Das bedeutet leicht zu merkende Abfahrtszeiten an jedem Tag der Woche. Die ersten Regiobuslinien sind mit dem Fahrplanwechsel 12\/2023 an den Start gegangen.<\/p>\n<\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<style>\n  .regiobus-vorteile {\n    background-color: #002e63;\n    border-radius: 20px;\n    color: #ffffff;\n    font-family: \"Montserrat\", Arial, sans-serif !important;\n    overflow: hidden;\n    max-width: 1000px;\n    margin: 0 auto;\n    box-sizing: border-box;\n  }\n\n  .regiobus-vorteile *,\n  .regiobus-vorteile *::before,\n  .regiobus-vorteile *::after {\n    box-sizing: border-box;\n  }\n\n  .regiobus-vorteile__inner {\n    padding: 32px 24px 0;\n  }\n\n  .regiobus-vorteile__content {\n    width: 100%;\n  }\n\n  .regiobus-vorteile__title {\n    margin: 0 0 20px;\n    font-size: 28px;\n    font-weight: 700;\n    line-height: 32px;\n    letter-spacing: -0.2px;\n    color: #ffffff;\ntext-transform: none;\n  }\n\n  .regiobus-vorteile__list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n  }\n\n  .regiobus-vorteile__list li {\n    position: relative;\n    padding-left: 28px;\n    margin: 0;\n    font-size: 20px;\n    font-weight: 400;\n    line-height: 32px;\n    letter-spacing: -0.2px;\n    color: #ffffff;\n  }\n\n  .regiobus-vorteile__list li::before {\n    content: \"\";\n    position: absolute;\n    left: 0;\n    top: 11px;\n    width: 10px;\n    height: 10px;\n    background-color: #00b2dc;\n  }\n\n  \/* Mobile *\/\n  .regiobus-vorteile__media {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 24px;\n    margin-top: 32px;\n  }\n\n  .regiobus-vorteile .regio-logo {\n    display: block;\n    width: 134px;\n    height: 134px;\n    flex-shrink: 0;\n    order: 1;\n  }\n\n  .regiobus-vorteile .regio-bus {\n    display: block;\n    width: 100%;\n    max-width: 380px;\n    height: auto;\n    order: 2;\n  }\n\n  \/* Tablet *\/\n  @media (min-width: 640px) and (max-width: 999px) {\n    .regiobus-vorteile__inner {\n      padding: 32px;\n    }\n\n    .regiobus-vorteile__content {\n      width: 100%;\n      max-width: none;\n    }\n\n    .regiobus-vorteile__media {\n      flex-direction: row;\n      justify-content: center;\n      align-items: center;\n      gap: 32px;\n      margin-top: 40px;\n    }\n\n    .regiobus-vorteile .regio-logo {\n      order: 1;\n    }\n\n    .regiobus-vorteile .regio-bus {\n      width: 280px;\n      max-width: none;\n      order: 2;\n    }\n  }\n\n  \/* Desktop *\/\n  @media (min-width: 1000px) {\n    .regiobus-vorteile {\n      overflow: visible;\n      margin-bottom: 48px;\n    }\n\n    .regiobus-vorteile__inner {\n      display: grid;\n      grid-template-columns: minmax(0, 600px) minmax(0, 1fr);\n      align-items: start;\n      gap: 24px;\n      min-height: 419px;\n      padding: 32px;\n    }\n\n    .regiobus-vorteile__content {\n      padding-top: 16px;\n    }\n\n    .regiobus-vorteile__media {\n      position: relative;\n      min-height: 371px;\n      margin-top: 0;\n      display: block;\n    }\n\n    .regiobus-vorteile .regio-logo {\n      position: absolute;\n      top: 0;\n      right: 0;\n      order: unset;\n    }\n\n    .regiobus-vorteile .regio-bus {\n      position: absolute;\n      right: 0;\n      bottom: -102px;\n      width: 324px;\n      max-width: none;\n      order: unset;\n    }\n  }\n<\/style>\n\n<section class=\"regiobus-vorteile\" aria-label=\"Vorteile Regiobus MV\">\n  <div class=\"regiobus-vorteile__inner\">\n\n    <div class=\"regiobus-vorteile__content\">\n      <h2 class=\"regiobus-vorteile__title\">Vorteile Regiobus MV<\/h2>\n\n      <ul class=\"regiobus-vorteile__list\">\n        <li>Verbindungen auch \u00fcber Landkreisgrenzen hinaus<\/li>\n        <li>Anbindung von l\u00e4ndlichen Regionen, Zentren und Bedienung wichtiger Knotenpunkte<\/li>\n        <li>Leicht zu merkende Abfahrtszeiten und Taktung<\/li>\n        <li>Unabh\u00e4ngige Fahrten von Schul- und Ferienzeiten<\/li>\n        <li>\u00dcbergangsm\u00f6glichkeiten zu weiteren \u00d6PNV-Angeboten<\/li>\n        <li>Regiobusse MV verkehren mindestens zweist\u00fcndlich<\/li>\n        <li>In touristischen Destinationen wird das \u00d6PNV-Angebot verdichtet<\/li>\n      <\/ul>\n    <\/div>\n\n    <div class=\"regiobus-vorteile__media\">\n      <img decoding=\"async\" class=\"regio-logo\" src=\"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/06\/icon-regiobus-134-outline.svg\" alt=\"Regiobus Logo\" width=\"134\" height=\"134\" loading=\"lazy\">\n      <img decoding=\"async\" class=\"regio-bus\" src=\"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/06\/regiobus.svg\" alt=\"Regiobus\" width=\"324\" height=\"233\" loading=\"lazy\">\n    <\/div>\n\n  <\/div>\n<\/section>\n\n\n\n<div style=\"height:110px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center has-primary-color has-text-color has-link-color has-large-font-size wp-elements-4\">F\u00fcr die Regiobusse in Ihrer Region bitte Landkreis w\u00e4hlen<\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"rb-app\" data-per-page=\"12\" data-api=\"https:\/\/mvfaehrtgut.de\/wp-json\">\n\n  <div class=\"rb-app__filter\" role=\"group\" aria-label=\"Nach Landkreis filtern\" data-rb=\"filter\" hidden>\n    <div class=\"rb-app__pills\" data-rb=\"pills\"><\/div>\n  <\/div>\n\n  <p class=\"rb-app__status\" data-rb=\"status\" role=\"status\" aria-live=\"polite\">Linien werden geladen&nbsp;&#8230;<\/p>\n\n  <div class=\"rb-app__listwrap\" data-rb=\"listwrap\">\n    <ul class=\"rb-app__list\" data-rb=\"list\" aria-busy=\"true\"><\/ul>\n    <div class=\"rb-app__spinner\" data-rb=\"spinner\" aria-hidden=\"true\">\n      <span><\/span><span><\/span><span><\/span>\n    <\/div>\n  <\/div>\n\n  <p class=\"rb-app__empty\" data-rb=\"empty\" hidden>\n    Keine Linien f&#252;r diese Auswahl gefunden. Bitte einen anderen Landkreis w&#228;hlen\n    oder den Filter zur&#252;cksetzen.\n  <\/p>\n\n  <div class=\"rb-app__more\" data-rb=\"sentinel\" hidden>\n    <div class=\"rb-app__more-spin\" data-rb=\"morespin\" aria-hidden=\"true\"><span><\/span><span><\/span><span><\/span><\/div>\n    <button type=\"button\" class=\"rb-app__loadmore\" data-rb=\"loadmore\" hidden>Weitere Linien laden<\/button>\n  <\/div>\n\n  <noscript>Bitte JavaScript aktivieren, um die Regiobus-Linien anzuzeigen.<\/noscript>\n<\/div>\n\n<style>\n.rb-app{\n  --rb-navy:#002E63;\n  --rb-navy-dark:#001f44;\n  --rb-cyan:#00B2DC;\n  --rb-ink:#1a1a18;\n  --rb-muted:#6e7174;\n  --rb-border:#e4e7ea;\n  --rb-card-radius:30px;\n  --rb-btn-radius:4px;\n  font-family:'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n  color:var(--rb-ink);\n  max-width:1360px;          \n  margin-inline:auto;\n}\n.rb-app *{box-sizing:border-box}\n.rb-app [hidden]{display:none !important}\n\n.rb-app__filter{margin:0 0 2rem}\n.rb-app__pills{display:flex;flex-wrap:wrap;justify-content:center;align-items:baseline;gap:.9rem 2.4rem}\n.rb-pill-break{flex-basis:100%;width:100%;height:0;margin:0;padding:0;border:0}\n.rb-pill{\n  appearance:none;cursor:pointer;background:none;border:0;padding:.15rem .1rem;\n  font-family:inherit;font-weight:700;color:var(--rb-navy);line-height:1.2;\n  font-size:clamp(1.05rem,1.8vw,1.4rem);\n  border-bottom:3px solid transparent;transition:color .15s,border-color .15s;\n}\n.rb-pill:hover{color:var(--rb-cyan)}\n.rb-pill.is-active,.rb-pill[aria-pressed=\"true\"]{color:var(--rb-cyan);border-bottom-color:var(--rb-cyan)}\n.rb-pill:focus-visible{outline:3px solid var(--rb-cyan);outline-offset:3px;border-radius:2px}\n\n.rb-app__status{margin:0 0 1.5rem;color:var(--rb-muted);font-size:.95rem;text-align:center}\n\n.rb-app__listwrap{position:relative;min-height:8rem}\n.rb-app__list{\n  list-style:none;margin:0;padding:0;display:grid;gap:2.2rem 1.9rem;justify-content:center;\n  grid-template-columns:repeat(4, minmax(0,1fr));\n  transition:opacity .2s;\n}\n.rb-app__listwrap.is-loading .rb-app__list{opacity:.4;pointer-events:none}\n\n.rb-card{\n  background:#fff;border-radius:var(--rb-card-radius);overflow:hidden;\n  box-shadow:0 12px 30px rgba(0,0,0,.10);\n  transition:opacity .4s ease,transform .4s ease,box-shadow .2s ease;\n}\n.rb-card:hover{box-shadow:0 22px 48px rgba(0,46,99,.16)}\n.rb-app.is-js .rb-card{opacity:0;transform:translateY(14px)}\n.rb-app.is-js .rb-card.is-visible{opacity:1;transform:none}\n.rb-card__inner{height:100%;display:flex;flex-direction:column}\n\n.rb-card__media{\n  position:relative;aspect-ratio:600\/351;overflow:hidden;\n  background:linear-gradient(180deg,#cfe8f7 0%,#bfe0c4 100%);\n}\n.rb-card__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}\n\n.rb-card__body{display:flex;flex-direction:column;gap:.6rem;padding:1.875rem;flex:1}\n.rb-card__operator{margin:0;font-weight:700;line-height:1.1;color:var(--rb-ink);font-size:1.75rem;letter-spacing:-.01em}\n.rb-card__line{margin:0;font-weight:700;line-height:1.2;color:var(--rb-ink);font-size:1.2rem}\n.rb-card__route{margin:0;font-weight:400;line-height:1.4;color:var(--rb-ink);font-size:1.1rem}\n.rb-card__qual{margin:0;font-weight:400;color:var(--rb-muted);font-size:.92rem}\n.rb-card__hint{margin:0;font-weight:400;color:var(--rb-muted);font-size:.92rem;line-height:1.4}\n\n.rb-card__btn{\n  align-self:flex-start;margin-top:auto;display:inline-flex;align-items:center;justify-content:center;\n  background:var(--rb-navy);color:#fff;border:0;border-radius:var(--rb-btn-radius);\n  padding:.9rem 1.8rem;font-family:inherit;font-weight:700;font-size:1.05rem;\n  text-decoration:none;transition:background-color .15s,transform .05s;\n}\n.rb-card__btn:hover,.rb-card__btn:focus{background:var(--rb-navy-dark);color:#fff}\n.rb-card__btn:active{transform:translateY(1px)}\n.rb-card__btn:focus-visible{outline:3px solid var(--rb-cyan);outline-offset:2px}\n\n.rb-app__empty{padding:2.5rem 1rem;text-align:center;color:var(--rb-muted);background:#f4f6f8;border-radius:var(--rb-btn-radius)}\n\n.rb-app__spinner{\n  position:absolute;inset:0 0 auto 0;min-height:8rem;display:none;align-items:flex-start;\n  justify-content:center;gap:.5rem;padding-top:3rem;z-index:2;\n}\n.rb-app__spinner.is-active{display:flex}\n.rb-app__spinner span,.rb-app__more-spin span{\n  width:.8rem;height:.8rem;border-radius:50%;background:var(--rb-navy);\n  animation:rb-bounce .9s infinite ease-in-out both;\n}\n.rb-app__spinner span:nth-child(1),.rb-app__more-spin span:nth-child(1){animation-delay:-.3s}\n.rb-app__spinner span:nth-child(2),.rb-app__more-spin span:nth-child(2){animation-delay:-.15s}\n@keyframes rb-bounce{0%,80%,100%{transform:scale(.4);opacity:.5}40%{transform:scale(1);opacity:1}}\n\n.rb-app__more{display:flex;flex-direction:column;align-items:center;gap:1rem;margin-top:2rem;min-height:2rem}\n.rb-app__more-spin{display:none;gap:.5rem}\n.rb-app__more.is-loading .rb-app__more-spin{display:flex}\n.rb-app__loadmore{\n  appearance:none;cursor:pointer;background:none;border:0;font-family:inherit;font-weight:700;\n  color:var(--rb-navy);font-size:1.1rem;border-bottom:3px solid var(--rb-cyan);padding:.2rem .1rem;\n}\n\n.rb-app .rb-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n\n@media(prefers-reduced-motion:reduce){\n  .rb-app.is-js .rb-card,.rb-card{opacity:1;transform:none;transition:none}\n  .rb-app__spinner span,.rb-app__more-spin span{animation-duration:1.6s}\n  .rb-app__list,.rb-pill,.rb-card__btn{transition:none}\n}\n<\/style>\n\n<script>\n(function () {\n  \"use strict\";\n\n  var REST_DEFAULT = (window.wpApiSettings ? window.wpApiSettings.root : 0)\n    ? String(window.wpApiSettings.root).replace(\/\\\/+$\/, \"\")\n    : (location.origin + \"\/wp-json\");\n\n  var REDUCED = window.matchMedia ? window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches : false;\n\n  function esc(s) {\n    return String(s == null ? \"\" : s).replace(\/[&<>\"']\/g, function (ch) { return { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" }[ch];\n    });\n  }\n\n  function pick(acf, keys) {\n    for (var i = 0; i < keys.length; i++) {\n      var v = acf[keys[i]];\n      if (v !== undefined) if (v !== null) if (v !== \"\") if (!(Array.isArray(v) ? !v.length : false)) return v;\n    }\n    return \"\";\n  }\n  function fileUrl(v) {\n    if (!v) return \"\";\n    if (typeof v === \"string\") return v;\n    if (typeof v === \"object\") return v.url || (v.sizes ? (v.sizes.large || v.sizes.medium || v.sizes.thumbnail) : 0) || \"\";\n    return \"\";\n  }\n  function stripHtml(html) {\n    if (!html) return \"\";\n    var d = document.createElement(\"div\");\n    d.innerHTML = html;\n    return (d.textContent || d.innerText || \"\").trim();\n  }\n\n  function imgFromPost(p) {\n    var m = p._embedded ? (p._embedded[\"wp:featuredmedia\"] ? p._embedded[\"wp:featuredmedia\"][0] : 0) : 0;\n    if (!m || m.code) return { url: \"\", alt: \"\" };\n    var sizes = (m.media_details ? m.media_details.sizes : 0) || {};\n    var url = (sizes.medium_large ? sizes.medium_large.source_url : 0) ||\n              (sizes.large ? sizes.large.source_url : 0) ||\n              (sizes.medium ? sizes.medium.source_url : 0) ||\n              m.source_url || \"\";\n    return { url: url, alt: m.alt_text || \"\" };\n  }\n  function shortKreis(name) { return String(name || \"\").replace(\/^Landkreis\\s+\/i, \"\"); }\n  function labelFor(term) { return (term ? term.description : \"\") ? term.description : shortKreis(term ? term.name : \"\"); }\n\n  function initApp(root) {\n    if (root.dataset.rbInit === \"1\") return;\n    root.dataset.rbInit = \"1\";\n    root.classList.add(\"is-js\");\n\n    var REST = (root.dataset.api ? root.dataset.api.trim() : 0)\n      ? root.dataset.api.trim().replace(\/\\\/+$\/, \"\")\n      : REST_DEFAULT;\n\n    var perPage = parseInt(root.dataset.perPage, 10) || 12;\n    var el = {\n      filter: root.querySelector('[data-rb=\"filter\"]'),\n      pills: root.querySelector('[data-rb=\"pills\"]'),\n      status: root.querySelector('[data-rb=\"status\"]'),\n      list: root.querySelector('[data-rb=\"list\"]'),\n      listWrap: root.querySelector('[data-rb=\"listwrap\"]'),\n      spinner: root.querySelector('[data-rb=\"spinner\"]'),\n      empty: root.querySelector('[data-rb=\"empty\"]'),\n      sentinel: root.querySelector('[data-rb=\"sentinel\"]'),\n      moreSpin: root.querySelector('[data-rb=\"morespin\"]'),\n      loadmore: root.querySelector('[data-rb=\"loadmore\"]')\n    };\n\n    var tax = { landkreis: {}, anbieter: {} };\n    var state = { selected: [], page: 0, totalPages: 1, total: 0, loading: false, controller: null };\n\n    var reveal = (!REDUCED ? \"IntersectionObserver\" in window : false)\n      ? new IntersectionObserver(function (es, o) {\n          es.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add(\"is-visible\"); o.unobserve(e.target); } });\n        }, { rootMargin: \"0px 0px -40px 0px\", threshold: 0.05 })\n      : null;\n    function observeCards() {\n      var cards = el.list.querySelectorAll(\".rb-card:not(.is-visible)\");\n      if (!reveal) { cards.forEach(function (card) { card.classList.add(\"is-visible\"); }); return; }\n      cards.forEach(function (card) { reveal.observe(card); });\n    }\n\n    function applyCols() {\n      var n = el.list.children.length;\n      if (!n) return;\n      var w = el.list.clientWidth || window.innerWidth || 1200;\n      var max = w < 544 ? 1 : w < 768 ? 2 : w < 1024 ? 3 : 4;\n      el.list.style.gridTemplateColumns = (n >= max)\n        ? \"repeat(\" + max + \", minmax(0, 1fr))\"\n        : \"repeat(\" + n + \", minmax(0, 318px))\";\n    }\n    window.addEventListener(\"resize\", applyCols);\n\n    var hasIO = \"IntersectionObserver\" in window;\n    var pager = hasIO\n      ? new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) loadMore(); }); }, { rootMargin: \"400px 0px\" })\n      : null;\n    if (!hasIO) if (el.loadmore) el.loadmore.hidden = false;\n\n    function setBusy(b) {\n      state.loading = b;\n      el.list.setAttribute(\"aria-busy\", b ? \"true\" : \"false\");\n      if (el.spinner) el.spinner.classList.toggle(\"is-active\", b);\n      if (el.listWrap) el.listWrap.classList.toggle(\"is-loading\", b);\n    }\n    function labelText() {\n      if (!state.selected.length) return \"Alle Landkreise\";\n      return state.selected.map(function (id) { return tax.landkreis[id] ? labelFor(tax.landkreis[id]) : id; }).join(\", \");\n    }\n    function updateStatus() {\n      if (!el.status) return;\n      el.status.textContent = state.total + \" \" + (state.total === 1 ? \"Linie\" : \"Linien\") + \" - \" + labelText();\n    }\n    function updateSentinel() {\n      if (!el.sentinel) return;\n      var more = state.page < state.totalPages;\n      el.sentinel.hidden = !more;\n      if (pager) { pager.unobserve(el.sentinel); if (more) pager.observe(el.sentinel); }\n    }\n    function syncUrl() {\n      if (!window.history || !history.replaceState) return;\n      var u = new URL(location.href);\n      var slugs = state.selected.map(function (id) { return tax.landkreis[id] ? tax.landkreis[id].slug : null; }).filter(Boolean);\n      if (slugs.length) u.searchParams.set(\"landkreis\", slugs.join(\",\")); else u.searchParams.delete(\"landkreis\");\n      history.replaceState({}, \"\", u.toString());\n    }\n\n    function card(p) {\n      var acf = (p.acf ? !Array.isArray(p.acf) : false) ? p.acf : {};\n      var title = (p.title ? p.title.rendered : 0) ? p.title.rendered : \"\";\n      var anbId = (p.anbieter || [])[0];\n      var anb = (anbId ? tax.anbieter[anbId] : 0) ? tax.anbieter[anbId].name : \"\";\n      var lkSlugs = (p.landkreis || []).map(function (id) { return tax.landkreis[id] ? tax.landkreis[id].slug : \"\"; }).filter(Boolean);\n\n      var strecke = stripHtml((p.content ? p.content.rendered : 0) || \"\");\n      if (!strecke) strecke = pick(acf, [\"strecke\", \"streckenverlauf\", \"verlauf\"]);\n      var hinweise = pick(acf, [\"hinweise\", \"hinweis\", \"anmerkung\", \"bemerkung\"]);\n      var fp = fileUrl(pick(acf, [\"fahrplan\", \"fahrplan_url\", \"fahrplan_link\", \"fahrplan_pdf\"]));\n      var qual = (acf.qualitatsstufe ? +acf.qualitatsstufe > 0 : false) ? +acf.qualitatsstufe : 0;\n\n      var btnHtml = fp\n        ? '<a class=\"rb-card__btn\" href=\"' + esc(fp) + '\" target=\"_blank\" rel=\"noopener noreferrer\">' +\n            'Fahrplan<span class=\"rb-sr\"> ansehen (&#246;ffnet in neuem Tab)<\/span><\/a>'\n        : \"\";\n\n      var media = imgFromPost(p);\n      var img = media.url;\n      var imgAlt = media.alt || (\"Regiobus \" + (title || \"\") + (anb ? \" - \" + anb : \"\"));\n      var mediaHtml = img\n        ? '<div class=\"rb-card__media\"><img class=\"rb-card__img\" src=\"' + esc(img) + '\" alt=\"' + esc(imgAlt) + '\" loading=\"lazy\" decoding=\"async\"><\/div>'\n        : \"\";\n\n      return (\n        '<li class=\"rb-card\" data-landkreis=\"' + esc(lkSlugs.join(\" \")) + '\">' +\n          '<article class=\"rb-card__inner\">' +\n            mediaHtml +\n            '<div class=\"rb-card__body\">' +\n              (anb ? '<p class=\"rb-card__operator\">' + esc(anb) + \"<\/p>\" : \"\") +\n              '<h3 class=\"rb-card__line\">' + esc(title) + \"<\/h3>\" +\n              (strecke ? '<p class=\"rb-card__route\">' + esc(strecke) + \"<\/p>\" : \"\") +\n              (qual ? '<p class=\"rb-card__qual\">Qualit&#228;tsstufe ' + esc(qual) + \"<\/p>\" : \"\") +\n              (hinweise ? '<p class=\"rb-card__hint\">' + esc(hinweise) + \"<\/p>\" : \"\") +\n              btnHtml +\n            \"<\/div>\" +\n          \"<\/article>\" +\n        \"<\/li>\"\n      );\n    }\n\n    function load(reset) {\n      if (state.loading) return;\n      if (!reset) if (state.page >= state.totalPages) return;\n\n      if (reset) if (state.controller) state.controller.abort();\n      if (reset) state.controller = (\"AbortController\" in window) ? new AbortController() : null;\n\n      var page = reset ? 1 : state.page + 1;\n      if (reset) setBusy(true);\n      else { state.loading = true; if (el.sentinel) el.sentinel.classList.add(\"is-loading\"); }\n\n      var url = REST + \"\/wp\/v2\/regiobusse?per_page=\" + perPage + \"&page=\" + page +\n                \"&orderby=title&order=asc&_embed=wp:featuredmedia\";\n      if (state.selected.length) url += \"&landkreis=\" + state.selected.join(\",\");\n\n      var opts = { headers: { Accept: \"application\/json\" } };\n      if (reset) if (state.controller) opts.signal = state.controller.signal;\n\n      fetch(url, opts).then(function (resp) {\n        if (resp.status === 400) return { data: [], total: 0, totalPages: 0 };\n        if (!resp.ok) throw new Error(\"HTTP \" + resp.status);\n        return resp.json().then(function (d) {\n          return { data: d, total: +resp.headers.get(\"X-WP-Total\") || 0, totalPages: +resp.headers.get(\"X-WP-TotalPages\") || 0 };\n        });\n      }).then(function (res) {\n        if (reset) el.list.innerHTML = \"\";\n        var html = \"\";\n        for (var i = 0; i < res.data.length; i++) html += card(res.data[i]);\n        el.list.insertAdjacentHTML(\"beforeend\", html);\n\n        state.page = page;\n        state.total = res.total;\n        state.totalPages = res.totalPages || 1;\n\n        if (el.empty) el.empty.hidden = state.total > 0;\n        updateStatus();\n        updateSentinel();\n        observeCards();\n        applyCols();\n        if (reset) syncUrl();\n      }).catch(function (err) {\n        if (err) if (err.name === \"AbortError\") return;\n        if (window.console) console.error(\"[Regiobus] Laden fehlgeschlagen:\", url, err);\n        if (el.status) el.status.textContent = \"Die Linien konnten nicht geladen werden. Bitte erneut versuchen.\";\n      }).then(function () {\n        if (reset) setBusy(false);\n        else { state.loading = false; if (el.sentinel) el.sentinel.classList.remove(\"is-loading\"); }\n      });\n    }\n    function loadMore() { load(false); }\n\n    function renderPills() {\n      var terms = Object.keys(tax.landkreis).map(function (id) {\n        return { id: +id, name: tax.landkreis[id].name, slug: tax.landkreis[id].slug, description: tax.landkreis[id].description };\n      }).sort(function (a, b) { return a.name.localeCompare(b.name, \"de\"); });\n\n      var pills = ['<button type=\"button\" class=\"rb-pill is-active\" data-id=\"all\" aria-pressed=\"true\">Alle<\/button>'];\n      terms.forEach(function (t) {\n        pills.push('<button type=\"button\" class=\"rb-pill\" data-id=\"' + t.id + '\" data-slug=\"' + esc(t.slug) + '\" aria-pressed=\"false\">' + esc(labelFor(t)) + \"<\/button>\");\n      });\n\n      var half = Math.ceil(pills.length \/ 2);\n      pills.splice(half, 0, '<span class=\"rb-pill-break\" aria-hidden=\"true\"><\/span>');\n      el.pills.innerHTML = pills.join(\"\");\n      el.filter.hidden = terms.length === 0;\n\n      el.pills.addEventListener(\"click\", function (e) {\n        var btn = e.target.closest(\".rb-pill\");\n        if (!btn) return;\n        if (btn.dataset.id === \"all\") state.selected = [];\n        else {\n          var id = +btn.dataset.id, idx = state.selected.indexOf(id);\n          if (idx === -1) state.selected.push(id); else state.selected.splice(idx, 1);\n        }\n        setPillState();\n        load(true);\n      });\n    }\n    function setPillState() {\n      el.pills.querySelectorAll(\".rb-pill\").forEach(function (btn) {\n        var active = btn.dataset.id === \"all\" ? state.selected.length === 0 : state.selected.indexOf(+btn.dataset.id) !== -1;\n        btn.classList.toggle(\"is-active\", active);\n        btn.setAttribute(\"aria-pressed\", active ? \"true\" : \"false\");\n      });\n    }\n\n    if (el.loadmore) el.loadmore.addEventListener(\"click\", function (e) { e.preventDefault(); loadMore(); });\n\n    function loadTaxonomy(taxName) {\n      var out = {};\n      function page(p) {\n        return fetch(REST + \"\/wp\/v2\/\" + taxName + \"?per_page=100&page=\" + p + \"&orderby=name&order=asc&_fields=id,name,slug,count,description\", { headers: { Accept: \"application\/json\" } })\n          .then(function (resp) { return resp.ok ? resp.json().then(function (d) { return { d: d, tp: +resp.headers.get(\"X-WP-TotalPages\") || 1 }; }) : { d: [], tp: 1 }; })\n          .then(function (res) {\n            res.d.forEach(function (t) { if (t.count > 0 || taxName === \"anbieter\") out[t.id] = { name: t.name, slug: t.slug, description: (t.description || \"\").trim() }; });\n            return (p < res.tp) ? page(p + 1) : out;\n          });\n      }\n      return page(1).catch(function () { return out; });\n    }\n\n    function loadUsedLandkreisIds() {\n      var used = {};\n      function page(p) {\n        return fetch(REST + \"\/wp\/v2\/regiobusse?per_page=100&#038;page=\" + p + \"&#038;_fields=landkreis\", { headers: { Accept: \"application\/json\" } })\n          .then(function (resp) { return resp.ok ? resp.json().then(function (d) { return { d: d, tp: +resp.headers.get(\"X-WP-TotalPages\") || 1 }; }) : { d: [], tp: 1 }; })\n          .then(function (res) {\n            res.d.forEach(function (post) { (post.landkreis || []).forEach(function (id) { used[id] = true; }); });\n            return (p < res.tp) ? page(p + 1) : used;\n          });\n      }\n      return page(1).catch(function () { return used; });\n    }\n\n    Promise.all([loadTaxonomy(\"landkreis\"), loadTaxonomy(\"anbieter\"), loadUsedLandkreisIds()]).then(function (results) {\n      var allLandkreis = results[0];\n      var usedIds = results[2];\n      var hasUsage = Object.keys(usedIds).length > 0;\n      if (hasUsage) {\n        var filtered = {};\n        Object.keys(allLandkreis).forEach(function (id) { if (usedIds[id]) filtered[id] = allLandkreis[id]; });\n        tax.landkreis = filtered;\n      } else {\n        tax.landkreis = allLandkreis;\n      }\n      tax.anbieter = results[1];\n      renderPills();\n\n      var fromUrl = new URLSearchParams(location.search).get(\"landkreis\");\n      var wanted = fromUrl\n        ? fromUrl.split(\",\").map(function (s) { return s.trim(); }).filter(Boolean)\n        : [\"nordwest-mecklenburg\", \"vorpommern-greifswald\"];\n      Object.keys(tax.landkreis).forEach(function (id) {\n        if (wanted.indexOf(tax.landkreis[id].slug) !== -1) state.selected.push(+id);\n      });\n      setPillState();\n      load(true);\n    });\n  }\n\n  function boot() {\n    var apps = document.querySelectorAll(\".rb-app\");\n    for (var i = 0; i < apps.length; i++) initApp(apps[i]);\n  }\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\n  else boot();\n})();\n<\/script>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center has-primary-color has-text-color has-link-color wp-elements-5\">Ihr Regiobus MV und Rufbus MV kurz erkl\u00e4rt:<\/h4>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"560\" style=\"aspect-ratio: 1000 \/ 560;\" width=\"1000\" controls poster=\"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2025\/04\/MV-faehrt-gut-Hero-Mobiltaetsoffensive.jpg\" src=\"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/01\/MV-faehrt-gut-Landesweites-Busnetz-Erkla\u0308rfilm.mp4\"><\/video><\/figure>\n\n\n\n<div class=\"wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-abed9ac5 wp-block-group-is-layout-flex\" style=\"margin-top:var(--wp--preset--spacing--60);margin-bottom:var(--wp--preset--spacing--60)\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/06\/icon-rufbus-70.svg\" alt=\"\" class=\"wp-image-5861\"\/><\/figure>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"\/mobilitaetsoffensive\/rufbus\">zum Rufbus MV<\/a><\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:60px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-base-background-color has-background has-global-padding is-content-justification-center is-layout-constrained wp-block-group-is-layout-constrained\" style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--80);padding-bottom:var(--wp--preset--spacing--80)\">\n<div class=\"wp-block-group has-global-padding is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-2a6daef6 wp-block-group-is-layout-constrained\">\n<h4 class=\"wp-block-heading has-text-align-left has-primary-color has-text-color has-link-color has-large-font-size wp-elements-6\">Erreichte Meilensteine des Regiobus MV<\/h4>\n\n\n\n<p class=\"has-primary-color has-text-color has-link-color has-medium-font-size wp-elements-7 wp-block-paragraph\">Folgende Linien wurden eingef\u00fchrt:<\/p>\n<\/div>\n\n\n\n<div id=\"app-TlMs7e\" data-vmv-timeline=\"regiobus\">\n    <p class=\"tl-status\" role=\"status\" aria-live=\"polite\">Meilensteine werden geladen&nbsp;\u2026<\/p>\n    <div class=\"tl-mount\"><\/div>\n    <style>\n        #app-TlMs7e, #app-TlMs7e * { box-sizing: border-box; }\n        #app-TlMs7e {\n            font-family: Montserrat, system-ui, -apple-system, sans-serif;\n            color: #002E63;\n            \/* WIDTH: 1000px content + 16px padding \u2014 matches the site's content\n               width so the timeline renders at the same scale as the template *\/\n            max-width: 1016px;\n            margin: 0 auto;\n            padding: 32px 8px;\n        }\n        #app-TlMs7e .tl-status {\n            text-align: center;\n            font-size: 15px;\n            padding: 40px 0;\n            margin: 0;\n        }\n        #app-TlMs7e .tl-empty { text-align: center; font-size: 16px; margin: 24px 0; }\n\n        \/* ---- Desktop stage (grid = Figma template, 1 unit = var(--u) px) ---- *\/\n        #app-TlMs7e .tl-wrap { position: relative; }\n        #app-TlMs7e .tl-scroll {\n            overflow-x: auto;\n            overflow-y: hidden;\n            scrollbar-width: none;\n            -webkit-overflow-scrolling: touch;\n            outline: none;\n        }\n        #app-TlMs7e .tl-scroll::-webkit-scrollbar { display: none; }\n        #app-TlMs7e .tl-stage { position: relative; }\n        #app-TlMs7e .tl-svg { position: absolute; left: 0; top: 0; width: 100%; height: 100%; display: block; }\n\n        #app-TlMs7e .tl-cluster {\n            position: absolute;\n            font-size: calc(var(--u, 1) * 17.5px);\n            line-height: 1.29;\n            color: #002E63;\n        }\n        #app-TlMs7e .tl-item { margin-top: calc(var(--u, 1) * 15px); }\n        #app-TlMs7e .tl-item:first-child { margin-top: 0; }\n        #app-TlMs7e .tl-item--hidden { display: none; }\n        #app-TlMs7e .tl-date  { font-weight: 400; margin: 0 0 calc(var(--u, 1) * 3px); }\n        #app-TlMs7e .tl-title { font-weight: 700; margin: 0 0 calc(var(--u, 1) * 11px); }\n        #app-TlMs7e .tl-title:last-child { margin-bottom: 0; }\n        \/* inline-block: the whole zusatz drops to its own line when it does not fit *\/\n        #app-TlMs7e .tl-zusatz { font-weight: 400; display: inline-block; }\n        #app-TlMs7e .tl-more {\n            display: inline-block;\n            font: inherit;\n            font-size: calc(var(--u, 1) * 16px);\n            font-weight: 700;\n            color: var(--dot, #002E63);\n            background: none;\n            border: 0;\n            padding: 0;\n            margin-top: calc(var(--u, 1) * 10px);\n            cursor: pointer;\n            text-decoration: underline;\n        }\n\n        \/* Fades hint that the timeline continues (scroll mode only) *\/\n        #app-TlMs7e .tl-fade {\n            position: absolute;\n            top: 0;\n            bottom: 0;\n            width: 60px;\n            pointer-events: none;\n            opacity: 0;\n            transition: opacity .25s;\n        }\n        #app-TlMs7e .tl-fade--l { left: 0;  background: linear-gradient(90deg,  #fff, rgba(255,255,255,0)); }\n        #app-TlMs7e .tl-fade--r { right: 0; background: linear-gradient(270deg, #fff, rgba(255,255,255,0)); }\n\n        #app-TlMs7e .tl-arrow {\n            position: absolute;\n            width: 40px;\n            height: 40px;\n            border-radius: 50%;\n            border: 2px solid #002E63;\n            background: #fff;\n            color: #002E63;\n            font-size: 22px;\n            line-height: 1;\n            cursor: pointer;\n            z-index: 3;\n            transform: translateY(-50%);\n        }\n        #app-TlMs7e .tl-arrow--l { left: 2px; }\n        #app-TlMs7e .tl-arrow--r { right: 2px; }\n        #app-TlMs7e .tl-arrow:hover { background: #002E63; color: #fff; }\n\n        \/* ---- Mobile: vertical list ---- *\/\n        #app-TlMs7e .tl-m { display: none; }\n        @media (max-width: 900px) {\n            #app-TlMs7e { padding: 20px 12px; }\n            #app-TlMs7e .tl-wrap { display: none; }\n\n            \/* ==========================================================\n               MOBILE ALIGNMENT \u2014 how the timeline sits on the page:\n                 margin: 0 auto;      -> centered (default)\n                 margin: 0 auto 0 0;  -> left\n                 margin: 0 0 0 auto;  -> right\n               max-width controls the column width.\n               ========================================================== *\/\n            #app-TlMs7e .tl-m {\n                display: block;\n                max-width: 560px;\n                margin: 0 auto;\n            }\n\n            \/* Bus flush with the timeline bar (left edge), above the list *\/\n            #app-TlMs7e .tl-m__bus {\n                display: block;\n                width: min(220px, 62%);\n                height: auto;\n                margin: 0 0 22px;\n            }\n            #app-TlMs7e .tl-m__list { position: relative; padding: 4px 0; }\n            #app-TlMs7e .tl-m__list::before {\n                content: \"\";\n                position: absolute;\n                left: 10px;\n                top: 6px;\n                bottom: 6px;\n                width: 8px;\n                border-radius: 4px;\n                background: linear-gradient(180deg, #28ADFF, #FFCC00 50%, #BBCF00);\n            }\n            #app-TlMs7e .tl-m__year { position: relative; padding: 0 0 30px 46px; }\n            #app-TlMs7e .tl-m__year:last-child { padding-bottom: 0; }\n            #app-TlMs7e .tl-m__year--end .tl-m__yr { margin-bottom: 0; }\n            #app-TlMs7e .tl-m__year--end .tl-m__yr::before { display: none; } \/* end year without dot, like desktop *\/\n            #app-TlMs7e .tl-m__yr {\n                position: relative;\n                font-size: 26px;\n                font-weight: 800;\n                line-height: 1;\n                letter-spacing: -0.5px;\n                color: var(--dot, #002E63);\n                margin: 0 0 14px;\n            }\n            #app-TlMs7e .tl-m__yr::before {\n                content: \"\";\n                position: absolute;\n                left: -43px;\n                top: 2px;\n                width: 22px;\n                height: 22px;\n                border-radius: 50%;\n                background: var(--dot, #28ADFF);\n                box-shadow: 0 0 0 4px #fff;\n            }\n            #app-TlMs7e .tl-m__item { margin-top: 13px; }\n            #app-TlMs7e .tl-m__item:first-of-type { margin-top: 0; }\n            #app-TlMs7e .tl-m__date  { font-size: 14px; font-weight: 400; margin: 0 0 3px; }\n            #app-TlMs7e .tl-m__title { font-size: 16px; font-weight: 700; line-height: 1.3; margin: 0 0 8px; }\n            #app-TlMs7e .tl-m__title:last-child { margin-bottom: 0; }\n            #app-TlMs7e .tl-m__zusatz { font-weight: 400; display: inline-block; }\n        }\n    <\/style>\n\n    <script>(container => { 'use strict';\n\n        \/* ================= Configuration ================= *\/\n\n        var API   = 'https:\/\/mvfaehrtgut.de\/wp-json'; \/* leave empty for same-origin *\/\n        var ROUTE = 'meilenstein';                    \/* REST base of the \"Meilenstein\" CPT *\/\n        var ART     = 'regiobus';       \/* which timeline: term slug of the taxonomy below *\/\n        var ART_TAX = 'meilenstein-vm'; \/* taxonomy that separates regiobus\/rufbus milestones *\/\n        var END_JAHR = 0;                \/* right end-year label: 0 = auto (last data year + 1),\n                                            or pin a year (e.g. 2026); auto-extends once data passes it *\/\n\n        \/* Fallback data, used while the REST API \/ CPT is not available. *\/\n        var FALLBACK = [\n            { datum: '2023-12-01', titel: '012 (MVVG)' },\n            { datum: '2023-12-01', titel: '170 (VLP)' },\n            { datum: '2023-12-01', titel: '330 (Nahbus)' },\n            { datum: '2024-03-01', titel: 'Linie 270 (rebus)' },\n            { datum: '2024-05-01', titel: 'Linie 012 bis R\u00f6bel (MVVG)', zusatz: 'Verl\u00e4ngerung' },\n            { datum: '2024-06-01', titel: 'Linie 029 (VVR)' },\n            { datum: '2024-09-01', titel: 'Linie 320 (Vorlaufbetrieb), 245, 345 (Nahbus)' },\n            { datum: '2024-12-01', titel: 'Linie 345 \u2192 240 (Nahbus)', zusatz: 'Umbenennung und Verl\u00e4ngerung' },\n            { datum: '2025-06-01', titel: 'Linie 125 (rebus)' },\n            { datum: '2025-07-01', titel: 'Linie 250 (rebus)' },\n            { datum: '2025-09-01', titel: 'Linie 320 (VVR)' },\n            { datum: '2025-10-01', titel: 'Linie 403, 500, 619 (MVVG)' },\n            { datum: '2025-12-01', titel: 'Linie 54, 58, 735 (VLP)' }\n        ];\n\n        \/* ==== Geometry, measured from the Figma template (viewBox 1005 x 725) ==== *\/\n\n        var VIEW_W     = 1005;  \/* visible width in grid units (1 unit = --u px) *\/\n        var BAR_X0     = 109;   \/* bar start x *\/\n        var BAR_MIN    = 786;   \/* bar length of the template (3 years) *\/\n        var PER_YEAR   = 262;   \/* minimum width per year (template density) *\/\n        var RIGHT_PAD  = 110;   \/* room for the end-year label on the right *\/\n        var BAR_SW     = 14;    \/* bar stroke width *\/\n        var DOT_R      = 13;    \/* dot radius *\/\n        var DOT_SW     = 4;     \/* white ring around dots *\/\n        var CONN_SW    = 3;     \/* connector stroke width *\/\n        var CONN_GAP   = 45;    \/* gap between bar center and connector start *\/\n        var YEAR_FS    = 34.2;  \/* year label font size (Montserrat SemiBold 600, like template) *\/\n        \/* dot positions as fractions of the bar length, measured from the template;\n           used when the number of years matches, otherwise dots spread evenly *\/\n        var DOT_POS    = [0.085, 0.365, 0.795];\n        var YEAR_GAP_L = 27.6;  \/* gap year label -> bar (left) *\/\n        var YEAR_GAP_R = 21.2;  \/* gap bar -> year label (right) *\/\n        var TEXT_DX    = 23.5;  \/* text offset right of the connector *\/\n        var TEXT_DY    = 43.6;  \/* text start below the bar center *\/\n        var CLUSTER_W  = 464;   \/* max text width (2 year slots, like template) *\/\n        var EDGE_PAD   = 10;    \/* safety gap at the stage edge *\/\n        var CAP        = 335;   \/* max cluster height before \"+N more\" collapses it *\/\n        var TOP_MIN    = 195;   \/* minimum space above the bar (bus) *\/\n        var BOT_MIN    = 90;    \/* minimum space below the bar *\/\n\n        var MONATE = ['Jan.', 'Feb.', 'M\u00e4rz', 'April', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'];\n\n        var status = container.querySelector('.tl-status');\n        var mount  = container.querySelector('.tl-mount');\n        var state  = { years: [], expanded: {}, u: 1, scrolledOnce: false };\n\n        \/* ================= Helpers ================= *\/\n\n        function esc(s) {\n            return String(s == null ? '' : s).replace(\/[&<>\"']\/g, function (ch) {\n                return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[ch];\n            });\n        }\n        function unent(s) {\n            var d = document.createElement('div');\n            d.innerHTML = String(s == null ? '' : s);\n            return d.textContent;\n        }\n        function parseDatum(s) {\n            var t = String(s == null ? '' : s).trim();\n            if (\/^\\d{8}$\/.test(t)) t = t.slice(0, 4) + '-' + t.slice(4, 6) + '-' + t.slice(6, 8);\n            var d = new Date(\/^\\d{4}-\\d{2}-\\d{2}$\/.test(t) ? t + 'T12:00:00' : t);\n            return isNaN(d) ? null : d;\n        }\n        function lerp(a, b, u) { return Math.round(a + (b - a) * u); }\n        function colorAt(t) {\n            \/* dot colors of the template: #00B2DC -> #D8C62F -> #DACE01 *\/\n            var A = [0, 178, 220], B = [216, 198, 47], C = [218, 206, 1];\n            var p, q, u;\n            if (t < 0.5) { p = A; q = B; u = t * 2; } else { p = B; q = C; u = (t - 0.5) * 2; }\n            return 'rgb(' + lerp(p[0], q[0], u) + ',' + lerp(p[1], q[1], u) + ',' + lerp(p[2], q[2], u) + ')';\n        }\n        function n1(v) { return Math.round(v * 10) \/ 10; }\n        function ux(v) { return 'calc(var(--u, 1) * ' + n1(v) + 'px)'; }\n\n        \/* Bus graphic: original paths from the Figma template (1005 x 725 space) *\/\n        function BUS_PATHS() {\n            return ''\n                + '<path d=\"M320.997 245.106C320.364 241.374 317.791 237.719 314.116 236.615L304.788 234.267C300.104 233.085 295.288 232.486 290.455 232.486H9.427C6.151 232.486 3.5 235.122 3.5 238.38V304.254C3.5 306.664 5.283 308.709 7.675 309.051L36.958 312.107H261.72L264.08 313.421C282.197 313.421 307.015 313.499 324.491 313.273C326.556 313.25 328.205 311.547 328.166 309.494C327.658 281.308 324.405 263.953 320.996 245.106H320.997Z\" fill=\"white\" stroke=\"#002E63\" stroke-width=\"3\" stroke-linejoin=\"round\"\/>'\n                + '<path d=\"M89.7886 292.601C81.7666 292.601 75.2656 299.067 75.2656 307.044C75.2656 315.021 81.7676 321.487 89.7886 321.487C97.8096 321.487 104.313 315.021 104.313 307.044C104.313 299.067 97.8096 292.601 89.7886 292.601Z\" fill=\"#002E63\"\/>'\n                + '<path d=\"M89.6041 299.277C93.9161 299.277 97.4231 302.765 97.4231 307.052C97.4231 311.339 93.9151 314.827 89.6041 314.827C85.2931 314.827 81.7852 311.339 81.7852 307.052C81.7852 302.765 85.2921 299.277 89.6041 299.277Z\" fill=\"white\"\/>'\n                + '<path d=\"M248.119 292.601C240.097 292.601 233.596 299.067 233.596 307.044C233.596 315.021 240.098 321.487 248.119 321.487C256.14 321.487 262.643 315.021 262.643 307.044C262.643 299.067 256.14 292.601 248.119 292.601Z\" fill=\"#002E63\"\/>'\n                + '<path d=\"M247.933 299.277C252.245 299.277 255.752 302.765 255.752 307.052C255.752 311.339 252.244 314.827 247.933 314.827C243.622 314.827 240.113 311.339 240.113 307.052C240.113 302.765 243.621 299.277 247.933 299.277Z\" fill=\"white\"\/>'\n                + '<path d=\"M153.668 305.566V252.276C153.668 251.412 152.968 250.712 152.104 250.712H139.64C138.776 250.712 138.076 251.412 138.076 252.276V305.566C138.076 306.43 138.776 307.13 139.64 307.13H152.104C152.968 307.13 153.668 306.429 153.668 305.566ZM134.151 305.566V252.276C134.151 251.412 133.451 250.712 132.587 250.712H120.123C119.259 250.712 118.559 251.412 118.559 252.276V305.566C118.559 306.43 119.259 307.13 120.123 307.13H132.587C133.451 307.13 134.151 306.429 134.151 305.566Z\" fill=\"#002E63\"\/>'\n                + '<path d=\"M112.8 250.713H11.3637C10.5017 250.713 9.80273 251.412 9.80273 252.274V283.57C9.80273 284.39 10.4527 285.07 11.2827 285.11C11.2827 285.11 69.9427 287.98 70.7627 287.36L73.3617 285.363C74.2507 284.68 75.3407 284.31 76.4617 284.31H96.8627C98.3927 284.31 99.9227 284.47 101.423 284.81L111.034 286.962C111.146 286.987 111.26 287 111.375 287H112.799C113.661 287 114.36 286.301 114.36 285.439V252.274C114.36 251.412 113.661 250.713 112.799 250.713H112.8Z\" fill=\"#002E63\"\/>'\n                + '<path d=\"M274.313 250.796C274.313 250.767 274.32 250.741 274.321 250.713H159.428C158.566 250.713 157.867 251.412 157.867 252.274V285.439C157.867 286.301 158.566 287 159.428 287H228.186C228.896 287 229.577 286.718 230.079 286.215L231.133 285.16C231.773 284.61 232.593 284.31 233.433 284.31H257.433C258.351 284.31 259.248 284.586 260.007 285.102L268.755 291.049C269.504 291.558 270.387 291.833 271.293 291.84L272.741 291.851C273.608 291.857 274.314 291.157 274.314 290.29L274.313 250.796Z\" fill=\"#002E63\"\/>'\n                + '<path d=\"M323.933 282.41C323.713 278.76 323.303 275.13 322.723 271.52C322.723 271.52 320.772 259.532 319.327 250.937C319.172 250.014 316.73 250.132 316.73 251.068L316.734 291.496L320.783 291.489C322.803 291.479 324.403 289.779 324.283 287.759L323.933 282.41Z\" fill=\"#002E63\"\/>'\n                + '<path d=\"M313.947 305.649V252.359C313.947 251.495 313.247 250.795 312.383 250.795H299.919C299.055 250.795 298.355 251.495 298.355 252.359V305.649C298.355 306.513 299.055 307.213 299.919 307.213H312.383C313.247 307.213 313.947 306.512 313.947 305.649ZM294.43 305.649V252.359C294.43 251.495 293.73 250.795 292.866 250.795H280.402C279.538 250.795 278.838 251.495 278.838 252.359V305.649C278.838 306.513 279.538 307.213 280.402 307.213H292.866C293.73 307.213 294.43 306.512 294.43 305.649Z\" fill=\"#002E63\"\/>'\n                + '<path d=\"M303.186 239.434H10.2969V240.946H303.186V239.434Z\" fill=\"#002E63\"\/>'\n                + '<path d=\"M194.504 286.356H222.498C222.428 278.682 216.193 272.486 208.501 272.486C200.809 272.486 194.574 278.682 194.504 286.356Z\" fill=\"#00B2DC\"\/>'\n                + '<path d=\"M222.498 286.355H194.504C194.504 286.355 194.503 286.355 194.502 286.355C194.502 286.399 194.5 286.442 194.5 286.486C194.5 294.221 200.766 300.486 208.5 300.486C216.234 300.486 222.5 294.186 222.5 286.486C222.5 286.442 222.499 286.399 222.498 286.355C222.498 286.355 222.497 286.355 222.496 286.355H222.498Z\" fill=\"#002E63\"\/>'\n                + '<path d=\"M207.985 292.562C207.985 293.218 208.089 293.972 208.885 293.973C209.302 293.973 209.782 293.811 209.782 292.562V287.868H211.698V292.497C211.698 294.894 210.169 295.397 208.885 295.397C207.601 295.397 206.07 294.894 206.069 292.497V287.868H207.985V292.562ZM215.615 287.74C216.371 287.74 216.978 287.835 217.47 288.03L217.388 289.44C217.045 289.271 216.456 289.081 215.872 289.081C215.247 289.081 214.888 289.345 214.888 289.808C214.888 290.217 215.116 290.393 215.756 290.683L216.651 291.088C217.268 291.371 217.898 291.816 217.898 292.956C217.898 293.742 217.63 294.357 217.102 294.782C216.603 295.185 215.869 295.397 215.008 295.397C214.147 295.397 213.438 295.216 213.057 295.118L213.047 295.116L213.16 293.539C213.414 293.675 214.13 293.973 214.825 293.973C215.52 293.973 215.873 293.695 215.873 293.148C215.873 292.632 215.506 292.49 214.951 292.273L214.514 292.103C213.372 291.656 212.928 291.045 212.928 289.926C212.928 288.598 213.983 287.74 215.615 287.74ZM202.52 287.868C204.04 287.868 204.845 288.469 204.845 289.606C204.845 290.6 204.405 291.189 203.464 291.418L203.446 291.422V291.441L203.467 291.444C204.431 291.61 204.962 292.248 204.962 293.202C204.962 294.536 204.11 295.271 202.563 295.271H199.727V287.868H202.52ZM201.603 293.93H202.158L202.159 293.931C202.76 293.931 203.09 293.623 203.09 293.054C203.09 292.484 202.774 292.144 202.244 292.144H201.603V293.93ZM201.603 290.846H202.021V290.847C202.807 290.847 202.973 290.386 202.973 290.001C202.973 289.479 202.66 289.167 202.138 289.167H201.603V290.846ZM209.214 279.972C209.774 279.972 210.068 280.309 210.233 280.668H210.248C210.248 280.488 210.269 280.245 210.298 280.058H211.511C211.489 280.28 211.468 280.567 211.468 280.934V283.33C211.468 284.644 210.9 285.39 209.437 285.39C208.877 285.39 208.224 285.225 208.03 285.139L208.072 284.112C208.309 284.249 208.675 284.457 209.229 284.457C209.982 284.457 210.248 284.041 210.248 283.338V283.059H210.233C210.062 283.54 209.688 283.798 209.235 283.798C208.216 283.798 207.822 282.972 207.822 281.802C207.822 280.84 208.332 279.972 209.214 279.972ZM205.554 279.972C206.681 279.972 207.276 280.898 207.276 281.917V282.283H205.023C205.059 282.886 205.476 283.065 205.956 283.065C206.308 283.065 206.732 282.908 207.047 282.771L207.075 283.668C206.767 283.769 206.293 283.884 205.77 283.884C204.255 283.884 203.817 282.871 203.817 281.91C203.817 280.884 204.427 279.972 205.554 279.972ZM216.062 279.972C217.426 279.972 217.921 280.912 217.921 281.932C217.921 282.951 217.426 283.884 216.062 283.884C214.699 283.884 214.203 282.951 214.203 281.932C214.203 280.912 214.698 279.972 216.062 279.972ZM201.707 278.789C202.72 278.789 203.294 279.213 203.294 280.139C203.294 280.877 202.77 281.178 202.332 281.286V281.309C202.619 281.401 202.805 281.538 203.006 282.233L203.459 283.799H202.067L202.066 283.798L201.692 282.377C201.563 281.896 201.341 281.839 201.126 281.839H201.055V283.799H199.705V278.789H201.707ZM213.528 283.798H212.236V280.059H213.528V283.798ZM216.062 280.848C215.624 280.848 215.553 281.387 215.553 281.932C215.553 282.477 215.624 283.007 216.062 283.008C216.499 283.008 216.571 282.477 216.571 281.932C216.571 281.386 216.499 280.848 216.062 280.848ZM209.646 280.905C209.272 280.905 209.172 281.307 209.172 281.853C209.172 282.491 209.258 282.921 209.675 282.921C210.092 282.921 210.178 282.506 210.178 281.902C210.178 281.299 210.013 280.904 209.646 280.904L209.646 280.905ZM205.575 280.762C205.209 280.762 204.995 281.092 204.995 281.608H206.099V281.501C206.099 280.998 205.962 280.762 205.575 280.762ZM200.996 280.877H201.391C201.678 280.877 201.943 280.661 201.943 280.338C201.943 279.993 201.763 279.749 201.369 279.749H200.996V280.877ZM212.875 278.336C213.24 278.336 213.557 278.608 213.557 278.953C213.557 279.298 213.247 279.577 212.875 279.577C212.51 279.577 212.209 279.305 212.209 278.953C212.209 278.602 212.51 278.336 212.875 278.336Z\" fill=\"white\"\/>';\n        }\n\n        \/* ================= Data loading ================= *\/\n\n        function normalize(list) {\n            var out = [];\n            (list ? list : []).forEach(function (row) {\n                var d = parseDatum(row.datum);\n                if (d === null) return;\n                if (!row.titel) return;\n                out.push({ d: d, titel: String(row.titel), zusatz: row.zusatz ? String(row.zusatz) : '' });\n            });\n            out.sort(function (a, b) { return a.d - b.d; });\n            return out;\n        }\n\n        function fetchPage(page) {\n            \/* order=asc: ties on the same datum keep their creation order *\/\n            return fetch(API + '\/wp\/v2\/' + ROUTE + '?per_page=100&_embed=wp:term&order=asc&page=' + page, { headers: { Accept: 'application\/json' } })\n                .then(function (resp) {\n                    if (!resp.ok) throw new Error('HTTP ' + resp.status);\n                    return resp.json();\n                });\n        }\n\n        function loadFromApi() {\n            var rows = [];\n            function step(page) {\n                return fetchPage(page).then(function (batch) {\n                    rows = rows.concat(batch);\n                    if (batch.length === 100) {\n                        if (page < 5) {\n                            \/* a 400 on the page after the last one is fine \u2014 keep what we have *\/\n                            return step(page + 1).catch(function () { return rows; });\n                        }\n                    }\n                    return rows;\n                });\n            }\n            return step(1).then(function (all) {\n                var mapped = all.map(function (post) {\n                    var acf = post.acf ? post.acf : {};\n                    var arten = [];\n                    var emb = post._embedded ? post._embedded['wp:term'] : null;\n                    (emb ? emb : []).forEach(function (group) {\n                        (group ? group : []).forEach(function (term) {\n                            if (term.taxonomy === ART_TAX) arten.push(term.slug);\n                        });\n                    });\n                    return {\n                        datum: acf.datum,\n                        titel: unent(post.title ? post.title.rendered : ''),\n                        zusatz: acf.zusatzinfo ? unent(acf.zusatzinfo) : '',\n                        arten: arten\n                    };\n                }).filter(function (row) {\n                    \/* posts without any art term count as \"regiobus\" (default) *\/\n                    if (!row.arten.length) return ART === 'regiobus';\n                    return row.arten.indexOf(ART) > -1;\n                });\n                var items = normalize(mapped);\n                if (!items.length) throw new Error('keine g\u00fcltigen Meilensteine in der API-Antwort');\n                return items;\n            });\n        }\n\n        \/* ================= Grouping ================= *\/\n\n        function groupYears(items) {\n            var byYear = {};\n            items.forEach(function (m) {\n                var y = m.d.getFullYear();\n                if (!byYear[y]) byYear[y] = [];\n                byYear[y].push(m);\n            });\n            return Object.keys(byYear).map(Number).sort(function (a, b) { return a - b; }).map(function (y) {\n                var months = [];\n                var seen = {};\n                byYear[y].forEach(function (m) {\n                    var label = MONATE[m.d.getMonth()] + ' ' + y;\n                    if (seen[label] === undefined) { seen[label] = months.length; months.push({ label: label, items: [] }); }\n                    months[seen[label]].items.push(m);\n                });\n                return { year: y, months: months };\n            });\n        }\n\n        \/* ================= Cluster HTML + measuring ================= *\/\n\n        function clusterInner(m, visibleCount, expanded, needToggle) {\n            var html = m.months.map(function (mo, idx) {\n                var hidden = idx >= visibleCount ? ' tl-item--hidden' : '';\n                return '<div class=\"tl-item' + hidden + '\">'\n                    + '<p class=\"tl-date\">' + esc(mo.label) + '<\/p>'\n                    + mo.items.map(function (it) {\n                        return '<p class=\"tl-title\">' + esc(it.titel)\n                            + (it.zusatz ? ' <span class=\"tl-zusatz\">(' + esc(it.zusatz) + ')<\/span>' : '')\n                            + '<\/p>';\n                    }).join('')\n                    + '<\/div>';\n            }).join('');\n            if (needToggle) {\n                var hiddenTitles = 0;\n                m.months.forEach(function (mo, idx) { if (idx >= visibleCount) hiddenTitles += mo.items.length; });\n                html += '<button type=\"button\" class=\"tl-more\" data-year=\"' + m.year + '\">'\n                    + (expanded ? '\u2212 weniger anzeigen' : '+ ' + hiddenTitles + ' weitere anzeigen')\n                    + '<\/button>';\n            }\n            return html;\n        }\n\n        \/* Renders clusters off-screen at scale 1 (1 unit = 1 px) and records their\n           heights. Because fonts and widths both scale with --u, the measured unit\n           heights stay valid at any container width. *\/\n        function measure(meta) {\n            var box = document.createElement('div');\n            box.style.cssText = 'position:absolute;left:-9999px;top:0;visibility:hidden;width:1200px;';\n            box.style.setProperty('--u', '1');\n            container.appendChild(box);\n\n            meta.forEach(function (m) {\n                var el = document.createElement('div');\n                el.className = 'tl-cluster';\n                el.style.position = 'relative'; \/* items' offsetTop must be cluster-relative *\/\n                el.style.width = m.w + 'px';\n                el.innerHTML = clusterInner(m, m.months.length, false, false);\n                box.appendChild(el);\n                m.fullH = el.offsetHeight;\n                m.itemBottoms = [].map.call(el.querySelectorAll('.tl-item'), function (it) {\n                    return it.offsetTop + it.offsetHeight;\n                });\n            });\n\n            var tg = document.createElement('div');\n            tg.className = 'tl-cluster';\n            tg.style.position = 'relative';\n            tg.innerHTML = '<button type=\"button\" class=\"tl-more\">+ 9 weitere anzeigen<\/button>';\n            box.appendChild(tg);\n            var toggleH = tg.offsetHeight;\n\n            container.removeChild(box);\n\n            \/* Collapse: keep as many month blocks as fit into CAP (incl. toggle) *\/\n            meta.forEach(function (m) {\n                m.toggleH = toggleH;\n                if (m.fullH <= CAP) { m.visible = m.months.length; m.collapsedH = m.fullH; return; }\n                var k = 1;\n                m.itemBottoms.forEach(function (bottom, idx) {\n                    if (idx === 0) return;\n                    if (bottom + toggleH <= CAP) k = idx + 1;\n                });\n                m.visible = k;\n                m.collapsedH = m.itemBottoms[k - 1] + toggleH;\n            });\n        }\n\n        function currentH(m) {\n            if (m.visible === m.months.length) return m.fullH;\n            return state.expanded[m.year] === true ? m.fullH + m.toggleH : m.collapsedH;\n        }\n\n        \/* ================= Desktop rendering ================= *\/\n\n        function drawDesktop(meta, stageW, barEnd, yStart, yEnd) {\n            var topNeed = TOP_MIN, botNeed = BOT_MIN;\n            meta.forEach(function (m) {\n                var need = currentH(m) + CONN_GAP + EDGE_PAD;\n                if (m.side === 'top') { if (need > topNeed) topNeed = need; }\n                else { if (need > botNeed) botNeed = need; }\n            });\n            var barY = n1(topNeed);\n            var vbH = n1(topNeed + botNeed);\n            var gid = 'tl-grad-TlMs7e';\n\n            var svg = '<svg class=\"tl-svg\" viewBox=\"0 0 ' + stageW + ' ' + vbH + '\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\">'\n                + '<defs><linearGradient id=\"' + gid + '\" x1=\"' + BAR_X0 + '\" y1=\"0\" x2=\"' + barEnd + '\" y2=\"0\" gradientUnits=\"userSpaceOnUse\">'\n                + '<stop stop-color=\"#28ADFF\"\/><stop offset=\"0.495\" stop-color=\"#FFCC00\"\/><stop offset=\"1\" stop-color=\"#BBCF00\"\/>'\n                + '<\/linearGradient><\/defs>'\n                + '<g transform=\"translate(0 ' + n1(barY - 364.8) + ')\">' + BUS_PATHS() + '<\/g>'\n                + '<path d=\"M' + BAR_X0 + ' ' + barY + 'H' + barEnd + '\" stroke=\"url(#' + gid + ')\" stroke-width=\"' + BAR_SW + '\" stroke-linecap=\"round\"\/>'\n                + '<text x=\"' + n1(BAR_X0 - YEAR_GAP_L) + '\" y=\"' + n1(barY + 12.3) + '\" text-anchor=\"end\" font-family=\"Montserrat, sans-serif\" font-size=\"' + YEAR_FS + '\" font-weight=\"600\" fill=\"#00B2DC\">' + yStart + '<\/text>'\n                + '<text x=\"' + n1(barEnd + YEAR_GAP_R) + '\" y=\"' + n1(barY + 12.3) + '\" text-anchor=\"start\" font-family=\"Montserrat, sans-serif\" font-size=\"' + YEAR_FS + '\" font-weight=\"600\" fill=\"#BBCF00\">' + yEnd + '<\/text>';\n\n            meta.forEach(function (m) {\n                var h = currentH(m);\n                var y1, y2;\n                if (m.side === 'top') { y1 = n1(barY - CONN_GAP); y2 = n1(barY - CONN_GAP - Math.max(20, h - 6)); }\n                else { y1 = n1(barY + CONN_GAP); y2 = n1(barY + CONN_GAP + Math.max(20, h - 6)); }\n                svg += '<line x1=\"' + n1(m.dotX) + '\" y1=\"' + y1 + '\" x2=\"' + n1(m.dotX) + '\" y2=\"' + y2 + '\" stroke=\"' + m.color + '\" stroke-width=\"' + CONN_SW + '\"\/>';\n            });\n            meta.forEach(function (m) {\n                svg += '<circle cx=\"' + n1(m.dotX) + '\" cy=\"' + barY + '\" r=\"' + DOT_R + '\" fill=\"' + m.color + '\" stroke=\"white\" stroke-width=\"' + DOT_SW + '\"\/>';\n            });\n            svg += '<\/svg>';\n\n            var clusters = meta.map(function (m) {\n                var pos = m.side === 'top'\n                    ? 'bottom:' + ux(botNeed + CONN_GAP - 6) + ';'\n                    : 'top:' + ux(topNeed + TEXT_DY) + ';';\n                var needToggle = m.visible < m.months.length;\n                var expanded = state.expanded[m.year] === true;\n                var visibleNow = expanded ? m.months.length : m.visible;\n                return '<div class=\"tl-cluster\" style=\"left:' + ux(m.textX) + ';width:' + ux(m.w) + ';' + pos + '--dot:' + m.color + '\">'\n                    + clusterInner(m, visibleNow, expanded, needToggle)\n                    + '<\/div>';\n            }).join('');\n\n            var arrows = '<button type=\"button\" class=\"tl-arrow tl-arrow--l\" style=\"top:' + ux(topNeed) + '\" aria-label=\"Zeitleiste nach links scrollen\">\u2039<\/button>'\n                + '<button type=\"button\" class=\"tl-arrow tl-arrow--r\" style=\"top:' + ux(topNeed) + '\" aria-label=\"Zeitleiste nach rechts scrollen\">\u203a<\/button>';\n\n            return '<div class=\"tl-wrap\">'\n                + '<div class=\"tl-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Zeitleiste der Regiobus-Meilensteine\">'\n                + '<div class=\"tl-stage\" style=\"width:' + ux(stageW) + ';height:' + ux(vbH) + '\">' + svg + clusters + '<\/div>'\n                + '<\/div>'\n                + '<div class=\"tl-fade tl-fade--l\"><\/div><div class=\"tl-fade tl-fade--r\"><\/div>'\n                + arrows\n                + '<\/div>';\n        }\n\n        \/* ================= Mobile rendering ================= *\/\n\n        \/* Mobile lists chronologically ascending, same as desktop *\/\n        function drawMobile(meta) {\n            var lastYear = meta[meta.length - 1].year;\n            var yEnd = END_JAHR >= lastYear ? END_JAHR : lastYear + 1;\n            var list = meta.map(function (m) {\n                return '<section class=\"tl-m__year\" style=\"--dot:' + m.color + '\">'\n                    + '<h3 class=\"tl-m__yr\">' + m.year + '<\/h3>'\n                    + m.months.map(function (mo) {\n                        return '<div class=\"tl-m__item\">'\n                            + '<p class=\"tl-m__date\">' + esc(mo.label) + '<\/p>'\n                            + mo.items.map(function (it) {\n                                return '<p class=\"tl-m__title\">' + esc(it.titel)\n                                    + (it.zusatz ? ' <span class=\"tl-m__zusatz\">(' + esc(it.zusatz) + ')<\/span>' : '')\n                                    + '<\/p>';\n                            }).join('')\n                            + '<\/div>';\n                    }).join('')\n                    + '<\/section>';\n            }).join('');\n            \/* closing end-year marker, like the desktop label right of the bar *\/\n            if (yEnd > lastYear) {\n                list += '<section class=\"tl-m__year tl-m__year--end\" style=\"--dot:#BBCF00\">'\n                    + '<h3 class=\"tl-m__yr\">' + yEnd + '<\/h3>'\n                    + '<\/section>';\n            }\n            \/* vehicle on top: it \"drives in\" at the oldest year *\/\n            return '<div class=\"tl-m\">'\n                + '<svg class=\"tl-m__bus\" viewBox=\"2 231 328 92\" aria-hidden=\"true\">' + BUS_PATHS() + '<\/svg>'\n                + '<div class=\"tl-m__list\">' + list + '<\/div>'\n                + '<\/div>';\n        }\n\n        \/* ================= Interaction (scroll mode) ================= *\/\n\n        function initScroll() {\n            var scroller = mount.querySelector('.tl-scroll');\n            var arrowL = mount.querySelector('.tl-arrow--l');\n            var arrowR = mount.querySelector('.tl-arrow--r');\n            var fadeL = mount.querySelector('.tl-fade--l');\n            var fadeR = mount.querySelector('.tl-fade--r');\n\n            function maxScroll() { return scroller.scrollWidth - scroller.clientWidth; }\n            function scrollable() { return maxScroll() > 4; }\n\n            function sync() {\n                var can = scrollable();\n                var x = scroller.scrollLeft;\n                var atStart = x <= 4;\n                var atEnd = x >= maxScroll() - 4;\n                arrowL.style.display = can ? (atStart ? 'none' : '') : 'none';\n                \/* right arrow stays visible at the end \u2014 it wraps back to the start *\/\n                arrowR.style.display = can ? '' : 'none';\n                fadeL.style.opacity = can ? (atStart ? 0 : 1) : 0;\n                fadeR.style.opacity = can ? (atEnd ? 0 : 1) : 0;\n            }\n            sync();\n            scroller.addEventListener('scroll', sync);\n\n            arrowL.addEventListener('click', function () {\n                scroller.scrollBy({ left: -scroller.clientWidth * 0.6, behavior: 'smooth' });\n            });\n            arrowR.addEventListener('click', function () {\n                if (scroller.scrollLeft >= maxScroll() - 4) {\n                    scroller.scrollTo({ left: 0, behavior: 'smooth' }); \/* wrap around *\/\n                } else {\n                    scroller.scrollBy({ left: scroller.clientWidth * 0.6, behavior: 'smooth' });\n                }\n            });\n\n            \/* Mouse wheel -> horizontal; releases to normal page scroll at both ends *\/\n            scroller.addEventListener('wheel', function (ev) {\n                if (!scrollable()) return;\n                var d = Math.abs(ev.deltaX) > Math.abs(ev.deltaY) ? ev.deltaX : ev.deltaY;\n                if (d === 0) return;\n                var target = Math.max(0, Math.min(maxScroll(), scroller.scrollLeft + d));\n                if (target !== scroller.scrollLeft) {\n                    ev.preventDefault();\n                    scroller.scrollLeft = target;\n                }\n            }, { passive: false });\n\n            scroller.addEventListener('keydown', function (ev) {\n                if (ev.key === 'ArrowLeft') scroller.scrollBy({ left: -160, behavior: 'smooth' });\n                if (ev.key === 'ArrowRight') scroller.scrollBy({ left: 160, behavior: 'smooth' });\n            });\n\n            return scroller;\n        }\n\n        \/* ================= Build ================= *\/\n\n        function build() {\n            var yrs = state.years;\n            var n = yrs.length;\n            if (!n) {\n                mount.innerHTML = '<p class=\"tl-empty\">Noch keine Meilensteine eingetragen.<\/p>';\n                return;\n            }\n            var barLen = Math.max(BAR_MIN, n * PER_YEAR);\n            var barEnd = BAR_X0 + barLen;\n            var stageW = barEnd + RIGHT_PAD;\n            \/* scroll mode: extra tail so the wrap-around arrow never covers the end-year label *\/\n            if (stageW > VIEW_W) stageW += 55;\n            var meta = yrs.map(function (y, i) {\n                var t = n <= 1 ? 0 : i \/ (n - 1);\n                var frac = DOT_POS.length === n ? DOT_POS[i] : (i + 0.5) \/ n;\n                var dotX = BAR_X0 + frac * barLen;\n                var textX = dotX + TEXT_DX;\n                return {\n                    year: y.year, months: y.months,\n                    color: colorAt(t), dotX: dotX, textX: textX,\n                    w: Math.min(CLUSTER_W, stageW - textX - EDGE_PAD),\n                    side: i % 2 === 0 ? 'bottom' : 'top'\n                };\n            });\n            var yStart = meta[0].year;\n            var lastYear = meta[n - 1].year;\n            var yEnd = END_JAHR >= lastYear ? END_JAHR : lastYear + 1;\n\n            measure(meta);\n\n            var keepScroll = 0;\n            var oldScroller = mount.querySelector('.tl-scroll');\n            if (oldScroller) keepScroll = oldScroller.scrollLeft;\n\n            mount.innerHTML = drawDesktop(meta, stageW, barEnd, yStart, yEnd) + drawMobile(meta);\n            var scroller = initScroll();\n            if (keepScroll > 0) {\n                scroller.scrollLeft = keepScroll;\n            } else if (!state.scrolledOnce) {\n                \/* initial position: current year if present, otherwise the last year *\/\n                state.scrolledOnce = true;\n                var nowYear = new Date().getFullYear();\n                var target = meta[n - 1];\n                meta.forEach(function (m) { if (m.year === nowYear) target = m; });\n                var max = scroller.scrollWidth - scroller.clientWidth;\n                if (max > 4) {\n                    scroller.scrollLeft = Math.max(0, Math.min(max, target.dotX * state.u - scroller.clientWidth \/ 2));\n                }\n            }\n            scroller.dispatchEvent(new Event('scroll')); \/* refresh arrows\/fades *\/\n\n            [].forEach.call(mount.querySelectorAll('.tl-more'), function (btn) {\n                btn.addEventListener('click', function () {\n                    var y = btn.getAttribute('data-year');\n                    state.expanded[y] = state.expanded[y] === true ? false : true;\n                    build();\n                });\n            });\n        }\n\n        function setU() {\n            var w = container.clientWidth - 16; \/* inner width (2 x 8px padding) *\/\n            if (w < 200) w = 200;\n            state.u = w \/ VIEW_W;\n            container.style.setProperty('--u', String(state.u));\n        }\n\n        function start(items) {\n            state.years = groupYears(items);\n            status.style.display = 'none';\n            setU();\n            build();\n        }\n\n        setU();\n        if (typeof ResizeObserver === 'function') {\n            new ResizeObserver(setU).observe(container);\n        }\n        \/* safety net: themes may finish layout after the first measurement *\/\n        window.addEventListener('resize', setU);\n        window.addEventListener('load', setU);\n\n        \/* window.VMV_TIMELINE_DATA (array of {datum, titel, zusatz}) skips the API\n           call \u2014 used by the local preview scenarios *\/\n        if (window.VMV_TIMELINE_DATA) {\n            start(normalize(window.VMV_TIMELINE_DATA));\n        } else {\n            loadFromApi().then(start).catch(function (err) {\n                console.warn('[Timeline] REST-API nicht nutzbar (' + err.message + ') \u2013 eingebaute Fallback-Daten aktiv.');\n                start(normalize(FALLBACK));\n            });\n        }\n\n    })(document.currentScript ? document.currentScript.parentElement : document.querySelector('[data-vmv-timeline=\"regiobus\"]'));<\/script>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-f38ebde5 wp-block-group-is-layout-constrained\" style=\"min-height:0px;padding-top:var(--wp--preset--spacing--60);padding-right:var(--wp--preset--spacing--0);padding-bottom:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--0)\">\n<h3 class=\"wp-block-heading has-text-align-left has-primary-color has-text-color has-link-color has-large-font-size wp-elements-8\">Mit vom Land unterst\u00fctzten Regiobussen MV kn\u00fcpfen wir ein enges Netz f\u00fcr ganz Mecklenburg-Vorpommern.<\/h3>\n\n\n\n<p class=\"has-text-align-left has-primary-color has-text-color has-link-color wp-elements-9 wp-block-paragraph\"><strong>Ihre F\u00f6rderung in der Region:<\/strong><\/p>\n\n\n\n<ul style=\"padding-right:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--50);line-height:1.8\" class=\"wp-block-list has-custom-css has-contrast-color has-text-color has-link-color has-medium-font-size wp-elements-10 wp-custom-css-d4d2d346\">\n<li class=\"has-primary-color has-text-color has-link-color has-medium-font-size wp-elements-11\"><a href=\"https:\/\/www.vmv-mbh.de\/die-vmv\/foerderung\/investitionsfoerderung-von-regiobusverkehren\/\">F\u00f6rderung Regiobusverkehre<\/a><\/li>\n\n\n\n<li class=\"has-primary-color has-text-color has-link-color wp-elements-12\"><a href=\"https:\/\/www.vmv-mbh.de\/die-vmv\/foerderung\/investitionsfoerderung\/\">SPNV Ersatzverkehr<\/a><\/li>\n\n\n\n<li class=\"has-primary-color has-text-color has-link-color wp-elements-13\"><a href=\"https:\/\/www.vmv-mbh.de\/die-vmv\/foerderung\/downloads\/\">Aktuelle Regelungen und Gesetzesgrundlagen zum Download<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein neues Mobilit\u00e4tskonzept f\u00fcr Mecklenburg-Vorpommern Das Land m\u00f6chte gemeinsam mit den Verkehrsunternehmen und kommunalen Aufgabentr\u00e4gern die Mobilit\u00e4t in Mecklenburg-Vorpommern verbessern. Unter anderem werden hierf\u00fcr landkreis\u00fcbergreifende Regiobuslinien mit einheitlichen Qualit\u00e4tsstandards eingef\u00fchrt. Das bedeutet leicht zu merkende Abfahrtszeiten an jedem Tag der Woche. Die ersten Regiobuslinien sind mit dem Fahrplanwechsel 12\/2023 an den Start gegangen. Vorteile Regiobus [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":5879,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"mi-filters":[],"class_list":["post-5651","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Regiobus - MV f\u00e4hrt gut<\/title>\n<meta name=\"robots\" content=\"noindex, follow\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Regiobus - MV f\u00e4hrt gut\" \/>\n<meta property=\"og:description\" content=\"Ein neues Mobilit\u00e4tskonzept f\u00fcr Mecklenburg-Vorpommern Das Land m\u00f6chte gemeinsam mit den Verkehrsunternehmen und kommunalen Aufgabentr\u00e4gern die Mobilit\u00e4t in Mecklenburg-Vorpommern verbessern. Unter anderem werden hierf\u00fcr landkreis\u00fcbergreifende Regiobuslinien mit einheitlichen Qualit\u00e4tsstandards eingef\u00fchrt. Das bedeutet leicht zu merkende Abfahrtszeiten an jedem Tag der Woche. Die ersten Regiobuslinien sind mit dem Fahrplanwechsel 12\/2023 an den Start gegangen. Vorteile Regiobus [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mvfaehrtgut.de\/en\/mobilitaetsoffensive\/regiobus\/\" \/>\n<meta property=\"og:site_name\" content=\"MV f\u00e4hrt gut\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-03T15:17:24+00:00\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/mobilitaetsoffensive\\\/regiobus\\\/\",\"url\":\"https:\\\/\\\/mvfaehrtgut.de\\\/mobilitaetsoffensive\\\/regiobus\\\/\",\"name\":\"Regiobus - MV f\u00e4hrt gut\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/mobilitaetsoffensive\\\/regiobus\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/mobilitaetsoffensive\\\/regiobus\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/mvfaehrtgut.de\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/icon-regiobus-56.svg\",\"datePublished\":\"2026-06-17T14:16:38+00:00\",\"dateModified\":\"2026-08-03T15:17:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/mobilitaetsoffensive\\\/regiobus\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mvfaehrtgut.de\\\/mobilitaetsoffensive\\\/regiobus\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/mobilitaetsoffensive\\\/regiobus\\\/#primaryimage\",\"url\":\"https:\\\/\\\/mvfaehrtgut.de\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/icon-regiobus-56.svg\",\"contentUrl\":\"https:\\\/\\\/mvfaehrtgut.de\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/icon-regiobus-56.svg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/mobilitaetsoffensive\\\/regiobus\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"MV f\u00e4hrt gut\",\"item\":\"https:\\\/\\\/mvfaehrtgut.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mobilit\u00e4tsoffensive\",\"item\":\"https:\\\/\\\/mvfaehrtgut.de\\\/mobilitaetsoffensive\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Regiobus\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/#website\",\"url\":\"https:\\\/\\\/mvfaehrtgut.de\\\/\",\"name\":\"MV f\u00e4hrt gut\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mvfaehrtgut.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/#organization\",\"name\":\"VMV \u2013 Verkehrsgesellschaft Mecklenburg-Vorpommern mbH\",\"url\":\"https:\\\/\\\/mvfaehrtgut.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/mvfaehrtgut.de\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/MV_faehrt_gut_mit_scrolleffekt.svg\",\"contentUrl\":\"https:\\\/\\\/mvfaehrtgut.de\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/MV_faehrt_gut_mit_scrolleffekt.svg\",\"caption\":\"VMV \u2013 Verkehrsgesellschaft Mecklenburg-Vorpommern mbH\"},\"image\":{\"@id\":\"https:\\\/\\\/mvfaehrtgut.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Regiobus - MV f\u00e4hrt gut","robots":{"index":"noindex","follow":"follow"},"og_locale":"en_GB","og_type":"article","og_title":"Regiobus - MV f\u00e4hrt gut","og_description":"Ein neues Mobilit\u00e4tskonzept f\u00fcr Mecklenburg-Vorpommern Das Land m\u00f6chte gemeinsam mit den Verkehrsunternehmen und kommunalen Aufgabentr\u00e4gern die Mobilit\u00e4t in Mecklenburg-Vorpommern verbessern. Unter anderem werden hierf\u00fcr landkreis\u00fcbergreifende Regiobuslinien mit einheitlichen Qualit\u00e4tsstandards eingef\u00fchrt. Das bedeutet leicht zu merkende Abfahrtszeiten an jedem Tag der Woche. Die ersten Regiobuslinien sind mit dem Fahrplanwechsel 12\/2023 an den Start gegangen. Vorteile Regiobus [&hellip;]","og_url":"https:\/\/mvfaehrtgut.de\/en\/mobilitaetsoffensive\/regiobus\/","og_site_name":"MV f\u00e4hrt gut","article_modified_time":"2026-08-03T15:17:24+00:00","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/mvfaehrtgut.de\/mobilitaetsoffensive\/regiobus\/","url":"https:\/\/mvfaehrtgut.de\/mobilitaetsoffensive\/regiobus\/","name":"Regiobus - MV f\u00e4hrt gut","isPartOf":{"@id":"https:\/\/mvfaehrtgut.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mvfaehrtgut.de\/mobilitaetsoffensive\/regiobus\/#primaryimage"},"image":{"@id":"https:\/\/mvfaehrtgut.de\/mobilitaetsoffensive\/regiobus\/#primaryimage"},"thumbnailUrl":"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/06\/icon-regiobus-56.svg","datePublished":"2026-06-17T14:16:38+00:00","dateModified":"2026-08-03T15:17:24+00:00","breadcrumb":{"@id":"https:\/\/mvfaehrtgut.de\/mobilitaetsoffensive\/regiobus\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mvfaehrtgut.de\/mobilitaetsoffensive\/regiobus\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/mvfaehrtgut.de\/mobilitaetsoffensive\/regiobus\/#primaryimage","url":"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/06\/icon-regiobus-56.svg","contentUrl":"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2026\/06\/icon-regiobus-56.svg"},{"@type":"BreadcrumbList","@id":"https:\/\/mvfaehrtgut.de\/mobilitaetsoffensive\/regiobus\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"MV f\u00e4hrt gut","item":"https:\/\/mvfaehrtgut.de\/"},{"@type":"ListItem","position":2,"name":"Mobilit\u00e4tsoffensive","item":"https:\/\/mvfaehrtgut.de\/mobilitaetsoffensive\/"},{"@type":"ListItem","position":3,"name":"Regiobus"}]},{"@type":"WebSite","@id":"https:\/\/mvfaehrtgut.de\/#website","url":"https:\/\/mvfaehrtgut.de\/","name":"MV on the move","description":"","publisher":{"@id":"https:\/\/mvfaehrtgut.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mvfaehrtgut.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/mvfaehrtgut.de\/#organization","name":"VMV \u2013 Verkehrsgesellschaft Mecklenburg-Vorpommern mbH","url":"https:\/\/mvfaehrtgut.de\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/mvfaehrtgut.de\/#\/schema\/logo\/image\/","url":"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2025\/08\/MV_faehrt_gut_mit_scrolleffekt.svg","contentUrl":"https:\/\/mvfaehrtgut.de\/wp-content\/uploads\/2025\/08\/MV_faehrt_gut_mit_scrolleffekt.svg","caption":"VMV \u2013 Verkehrsgesellschaft Mecklenburg-Vorpommern mbH"},"image":{"@id":"https:\/\/mvfaehrtgut.de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/pages\/5651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/comments?post=5651"}],"version-history":[{"count":80,"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/pages\/5651\/revisions"}],"predecessor-version":[{"id":6765,"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/pages\/5651\/revisions\/6765"}],"up":[{"embeddable":true,"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/pages\/5879"}],"wp:attachment":[{"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/media?parent=5651"}],"wp:term":[{"taxonomy":"mi-filters","embeddable":true,"href":"https:\/\/mvfaehrtgut.de\/en\/wp-json\/wp\/v2\/mi-filters?post=5651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}