{"id":741,"date":"2025-09-29T08:31:12","date_gmt":"2025-09-29T08:31:12","guid":{"rendered":"https:\/\/holyhead-dublin.com\/de\/?page_id=741"},"modified":"2026-08-28T12:42:12","modified_gmt":"2026-08-28T12:42:12","slug":"stena-line-timetable","status":"publish","type":"page","link":"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/","title":{"rendered":"Stena Line Timetable"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"741\" class=\"elementor elementor-741\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-309ec5fe e-con-full e-flex e-con e-parent\" data-id=\"309ec5fe\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-bb0f46b e-con-full e-flex e-con e-child\" data-id=\"bb0f46b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bbf3e46 elementor-widget elementor-widget-global elementor-global-3364 elementor-widget-breadcrumbs\" data-id=\"bbf3e46\" 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:\/\/holyhead-dublin.com\/de\/\">Home<\/a><\/span><\/span><\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-11022588 elementor-widget elementor-widget-heading\" data-id=\"11022588\" 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\">Stena Line F\u00e4hrfahrplan Holyhead-Dublin<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7308303e elementor-widget elementor-widget-text-editor\" data-id=\"7308303e\" 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>Stena Line bietet mit der Stena Estrid und der Stena Adventurer mehrere Abfahrten pro Tag und damit flexible Reisem\u00f6glichkeiten \u00fcber den ganzen Tag.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-399f47c7 e-con-full e-flex e-con e-child\" data-id=\"399f47c7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-41cb6fa2 e-flex e-con-boxed e-con e-parent\" data-id=\"41cb6fa2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-23cba701 elementor-widget elementor-widget-text-editor\" data-id=\"23cba701\" 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>Fahrplan Hafen Holyhead<\/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-604f09a6 elementor-widget elementor-widget-text-editor\" data-id=\"604f09a6\" 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<h2>Stena Line Abfahrten in Holyhead<\/h2><p>Ob Sie die Abfahrts- und Ankunftszeiten von heute oder morgen suchen: <a href=\"https:\/\/holyhead-dublin.com\/de\/stena-line\/\">Stena Line<\/a> f\u00e4hrt t\u00e4glich nach einem verl\u00e4sslichen festen Fahrplan zwischen Holyhead und Dublin. Nur sonntags entf\u00e4llt die Abfahrt gegen 2 Uhr nachts.<\/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-18e1eda4 elementor-widget__width-inherit e-n-tabs-mobile elementor-widget elementor-widget-n-tabs\" data-id=\"18e1eda4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tabs_justify_horizontal&quot;:&quot;start&quot;,&quot;horizontal_scroll&quot;:&quot;disable&quot;}\" data-widget_type=\"nested-tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-tabs\" data-widget-number=\"417459620\" aria-label=\"Tabs. Open items with Enter or Space, close with Escape and navigate using the Arrow keys.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-4174596201\" data-tab-title-id=\"e-n-tab-title-4174596201\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-4174596201\" style=\"--n-tabs-title-order: 1;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tAbfahrten Holyhead\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-4174596202\" data-tab-title-id=\"e-n-tab-title-4174596202\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-4174596202\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tAnk\u00fcnfte Holyhead\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"e-n-tabs-content\">\n\t\t\t\t<div id=\"e-n-tab-content-4174596201\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-4174596201\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-b46a516 e-con-full e-flex e-con e-child\" data-id=\"b46a516\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c79072e elementor-widget elementor-widget-shortcode\" data-id=\"c79072e\" 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\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[65],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;65&quot;:&quot;Holyhead \\u21d2 Dublin&quot;},&quot;opFilter&quot;:[&quot;13&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;Abfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;Datum w\\u00e4hlen und Abfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Laden...&quot;,&quot;status_empty&quot;:&quot;Keine Abfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d Abfahrten 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;Schiffsname&quot;,&quot;th_op&quot;:&quot;Reederei&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;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/dublin-swift\\\/&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>\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\">Abfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Datum w\u00e4hlen und Abfahrten 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\">Laden...<\/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\n  dateEl.valueAsDate = new Date();\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 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 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    let html = '<table class=\"tp-table\"><thead><tr>'+\n      '<th>'+th.date+'<\/th><th>'+th.dep+'<\/th><th>'+th.arr+'<\/th><th>'+th.dur+'<\/th><th>'+th.ship+'<\/th><th>'+th.route+'<\/th><th>'+th.op+'<\/th>'+\n      '<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      html += '<tr>'+\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>'+\n        '<td>'+hhmm(r.dep)+'<\/td>'+\n        '<td>'+hhmm(r.arr)+'<\/td>'+\n        '<td>'+dur(r.min)+'<\/td>'+\n        '<td>'+shipBadge(r.ship)+'<\/td>'+\n        '<td>'+routeLabel(r.routeId)+'<\/td>'+\n        '<td>'+opCell(r)+'<\/td>'+\n      '<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\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\">'+\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        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>'+\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/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  = 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 total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\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  btn.addEventListener('click', load);\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>\n\t\t<div id=\"e-n-tab-content-4174596202\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-4174596202\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-7ec13d3d e-con-full e-flex e-con e-child\" data-id=\"7ec13d3d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-20b67f4b e-flex e-con-boxed e-con e-child\" data-id=\"20b67f4b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8c59b5f elementor-widget__width-inherit elementor-widget elementor-widget-shortcode\" data-id=\"8c59b5f\" 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\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[17],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;17&quot;:&quot;Dublin \\u21d2 Holyhead&quot;},&quot;opFilter&quot;:[&quot;13&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;Abfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;Datum w\\u00e4hlen und Abfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Laden...&quot;,&quot;status_empty&quot;:&quot;Keine Abfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d Abfahrten 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;Schiffsname&quot;,&quot;th_op&quot;:&quot;Reederei&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;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/dublin-swift\\\/&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>\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\">Abfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Datum w\u00e4hlen und Abfahrten 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\">Laden...<\/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\n  dateEl.valueAsDate = new Date();\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 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 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    let html = '<table class=\"tp-table\"><thead><tr>'+\n      '<th>'+th.date+'<\/th><th>'+th.dep+'<\/th><th>'+th.arr+'<\/th><th>'+th.dur+'<\/th><th>'+th.ship+'<\/th><th>'+th.route+'<\/th><th>'+th.op+'<\/th>'+\n      '<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      html += '<tr>'+\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>'+\n        '<td>'+hhmm(r.dep)+'<\/td>'+\n        '<td>'+hhmm(r.arr)+'<\/td>'+\n        '<td>'+dur(r.min)+'<\/td>'+\n        '<td>'+shipBadge(r.ship)+'<\/td>'+\n        '<td>'+routeLabel(r.routeId)+'<\/td>'+\n        '<td>'+opCell(r)+'<\/td>'+\n      '<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\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\">'+\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        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>'+\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/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  = 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 total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\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  btn.addEventListener('click', load);\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\t<\/div>\n\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\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-373f0c2 e-flex e-con-boxed e-con e-parent\" data-id=\"373f0c2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-98e5244 elementor-widget elementor-widget-text-editor\" data-id=\"98e5244\" 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><span style=\"color: #5aa9f3;\">Fahrplan Hafen Dublin<\/span><\/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-350ec83 elementor-widget elementor-widget-text-editor\" data-id=\"350ec83\" 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<h2>Stena Line Abfahrten in Dublin<\/h2><p>M\u00f6chten Sie wissen, wann die F\u00e4hre in Dublin ankommt oder zu welcher Zeit Sie eine Abfahrt ab Dublin buchen k\u00f6nnen? Das finden Sie in den Fahrpl\u00e4nen unten f\u00fcr die Stena Adventurer und die Stena Estrid.\u00a0<\/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-72fd6ff elementor-widget__width-inherit e-n-tabs-mobile elementor-widget elementor-widget-n-tabs\" data-id=\"72fd6ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tabs_justify_horizontal&quot;:&quot;start&quot;,&quot;horizontal_scroll&quot;:&quot;disable&quot;}\" data-widget_type=\"nested-tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-tabs\" data-widget-number=\"120575743\" aria-label=\"Tabs. Open items with Enter or Space, close with Escape and navigate using the Arrow keys.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-1205757431\" data-tab-title-id=\"e-n-tab-title-1205757431\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-1205757431\" style=\"--n-tabs-title-order: 1;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tAbfahrten Dublin\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-1205757432\" data-tab-title-id=\"e-n-tab-title-1205757432\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-1205757432\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tAnk\u00fcnfte Dublin\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"e-n-tabs-content\">\n\t\t\t\t<div id=\"e-n-tab-content-1205757431\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1205757431\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-34462c75 e-con-full e-flex e-con e-child\" data-id=\"34462c75\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e19c004 elementor-widget elementor-widget-shortcode\" data-id=\"e19c004\" 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\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[17],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;17&quot;:&quot;Dublin \\u21d2 Holyhead&quot;},&quot;opFilter&quot;:[&quot;13&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;Abfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;Datum w\\u00e4hlen und Abfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Laden...&quot;,&quot;status_empty&quot;:&quot;Keine Abfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d Abfahrten 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;Schiffsname&quot;,&quot;th_op&quot;:&quot;Reederei&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;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/dublin-swift\\\/&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>\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\">Abfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Datum w\u00e4hlen und Abfahrten 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\">Laden...<\/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\n  dateEl.valueAsDate = new Date();\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 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 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    let html = '<table class=\"tp-table\"><thead><tr>'+\n      '<th>'+th.date+'<\/th><th>'+th.dep+'<\/th><th>'+th.arr+'<\/th><th>'+th.dur+'<\/th><th>'+th.ship+'<\/th><th>'+th.route+'<\/th><th>'+th.op+'<\/th>'+\n      '<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      html += '<tr>'+\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>'+\n        '<td>'+hhmm(r.dep)+'<\/td>'+\n        '<td>'+hhmm(r.arr)+'<\/td>'+\n        '<td>'+dur(r.min)+'<\/td>'+\n        '<td>'+shipBadge(r.ship)+'<\/td>'+\n        '<td>'+routeLabel(r.routeId)+'<\/td>'+\n        '<td>'+opCell(r)+'<\/td>'+\n      '<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\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\">'+\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        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>'+\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/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  = 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 total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\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  btn.addEventListener('click', load);\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>\n\t\t<div id=\"e-n-tab-content-1205757432\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1205757432\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-4f4aaf23 e-con-full e-flex e-con e-child\" data-id=\"4f4aaf23\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-27c85014 e-flex e-con-boxed e-con e-child\" data-id=\"27c85014\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-05116dc elementor-widget__width-inherit elementor-widget elementor-widget-shortcode\" data-id=\"05116dc\" 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\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[65],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;65&quot;:&quot;Holyhead \\u21d2 Dublin&quot;},&quot;opFilter&quot;:[&quot;13&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;Abfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;Datum w\\u00e4hlen und Abfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Laden...&quot;,&quot;status_empty&quot;:&quot;Keine Abfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d Abfahrten 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;Schiffsname&quot;,&quot;th_op&quot;:&quot;Reederei&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;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/dublin-swift\\\/&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>\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\">Abfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Datum w\u00e4hlen und Abfahrten 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\">Laden...<\/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\n  dateEl.valueAsDate = new Date();\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 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 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    let html = '<table class=\"tp-table\"><thead><tr>'+\n      '<th>'+th.date+'<\/th><th>'+th.dep+'<\/th><th>'+th.arr+'<\/th><th>'+th.dur+'<\/th><th>'+th.ship+'<\/th><th>'+th.route+'<\/th><th>'+th.op+'<\/th>'+\n      '<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      html += '<tr>'+\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>'+\n        '<td>'+hhmm(r.dep)+'<\/td>'+\n        '<td>'+hhmm(r.arr)+'<\/td>'+\n        '<td>'+dur(r.min)+'<\/td>'+\n        '<td>'+shipBadge(r.ship)+'<\/td>'+\n        '<td>'+routeLabel(r.routeId)+'<\/td>'+\n        '<td>'+opCell(r)+'<\/td>'+\n      '<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\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\">'+\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        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>'+\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/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  = 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 total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\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  btn.addEventListener('click', load);\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\t<\/div>\n\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\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-48f6f00d e-flex e-con-boxed e-con e-parent\" data-id=\"48f6f00d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4e4d2d1b e-con-full e-flex e-con e-child\" data-id=\"4e4d2d1b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3436335e elementor-widget elementor-widget-text-editor\" data-id=\"3436335e\" 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<h3>\u00dcber den Fahrplan<\/h3><ul><li>Der angezeigte Fahrplan ist der regul\u00e4re Stena-Line-Fahrplan f\u00fcr die <a href=\"https:\/\/holyhead-dublin.com\/de\/ferries\/stena-estrid\/\">Stena Estrid<\/a> und die <a href=\"https:\/\/holyhead-dublin.com\/de\/ferries\/stena-adventurer\/\">Stena Adventurer<\/a>. Tats\u00e4chliche Ankunfts- und Abfahrtszeiten k\u00f6nnen abweichen.<\/li><li>Neben Stena Line betreibt Irish Ferries drei F\u00e4hren auf der Route zwischen Wales und Irland. Sie finden diese auch im\u00a0 <a href=\"https:\/\/holyhead-dublin.com\/de\/timetable\/\">Fahrplan Holyhead\u2013Dublin<\/a> mit allen F\u00e4hren.<\/li><li>Zeigt der Fahrplan keine Ergebnisse, ist der Fahrplan f\u00fcr diesen Zeitraum meist noch nicht ver\u00f6ffentlicht, etwa wenn Stena Line die neue Saison noch plant.<\/li><li><strong>Abfahrten k\u00f6nnen gelegentlich ausfallen<\/strong>, wegen technischer Probleme oder schlechten Wetters. Mehr dazu in unseren\u00a0 Fahrplan-Updates.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-58173ffc e-con-full e-flex e-con e-parent\" data-id=\"58173ffc\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-7a4d04b4 e-con-full e-flex e-con e-child\" data-id=\"7a4d04b4\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6177c7d7 e-con-full e-flex e-con e-child\" data-id=\"6177c7d7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-452c81ec elementor-widget elementor-widget-heading\" data-id=\"452c81ec\" 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\">\u00c4nderungen im Fahrplan<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-377eaedf elementor-widget elementor-widget-text-editor\" data-id=\"377eaedf\" 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>Stena Line setzt gro\u00dfe F\u00e4hren ein, die oft auch bei Sturm weiterfahren. Ist die \u00dcberfahrt jedoch nicht mehr sicher oder liegt ein Schaden vor, wird die Abfahrt gestrichen. Das gilt auch bei technischen Problemen oder anderen St\u00f6rungen.<\/p><ul><li><a href=\"https:\/\/holyhead-dublin.com\/de\/timetable\/sailing-updates\/\"><strong>Aktuelle Fahrplan-Updates<\/strong><\/a><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-273b78fa e-flex e-con-boxed e-con e-parent\" data-id=\"273b78fa\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-6af748a7 e-con-full e-flex e-con e-child\" data-id=\"6af748a7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5c781e27 elementor-widget elementor-widget-text-editor\" data-id=\"5c781e27\" 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<h3>Extra Zeit f\u00fcr den Check-in bei Stena Line<\/h3><p>Planen Sie bei Stena Line gen\u00fcgend Zeit ein. Gerade in Sto\u00dfzeiten kann es durch Schlangen am Check-in oder beim Zoll zu Verz\u00f6gerungen kommen. Die aktuellen Check-in-Fristen f\u00fcr die Stena-Line-Route Holyhead\u2013Dublin finden Sie hier:<\/p><ul><li><a href=\"https:\/\/holyhead-dublin.com\/de\/stena-line\/#checkin\">Check-in-Zeiten Stena Line<\/a><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3f243921 e-flex e-con-boxed e-con e-parent\" data-id=\"3f243921\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9a0b898 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"9a0b898\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/holyhead-dublin.com\/de\/campsites\/\" tabindex=\"-1\"><img fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain-300x200.jpg\" class=\"attachment-medium size-medium wp-image-2167\" alt=\"Holyhead Mountain\" srcset=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain-300x200.jpg 300w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain-1024x683.jpg 1024w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain-768x512.jpg 768w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain.jpg 1200w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/holyhead-dublin.com\/de\/campsites\/\">Campingpl\u00e4tze bei Holyhead<\/a><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-17e0dad1 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"17e0dad1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/holyhead-dublin.com\/de\/weather\/\" tabindex=\"-1\"><img decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin-300x200.jpg\" class=\"attachment-medium size-medium wp-image-1725\" alt=\"ferries departing dublin\" srcset=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin-300x200.jpg 300w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin-1024x683.jpg 1024w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin-768x512.jpg 768w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin.jpg 1200w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/holyhead-dublin.com\/de\/weather\/\">Aktuelles Wetter Irische See<\/a><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-50ad67e5 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"50ad67e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/holyhead-dublin.com\/de\/live-location\/\" tabindex=\"-1\"><img decoding=\"async\" width=\"300\" height=\"212\" src=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/live-vessel-location-300x212.jpg\" class=\"attachment-medium size-medium wp-image-1193\" alt=\"Echtzeitkarte der Schiffspositionen\" srcset=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/live-vessel-location-300x212.jpg 300w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/live-vessel-location.jpg 702w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/holyhead-dublin.com\/de\/live-location\/\">Live-Position der F\u00e4hren<\/a><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-197b5b2b elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"197b5b2b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/holyhead-dublin.com\/de\/pets-on-board\/\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-300x169.jpg\" class=\"attachment-medium size-medium wp-image-1804\" alt=\"Pet area rules sign on ferry deck\" srcset=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-300x169.jpg 300w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-1024x576.jpg 1024w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-768x432.jpg 768w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-1536x864.jpg 1536w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board.jpg 1920w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/holyhead-dublin.com\/de\/pets-on-board\/\">Mit Haustier an Bord<\/a><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Stena Line Fu00e4hrfahrplan Holyhead-Dublin Stena Line bietet mit der Stena Estrid und der Stena Adventurer mehrere Abfahrten pro Tag und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1213,"parent":130,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","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":"","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-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":"","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-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":"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":""},"mobile":{"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":""}},"footnotes":""},"class_list":["post-741","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Stena Line Fahrplan - Holyhead-Dublin Abfahrtszeiten<\/title>\n<meta name=\"description\" content=\"Abfahrtszeiten von Stena Line zwischen Holyhead und Dublin: Stena Estrid und Stena Adventurer, f\u00fcr heute, morgen oder jedes andere Datum.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stena Line Fahrplan - Holyhead-Dublin Abfahrtszeiten\" \/>\n<meta property=\"og:description\" content=\"Abfahrtszeiten von Stena Line zwischen Holyhead und Dublin: Stena Estrid und Stena Adventurer, f\u00fcr heute, morgen oder jedes andere Datum.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/\" \/>\n<meta property=\"og:site_name\" content=\"Holyhead Dublin\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-28T12:42:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\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=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/stena-line-timetable\\\/\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/stena-line-timetable\\\/\",\"name\":\"Stena Line Fahrplan - Holyhead-Dublin Abfahrtszeiten\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/stena-line-timetable\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/stena-line-timetable\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/10\\\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\",\"datePublished\":\"2025-09-29T08:31:12+00:00\",\"dateModified\":\"2026-08-28T12:42:12+00:00\",\"description\":\"Abfahrtszeiten von Stena Line zwischen Holyhead und Dublin: Stena Estrid und Stena Adventurer, f\u00fcr heute, morgen oder jedes andere Datum.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/stena-line-timetable\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/stena-line-timetable\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/stena-line-timetable\\\/#primaryimage\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/10\\\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\",\"contentUrl\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/10\\\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\",\"width\":1920,\"height\":1080,\"caption\":\"Both Stena Line and Irish Ferries have ticket desks in Holyhead terminal.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/stena-line-timetable\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Timetable\",\"item\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Stena Line Timetable\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/\",\"name\":\"Holyhead Dublin\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#organization\",\"name\":\"Holyhead Dublin\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/09\\\/Holyhead-dublin-logo.svg\",\"contentUrl\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/09\\\/Holyhead-dublin-logo.svg\",\"width\":200,\"height\":40,\"caption\":\"Holyhead Dublin\"},\"image\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Stena Line Fahrplan - Holyhead-Dublin Abfahrtszeiten","description":"Abfahrtszeiten von Stena Line zwischen Holyhead und Dublin: Stena Estrid und Stena Adventurer, f\u00fcr heute, morgen oder jedes andere Datum.","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:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/","og_locale":"en_GB","og_type":"article","og_title":"Stena Line Fahrplan - Holyhead-Dublin Abfahrtszeiten","og_description":"Abfahrtszeiten von Stena Line zwischen Holyhead und Dublin: Stena Estrid und Stena Adventurer, f\u00fcr heute, morgen oder jedes andere Datum.","og_url":"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/","og_site_name":"Holyhead Dublin","article_modified_time":"2026-08-28T12:42:12+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/","url":"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/","name":"Stena Line Fahrplan - Holyhead-Dublin Abfahrtszeiten","isPartOf":{"@id":"https:\/\/holyhead-dublin.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/#primaryimage"},"image":{"@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/#primaryimage"},"thumbnailUrl":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","datePublished":"2025-09-29T08:31:12+00:00","dateModified":"2026-08-28T12:42:12+00:00","description":"Abfahrtszeiten von Stena Line zwischen Holyhead und Dublin: Stena Estrid und Stena Adventurer, f\u00fcr heute, morgen oder jedes andere Datum.","breadcrumb":{"@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/#primaryimage","url":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","contentUrl":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","width":1920,"height":1080,"caption":"Both Stena Line and Irish Ferries have ticket desks in Holyhead terminal."},{"@type":"BreadcrumbList","@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/stena-line-timetable\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/holyhead-dublin.com\/de\/"},{"@type":"ListItem","position":2,"name":"Timetable","item":"https:\/\/holyhead-dublin.com\/de\/timetable\/"},{"@type":"ListItem","position":3,"name":"Stena Line Timetable"}]},{"@type":"WebSite","@id":"https:\/\/holyhead-dublin.com\/de\/#website","url":"https:\/\/holyhead-dublin.com\/de\/","name":"Holyhead Dublin","description":"","publisher":{"@id":"https:\/\/holyhead-dublin.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/holyhead-dublin.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/holyhead-dublin.com\/de\/#organization","name":"Holyhead Dublin","url":"https:\/\/holyhead-dublin.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/holyhead-dublin.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/09\/Holyhead-dublin-logo.svg","contentUrl":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/09\/Holyhead-dublin-logo.svg","width":200,"height":40,"caption":"Holyhead Dublin"},"image":{"@id":"https:\/\/holyhead-dublin.com\/de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages\/741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/comments?post=741"}],"version-history":[{"count":15,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages\/741\/revisions"}],"predecessor-version":[{"id":3641,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages\/741\/revisions\/3641"}],"up":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages\/130"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/media\/1213"}],"wp:attachment":[{"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/media?parent=741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}