{"id":9,"date":"2024-03-14T08:25:44","date_gmt":"2024-03-14T08:25:44","guid":{"rendered":"https:\/\/rostocktrelleborg.com\/de\/?page_id=9"},"modified":"2026-09-23T08:41:33","modified_gmt":"2026-09-23T08:41:33","slug":"homepage","status":"publish","type":"page","link":"https:\/\/rostocktrelleborg.com\/de\/","title":{"rendered":"F\u00e4hre Rostock Trelleborg"},"content":{"rendered":"\n<div class=\"wp-block-group rtf-hero is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group rtf-hero-inner is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"rtf-kicker wp-block-paragraph\">Rostock &rarr; Trelleborg &middot; Ostsee<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">F&auml;hre Rostock Trelleborg: in einer &Uuml;berfahrt nach Schweden<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Sechs Stunden Ostsee statt eines ganzen Tages Autofahrt durch D&auml;nemark. TT Line und Stena Line fahren die Strecke t&auml;glich, in beide Richtungen.<\/p>\n\n\n\n<div class=\"rtf-route\">\n<span class=\"rtf-route-port\"><small>ROS<\/small><strong>Rostock<\/strong><\/span>\n<span class=\"rtf-route-line\"><span>6 STD &middot; 150 KM<\/span><\/span>\n<span class=\"rtf-route-port\"><small>TRG<\/small><strong>Trelleborg<\/strong><\/span>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group rtf-book is-layout-flow wp-block-group-is-layout-flow\">\n<form action=\"\/de\/go\/ttout\" method=\"get\" target=\"_blank\" rel=\"nofollow sponsored noopener\">\n<div class=\"rtf-field\">\n<label for=\"rtf-from\">Von<\/label>\n<select id=\"rtf-from\" name=\"from\"><option value=\"rostock\">Rostock (Deutschland)<\/option><option value=\"trelleborg\">Trelleborg (Schweden)<\/option><\/select>\n<\/div>\n<div class=\"rtf-field\">\n<label for=\"rtf-to\">Nach<\/label>\n<select id=\"rtf-to\" name=\"to\"><option value=\"trelleborg\">Trelleborg (Schweden)<\/option><option value=\"rostock\">Rostock (Deutschland)<\/option><\/select>\n<\/div>\n<div class=\"rtf-field\">\n<label for=\"rtf-date\">Datum<\/label>\n<input id=\"rtf-date\" name=\"date\" type=\"date\">\n<\/div>\n<button type=\"submit\">Abfahrten finden<\/button>\n<\/form>\n<p class=\"rtf-book-note\">Preise und Verf&uuml;gbarkeit &uuml;ber Direct Ferries<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group rtf-cols is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group rtf-rail-left is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"rtf-kicker wp-block-paragraph\">Strecke<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rund 150 km &uuml;ber die Ostsee<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die direkte Verbindung erspart die Umfahrung &uuml;ber D&auml;nemark und die &Ouml;resundbr&uuml;cke. &Uuml;ber die Stra&szlig;e dauert derselbe Weg sp&uuml;rbar l&auml;nger.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"rtf-kicker wp-block-paragraph\">Check-in<\/p>\n\n\n\n<p class=\"rtf-stat\">60&ndash;90<span> MIN<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So fr&uuml;h sollten Sie am Terminal sein. Mit Wohnmobil, Wohnwagen oder Anh&auml;nger planen Sie besser mehr Zeit ein.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"rtf-kicker wp-block-paragraph\">Anfahrt<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A19 aus Berlin, A20 aus Hamburg<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Beide Autobahnen f&uuml;hren zum &Uuml;berseehafen. Anfahrt und Terminal: <a href=\"\/de\/rostock-hafen\/\">Hafen Rostock<\/a>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group rtf-main is-layout-flow wp-block-group-is-layout-flow\">\n\n\n<p class=\"wp-block-paragraph\">Die F\u00e4hre Rostock Trelleborg verbindet Norddeutschland direkt mit S\u00fcdschweden. Zwei Reedereien fahren die Strecke: TT Line und Stena Line. Auf dieser Seite finden Sie den aktuellen Fahrplan f\u00fcr heute, die Fahrzeit, die Preise, Informationen zu beiden H\u00e4fen und alles, was Sie vor der \u00dcberfahrt wissen sollten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Verbindung gilt als eine der wichtigsten F\u00e4hrrouten zwischen Deutschland und Schweden. Wer mit dem Auto, Wohnmobil, Wohnwagen oder Motorrad nach Skandinavien reist, spart sich damit die lange Fahrt \u00fcber D\u00e4nemark.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die F\u00e4hrverbindung auf einen Blick<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Strecke<\/strong><\/td><td>Rostock (Deutschland) \u2013 Trelleborg (Schweden)<\/td><\/tr><tr><td><strong>Reedereien<\/strong><\/td><td>TT Line und Stena Line<\/td><\/tr><tr><td><strong>Fahrzeit<\/strong><\/td><td>etwa 6 Stunden, Nachtfahrten 7 bis 8 Stunden<\/td><\/tr><tr><td><strong>Entfernung<\/strong><\/td><td>rund 150 Kilometer \u00fcber die Ostsee<\/td><\/tr><tr><td><strong>Abfahrten<\/strong><\/td><td>meistens 6 bis 8 pro Tag, in beide Richtungen<\/td><\/tr><tr><td><strong>Fahrzeuge<\/strong><\/td><td>Pkw, Wohnmobil, Wohnwagen, Motorrad, Lkw<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">F\u00e4hre Rostock Trelleborg heute: aktueller Fahrplan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hier sehen Sie die n\u00e4chsten Abfahrten von Rostock nach Trelleborg. Der Fahrplan zeigt die Verbindungen von TT Line und Stena Line zusammen und aktualisiert sich automatisch.<\/p>\n\n\n<div class=\"tp-wrap tp-theme-extended_cards tp-day-setup-classic\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[157],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;theme&quot;:&quot;extended_cards&quot;,&quot;daySetup&quot;:&quot;classic&quot;,&quot;limit10&quot;:false,&quot;routeLabels&quot;:{&quot;157&quot;:&quot;Rostock-Trelleborg&quot;},&quot;opFilter&quot;:[&quot;13&quot;,&quot;36&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;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:[],&quot;showShip&quot;:true,&quot;departurePort&quot;:&quot;Rostock&quot;,&quot;arrivalPort&quot;:&quot;Trelleborg&quot;,&quot;departureTimezone&quot;:&quot;Europe\\\/Berlin&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-ops\">Datum<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range-ops\">Tage<\/label><br>\n      <select id=\"tp-range-ops\" 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-ops\" 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-ops\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">W\u00e4hlen Sie ein Datum und klicken Sie auf \u00dcberfahrten anzeigen<\/div>\n\n  <div id=\"tp-ops-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-ops');\n  const daysEl = wrap.querySelector('#tp-range-ops');\n  const btn    = wrap.querySelector('#tp-load-ops');\n  const status = wrap.querySelector('#tp-status-ops');\n  const out    = wrap.querySelector('#tp-ops-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times-ops');\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'}); }\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      wrap.querySelector('.tp-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.routeId||''), String(r.opId||''), String(+r.dep||0), String(+r.arr||0)].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routesSum = Array.isArray(cfg.routes) ? cfg.routes.reduce((acc, n)=>acc + (parseInt(n,10)||0), 0) : 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((routesSum + 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 routeLabel(rid){\n    return (cfg.routeLabels && (cfg.routeLabels[String(rid)] || cfg.routeLabels[rid])) || String(rid);\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,route:L.th_route,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.route+'<\/th>');\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\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 dateBoosters = (cfg.theme === 'max_clickouts') ? '' : boostersHtml(r, false);\n      const routeBoosters = (cfg.theme === 'max_clickouts') ? boostersHtml(r, false) : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+dateBoosters+'<\/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>'+routeBoosters+'<div>'+routeLabel(r.routeId)+'<\/div><\/td>');\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    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\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeLabel(r.routeId))+'<\/span><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\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        +   '<div class=\"tp-ext-route\">'+routeLabel(r.routeId)+'<\/div>'\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  \/\/ Safe fetch helper\n  async function fetchOne(routeId, from, to){\n    try{\n      const url = new URL(cfg.rest);\n      url.searchParams.set('route', String(routeId));\n      url.searchParams.set('from', from);\n      url.searchParams.set('to', to);\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) return { rid: routeId, 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      return { rid: routeId, rows: list };\n    }catch(e){\n      return { rid: routeId, error: String(e && e.message ? e.message : e) };\n    }\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n\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 fromIso = iso(start), toIso = iso(end);\n\n    try{\n      const results  = await Promise.all((cfg.routes||[]).map(rid=>fetchOne(rid, fromIso, toIso)));\n      const oks  = results.filter(r => !r.error);\n      const errs = results.filter(r =>  r.error);\n\n      const all = [];\n      oks.forEach(({rid, rows})=>{\n        rows.forEach(t=>{\n          all.push({\n            routeId: rid,\n            opId: t.operatorId || null,\n            opName: t.operatorName || '',\n            opLogo: t.operatorLogo || '',\n            opLink: t.operatorLink || '',\n            dep: toLocal(t.departureTime),\n            arr: toLocal(t.arrivalTime),\n            min: t.durationInMinutes || 0,\n            ship: t.shipName || ''\n          });\n        });\n      });\n\n      let rows = all;\n      if (Array.isArray(cfg.opFilter) && cfg.opFilter.length>0) {\n        rows = all.filter(r => r.opId && cfg.opFilter.includes(String(r.opId)));\n      }\n\n      rows.sort((a,b)=> a.dep - b.dep);\n\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\n      const total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        clearStatusInline();\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\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\n      status.textContent = errs.length ? ('Skipped '+errs.length+' route'+(errs.length>1?'s':'')) : '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+total+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n\n    } catch(e){\n      status.textContent = 'Failed to load data';\n      out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    } finally {\n      setLoader(false);\n      btn.disabled = false;\n    }\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\n\n\n\n<h3 class=\"wp-block-heading\">F\u00e4hre Trelleborg Rostock heute<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr die R\u00fcckfahrt von Schweden nach Deutschland finden Sie hier die aktuellen Abfahrten von Trelleborg nach Rostock.<\/p>\n\n\n<div class=\"tp-wrap tp-theme-extended_cards tp-day-setup-classic\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[158],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;theme&quot;:&quot;extended_cards&quot;,&quot;daySetup&quot;:&quot;classic&quot;,&quot;limit10&quot;:false,&quot;routeLabels&quot;:{&quot;158&quot;:&quot;Trelleborg-Rostock&quot;},&quot;opFilter&quot;:[&quot;13&quot;,&quot;36&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;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:[],&quot;showShip&quot;:true,&quot;departurePort&quot;:&quot;Trelleborg&quot;,&quot;arrivalPort&quot;:&quot;Rostock&quot;,&quot;departureTimezone&quot;:&quot;Europe\\\/Berlin&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-ops\">Datum<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range-ops\">Tage<\/label><br>\n      <select id=\"tp-range-ops\" 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-ops\" 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-ops\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">W\u00e4hlen Sie ein Datum und klicken Sie auf \u00dcberfahrten anzeigen<\/div>\n\n  <div id=\"tp-ops-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-ops');\n  const daysEl = wrap.querySelector('#tp-range-ops');\n  const btn    = wrap.querySelector('#tp-load-ops');\n  const status = wrap.querySelector('#tp-status-ops');\n  const out    = wrap.querySelector('#tp-ops-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times-ops');\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'}); }\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      wrap.querySelector('.tp-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.routeId||''), String(r.opId||''), String(+r.dep||0), String(+r.arr||0)].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routesSum = Array.isArray(cfg.routes) ? cfg.routes.reduce((acc, n)=>acc + (parseInt(n,10)||0), 0) : 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((routesSum + 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 routeLabel(rid){\n    return (cfg.routeLabels && (cfg.routeLabels[String(rid)] || cfg.routeLabels[rid])) || String(rid);\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,route:L.th_route,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.route+'<\/th>');\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\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 dateBoosters = (cfg.theme === 'max_clickouts') ? '' : boostersHtml(r, false);\n      const routeBoosters = (cfg.theme === 'max_clickouts') ? boostersHtml(r, false) : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+dateBoosters+'<\/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>'+routeBoosters+'<div>'+routeLabel(r.routeId)+'<\/div><\/td>');\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    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\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeLabel(r.routeId))+'<\/span><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\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        +   '<div class=\"tp-ext-route\">'+routeLabel(r.routeId)+'<\/div>'\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  \/\/ Safe fetch helper\n  async function fetchOne(routeId, from, to){\n    try{\n      const url = new URL(cfg.rest);\n      url.searchParams.set('route', String(routeId));\n      url.searchParams.set('from', from);\n      url.searchParams.set('to', to);\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) return { rid: routeId, 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      return { rid: routeId, rows: list };\n    }catch(e){\n      return { rid: routeId, error: String(e && e.message ? e.message : e) };\n    }\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n\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 fromIso = iso(start), toIso = iso(end);\n\n    try{\n      const results  = await Promise.all((cfg.routes||[]).map(rid=>fetchOne(rid, fromIso, toIso)));\n      const oks  = results.filter(r => !r.error);\n      const errs = results.filter(r =>  r.error);\n\n      const all = [];\n      oks.forEach(({rid, rows})=>{\n        rows.forEach(t=>{\n          all.push({\n            routeId: rid,\n            opId: t.operatorId || null,\n            opName: t.operatorName || '',\n            opLogo: t.operatorLogo || '',\n            opLink: t.operatorLink || '',\n            dep: toLocal(t.departureTime),\n            arr: toLocal(t.arrivalTime),\n            min: t.durationInMinutes || 0,\n            ship: t.shipName || ''\n          });\n        });\n      });\n\n      let rows = all;\n      if (Array.isArray(cfg.opFilter) && cfg.opFilter.length>0) {\n        rows = all.filter(r => r.opId && cfg.opFilter.includes(String(r.opId)));\n      }\n\n      rows.sort((a,b)=> a.dep - b.dep);\n\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\n      const total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        clearStatusInline();\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\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\n      status.textContent = errs.length ? ('Skipped '+errs.length+' route'+(errs.length>1?'s':'')) : '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+total+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n\n    } catch(e){\n      status.textContent = 'Failed to load data';\n      out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    } finally {\n      setLoader(false);\n      btn.disabled = false;\n    }\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\n\n\n\n<p class=\"wp-block-paragraph\">Den vollst\u00e4ndigen Fahrplan mit mehreren Tagen im Voraus finden Sie auf der Seite <a href=\"\/de\/fahrplan\/\">F\u00e4hre Rostock Trelleborg Fahrplan<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Wie lange dauert die F\u00e4hre von Rostock nach Trelleborg?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Fahrzeit der F\u00e4hre von Rostock nach Trelleborg betr\u00e4gt etwa <strong>6 Stunden<\/strong>. Tages\u00fcberfahrten liegen meistens genau in diesem Bereich. Nachtfahrten dauern h\u00e4ufig l\u00e4nger, in der Regel 7 bis 8 Stunden, weil der Fahrplan auf eine Ankunft am fr\u00fchen Morgen ausgelegt ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die tats\u00e4chliche Dauer h\u00e4ngt von der Reederei, dem eingesetzten Schiff, der Abfahrtszeit und den Wetterbedingungen auf der Ostsee ab. Bei starkem Wind oder hohem Seegang kann eine \u00dcberfahrt etwas l\u00e4nger dauern als geplant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rechnen Sie zus\u00e4tzlich mit Zeit f\u00fcr den Check-in. Die Reedereien empfehlen, mindestens 60 bis 90 Minuten vor Abfahrt am Terminal zu sein, bei Reisen mit Wohnmobil oder Anh\u00e4nger eher mehr.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was kostet die F\u00e4hre von Rostock nach Trelleborg?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Einen festen Preis gibt es auf dieser Strecke nicht. Die F\u00e4hrpreise zwischen Rostock und Trelleborg schwanken teils erheblich und h\u00e4ngen vor allem von diesen Faktoren ab:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Fahrzeugtyp<\/strong> \u2013 ein Pkw kostet deutlich weniger als ein Wohnmobil, ein Gespann oder ein Lkw<\/li>\n\n\n\n<li><strong>Anzahl der Passagiere<\/strong> \u2013 die meisten Tarife rechnen Fahrer und Mitreisende getrennt ab<\/li>\n\n\n\n<li><strong>Reisezeitraum<\/strong> \u2013 Hochsaison, Ferien und Wochenenden sind sp\u00fcrbar teurer als die Nebensaison<\/li>\n\n\n\n<li><strong>Buchungszeitpunkt<\/strong> \u2013 wer fr\u00fch bucht, zahlt in der Regel weniger<\/li>\n\n\n\n<li><strong>Kabine<\/strong> \u2013 bei Nachtfahrten kommt je nach Tarif eine Kabine hinzu<\/li>\n\n\n\n<li><strong>Reederei<\/strong> \u2013 TT Line und Stena Line kalkulieren unterschiedlich, ein Vergleich lohnt sich fast immer<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Weil beide Reedereien dieselbe Strecke bedienen, k\u00f6nnen Sie Abfahrten und Tarife direkt gegeneinander abw\u00e4gen. Eine aktuelle \u00dcbersicht und ein Preisvergleich finden Sie auf der Seite <a href=\"\/de\/preise\/\">Preise der F\u00e4hr\u00fcberfahrt<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die Reedereien: TT Line und Stena Line<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Auf der Strecke Rostock Trelleborg fahren zwei Anbieter. Das ist f\u00fcr Reisende ein Vorteil: mehr Abfahrtszeiten zur Auswahl und die M\u00f6glichkeit, Preise und Schiffe zu vergleichen.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading\">TT Line<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">TT Line f\u00e4hrt die Route seit Jahrzehnten und bietet sowohl Tages- als auch Nachtabfahrten an. Die Reederei ist besonders bei Reisenden mit Wohnmobil und im G\u00fcterverkehr etabliert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"\/de\/tt-line\/\">Mehr \u00fcber TT Line<\/a><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Stena Line<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stena Line bedient die Strecke ebenfalls mehrmals t\u00e4glich. An Bord finden Reisende Restaurants, Shops und je nach Schiff Kabinen f\u00fcr die Nacht\u00fcberfahrt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"\/de\/stena-line\/\">Mehr \u00fcber Stena Line<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Die H\u00e4fen: Rostock und Trelleborg<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Hafen Rostock<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der \u00dcberseehafen Rostock ist einer der wichtigsten F\u00e4hrh\u00e4fen Deutschlands an der Ostsee. \u00dcber die A19 ist er gut zu erreichen, was ihn zu einem praktischen Ausgangspunkt f\u00fcr Reisende aus Berlin, Hamburg und Mitteldeutschland macht.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"\/de\/rostock-hafen\/\">Anfahrt, Check-in und Parken in Rostock<\/a><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Hafen Trelleborg<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Trelleborg ist der s\u00fcdlichste F\u00e4hrhafen Schwedens und einer der meistbefahrenen des Landes. Von dort f\u00fchren gute Stra\u00dfenverbindungen nach Malm\u00f6, Lund, G\u00f6teborg, Stockholm und weiter nach Norwegen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"\/de\/trelleborg-hafen\/\">Anfahrt, Terminal und Webcam in Trelleborg<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Wetter und Seegang auf der Ostsee<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das Wetter beeinflusst die \u00dcberfahrt sp\u00fcrbar. Im Sommer ist die Ostsee meist ruhig, im Herbst und Winter kann es deutlich rauer werden. Bei Sturmwarnungen kommt es gelegentlich zu Versp\u00e4tungen oder Ausf\u00e4llen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vor der Abfahrt lohnt ein Blick auf die <a href=\"\/de\/wettervorhersage\/\">Wettervorhersage f\u00fcr Rostock, Trelleborg und die \u00dcberfahrt<\/a>. Dort finden Sie Karten f\u00fcr Wind, Wellenh\u00f6he, Temperatur und Sturmwarnungen entlang der Route.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Weitere Informationen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/de\/fahrplan\/\">Fahrplan<\/a> \u2013 alle Abfahrten in beide Richtungen<\/li>\n\n\n\n<li><a href=\"\/de\/preise\/\">Preise<\/a> \u2013 Tarife vergleichen und buchen<\/li>\n\n\n\n<li><a href=\"\/de\/wettervorhersage\/\">Wettervorhersage<\/a> \u2013 Wind, Wellen und Sturm auf der Ostsee<\/li>\n\n\n\n<li><a href=\"\/de\/rostock-hafen\/\">Hafen Rostock<\/a> \u2013 Anfahrt und Terminal<\/li>\n\n\n\n<li><a href=\"\/de\/trelleborg-hafen\/\">Hafen Trelleborg<\/a> \u2013 Anfahrt und Terminal<\/li>\n\n\n\n<li><a href=\"\/de\/tt-line\/\">TT Line<\/a> und <a href=\"\/de\/stena-line\/\">Stena Line<\/a> \u2013 die Reedereien im Detail<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">H\u00e4ufig gestellte Fragen<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Wie lange dauert die F\u00e4hre von Rostock nach Trelleborg?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die \u00dcberfahrt dauert etwa 6 Stunden. Nachtfahrten ben\u00f6tigen h\u00e4ufig 7 bis 8 Stunden, weil sie auf eine Ankunft am fr\u00fchen Morgen ausgelegt sind.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Welche Reedereien fahren zwischen Rostock und Trelleborg?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die Strecke wird von TT Line und Stena Line bedient. Beide bieten regelm\u00e4\u00dfige Abfahrten in beide Richtungen an.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">F\u00e4hrt heute eine F\u00e4hre von Rostock nach Trelleborg?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An den meisten Tagen fahren mehrere F\u00e4hren. Den aktuellen Fahrplan f\u00fcr heute finden Sie oben auf dieser Seite.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Gibt es eine Nachtf\u00e4hre von Rostock nach Trelleborg?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. In beide Richtungen gibt es regelm\u00e4\u00dfig Nachtabfahrten. Das ist praktisch, wenn Sie am Morgen ausgeruht weiterfahren m\u00f6chten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Was kostet die F\u00e4hre von Rostock nach Trelleborg?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der Preis h\u00e4ngt von Fahrzeug, Saison, Buchungszeitpunkt und Reederei ab. Einen aktuellen Vergleich finden Sie auf der Seite \u00fcber die Preise.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kann ich mein Wohnmobil mitnehmen?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. Beide Reedereien bef\u00f6rdern Pkw, Wohnmobile, Wohnwagen, Motorr\u00e4der und Lkw. Der Preis richtet sich unter anderem nach L\u00e4nge und H\u00f6he des Fahrzeugs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wie viele Abfahrten gibt es pro Tag?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00dcber beide Reedereien zusammen sind es meistens 6 bis 8 Abfahrten pro Tag und Richtung. Die genaue Zahl schwankt je nach Saison und Wochentag.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wie fr\u00fch muss ich am Hafen sein?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Planen Sie mindestens 60 bis 90 Minuten vor Abfahrt ein. Mit Wohnmobil, Anh\u00e4nger oder in der Hochsaison sollten Sie eher mehr Zeit einrechnen.<\/p>\n\n\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Wie lange dauert die F\u00e4hre von Rostock nach Trelleborg?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Die \u00dcberfahrt dauert etwa 6 Stunden. Nachtfahrten ben\u00f6tigen h\u00e4ufig 7 bis 8 Stunden, weil sie auf eine Ankunft am fr\u00fchen Morgen ausgelegt sind.\"}},{\"@type\":\"Question\",\"name\":\"Welche Reedereien fahren zwischen Rostock und Trelleborg?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Die Strecke wird von TT Line und Stena Line bedient. Beide bieten regelm\u00e4\u00dfige Abfahrten in beide Richtungen an.\"}},{\"@type\":\"Question\",\"name\":\"F\u00e4hrt heute eine F\u00e4hre von Rostock nach Trelleborg?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"An den meisten Tagen fahren mehrere F\u00e4hren. Den aktuellen Fahrplan f\u00fcr heute finden Sie auf dieser Seite.\"}},{\"@type\":\"Question\",\"name\":\"Gibt es eine Nachtf\u00e4hre von Rostock nach Trelleborg?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Ja. In beide Richtungen gibt es regelm\u00e4\u00dfig Nachtabfahrten.\"}},{\"@type\":\"Question\",\"name\":\"Was kostet die F\u00e4hre von Rostock nach Trelleborg?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Der Preis h\u00e4ngt von Fahrzeug, Saison, Buchungszeitpunkt und Reederei ab.\"}},{\"@type\":\"Question\",\"name\":\"Kann ich mein Wohnmobil mitnehmen?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Ja. Beide Reedereien bef\u00f6rdern Pkw, Wohnmobile, Wohnwagen, Motorr\u00e4der und Lkw.\"}},{\"@type\":\"Question\",\"name\":\"Wie viele Abfahrten gibt es pro Tag?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"\u00dcber beide Reedereien zusammen sind es meistens 6 bis 8 Abfahrten pro Tag und Richtung.\"}},{\"@type\":\"Question\",\"name\":\"Wie fr\u00fch muss ich am Hafen sein?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Planen Sie mindestens 60 bis 90 Minuten vor Abfahrt ein. Mit Wohnmobil oder Anh\u00e4nger eher mehr.\"}}]}\n<\/script>\n<\/div>\n\n\n\n<div class=\"wp-block-group rtf-rail-right is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group rtf-convert is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"rtf-kicker wp-block-paragraph\">Vergleichen<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">TT Line oder Stena Line?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Beide Reedereien fahren dieselbe Strecke in &auml;hnlicher Zeit. An Ihren Reisedaten entscheidet meistens der Preis oder die passende Abfahrtszeit.<\/p>\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=\"\/de\/go\/ttout\" target=\"_blank\" rel=\"nofollow sponsored noopener\">Preise ansehen<\/a><\/div>\n<\/div>\n<\/div>\n\n\n\n<p class=\"rtf-kicker wp-block-paragraph\">Abfahrten<\/p>\n\n\n\n<p class=\"rtf-stat\">6&ndash;8<span> PRO TAG<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&Uuml;ber beide Reedereien zusammen, je Richtung. Die genaue Zahl schwankt je nach Saison und Wochentag.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"rtf-kicker wp-block-paragraph\">Auch n&uuml;tzlich<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/de\/fahrplan\/\">Fahrplan beider Reedereien<\/a><\/li>\n\n\n\n<li><a href=\"\/de\/preise\/\">Preise und Tarife<\/a><\/li>\n\n\n\n<li><a href=\"\/de\/trelleborg-hafen\/\">Hafen Trelleborg<\/a><\/li>\n\n\n\n<li><a href=\"\/de\/wettervorhersage\/\">Wetter auf der Ostsee<\/a><\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-group rtf-convert rtf-sticky is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"rtf-kicker wp-block-paragraph\">Buchen<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bald unterwegs?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Fr&uuml;h buchen ist auf dieser Strecke fast immer g&uuml;nstiger.<\/p>\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=\"\/de\/go\/ttout\" target=\"_blank\" rel=\"nofollow sponsored noopener\">Preise ansehen<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Rostock &rarr; Trelleborg &middot; Ostsee F&auml;hre Rostock Trelleborg: in einer &Uuml;berfahrt nach Schweden Sechs Stunden Ostsee statt eines ganzen Tages [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_yoast_wpseo_title":"F\u00e4hre Rostock Trelleborg | Fahrplan, Preise, Dauer","_yoast_wpseo_metadesc":"Die F\u00e4hre Rostock Trelleborg heute: aktuelle Abfahrten von TT Line und Stena Line, Fahrzeit, Preise und beide H\u00e4fen auf einen Blick.","inline_featured_image":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"unboxed","site-sidebar-style":"unboxed","ast-global-header-display":"","ast-banner-title-visibility":"disabled","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"disabled","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-9","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>F\u00e4hre Rostock Trelleborg | Fahrplan, Preise, Dauer<\/title>\n<meta name=\"description\" content=\"Die F\u00e4hre Rostock Trelleborg heute: aktuelle Abfahrten von TT Line und Stena Line, Fahrzeit, Preise und beide H\u00e4fen auf einen Blick.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rostocktrelleborg.com\/de\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"F\u00e4hre Rostock Trelleborg | Fahrplan, Preise, Dauer\" \/>\n<meta property=\"og:description\" content=\"Die F\u00e4hre Rostock Trelleborg heute: aktuelle Abfahrten von TT Line und Stena Line, Fahrzeit, Preise und beide H\u00e4fen auf einen Blick.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rostocktrelleborg.com\/de\/\" \/>\n<meta property=\"og:site_name\" content=\"Rostock Trelleborg F\u00e4hre\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-23T08:41:33+00:00\" \/>\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:\\\/\\\/rostocktrelleborg.com\\\/de\\\/\",\"url\":\"https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/\",\"name\":\"F\u00e4hre Rostock Trelleborg | Fahrplan, Preise, Dauer\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/#website\"},\"datePublished\":\"2024-03-14T08:25:44+00:00\",\"dateModified\":\"2026-09-23T08:41:33+00:00\",\"description\":\"Die F\u00e4hre Rostock Trelleborg heute: aktuelle Abfahrten von TT Line und Stena Line, Fahrzeit, Preise und beide H\u00e4fen auf einen Blick.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"F\u00e4hre Rostock Trelleborg\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/\",\"name\":\"Rostock Trelleborg F\u00e4hre\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rostocktrelleborg.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"F\u00e4hre Rostock Trelleborg | Fahrplan, Preise, Dauer","description":"Die F\u00e4hre Rostock Trelleborg heute: aktuelle Abfahrten von TT Line und Stena Line, Fahrzeit, Preise und beide H\u00e4fen auf einen Blick.","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:\/\/rostocktrelleborg.com\/de\/","og_locale":"de_DE","og_type":"article","og_title":"F\u00e4hre Rostock Trelleborg | Fahrplan, Preise, Dauer","og_description":"Die F\u00e4hre Rostock Trelleborg heute: aktuelle Abfahrten von TT Line und Stena Line, Fahrzeit, Preise und beide H\u00e4fen auf einen Blick.","og_url":"https:\/\/rostocktrelleborg.com\/de\/","og_site_name":"Rostock Trelleborg F\u00e4hre","article_modified_time":"2026-09-23T08:41:33+00:00","twitter_card":"summary_large_image","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/rostocktrelleborg.com\/de\/","url":"https:\/\/rostocktrelleborg.com\/de\/","name":"F\u00e4hre Rostock Trelleborg | Fahrplan, Preise, Dauer","isPartOf":{"@id":"https:\/\/rostocktrelleborg.com\/de\/#website"},"datePublished":"2024-03-14T08:25:44+00:00","dateModified":"2026-09-23T08:41:33+00:00","description":"Die F\u00e4hre Rostock Trelleborg heute: aktuelle Abfahrten von TT Line und Stena Line, Fahrzeit, Preise und beide H\u00e4fen auf einen Blick.","breadcrumb":{"@id":"https:\/\/rostocktrelleborg.com\/de\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rostocktrelleborg.com\/de\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rostocktrelleborg.com\/de\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rostocktrelleborg.com\/de\/"},{"@type":"ListItem","position":2,"name":"F\u00e4hre Rostock Trelleborg"}]},{"@type":"WebSite","@id":"https:\/\/rostocktrelleborg.com\/de\/#website","url":"https:\/\/rostocktrelleborg.com\/de\/","name":"Rostock Trelleborg F\u00e4hre","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rostocktrelleborg.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"}]}},"_links":{"self":[{"href":"https:\/\/rostocktrelleborg.com\/de\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rostocktrelleborg.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/rostocktrelleborg.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/rostocktrelleborg.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rostocktrelleborg.com\/de\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":53,"href":"https:\/\/rostocktrelleborg.com\/de\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":203,"href":"https:\/\/rostocktrelleborg.com\/de\/wp-json\/wp\/v2\/pages\/9\/revisions\/203"}],"wp:attachment":[{"href":"https:\/\/rostocktrelleborg.com\/de\/wp-json\/wp\/v2\/media?parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}