{"id":651,"date":"2023-05-11T11:56:09","date_gmt":"2023-05-11T11:56:09","guid":{"rendered":"https:\/\/puttgardenrodby.nl\/?page_id=651"},"modified":"2026-06-12T15:57:22","modified_gmt":"2026-06-12T13:57:22","slug":"fahrplan","status":"publish","type":"page","link":"https:\/\/rostockgedser.com\/de\/fahrplan\/","title":{"rendered":"\ud83d\udd34 F\u00e4hre Rostock-Gedser Fahrplan"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"651\" class=\"elementor elementor-651\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5e609ab3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5e609ab3\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;,&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-17432f30\" data-id=\"17432f30\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6001754a elementor-widget elementor-widget-breadcrumbs\" data-id=\"6001754a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"breadcrumbs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p id=\"breadcrumbs\"><span><span><a href=\"https:\/\/rostockgedser.com\/de\/\">Home<\/a><\/span><\/span><\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-13328b89\" data-id=\"13328b89\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-23f41c63 elementor-align-right elementor-mobile-align-center elementor-widget elementor-widget-button\" data-id=\"23f41c63\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;mobile&quot;],&quot;sticky_offset&quot;:&quot;8&quot;,&quot;sticky_effects_offset_mobile&quot;:&quot;0&quot;,&quot;_animation_mobile&quot;:&quot;fadeIn&quot;,&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md elementor-animation-shrink\" href=\"\/de\/go\/button-header-page\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-arrow-alt-circle-right\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">F\u00e4hrpreise &amp; Tickets<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-348d881 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"348d881\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-2e117c7\" data-id=\"2e117c7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-18585c6 elementor-widget elementor-widget-heading\" data-id=\"18585c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Gedser Rostock F\u00e4hre Fahrplan<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a80a955 elementor-widget elementor-widget-text-editor\" data-id=\"a80a955\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"rg-intro\">\n  Pr\u00fcfe den <strong>Fahrplan der F\u00e4hre Gedser Rostock<\/strong> f\u00fcr heute, morgen oder ein sp\u00e4teres Reisedatum. Auf dieser Seite findest du auch die <strong>Abfahrtszeiten der F\u00e4hre Rostock Gedser<\/strong> in der Gegenrichtung.\n<\/p>\n<div class=\"rg-info-grid\">\n\n  <div class=\"rg-info-card\">\n    <span class=\"rg-card-label\">Route<\/span>\n    <span class=\"rg-card-title\">Gedser \u21c4 Rostock<\/span>\n    <span class=\"rg-card-text\">D\u00e4nemark nach Deutschland<\/span>\n  <\/div>\n\n  <div class=\"rg-info-card\">\n    <span class=\"rg-card-label\">Reederei<\/span>\n    <span class=\"rg-card-title\">Scandlines<\/span>\n    <span class=\"rg-card-text\">Abfahrten in beide Richtungen<\/span>\n  <\/div>\n\n  <div class=\"rg-info-card\">\n    <span class=\"rg-card-label\">F\u00e4hrzeit<\/span>\n    <span class=\"rg-card-title\">Etwa 2 Stunden<\/span>\n    <span class=\"rg-card-text\">Rund 52 km \u00fcber die Ostsee<\/span>\n  <\/div>\n\n  <div class=\"rg-info-card\">\n    <span class=\"rg-card-label\">Check-in<\/span>\n    <span class=\"rg-card-title\">Mindestens 15 Minuten<\/span>\n    <span class=\"rg-card-text\">Fr\u00fcher anreisen bei viel Verkehr<\/span>\n  <\/div>\n\n<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9c0cf5f elementor-widget elementor-widget-heading\" data-id=\"9c0cf5f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Fahrplan F\u00e4hre Gedser Rostock<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1375924 elementor-widget elementor-widget-text-editor\" data-id=\"1375924\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>W\u00e4hle ein Reisedatum und pr\u00fcfe die aktuellen Abfahrtszeiten der F\u00e4hre von Gedser nach Rostock.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52b315d elementor-widget elementor-widget-shortcode\" data-id=\"52b315d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap tp-theme-extended_cards tp-day-setup-modern\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/rostockgedser.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;route&quot;:203,&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;theme&quot;:&quot;extended_cards&quot;,&quot;daySetup&quot;:&quot;modern&quot;,&quot;limit10&quot;:true,&quot;label&quot;:&quot;Rostock nach Gedser&quot;,&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;\\u00dcberfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;W\\u00e4hlen Sie ein Datum und klicken Sie auf \\u00dcberfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Wird geladen...&quot;,&quot;status_empty&quot;:&quot;Keine \\u00dcberfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d \\u00dcberfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiff&quot;,&quot;th_op&quot;:&quot;Betreiber&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SO&quot;,&quot;wd_mon&quot;:&quot;MO&quot;,&quot;wd_tue&quot;:&quot;DI&quot;,&quot;wd_wed&quot;:&quot;MI&quot;,&quot;wd_thu&quot;:&quot;DO&quot;,&quot;wd_fri&quot;:&quot;FR&quot;,&quot;wd_sat&quot;:&quot;SA&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Alle %s Abfahrten im Fahrplan ansehen&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Mehr Abfahrten von %1$s und %2$s im Fahrplan ansehen&quot;,&quot;summary_footer_generic&quot;:&quot;Weitere \\u00dcberfahrten im Fahrplan ansehen&quot;,&quot;summary_header&quot;:&quot;Die n\\u00e4chsten zwei Abfahrten:&quot;,&quot;summary_no_upcoming&quot;:&quot;Keine kommenden Abfahrten gefunden&quot;,&quot;more_link&quot;:&quot;Weitere \\u00dcberfahrten&quot;,&quot;more_departures_button&quot;:&quot;Weitere Abfahrten anzeigen&quot;,&quot;day_nav_previous&quot;:&quot;Vorherigen Tag anzeigen&quot;,&quot;day_nav_next&quot;:&quot;N\\u00e4chsten Tag anzeigen&quot;,&quot;day_nav_today&quot;:&quot;Heute anzeigen&quot;,&quot;day_nav_tomorrow&quot;:&quot;Morgen anzeigen&quot;,&quot;local_time_pair&quot;:&quot;Ortszeit Abfahrtshafen: %1$s \\\/ Ortszeit Ankunftshafen: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Ortszeit Abfahrts- &amp; Ankunftshafen: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Oft gebucht&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 Bald abfahrend&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 Derzeit unterwegs&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Angekommen&quot;,&quot;tag_overnight&quot;:&quot;\\u00dcber Nacht&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:[],&quot;showShip&quot;:false,&quot;departurePort&quot;:&quot;Gedser&quot;,&quot;arrivalPort&quot;:&quot;Rostock&quot;,&quot;departureTimezone&quot;:&quot;Europe\\\/Copenhagen&quot;,&quot;arrivalTimezone&quot;:&quot;Europe\\\/Berlin&quot;}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date\">Datum<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Tage<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">\u00dcberfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">W\u00e4hlen Sie ein Datum und klicken Sie auf \u00dcberfahrten anzeigen<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Wird geladen...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b36255 elementor-widget elementor-widget-heading\" data-id=\"2b36255\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Fahrplan F\u00e4hre Rostock Gedser<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a832ee elementor-widget elementor-widget-text-editor\" data-id=\"7a832ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Hier findest du die Abfahrtszeiten f\u00fcr die Gegenrichtung von Rostock nach Gedser.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c51d03 elementor-widget elementor-widget-shortcode\" data-id=\"6c51d03\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap tp-theme-extended_cards tp-day-setup-modern\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/rostockgedser.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;route&quot;:204,&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;theme&quot;:&quot;extended_cards&quot;,&quot;daySetup&quot;:&quot;modern&quot;,&quot;limit10&quot;:true,&quot;label&quot;:&quot;Rostock nach Gedser&quot;,&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;\\u00dcberfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;W\\u00e4hlen Sie ein Datum und klicken Sie auf \\u00dcberfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Wird geladen...&quot;,&quot;status_empty&quot;:&quot;Keine \\u00dcberfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d \\u00dcberfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiff&quot;,&quot;th_op&quot;:&quot;Betreiber&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SO&quot;,&quot;wd_mon&quot;:&quot;MO&quot;,&quot;wd_tue&quot;:&quot;DI&quot;,&quot;wd_wed&quot;:&quot;MI&quot;,&quot;wd_thu&quot;:&quot;DO&quot;,&quot;wd_fri&quot;:&quot;FR&quot;,&quot;wd_sat&quot;:&quot;SA&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Alle %s Abfahrten im Fahrplan ansehen&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Mehr Abfahrten von %1$s und %2$s im Fahrplan ansehen&quot;,&quot;summary_footer_generic&quot;:&quot;Weitere \\u00dcberfahrten im Fahrplan ansehen&quot;,&quot;summary_header&quot;:&quot;Die n\\u00e4chsten zwei Abfahrten:&quot;,&quot;summary_no_upcoming&quot;:&quot;Keine kommenden Abfahrten gefunden&quot;,&quot;more_link&quot;:&quot;Weitere \\u00dcberfahrten&quot;,&quot;more_departures_button&quot;:&quot;Weitere Abfahrten anzeigen&quot;,&quot;day_nav_previous&quot;:&quot;Vorherigen Tag anzeigen&quot;,&quot;day_nav_next&quot;:&quot;N\\u00e4chsten Tag anzeigen&quot;,&quot;day_nav_today&quot;:&quot;Heute anzeigen&quot;,&quot;day_nav_tomorrow&quot;:&quot;Morgen anzeigen&quot;,&quot;local_time_pair&quot;:&quot;Ortszeit Abfahrtshafen: %1$s \\\/ Ortszeit Ankunftshafen: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Ortszeit Abfahrts- &amp; Ankunftshafen: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Oft gebucht&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 Bald abfahrend&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 Derzeit unterwegs&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Angekommen&quot;,&quot;tag_overnight&quot;:&quot;\\u00dcber Nacht&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:[],&quot;showShip&quot;:false,&quot;departurePort&quot;:&quot;Rostock&quot;,&quot;arrivalPort&quot;:&quot;Gedser&quot;,&quot;departureTimezone&quot;:&quot;Europe\\\/Berlin&quot;,&quot;arrivalTimezone&quot;:&quot;Europe\\\/Copenhagen&quot;}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date\">Datum<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Tage<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">\u00dcberfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">W\u00e4hlen Sie ein Datum und klicken Sie auf \u00dcberfahrten anzeigen<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Wird geladen...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bf504aa elementor-widget elementor-widget-text-editor\" data-id=\"bf504aa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"rg-after-timetable\">\n\n  <h2>F\u00e4hrzeiten und Abfahrten auf der Route Gedser Rostock<\/h2>\n\n  <p>\n    Die F\u00e4hre Gedser Rostock ist eine Scandlines Verbindung zwischen D\u00e4nemark und Deutschland. Die \u00dcberfahrt dauert etwa 2 Stunden. Je nach Reisetag, Saison und Richtung k\u00f6nnen sich die Abfahrtszeiten unterscheiden.\n  <\/p>\n\n  <div class=\"rg-data-grid\">\n\n    <div class=\"rg-data-card\">\n      <span class=\"rg-data-label\">\u00dcberfahrt<\/span>\n      <span class=\"rg-data-value\">Etwa 2 Stunden<\/span>\n      <span class=\"rg-data-text\">Zwischen Gedser und Rostock.<\/span>\n    <\/div>\n\n    <div class=\"rg-data-card\">\n      <span class=\"rg-data-label\">Reederei<\/span>\n      <span class=\"rg-data-value\">Scandlines<\/span>\n      <span class=\"rg-data-text\">Regelm\u00e4\u00dfige Abfahrten t\u00e4glich.<\/span>\n    <\/div>\n\n    <div class=\"rg-data-card\">\n      <span class=\"rg-data-label\">Schiffe<\/span>\n      <span class=\"rg-data-value\">Berlin &#038; Copenhagen<\/span>\n      <span class=\"rg-data-text\">Die Hauptf\u00e4hren auf der Route.<\/span>\n    <\/div>\n\n    <div class=\"rg-data-card\">\n      <span class=\"rg-data-label\">Route<\/span>\n      <span class=\"rg-data-value\">Rund 52 km<\/span>\n      <span class=\"rg-data-text\">F\u00e4hrverbindung \u00fcber die Ostsee.<\/span>\n    <\/div>\n\n  <\/div>\n\n  <div class=\"rg-route-panel\">\n\n    <div class=\"rg-route-copy\">\n      <h3>Gedser nach Rostock<\/h3>\n      <p>\n        Diese Richtung ist relevant, wenn du von D\u00e4nemark zur\u00fcck nach Deutschland f\u00e4hrst. Pr\u00fcfe den aktuellen Fahrplan, bevor du zum <a href=\"\/de\/gedser\/\">F\u00e4hrhafen Gedser<\/a> f\u00e4hrst.\n      <\/p>\n    <\/div>\n\n    <div class=\"rg-route-copy\">\n      <h3>Rostock nach Gedser<\/h3>\n      <p>\n        Diese Richtung nutzt du f\u00fcr die Fahrt von Deutschland nach D\u00e4nemark. Weitere Hinweise findest du auf der Seite zum <a href=\"\/de\/rostock\/\">F\u00e4hrhafen Rostock<\/a>.\n      <\/p>\n    <\/div>\n\n  <\/div>\n\n  <div class=\"rg-practical-box\">\n    <h3>Wichtig zum Fahrplan<\/h3>\n    <ul>\n      <li>Pr\u00fcfe immer die richtige Richtung: Gedser Rostock oder Rostock Gedser.<\/li>\n      <li>Die F\u00e4hrzeit betr\u00e4gt normalerweise etwa 2 Stunden.<\/li>\n      <li>Abfahrten k\u00f6nnen sich je nach Saison, Wetter und Auslastung \u00e4ndern.<\/li>\n      <li>F\u00fcr Preise und Ticketarten nutze die Seite <a href=\"\/de\/fahrpreise\/\">Fahrpreise<\/a>.<\/li>\n      <li>Bei schlechtem Wetter hilft ein Blick auf die Seite <a href=\"\/de\/wetter\/\">Wetter auf der Route<\/a>.<\/li>\n    <\/ul>\n  <\/div>\n\n  <div class=\"rg-link-strip\">\n    <a href=\"\/de\/fahrpreise\/\">Preise und Tickets<\/a>\n    <a href=\"\/de\/wetter\/\">Wetter<\/a>\n    <a href=\"\/de\/rostock\/\">Rostock Hafen<\/a>\n    <a href=\"\/de\/gedser\/\">Gedser Hafen<\/a>\n    <a href=\"\/de\/alternativen\/\">Alternativen<\/a>\n  <\/div>\n\n<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-10c0326 elementor-widget elementor-widget-text-editor\" data-id=\"10c0326\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"rg-compact-faq\">\n\n  <h2>FAQ zum Gedser Rostock F\u00e4hre Fahrplan<\/h2>\n\n  <details>\n    <summary>Wie aktuell ist der Fahrplan der F\u00e4hre Gedser Rostock?<\/summary>\n    <p>\n      Der Fahrplan oben zeigt die geplanten Abfahrten f\u00fcr dein gew\u00e4hltes Datum. Pr\u00fcfe ihn kurz vor der Anreise noch einmal, besonders bei <strong>starkem Wind, Ferienverkehr oder wenn du eine feste Abfahrt erreichen musst<\/strong>. Zus\u00e4tzlich kannst du den offiziellen <a href=\"https:\/\/www.scandlines.com\/departures\/\" target=\"_blank\" rel=\"noopener\">Scandlines Abfahrtsmonitor<\/a> pr\u00fcfen.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Wie lange dauert die F\u00e4hre Gedser Rostock?<\/summary>\n    <p>\n      Die \u00dcberfahrt zwischen Gedser und Rostock dauert normalerweise <strong>etwa 2 Stunden<\/strong>. Scandlines nennt f\u00fcr die Route eine Strecke von <strong>rund 52 km<\/strong>. Wetter, Hafenbetrieb oder viel Verkehr k\u00f6nnen die tats\u00e4chliche Reisezeit beeinflussen.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Wie viele Abfahrten gibt es zwischen Gedser und Rostock?<\/summary>\n    <p>\n      Scandlines nennt f\u00fcr die Route Rostock Gedser <strong>bis zu 20 Abfahrten pro Tag<\/strong>, gerechnet \u00fcber beide Richtungen. Die tats\u00e4chliche Zahl h\u00e4ngt vom Reisetag, der Saison und der Richtung ab. Pr\u00fcfe deshalb immer den Fahrplan f\u00fcr <strong>Gedser nach Rostock<\/strong> oder <strong>Rostock nach Gedser<\/strong> getrennt.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Wie fr\u00fch sollte ich am Hafen sein?<\/summary>\n    <p>\n      Scandlines nennt f\u00fcr Fahrzeuge auf Rostock Gedser einen Check-in von <strong>mindestens 15 Minuten vor Abfahrt<\/strong>. Praktisch ist mehr Puffer sinnvoll: mit Auto, Wohnmobil, Anh\u00e4nger oder in der Ferienzeit eher <strong>30 bis 45 Minuten vor Abfahrt<\/strong> am Hafen sein. Die offiziellen Hinweise stehen auf der Scandlines Seite zum <a href=\"https:\/\/www.scandlines.com\/practical\/check-in-at-the-harbour\/\" target=\"_blank\" rel=\"noopener\">Check-in am Hafen<\/a>.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Gilt der Check-in auch f\u00fcr Fu\u00dfpassagiere?<\/summary>\n    <p>\n      F\u00fcr Fu\u00dfpassagiere gelten eigene Abl\u00e4ufe. Scandlines nennt f\u00fcr Rostock <strong>mindestens 30 Minuten vor Abfahrt<\/strong> im F\u00e4hrcenter und f\u00fcr Gedser <strong>mindestens 15 Minuten vor Abfahrt<\/strong> im Gangway Geb\u00e4ude. Pr\u00fcfe die Details auf der offiziellen Seite f\u00fcr <a href=\"https:\/\/www.scandlines.com\/tickets\/pedestrian\/rostock-gedser\/\" target=\"_blank\" rel=\"noopener\">Fu\u00dfpassagiere auf Rostock Gedser<\/a>.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Kann ich am Hafen noch ein Ticket kaufen?<\/summary>\n    <p>\n      Ja, der Ticketkauf am Hafen ist m\u00f6glich. F\u00fcr Pkw und Motorr\u00e4der ist die Onlinebuchung aber oft besser, weil Scandlines mit <strong>Onlinepreisen und Hafenpreisen<\/strong> arbeitet. Wenn du eine bestimmte Abfahrt nehmen willst, buche besser vorab. Weitere Hinweise findest du auf unserer Seite <a href=\"\/de\/fahrpreise\/\">Fahrpreise<\/a> und bei den offiziellen <a href=\"https:\/\/www.scandlines.com\/tickets\/rostock-gedser\/\" target=\"_blank\" rel=\"noopener\">Scandlines Tickets f\u00fcr Rostock Gedser<\/a>.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Ist ein Ticket am Hafen teurer als online?<\/summary>\n    <p>\n      In vielen F\u00e4llen ja. Scandlines zeigt f\u00fcr Rostock Gedser unterschiedliche Ticketarten. <strong>Low Price Tickets sind nur online buchbar<\/strong> und gelten f\u00fcr die gebuchte Abfahrt. Standard und Flex Tickets sind teurer, bieten aber mehr Spielraum. Eine einfache \u00dcbersicht findest du auf unserer Seite <a href=\"\/de\/fahrpreise\/\">Preise und Tickets<\/a>.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Was passiert, wenn ich meine F\u00e4hre verpasse?<\/summary>\n    <p>\n      Das h\u00e4ngt vom Tickettyp ab. Ein <strong>Low Price Ticket<\/strong> ist st\u00e4rker an die gebuchte Abfahrt gebunden. <strong>Standard und Flex Tickets<\/strong> geben mehr Spielraum, kosten aber mehr. Wenn du eine lange Anfahrt hast, Stau m\u00f6glich ist oder du mit Kindern, Wohnmobil oder Anh\u00e4nger reist, ist ein flexibleres Ticket oft sinnvoller.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Wie lange ist die durchschnittliche Wartezeit am Hafen?<\/summary>\n    <p>\n      Eine feste Durchschnittszeit l\u00e4sst sich nicht seri\u00f6s nennen. Die Wartezeit h\u00e4ngt von <strong>Saison, Uhrzeit, Tickettyp, Fahrzeugart und Verkehr<\/strong> ab. Die Route hat viele Abfahrten, aber an Sommerwochenenden, Feiertagen und bei St\u00f6rungen kann es voller werden. Pr\u00fcfe vor der Anfahrt den Fahrplan und bei schlechtem Wetter auch unsere Seite <a href=\"\/de\/wetter\/\">Wetter auf der Route<\/a>.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Wo pr\u00fcfe ich aktuelle St\u00f6rungen oder Verkehrsmeldungen?<\/summary>\n    <p>\n      Pr\u00fcfe zuerst den Fahrplan oben auf dieser Seite und den offiziellen <a href=\"https:\/\/www.scandlines.com\/departures\/\" target=\"_blank\" rel=\"noopener\">Scandlines Abfahrtsmonitor<\/a>. F\u00fcr die Anfahrt in Deutschland ist der <a href=\"https:\/\/www.adac.de\/verkehr\/verkehrsinformationen\/de\/\" target=\"_blank\" rel=\"noopener\">ADAC Staumelder<\/a> hilfreich. F\u00fcr D\u00e4nemark kannst du <a href=\"https:\/\/www.vejdirektoratet.dk\/traffic-information\" target=\"_blank\" rel=\"noopener\">Trafikinfo vom Vejdirektoratet<\/a> nutzen.\n    <\/p>\n  <\/details>\n\n  <details>\n    <summary>Welche Richtung soll ich im Fahrplan w\u00e4hlen?<\/summary>\n    <p>\n      W\u00e4hle <strong>Gedser nach Rostock<\/strong>, wenn du von D\u00e4nemark nach Deutschland f\u00e4hrst. W\u00e4hle <strong>Rostock nach Gedser<\/strong>, wenn du von Deutschland nach D\u00e4nemark unterwegs bist. Die Richtung ist wichtig, weil beide Seiten eigene Abfahrtszeiten haben. Hafeninfos findest du auf <a href=\"\/de\/gedser\/\">Gedser Hafen<\/a> und <a href=\"\/de\/rostock\/\">Rostock Hafen<\/a>.\n    <\/p>\n  <\/details>\n\n<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-9a29147\" data-id=\"9a29147\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-de19ae8 elementor-widget elementor-widget-text-editor\" data-id=\"de19ae8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<aside class=\"rg-sidebar\">\n\n  <div class=\"rg-sidebar-card rg-sidebar-image-card\">\n    <img decoding=\"async\" \n      src=\"http:\/\/rostockgedser.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/rostock-port.jpg\" \n      alt=\"F\u00e4hrhafen Rostock auf der Route Rostock Gedser\" \n      loading=\"lazy\"\n    \/>\n  <\/div>\n\n  <div class=\"rg-sidebar-card rg-book-box\">\n    <span class=\"rg-sidebar-label\">F\u00e4hre Rostock Gedser<\/span>\n    <h2>Preise und Tickets pr\u00fcfen<\/h2>\n    <p>Vergleiche die Abfahrtszeiten vor der Buchung.<\/p>\n\n    <a class=\"rg-sidebar-cta\" href=\"https:\/\/rostockgedser.com\/de\/go\/scandlines\" rel=\"nofollow sponsored\">\n      Mit Scandlines buchen\n    <\/a>\n  <\/div>\n\n  <div class=\"rg-sidebar-card\">\n    <h2>Routenfakten<\/h2>\n    <ul class=\"rg-sidebar-list\">\n      <li>Scandlines F\u00e4hrverbindung<\/li>\n      <li>Etwa 2 Stunden \u00dcberfahrt<\/li>\n    <\/ul>\n  <\/div>\n\n  <div class=\"rg-sidebar-card\">\n    <h2>N\u00fctzliche Seiten<\/h2>\n    <ul class=\"rg-sidebar-links\">\n      <li><a href=\"https:\/\/rostockgedser.com\/de\/fahrpreise\/\">Preise und Tickets<\/a><\/li>\n      <li><a href=\"https:\/\/rostockgedser.com\/de\/wetter\/\">Wetter auf der Route<\/a><\/li>\n    <\/ul>\n  <\/div>\n\n<\/aside>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>F\u00e4hrpreise &amp; Tickets Gedser Rostock F\u00e4hre Fahrplan Pr\u00fcfe den Fahrplan der F\u00e4hre Gedser Rostock f\u00fcr heute, morgen oder ein sp\u00e4teres Reisedatum. Auf dieser Seite findest du auch die Abfahrtszeiten der F\u00e4hre Rostock Gedser in der Gegenrichtung. Route Gedser \u21c4 Rostock D\u00e4nemark nach Deutschland Reederei Scandlines Abfahrten in beide Richtungen F\u00e4hrzeit Etwa 2 Stunden Rund 52 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1227,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-651","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gedser Rostock F\u00e4hre Fahrplan: Heute &amp; Abfahrtszeiten<\/title>\n<meta name=\"description\" content=\"Aktueller Fahrplan der F\u00e4hre Gedser Rostock und Rostock Gedser. Pr\u00fcfe Scandlines Abfahrtszeiten, F\u00e4hrzeiten und \u00dcberfahrtsdauer.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rostockgedser.com\/de\/fahrplan\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gedser Rostock F\u00e4hre Fahrplan: Heute &amp; Abfahrtszeiten\" \/>\n<meta property=\"og:description\" content=\"Aktueller Fahrplan der F\u00e4hre Gedser Rostock und Rostock Gedser. Pr\u00fcfe Scandlines Abfahrtszeiten, F\u00e4hrzeiten und \u00dcberfahrtsdauer.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rostockgedser.com\/de\/fahrplan\/\" \/>\n<meta property=\"og:site_name\" content=\"RostockGedser.com\/de\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-12T13:57:22+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/rostockgedser.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/rostock-port.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/fahrplan\\\/\",\"url\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/fahrplan\\\/\",\"name\":\"Gedser Rostock F\u00e4hre Fahrplan: Heute & Abfahrtszeiten\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/fahrplan\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/fahrplan\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2023\\\/08\\\/rostock-port.jpg\",\"datePublished\":\"2023-05-11T11:56:09+00:00\",\"dateModified\":\"2026-06-12T13:57:22+00:00\",\"description\":\"Aktueller Fahrplan der F\u00e4hre Gedser Rostock und Rostock Gedser. Pr\u00fcfe Scandlines Abfahrtszeiten, F\u00e4hrzeiten und \u00dcberfahrtsdauer.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/fahrplan\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rostockgedser.com\\\/de\\\/fahrplan\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/fahrplan\\\/#primaryimage\",\"url\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2023\\\/08\\\/rostock-port.jpg\",\"contentUrl\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2023\\\/08\\\/rostock-port.jpg\",\"width\":1000,\"height\":500,\"caption\":\"rostock port\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/fahrplan\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udd34 F\u00e4hre Rostock-Gedser Fahrplan\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/\",\"name\":\"RostockGedser.com\\\/de\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/#organization\",\"name\":\"RostockGedser.com\\\/de\",\"url\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2023\\\/08\\\/cropped-rostock-gedser-logo.png\",\"contentUrl\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2023\\\/08\\\/cropped-rostock-gedser-logo.png\",\"width\":1043,\"height\":347,\"caption\":\"RostockGedser.com\\\/de\"},\"image\":{\"@id\":\"https:\\\/\\\/rostockgedser.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gedser Rostock F\u00e4hre Fahrplan: Heute & Abfahrtszeiten","description":"Aktueller Fahrplan der F\u00e4hre Gedser Rostock und Rostock Gedser. Pr\u00fcfe Scandlines Abfahrtszeiten, F\u00e4hrzeiten und \u00dcberfahrtsdauer.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rostockgedser.com\/de\/fahrplan\/","og_locale":"de_DE","og_type":"article","og_title":"Gedser Rostock F\u00e4hre Fahrplan: Heute & Abfahrtszeiten","og_description":"Aktueller Fahrplan der F\u00e4hre Gedser Rostock und Rostock Gedser. Pr\u00fcfe Scandlines Abfahrtszeiten, F\u00e4hrzeiten und \u00dcberfahrtsdauer.","og_url":"https:\/\/rostockgedser.com\/de\/fahrplan\/","og_site_name":"RostockGedser.com\/de","article_modified_time":"2026-06-12T13:57:22+00:00","og_image":[{"width":1000,"height":500,"url":"http:\/\/rostockgedser.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/rostock-port.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/rostockgedser.com\/de\/fahrplan\/","url":"https:\/\/rostockgedser.com\/de\/fahrplan\/","name":"Gedser Rostock F\u00e4hre Fahrplan: Heute & Abfahrtszeiten","isPartOf":{"@id":"https:\/\/rostockgedser.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rostockgedser.com\/de\/fahrplan\/#primaryimage"},"image":{"@id":"https:\/\/rostockgedser.com\/de\/fahrplan\/#primaryimage"},"thumbnailUrl":"https:\/\/rostockgedser.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/rostock-port.jpg","datePublished":"2023-05-11T11:56:09+00:00","dateModified":"2026-06-12T13:57:22+00:00","description":"Aktueller Fahrplan der F\u00e4hre Gedser Rostock und Rostock Gedser. Pr\u00fcfe Scandlines Abfahrtszeiten, F\u00e4hrzeiten und \u00dcberfahrtsdauer.","breadcrumb":{"@id":"https:\/\/rostockgedser.com\/de\/fahrplan\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rostockgedser.com\/de\/fahrplan\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/rostockgedser.com\/de\/fahrplan\/#primaryimage","url":"https:\/\/rostockgedser.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/rostock-port.jpg","contentUrl":"https:\/\/rostockgedser.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/rostock-port.jpg","width":1000,"height":500,"caption":"rostock port"},{"@type":"BreadcrumbList","@id":"https:\/\/rostockgedser.com\/de\/fahrplan\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rostockgedser.com\/de\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udd34 F\u00e4hre Rostock-Gedser Fahrplan"}]},{"@type":"WebSite","@id":"https:\/\/rostockgedser.com\/de\/#website","url":"https:\/\/rostockgedser.com\/de\/","name":"RostockGedser.com\/de","description":"","publisher":{"@id":"https:\/\/rostockgedser.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rostockgedser.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/rostockgedser.com\/de\/#organization","name":"RostockGedser.com\/de","url":"https:\/\/rostockgedser.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/rostockgedser.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/rostockgedser.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cropped-rostock-gedser-logo.png","contentUrl":"https:\/\/rostockgedser.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cropped-rostock-gedser-logo.png","width":1043,"height":347,"caption":"RostockGedser.com\/de"},"image":{"@id":"https:\/\/rostockgedser.com\/de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/rostockgedser.com\/de\/wp-json\/wp\/v2\/pages\/651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rostockgedser.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/rostockgedser.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/rostockgedser.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rostockgedser.com\/de\/wp-json\/wp\/v2\/comments?post=651"}],"version-history":[{"count":63,"href":"https:\/\/rostockgedser.com\/de\/wp-json\/wp\/v2\/pages\/651\/revisions"}],"predecessor-version":[{"id":2503,"href":"https:\/\/rostockgedser.com\/de\/wp-json\/wp\/v2\/pages\/651\/revisions\/2503"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rostockgedser.com\/de\/wp-json\/wp\/v2\/media\/1227"}],"wp:attachment":[{"href":"https:\/\/rostockgedser.com\/de\/wp-json\/wp\/v2\/media?parent=651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}