{"id":741,"date":"2025-09-29T08:31:12","date_gmt":"2025-09-29T08:31:12","guid":{"rendered":"https:\/\/holyhead-dublin.com\/nl\/?page_id=741"},"modified":"2025-12-12T13:32:09","modified_gmt":"2025-12-12T12:32:09","slug":"stena-line-dienstregeling","status":"publish","type":"page","link":"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/","title":{"rendered":"Stena Line Dienstregeling"},"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\/nl\/\">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 Holyhead-Dublin Dienstregeling<\/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\tStena Line biedt meerdere dagelijkse afvaarten met de Stena Estrid en de Stena Adventurer, waardoor je de hele dag door flexibele reismogelijkheden hebt.\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>Dienstregeling Stena Line 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 Holyhead-vertrekken<\/h2>  \nOf je nu de vertrek- en aankomsttijden van vandaag of morgen zoekt, <a href=\"https:\/\/holyhead-dublin.com\/nl\/stena-line\/\">Stena Line<\/a> vaart elke dag volgens een betrouwbare, vaste dienstregeling tussen Holyhead en Dublin. Alleen op zondagen vaart de ferry niet rond 2 uur \u2019s nachts.\n\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 met enter of spatie, sluit af met escape en navigeer met de pijltoetsen.\">\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\tHolyhead Vertrekken\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\tHolyhead Aankomsten\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\\\/nl\\\/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;Date&quot;,&quot;ui_days&quot;:&quot;Days&quot;,&quot;ui_button&quot;:&quot;Show sailings&quot;,&quot;status_idle&quot;:&quot;Pick a date and click Show sailings&quot;,&quot;status_loading&quot;:&quot;Loading...&quot;,&quot;status_empty&quot;:&quot;No sailings found&quot;,&quot;status_found&quot;:&quot;%d sailings found&quot;,&quot;th_date&quot;:&quot;Date&quot;,&quot;th_dep&quot;:&quot;Departure&quot;,&quot;th_arr&quot;:&quot;Arrival&quot;,&quot;th_dur&quot;:&quot;Duration&quot;,&quot;th_ship&quot;:&quot;Ship&quot;,&quot;th_op&quot;:&quot;Operator&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SUN&quot;,&quot;wd_mon&quot;:&quot;MON&quot;,&quot;wd_tue&quot;:&quot;TUE&quot;,&quot;wd_wed&quot;:&quot;WED&quot;,&quot;wd_thu&quot;:&quot;THU&quot;,&quot;wd_fri&quot;:&quot;FRI&quot;,&quot;wd_sat&quot;:&quot;SAT&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/dublin-swift\\\/&quot;}}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Date<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Date\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Days<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Days\">\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\">Show sailings<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Pick a date and click Show sailings<\/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\">Loading...<\/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\\\/nl\\\/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;Date&quot;,&quot;ui_days&quot;:&quot;Days&quot;,&quot;ui_button&quot;:&quot;Show sailings&quot;,&quot;status_idle&quot;:&quot;Pick a date and click Show sailings&quot;,&quot;status_loading&quot;:&quot;Loading...&quot;,&quot;status_empty&quot;:&quot;No sailings found&quot;,&quot;status_found&quot;:&quot;%d sailings found&quot;,&quot;th_date&quot;:&quot;Date&quot;,&quot;th_dep&quot;:&quot;Departure&quot;,&quot;th_arr&quot;:&quot;Arrival&quot;,&quot;th_dur&quot;:&quot;Duration&quot;,&quot;th_ship&quot;:&quot;Ship&quot;,&quot;th_op&quot;:&quot;Operator&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SUN&quot;,&quot;wd_mon&quot;:&quot;MON&quot;,&quot;wd_tue&quot;:&quot;TUE&quot;,&quot;wd_wed&quot;:&quot;WED&quot;,&quot;wd_thu&quot;:&quot;THU&quot;,&quot;wd_fri&quot;:&quot;FRI&quot;,&quot;wd_sat&quot;:&quot;SAT&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/dublin-swift\\\/&quot;}}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Date<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Date\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Days<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Days\">\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\">Show sailings<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Pick a date and click Show sailings<\/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\">Loading...<\/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;\">Dienstregeling Stena Line 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 Dublin-vertrekken<\/h2><p>Ben je benieuwd hoe laat de ferry in Dublin aankomt, of op welk tijdstip je een vertrek vanuit Dublin kunt boeken? In de onderstaande schema\u2019s vind je deze informatie voor de <strong>Stena Adventurer<\/strong> en <strong>Stena Estrid<\/strong>.<\/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 met enter of spatie, sluit af met escape en navigeer met de pijltoetsen.\">\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\tDublin Vertrekken\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\tDublin Aankomsten\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\\\/nl\\\/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;Date&quot;,&quot;ui_days&quot;:&quot;Days&quot;,&quot;ui_button&quot;:&quot;Show sailings&quot;,&quot;status_idle&quot;:&quot;Pick a date and click Show sailings&quot;,&quot;status_loading&quot;:&quot;Loading...&quot;,&quot;status_empty&quot;:&quot;No sailings found&quot;,&quot;status_found&quot;:&quot;%d sailings found&quot;,&quot;th_date&quot;:&quot;Date&quot;,&quot;th_dep&quot;:&quot;Departure&quot;,&quot;th_arr&quot;:&quot;Arrival&quot;,&quot;th_dur&quot;:&quot;Duration&quot;,&quot;th_ship&quot;:&quot;Ship&quot;,&quot;th_op&quot;:&quot;Operator&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SUN&quot;,&quot;wd_mon&quot;:&quot;MON&quot;,&quot;wd_tue&quot;:&quot;TUE&quot;,&quot;wd_wed&quot;:&quot;WED&quot;,&quot;wd_thu&quot;:&quot;THU&quot;,&quot;wd_fri&quot;:&quot;FRI&quot;,&quot;wd_sat&quot;:&quot;SAT&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/fveerboten\\\/dublin-swift\\\/&quot;}}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Date<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Date\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Days<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Days\">\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\">Show sailings<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Pick a date and click Show sailings<\/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\">Loading...<\/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\\\/nl\\\/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;Date&quot;,&quot;ui_days&quot;:&quot;Days&quot;,&quot;ui_button&quot;:&quot;Show sailings&quot;,&quot;status_idle&quot;:&quot;Pick a date and click Show sailings&quot;,&quot;status_loading&quot;:&quot;Loading...&quot;,&quot;status_empty&quot;:&quot;No sailings found&quot;,&quot;status_found&quot;:&quot;%d sailings found&quot;,&quot;th_date&quot;:&quot;Date&quot;,&quot;th_dep&quot;:&quot;Departure&quot;,&quot;th_arr&quot;:&quot;Arrival&quot;,&quot;th_dur&quot;:&quot;Duration&quot;,&quot;th_ship&quot;:&quot;Ship&quot;,&quot;th_op&quot;:&quot;Operator&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SUN&quot;,&quot;wd_mon&quot;:&quot;MON&quot;,&quot;wd_tue&quot;:&quot;TUE&quot;,&quot;wd_wed&quot;:&quot;WED&quot;,&quot;wd_thu&quot;:&quot;THU&quot;,&quot;wd_fri&quot;:&quot;FRI&quot;,&quot;wd_sat&quot;:&quot;SAT&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/veerboten\\\/dublin-swift\\\/&quot;}}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Date<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Date\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Days<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Days\">\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\">Show sailings<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Pick a date and click Show sailings<\/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\">Loading...<\/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>Over het schema<\/h3><ul><li>De weergegeven dienstregeling toont het reguliere vaarschema van de <a href=\"https:\/\/holyhead-dublin.com\/nl\/veerboten\/stena-estrid\/\">Stena Estrid<\/a> en de <a href=\"https:\/\/holyhead-dublin.com\/nl\/veerboten\/stena-adventurer\/\">Stena Adventurer<\/a>. De daadwerkelijke aankomst- en vertrektijden kunnen vari\u00ebren.<\/li><li>Naast Stena Line vaart Irish Ferries met drie schepen op de route tussen Wales en Ierland. Deze vind je ook in de <a href=\"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/\">Holyhead\u2013Dublin dienstregeling<\/a> met alle ferries.<\/li><li>Als er geen resultaten in de dienstregeling worden weergegeven, betekent dit meestal dat het schema voor die periode nog niet is gepubliceerd, wat kan gebeuren wanneer Stena Line het nieuwe seizoen nog plant.<\/li><li><strong>Afvaarten kunnen soms worden geannuleerd<\/strong> door technische problemen of slecht weer. Je vindt hierover meer informatie op onze pagina met vaartupdates.<\/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\">Wijzigingen in de vaarschema\u2019s<\/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 exploiteert grote cruiseferries die vaak blijven varen, zelfs tijdens stormen. Als de omstandigheden echter niet langer veilig zijn of er schade is, wordt de afvaart geannuleerd. Dit geldt ook bij technische problemen of andere verstoringen.<\/p><ul><li><a href=\"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/vaar-updates\/\"><strong>Laatste vaartupdates<\/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 tijd voor inchecken bij Stena Line<\/h3>  \nHet is belangrijk om voldoende tijd te nemen wanneer je met Stena Line reist. Vooral tijdens drukke periodes kunnen vertragingen ontstaan door wachtrijen bij het inchecken of de douane. De meest recente incheckdeadlines voor de Stena Line-route Holyhead\u2013Dublin vind je hier:\n\n<ul>\n \t<li><a href=\"https:\/\/holyhead-dublin.com\/nl\/stena-line\/#checkin\">Stena Line inchecktijden<\/a><\/li>\n<\/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-2c3119ed e-flex e-con-boxed e-con e-parent\" data-id=\"2c3119ed\" 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-30a6694d elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"30a6694d\" 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\/nl\/dienstregeling\/\" tabindex=\"-1\"><img fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/12\/Holyhead-port-ferries-departing-soon-300x200.jpg\" class=\"attachment-medium size-medium wp-image-3573\" alt=\"\" srcset=\"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/12\/Holyhead-port-ferries-departing-soon-300x200.jpg 300w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/12\/Holyhead-port-ferries-departing-soon-1024x683.jpg 1024w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/12\/Holyhead-port-ferries-departing-soon-768x512.jpg 768w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/12\/Holyhead-port-ferries-departing-soon.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\/nl\/dienstregeling\/\">Dienstregeling<\/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-10a5e703 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"10a5e703\" 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\/nl\/dienstregeling\/irish-ferries-dienstregeling\/\" tabindex=\"-1\"><img decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/irish-ferries-desks-holyhead-terminal-building-300x200.jpg\" class=\"attachment-medium size-medium wp-image-1705\" alt=\"Irish Ferries terminal entrance\" srcset=\"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/irish-ferries-desks-holyhead-terminal-building-300x200.jpg 300w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/irish-ferries-desks-holyhead-terminal-building-1024x683.jpg 1024w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/irish-ferries-desks-holyhead-terminal-building-768x512.jpg 768w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/irish-ferries-desks-holyhead-terminal-building.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\/nl\/dienstregeling\/irish-ferries-dienstregeling\/\">Irish Ferries Dienstregeling<\/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-931e0d7 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"931e0d7\" 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\/nl\/live-locatie\/\" tabindex=\"-1\"><img decoding=\"async\" width=\"300\" height=\"212\" src=\"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/live-vessel-location-300x212.jpg\" class=\"attachment-medium size-medium wp-image-1193\" alt=\"Realtime vessel position map\" srcset=\"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/live-vessel-location-300x212.jpg 300w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/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\/nl\/live-locatie\/\">Live ferry locaties<\/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-6624a02e elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"6624a02e\" 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\/nl\/holyhead-port\/\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/Map-of-Holyhead-300x200.jpg\" class=\"attachment-medium size-medium wp-image-1299\" alt=\"Map with legend of Holyhead area\" srcset=\"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/Map-of-Holyhead-300x200.jpg 300w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/Map-of-Holyhead-1024x683.jpg 1024w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/Map-of-Holyhead-768x512.jpg 768w, https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/Map-of-Holyhead.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\/nl\/holyhead-port\/\">Holyhead Terminal<\/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 Holyhead-Dublin Dienstregeling Stena Line biedt meerdere dagelijkse afvaarten met de Stena Estrid en de Stena Adventurer, waardoor je [&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 v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Stena Line Holyhead\u2013Dublin dienstregeling<\/title>\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\/nl\/dienstregeling\/stena-line-dienstregeling\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stena Line Holyhead\u2013Dublin dienstregeling\" \/>\n<meta property=\"og:description\" content=\"Stena Line Holyhead-Dublin Dienstregeling Stena Line biedt meerdere dagelijkse afvaarten met de Stena Estrid en de Stena Adventurer, waardoor je [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/\" \/>\n<meta property=\"og:site_name\" content=\"Holyhead Dublin\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-12T12:32:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/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=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/dienstregeling\\\/stena-line-dienstregeling\\\/\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/dienstregeling\\\/stena-line-dienstregeling\\\/\",\"name\":\"Stena Line Holyhead\u2013Dublin dienstregeling\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/dienstregeling\\\/stena-line-dienstregeling\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/dienstregeling\\\/stena-line-dienstregeling\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/wp-content\\\/uploads\\\/sites\\\/6\\\/2025\\\/10\\\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\",\"datePublished\":\"2025-09-29T08:31:12+00:00\",\"dateModified\":\"2025-12-12T12:32:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/dienstregeling\\\/stena-line-dienstregeling\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/dienstregeling\\\/stena-line-dienstregeling\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/dienstregeling\\\/stena-line-dienstregeling\\\/#primaryimage\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/wp-content\\\/uploads\\\/sites\\\/6\\\/2025\\\/10\\\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\",\"contentUrl\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/wp-content\\\/uploads\\\/sites\\\/6\\\/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\\\/nl\\\/dienstregeling\\\/stena-line-dienstregeling\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dienstregeling\",\"item\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/dienstregeling\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Stena Line Dienstregeling\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/#website\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/\",\"name\":\"Holyhead Dublin\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/#organization\",\"name\":\"Holyhead Dublin\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/wp-content\\\/uploads\\\/sites\\\/6\\\/2025\\\/09\\\/Holyhead-dublin-logo.svg\",\"contentUrl\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/wp-content\\\/uploads\\\/sites\\\/6\\\/2025\\\/09\\\/Holyhead-dublin-logo.svg\",\"width\":200,\"height\":40,\"caption\":\"Holyhead Dublin\"},\"image\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/nl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Stena Line Holyhead\u2013Dublin dienstregeling","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\/nl\/dienstregeling\/stena-line-dienstregeling\/","og_locale":"nl_NL","og_type":"article","og_title":"Stena Line Holyhead\u2013Dublin dienstregeling","og_description":"Stena Line Holyhead-Dublin Dienstregeling Stena Line biedt meerdere dagelijkse afvaarten met de Stena Estrid en de Stena Adventurer, waardoor je [&hellip;]","og_url":"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/","og_site_name":"Holyhead Dublin","article_modified_time":"2025-12-12T12:32:09+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"4 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/","url":"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/","name":"Stena Line Holyhead\u2013Dublin dienstregeling","isPartOf":{"@id":"https:\/\/holyhead-dublin.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/#primaryimage"},"image":{"@id":"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/#primaryimage"},"thumbnailUrl":"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","datePublished":"2025-09-29T08:31:12+00:00","dateModified":"2025-12-12T12:32:09+00:00","breadcrumb":{"@id":"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/stena-line-dienstregeling\/#primaryimage","url":"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","contentUrl":"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/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\/nl\/dienstregeling\/stena-line-dienstregeling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/holyhead-dublin.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Dienstregeling","item":"https:\/\/holyhead-dublin.com\/nl\/dienstregeling\/"},{"@type":"ListItem","position":3,"name":"Stena Line Dienstregeling"}]},{"@type":"WebSite","@id":"https:\/\/holyhead-dublin.com\/nl\/#website","url":"https:\/\/holyhead-dublin.com\/nl\/","name":"Holyhead Dublin","description":"","publisher":{"@id":"https:\/\/holyhead-dublin.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/holyhead-dublin.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/holyhead-dublin.com\/nl\/#organization","name":"Holyhead Dublin","url":"https:\/\/holyhead-dublin.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/holyhead-dublin.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/09\/Holyhead-dublin-logo.svg","contentUrl":"https:\/\/holyhead-dublin.com\/nl\/wp-content\/uploads\/sites\/6\/2025\/09\/Holyhead-dublin-logo.svg","width":200,"height":40,"caption":"Holyhead Dublin"},"image":{"@id":"https:\/\/holyhead-dublin.com\/nl\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/pages\/741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/comments?post=741"}],"version-history":[{"count":26,"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/pages\/741\/revisions"}],"predecessor-version":[{"id":3823,"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/pages\/741\/revisions\/3823"}],"up":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/pages\/130"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/media\/1213"}],"wp:attachment":[{"href":"https:\/\/holyhead-dublin.com\/nl\/wp-json\/wp\/v2\/media?parent=741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}