{"id":7261,"date":"2024-06-10T11:54:03","date_gmt":"2024-06-10T11:54:03","guid":{"rendered":"https:\/\/calais-dover.com\/?page_id=7261"},"modified":"2026-06-09T14:50:05","modified_gmt":"2026-06-09T14:50:05","slug":"orari","status":"publish","type":"page","link":"https:\/\/calais-dover.com\/it\/orari\/","title":{"rendered":"Orari traghetti Calais Dover"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7261\" class=\"elementor elementor-7261 elementor-2131\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d4469b5 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"d4469b5\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-40c0361\" data-id=\"40c0361\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0b41b1c elementor-widget elementor-widget-shortcode\" data-id=\"0b41b1c\" 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\"><style>.elementor-7146 .elementor-element.elementor-element-423f2b81:not(.elementor-motion-effects-element-type-background), .elementor-7146 .elementor-element.elementor-element-423f2b81 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:transparent;background-image:linear-gradient(360deg, #004080 25%, #00314E 7%);}.elementor-7146 .elementor-element.elementor-element-423f2b81 > .elementor-background-overlay{opacity:0.5;transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-7146 .elementor-element.elementor-element-423f2b81{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin-top:0px;margin-bottom:20px;padding:0px 0px 25px 0px;}.elementor-7146 .elementor-element.elementor-element-423f2b81 > .elementor-shape-bottom svg{width:calc(122% + 1.3px);height:116px;transform:translateX(-50%) rotateY(180deg);}.elementor-7146 .elementor-element.elementor-element-423f2b81 > .elementor-shape-bottom{z-index:2;pointer-events:none;}.elementor-7146 .elementor-element.elementor-element-31ad79cb > .elementor-element-populated{margin:0px 0px 0px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;padding:0px 0px 0px 0px;}.elementor-7146 .elementor-element.elementor-element-6eea55ed{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin-top:0px;margin-bottom:0px;}.elementor-7146 .elementor-element.elementor-element-6eea55ed > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-7146 .elementor-element.elementor-element-3229f6d{font-family:\"Lato\", Sans-serif;color:#FFFFFF;width:auto;max-width:auto;align-self:center;}.elementor-7146 .elementor-element.elementor-element-3229f6d a{color:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-3229f6d > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-7146 .elementor-element.elementor-element-1ba9652{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin-top:-30px;margin-bottom:20px;}.elementor-7146 .elementor-element.elementor-element-1ba9652 > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-7146 .elementor-element.elementor-element-4b26ae39.elementor-column > .elementor-widget-wrap{justify-content:flex-end;}.elementor-7146 .elementor-element.elementor-element-4b26ae39 > .elementor-element-populated{margin:15px 0px -15px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu .elementor-item{font-family:\"Lato\", Sans-serif;font-size:16px;font-weight:bold;text-decoration:none;letter-spacing:-0.2px;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--main .elementor-item{color:#FFFFFF;fill:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown a, .elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-menu-toggle{color:#00314E;fill:#00314E;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown a:hover,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown a:focus,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown a.elementor-item-active,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown a.highlighted,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-menu-toggle:hover,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-menu-toggle:focus{color:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown a:hover,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown a:focus,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown a.elementor-item-active,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown a.highlighted{background-color:#46A492;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown .elementor-item, .elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-nav-menu--dropdown  .elementor-sub-item{font-family:\"Lato\", Sans-serif;font-size:15px;font-weight:600;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee div.elementor-menu-toggle{color:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee div.elementor-menu-toggle svg{fill:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee .elementor-menu-toggle{background-color:#46A492;}.elementor-7146 .elementor-element.elementor-element-1e1a87ee > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;border-radius:45px 45px 45px 45px;}.elementor-7146 .elementor-element.elementor-element-33bb81fb > .elementor-container > .elementor-column > .elementor-widget-wrap{align-content:center;align-items:center;}.elementor-7146 .elementor-element.elementor-element-33bb81fb:not(.elementor-motion-effects-element-type-background), .elementor-7146 .elementor-element.elementor-element-33bb81fb > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-33bb81fb, .elementor-7146 .elementor-element.elementor-element-33bb81fb > .elementor-background-overlay{border-radius:45px 45px 45px 45px;}.elementor-7146 .elementor-element.elementor-element-33bb81fb{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin-top:0px;margin-bottom:25px;padding:0px 0px 0px 0px;}.elementor-7146 .elementor-element.elementor-element-33bb81fb > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-7146 .elementor-element.elementor-element-1227fe4e{text-align:start;}.elementor-7146 .elementor-element.elementor-element-1227fe4e > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-7146 .elementor-element.elementor-element-621c7374.elementor-column > .elementor-widget-wrap{justify-content:flex-end;}.elementor-7146 .elementor-element.elementor-element-621c7374 > .elementor-element-populated{margin:0px 0px 0px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu .elementor-item{font-family:\"Lato\", Sans-serif;font-size:16px;font-weight:bold;text-decoration:none;letter-spacing:-0.2px;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--main .elementor-item{color:#00314E;fill:#00314E;padding-left:20px;padding-right:20px;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown a, .elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-menu-toggle{color:#00314E;fill:#00314E;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown a:hover,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown a:focus,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown a.elementor-item-active,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown a.highlighted,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-menu-toggle:hover,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-menu-toggle:focus{color:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown a:hover,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown a:focus,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown a.elementor-item-active,\n\t\t\t\t\t.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown a.highlighted{background-color:#46A492;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown .elementor-item, .elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown  .elementor-sub-item{font-family:\"Lato\", Sans-serif;font-size:15px;font-weight:600;text-decoration:none;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown{border-radius:15px 15px 15px 15px;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown li:first-child a{border-top-left-radius:15px;border-top-right-radius:15px;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown li:last-child a{border-bottom-right-radius:15px;border-bottom-left-radius:15px;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--main .elementor-nav-menu--dropdown, .elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu__container.elementor-nav-menu--dropdown{box-shadow:0px 0px 10px 0px rgba(0, 0, 0, 0.11);}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-nav-menu--dropdown li:not(:last-child){border-style:none;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 div.elementor-menu-toggle{color:#000000;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 div.elementor-menu-toggle svg{fill:#000000;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 .elementor-menu-toggle{background-color:#FF7575;}.elementor-7146 .elementor-element.elementor-element-1f94cf51 > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;border-radius:45px 45px 45px 45px;}.elementor-7146 .elementor-element.elementor-element-3d591291{font-family:\"Lato\", Sans-serif;color:#FFFFFF;width:auto;max-width:auto;align-self:center;}.elementor-7146 .elementor-element.elementor-element-3d591291 a{color:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-49ed7fdb .elementor-heading-title{font-family:\"Open Sans\", Sans-serif;font-size:60px;color:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-49ed7fdb > .elementor-widget-container{margin:15px 0px -15px 0px;padding:5px 5px 0px 0px;}.elementor-7146 .elementor-element.elementor-element-3136c62d .elementor-widget-container{font-family:\"Open Sans\", Sans-serif;font-size:21px;font-weight:600;color:#FFFFFF;}.elementor-7146 .elementor-element.elementor-element-3136c62d > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 5px 5px 5px;}.elementor-7146 .elementor-element.elementor-element-2d3ae21a{width:var( --container-widget-width, 26.019% );max-width:26.019%;--container-widget-width:26.019%;--container-widget-flex-grow:0;top:161px;}body:not(.rtl) .elementor-7146 .elementor-element.elementor-element-2d3ae21a{left:831px;}body.rtl .elementor-7146 .elementor-element.elementor-element-2d3ae21a{right:831px;}.elementor-7146 .elementor-element.elementor-element-3af27836{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin-top:10px;margin-bottom:-30px;padding:0px 0px 0px 0px;}.elementor-7146 .elementor-element.elementor-element-3af27836 > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-7146 .elementor-element.elementor-element-7515cd67 > .elementor-element-populated, .elementor-7146 .elementor-element.elementor-element-7515cd67 > .elementor-element-populated > .elementor-background-overlay, .elementor-7146 .elementor-element.elementor-element-7515cd67 > .elementor-background-slideshow{border-radius:0px 0px 0px 0px;}.elementor-7146 .elementor-element.elementor-element-553c0dda > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;background-color:#004080;border-radius:5px 5px 0px 0px;}.elementor-7146 .elementor-element.elementor-element-553c0dda{width:var( --container-widget-width, 101.91% );max-width:101.91%;--container-widget-width:101.91%;--container-widget-flex-grow:0;}.elementor-7146 .elementor-element.elementor-element-75655d26 > .elementor-element-populated{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin:130px 0px 0px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-7146 .elementor-element.elementor-element-75655d26 > .elementor-element-populated > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-7146 .elementor-element.elementor-element-75655d26{z-index:1;}.elementor-7146 .elementor-element.elementor-element-273fc3d4 img{border-radius:40px 40px 40px 40px;}.elementor-7146 .elementor-element.elementor-element-273fc3d4 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7146 .elementor-element.elementor-element-273fc3d4{width:auto;max-width:auto;}.elementor-7146 .elementor-element.elementor-element-7082d301 img{border-radius:40px 40px 40px 40px;}.elementor-7146 .elementor-element.elementor-element-7082d301 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7146 .elementor-element.elementor-element-7082d301{width:auto;max-width:auto;}.elementor-7146 .elementor-element.elementor-element-340dbc48 img{border-radius:40px 40px 40px 40px;}.elementor-7146 .elementor-element.elementor-element-340dbc48 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7146 .elementor-element.elementor-element-340dbc48{width:auto;max-width:auto;}.elementor-7146 .elementor-element.elementor-element-5ae6b6a0 img{border-radius:40px 40px 40px 40px;}.elementor-7146 .elementor-element.elementor-element-5ae6b6a0 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7146 .elementor-element.elementor-element-5ae6b6a0{width:auto;max-width:auto;}.elementor-7146 .elementor-element.elementor-element-4988a3ba img{border-radius:40px 40px 40px 40px;}.elementor-7146 .elementor-element.elementor-element-4988a3ba > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7146 .elementor-element.elementor-element-4988a3ba{width:auto;max-width:auto;}@media(max-width:1024px){.elementor-7146 .elementor-element.elementor-element-2d3ae21a{width:var( --container-widget-width, 738px );max-width:738px;--container-widget-width:738px;--container-widget-flex-grow:0;}}@media(min-width:768px){.elementor-7146 .elementor-element.elementor-element-a06c9eb{width:10%;}.elementor-7146 .elementor-element.elementor-element-621c7374{width:90%;}.elementor-7146 .elementor-element.elementor-element-7515cd67{width:71.939%;}.elementor-7146 .elementor-element.elementor-element-75655d26{width:27.967%;}}@media(max-width:767px){.elementor-7146 .elementor-element.elementor-element-3d591291 > .elementor-widget-container{margin:0px 0px 0px 10px;}.elementor-7146 .elementor-element.elementor-element-3d591291{width:var( --container-widget-width, 338.156px );max-width:338.156px;--container-widget-width:338.156px;--container-widget-flex-grow:0;}.elementor-7146 .elementor-element.elementor-element-49ed7fdb .elementor-heading-title{font-size:50px;}.elementor-7146 .elementor-element.elementor-element-49ed7fdb > .elementor-widget-container{margin:15px 0px -15px 5px;}.elementor-7146 .elementor-element.elementor-element-3136c62d > .elementor-widget-container{margin:0px 0px 0px 5px;}.elementor-7146 .elementor-element.elementor-element-553c0dda > .elementor-widget-container{margin:0px 0px 0px 0px;}}<\/style>\t\t<div data-elementor-type=\"section\" data-elementor-id=\"7146\" class=\"elementor elementor-7146\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-423f2b81 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"423f2b81\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;,&quot;shape_divider_bottom_negative&quot;:&quot;yes&quot;,&quot;shape_divider_bottom&quot;:&quot;curve-asymmetrical&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t<div class=\"elementor-shape elementor-shape-bottom\" aria-hidden=\"true\" data-negative=\"true\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" d=\"M615.2,96.7C240.2,97.8,0,18.9,0,0v100h1000V0C1000,19.2,989.8,96,615.2,96.7z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-31ad79cb\" data-id=\"31ad79cb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-6eea55ed elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6eea55ed\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-990bab9\" data-id=\"990bab9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3229f6d elementor-widget__width-auto elementor-hidden-mobile elementor-widget elementor-widget-breadcrumbs\" data-id=\"3229f6d\" 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:\/\/calais-dover.com\/it\/home\/\">Calais-Dover.com<\/a><\/span><\/span><\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-1ba9652 elementor-hidden-desktop elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1ba9652\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-4b26ae39\" data-id=\"4b26ae39\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1e1a87ee elementor-nav-menu--dropdown-mobile elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu\" data-id=\"1e1a87ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;layout&quot;:&quot;horizontal&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;i class=\\&quot;fas fa-caret-down\\&quot; aria-hidden=\\&quot;true\\&quot;&gt;&lt;\\\/i&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}\" data-widget_type=\"nav-menu.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<nav aria-label=\"Menu\" class=\"elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-none\">\n\t\t\t\t<ul id=\"menu-1-1e1a87ee\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-3921\"><a href=\"\/it\/\" class=\"elementor-item\">Home<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7271\"><a href=\"https:\/\/calais-dover.com\/it\/orari\/\" class=\"elementor-item\">Orari<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7191\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Servizi di traghetto<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7192\"><a href=\"https:\/\/calais-dover.com\/it\/p-o-ferries\/\" class=\"elementor-sub-item\">P&#038;O Ferries<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7222\"><a href=\"https:\/\/calais-dover.com\/it\/dfds\/\" class=\"elementor-sub-item\">DFDS<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7245\"><a href=\"https:\/\/calais-dover.com\/it\/irish-ferries\/\" class=\"elementor-sub-item\">Irish Ferries<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7281\"><a href=\"https:\/\/calais-dover.com\/it\/conrontare\/\" class=\"elementor-sub-item\">Confronta i fornitori<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-3919\"><a href=\"https:\/\/calais-dover.com\/it\/tunnel-della-manica\/\" class=\"elementor-item\">Tunnel della Manica<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7303\"><a href=\"https:\/\/calais-dover.com\/it\/prezzi\/\" class=\"elementor-item\">Prezzi<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7202\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Come viaggi?<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7349\"><a href=\"https:\/\/calais-dover.com\/it\/calais-dover-in-macchina\/\" class=\"elementor-sub-item\">Macchina<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7357\"><a href=\"https:\/\/calais-dover.com\/it\/carovana\/\" class=\"elementor-sub-item\">Carovana<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7368\"><a href=\"https:\/\/calais-dover.com\/it\/passeggero-a-piedi\/\" class=\"elementor-sub-item\">Passeggero a piedi<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7203\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Preparazione<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7377\"><a href=\"https:\/\/calais-dover.com\/it\/meteo-e-webcam\/\" class=\"elementor-sub-item\">Meteo e webcam<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7383\"><a href=\"https:\/\/calais-dover.com\/it\/guidare-in-inghilterra\/\" class=\"elementor-sub-item\">Guidare in Inghilterra<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7384\"><a href=\"#\" class=\"elementor-sub-item elementor-item-anchor\">Informazioni sul porto<\/a>\n\t<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7394\"><a href=\"https:\/\/calais-dover.com\/it\/porto-di-calais\/\" class=\"elementor-sub-item\">Porto di Calais<\/a><\/li>\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7397\"><a href=\"https:\/\/calais-dover.com\/it\/porto-di-dover\/\" class=\"elementor-sub-item\">Porto di Dover<\/a><\/li>\n\t<\/ul>\n<\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7409\"><a href=\"https:\/\/calais-dover.com\/it\/parcheggio-a-calais\/\" class=\"elementor-sub-item\">Parcheggio a Calais<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t<div class=\"elementor-menu-toggle\" role=\"button\" tabindex=\"0\" aria-label=\"Menu di commutazione\" aria-expanded=\"false\">\n\t\t\t<i aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--open eicon-menu-bar\"><\/i><i aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--close eicon-close\"><\/i>\t\t<\/div>\n\t\t\t\t\t<nav class=\"elementor-nav-menu--dropdown elementor-nav-menu__container\" aria-hidden=\"true\">\n\t\t\t\t<ul id=\"menu-2-1e1a87ee\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-3921\"><a href=\"\/it\/\" class=\"elementor-item\" tabindex=\"-1\">Home<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7271\"><a href=\"https:\/\/calais-dover.com\/it\/orari\/\" class=\"elementor-item\" tabindex=\"-1\">Orari<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7191\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Servizi di traghetto<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7192\"><a href=\"https:\/\/calais-dover.com\/it\/p-o-ferries\/\" class=\"elementor-sub-item\" tabindex=\"-1\">P&#038;O Ferries<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7222\"><a href=\"https:\/\/calais-dover.com\/it\/dfds\/\" class=\"elementor-sub-item\" tabindex=\"-1\">DFDS<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7245\"><a href=\"https:\/\/calais-dover.com\/it\/irish-ferries\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Irish Ferries<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7281\"><a href=\"https:\/\/calais-dover.com\/it\/conrontare\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Confronta i fornitori<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-3919\"><a href=\"https:\/\/calais-dover.com\/it\/tunnel-della-manica\/\" class=\"elementor-item\" tabindex=\"-1\">Tunnel della Manica<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7303\"><a href=\"https:\/\/calais-dover.com\/it\/prezzi\/\" class=\"elementor-item\" tabindex=\"-1\">Prezzi<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7202\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Come viaggi?<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7349\"><a href=\"https:\/\/calais-dover.com\/it\/calais-dover-in-macchina\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Macchina<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7357\"><a href=\"https:\/\/calais-dover.com\/it\/carovana\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Carovana<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7368\"><a href=\"https:\/\/calais-dover.com\/it\/passeggero-a-piedi\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Passeggero a piedi<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7203\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Preparazione<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7377\"><a href=\"https:\/\/calais-dover.com\/it\/meteo-e-webcam\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Meteo e webcam<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7383\"><a href=\"https:\/\/calais-dover.com\/it\/guidare-in-inghilterra\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Guidare in Inghilterra<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7384\"><a href=\"#\" class=\"elementor-sub-item elementor-item-anchor\" tabindex=\"-1\">Informazioni sul porto<\/a>\n\t<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7394\"><a href=\"https:\/\/calais-dover.com\/it\/porto-di-calais\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Porto di Calais<\/a><\/li>\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7397\"><a href=\"https:\/\/calais-dover.com\/it\/porto-di-dover\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Porto di Dover<\/a><\/li>\n\t<\/ul>\n<\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7409\"><a href=\"https:\/\/calais-dover.com\/it\/parcheggio-a-calais\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Parcheggio a Calais<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-33bb81fb elementor-hidden-tablet elementor-hidden-mobile elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"33bb81fb\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-a06c9eb\" data-id=\"a06c9eb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1227fe4e elementor-widget elementor-widget-image\" data-id=\"1227fe4e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/calais-dover.com\/it\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/calais-dover-logo-icon-qox8iktzanynb41rdptpip5o45coefnly6lw14whkk.png\" title=\"calais-dover-logo-icon.png\" alt=\"calais-dover-logo-icon.png\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-621c7374\" data-id=\"621c7374\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1f94cf51 elementor-nav-menu--dropdown-mobile elementor-nav-menu__align-start elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu\" data-id=\"1f94cf51\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;layout&quot;:&quot;horizontal&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;i class=\\&quot;fas fa-caret-down\\&quot; aria-hidden=\\&quot;true\\&quot;&gt;&lt;\\\/i&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}\" data-widget_type=\"nav-menu.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<nav aria-label=\"Menu\" class=\"elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-none\">\n\t\t\t\t<ul id=\"menu-1-1f94cf51\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-3921\"><a href=\"\/it\/\" class=\"elementor-item\">Home<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7271\"><a href=\"https:\/\/calais-dover.com\/it\/orari\/\" class=\"elementor-item\">Orari<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7191\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Servizi di traghetto<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7192\"><a href=\"https:\/\/calais-dover.com\/it\/p-o-ferries\/\" class=\"elementor-sub-item\">P&#038;O Ferries<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7222\"><a href=\"https:\/\/calais-dover.com\/it\/dfds\/\" class=\"elementor-sub-item\">DFDS<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7245\"><a href=\"https:\/\/calais-dover.com\/it\/irish-ferries\/\" class=\"elementor-sub-item\">Irish Ferries<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7281\"><a href=\"https:\/\/calais-dover.com\/it\/conrontare\/\" class=\"elementor-sub-item\">Confronta i fornitori<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-3919\"><a href=\"https:\/\/calais-dover.com\/it\/tunnel-della-manica\/\" class=\"elementor-item\">Tunnel della Manica<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7303\"><a href=\"https:\/\/calais-dover.com\/it\/prezzi\/\" class=\"elementor-item\">Prezzi<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7202\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Come viaggi?<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7349\"><a href=\"https:\/\/calais-dover.com\/it\/calais-dover-in-macchina\/\" class=\"elementor-sub-item\">Macchina<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7357\"><a href=\"https:\/\/calais-dover.com\/it\/carovana\/\" class=\"elementor-sub-item\">Carovana<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7368\"><a href=\"https:\/\/calais-dover.com\/it\/passeggero-a-piedi\/\" class=\"elementor-sub-item\">Passeggero a piedi<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7203\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Preparazione<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7377\"><a href=\"https:\/\/calais-dover.com\/it\/meteo-e-webcam\/\" class=\"elementor-sub-item\">Meteo e webcam<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7383\"><a href=\"https:\/\/calais-dover.com\/it\/guidare-in-inghilterra\/\" class=\"elementor-sub-item\">Guidare in Inghilterra<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7384\"><a href=\"#\" class=\"elementor-sub-item elementor-item-anchor\">Informazioni sul porto<\/a>\n\t<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7394\"><a href=\"https:\/\/calais-dover.com\/it\/porto-di-calais\/\" class=\"elementor-sub-item\">Porto di Calais<\/a><\/li>\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7397\"><a href=\"https:\/\/calais-dover.com\/it\/porto-di-dover\/\" class=\"elementor-sub-item\">Porto di Dover<\/a><\/li>\n\t<\/ul>\n<\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7409\"><a href=\"https:\/\/calais-dover.com\/it\/parcheggio-a-calais\/\" class=\"elementor-sub-item\">Parcheggio a Calais<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t<div class=\"elementor-menu-toggle\" role=\"button\" tabindex=\"0\" aria-label=\"Menu di commutazione\" aria-expanded=\"false\">\n\t\t\t<i aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--open eicon-menu-bar\"><\/i><i aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--close eicon-close\"><\/i>\t\t<\/div>\n\t\t\t\t\t<nav class=\"elementor-nav-menu--dropdown elementor-nav-menu__container\" aria-hidden=\"true\">\n\t\t\t\t<ul id=\"menu-2-1f94cf51\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-3921\"><a href=\"\/it\/\" class=\"elementor-item\" tabindex=\"-1\">Home<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7271\"><a href=\"https:\/\/calais-dover.com\/it\/orari\/\" class=\"elementor-item\" tabindex=\"-1\">Orari<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7191\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Servizi di traghetto<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7192\"><a href=\"https:\/\/calais-dover.com\/it\/p-o-ferries\/\" class=\"elementor-sub-item\" tabindex=\"-1\">P&#038;O Ferries<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7222\"><a href=\"https:\/\/calais-dover.com\/it\/dfds\/\" class=\"elementor-sub-item\" tabindex=\"-1\">DFDS<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7245\"><a href=\"https:\/\/calais-dover.com\/it\/irish-ferries\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Irish Ferries<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7281\"><a href=\"https:\/\/calais-dover.com\/it\/conrontare\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Confronta i fornitori<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-3919\"><a href=\"https:\/\/calais-dover.com\/it\/tunnel-della-manica\/\" class=\"elementor-item\" tabindex=\"-1\">Tunnel della Manica<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7303\"><a href=\"https:\/\/calais-dover.com\/it\/prezzi\/\" class=\"elementor-item\" tabindex=\"-1\">Prezzi<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7202\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Come viaggi?<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7349\"><a href=\"https:\/\/calais-dover.com\/it\/calais-dover-in-macchina\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Macchina<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7357\"><a href=\"https:\/\/calais-dover.com\/it\/carovana\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Carovana<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7368\"><a href=\"https:\/\/calais-dover.com\/it\/passeggero-a-piedi\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Passeggero a piedi<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7203\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Preparazione<\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7377\"><a href=\"https:\/\/calais-dover.com\/it\/meteo-e-webcam\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Meteo e webcam<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7383\"><a href=\"https:\/\/calais-dover.com\/it\/guidare-in-inghilterra\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Guidare in Inghilterra<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-7384\"><a href=\"#\" class=\"elementor-sub-item elementor-item-anchor\" tabindex=\"-1\">Informazioni sul porto<\/a>\n\t<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7394\"><a href=\"https:\/\/calais-dover.com\/it\/porto-di-calais\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Porto di Calais<\/a><\/li>\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7397\"><a href=\"https:\/\/calais-dover.com\/it\/porto-di-dover\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Porto di Dover<\/a><\/li>\n\t<\/ul>\n<\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-7409\"><a href=\"https:\/\/calais-dover.com\/it\/parcheggio-a-calais\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Parcheggio a Calais<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d591291 elementor-widget__width-auto elementor-hidden-desktop elementor-hidden-tablet elementor-widget-mobile__width-initial elementor-widget elementor-widget-breadcrumbs\" data-id=\"3d591291\" 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:\/\/calais-dover.com\/it\/home\/\">Calais-Dover.com<\/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-3136c62d elementor-widget elementor-widget-theme-post-excerpt\" data-id=\"3136c62d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-post-excerpt.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\tPartenze per giorno di viaggio, durata della traversata e orari P&amp;O, DFDS e Irish Ferries.\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d3ae21a elementor-absolute elementor-widget__width-initial elementor-widget-tablet__width-initial elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"2d3ae21a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/Zonder-titel-300-x-130-px-300-x-200-px-1.png\" title=\"La neve\" alt=\"La neve\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-3af27836 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3af27836\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-7515cd67\" data-id=\"7515cd67\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-553c0dda elementor-widget__width-initial elementor-widget elementor-widget-shortcode\" data-id=\"553c0dda\" 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 id=\"bookingmodule\"><iframe id=\"dealFinder\" marginwidth=\"0\" frameborder=\"0\" scrolling=\"no\" height=\"100%\" marginheight=\"0\" style=\"width:100%;\" src=\"https:\/\/wiz.directferries.com\/partners\/deal_finder_iframe.aspx?stdc=F5663IT&cult=it-IT&oprt=Dover&btn=46a492&btnh=168b16&btnt=FFFFFF&tclr=000001&lclr=FFFFFF&lbld=700&pclr=FFFFFF&sclr=64b6e6&targ=1\" style=\"z-index:1\"><\/iframe><\/div><\/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<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-75655d26 elementor-hidden-mobile\" data-id=\"75655d26\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-273fc3d4 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"273fc3d4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/po-ferries-logo-qp9h66ar5c5hiu7i4264m6f30x4nbqwqzv454je7w4.jpg\" title=\"po-ferries-logo.jpg\" alt=\"po-ferries-logo.jpg\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-7082d301 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"7082d301\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/dfds-logo-qp9h678lc66rug64ykkr6o6jmb00jg0hbzrmltctpw.jpg\" title=\"dfds-logo.jpg\" alt=\"dfds-logo.jpg\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-340dbc48 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"340dbc48\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/irish-ferries-logo-qp9h6949pu9cho3enle0bnpgt2qqyu7y092lkda1dg.jpg\" title=\"irish-ferries-logo.jpg\" alt=\"irish-ferries-logo.jpg\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-5ae6b6a0 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"5ae6b6a0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/le-shutle-qwlordcicbh9a64k6rz0xe3le2cspdfwbmlp1q0778.jpg\" title=\"le shutle\" alt=\"le shutle\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-4988a3ba elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"4988a3ba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/Eurostar-logo-qp9h6cvmh6ehs3xy1n0ilmrb6m87tmmvcrojhh4gok.jpg\" title=\"Eurostar-logo.jpg\" alt=\"Eurostar-logo.jpg\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t<\/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<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7b35492 elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7b35492\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-f978a73\" data-id=\"f978a73\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b7717da elementor-widget elementor-widget-text-editor\" data-id=\"b7717da\" 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>Consulta gli orari dei traghetti Calais Dover per giorno di viaggio. Su questa rotta operano P&amp;O Ferries, DFDS e Irish Ferries, con collegamenti frequenti tra Francia e Inghilterra.<\/p>\n\n<p>Le tabelle mostrano le partenze da Calais a Dover e da Dover a Calais. Puoi controllare orario di partenza, arrivo previsto, durata, nave e operatore. \u00c8 incluso anche l\u2019Eurotunnel tra Calais\/Coquelles e Folkestone, utile se vuoi confrontare traghetto e tunnel.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-c977ea8\" data-id=\"c977ea8\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b934ed8 elementor-hidden-mobile elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"b934ed8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<i aria-hidden=\"true\" class=\"far fa-calendar-alt\"><\/i>\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<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ba3e98f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ba3e98f\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-98d2628\" data-id=\"98d2628\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6e8a4a9 elementor-align-start elementor-icon-list--layout-inline elementor-mobile-align-center elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"6e8a4a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items elementor-inline-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#orario\">\n\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Orario<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#inchecken\">\n\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Informazioni sul check-in<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-65a6312\" data-id=\"65a6312\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4c87cd1 elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4c87cd1\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4f53663\" data-id=\"4f53663\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a260714 elementor-widget elementor-widget-text-editor\" data-id=\"a260714\" 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 id=\"orario\">Orari traghetti Calais Dover<\/h3>\n\n<p>La tabella qui sotto mostra gli orari dei traghetti da Calais a Dover per giorno di viaggio. Questa vista mantiene leggibili le partenze anche nei giorni con molte corse.<\/p>\n\n<p><strong>Controlla soprattutto:<\/strong> orario di partenza, arrivo previsto, durata e operatore. Se cerchi gli <strong>orari P&amp;O Ferries Calais Dover<\/strong>, verifica la colonna dell\u2019operatore nella tabella.<\/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-a125e69 elementor-widget elementor-widget-shortcode\" data-id=\"a125e69\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap tp-theme-extended_cards tp-day-setup-modern\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/calais-dover.com\\\/it\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;route&quot;:97,&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;theme&quot;:&quot;extended_cards&quot;,&quot;daySetup&quot;:&quot;modern&quot;,&quot;limit10&quot;:true,&quot;label&quot;:&quot;Calais - Dover&quot;,&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Data&quot;,&quot;ui_days&quot;:&quot;Giorni&quot;,&quot;ui_button&quot;:&quot;Mostra partenze&quot;,&quot;status_idle&quot;:&quot;Scegli una data e clicca su Mostra partenze&quot;,&quot;status_loading&quot;:&quot;Caricamento...&quot;,&quot;status_empty&quot;:&quot;Nessuna partenza trovata&quot;,&quot;status_found&quot;:&quot;%d partenze trovate&quot;,&quot;th_date&quot;:&quot;Data&quot;,&quot;th_dep&quot;:&quot;Partenza&quot;,&quot;th_arr&quot;:&quot;Arrivo&quot;,&quot;th_dur&quot;:&quot;Durata&quot;,&quot;th_ship&quot;:&quot;Nave&quot;,&quot;th_op&quot;:&quot;Operatore&quot;,&quot;th_route&quot;:&quot;Rotta&quot;,&quot;wd_sun&quot;:&quot;DOM&quot;,&quot;wd_mon&quot;:&quot;LUN&quot;,&quot;wd_tue&quot;:&quot;MAR&quot;,&quot;wd_wed&quot;:&quot;MER&quot;,&quot;wd_thu&quot;:&quot;GIO&quot;,&quot;wd_fri&quot;:&quot;VEN&quot;,&quot;wd_sat&quot;:&quot;SAB&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Controlla tutte le partenze %s nel nostro orario&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Controlla altre partenze %1$s e %2$s nel nostro orario&quot;,&quot;summary_footer_generic&quot;:&quot;Consulta il nostro orario per altre partenze&quot;,&quot;summary_header&quot;:&quot;Le prossime due partenze:&quot;,&quot;summary_no_upcoming&quot;:&quot;Nessuna partenza imminente trovata&quot;,&quot;more_link&quot;:&quot;Altre partenze&quot;,&quot;more_departures_button&quot;:&quot;Mostra altre partenze&quot;,&quot;day_nav_previous&quot;:&quot;Mostra giorno precedente&quot;,&quot;day_nav_next&quot;:&quot;Mostra giorno successivo&quot;,&quot;day_nav_today&quot;:&quot;Mostra oggi&quot;,&quot;day_nav_tomorrow&quot;:&quot;Mostra domani&quot;,&quot;local_time_pair&quot;:&quot;Orario locale porto di partenza: %1$s \\\/ Orario locale porto di arrivo: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Orario locale porto di partenza e arrivo: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Spesso prenotato&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 In partenza presto&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 In navigazione&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Arrivato&quot;,&quot;tag_overnight&quot;:&quot;Notturno&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:{&quot;p&amp;o ferries&quot;:&quot;P&amp;O Ferries&quot;,&quot;dfds&quot;:&quot;DFDS&quot;,&quot;irish ferries&quot;:&quot;Irish Ferries&quot;,&quot;norfolk line&quot;:&quot;DFDS&quot;},&quot;shipLinks&quot;:[],&quot;showShip&quot;:true,&quot;departurePort&quot;:&quot;Calais&quot;,&quot;arrivalPort&quot;:&quot;Dover&quot;,&quot;departureTimezone&quot;:&quot;Europe\\\/Paris&quot;,&quot;arrivalTimezone&quot;:&quot;Europe\\\/London&quot;}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date\">Data<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Data\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Giorni<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Giorni\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">Mostra partenze<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">Scegli una data e clicca su Mostra partenze<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Caricamento...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b2ab7b9 elementor-widget elementor-widget-text-editor\" data-id=\"b2ab7b9\" 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 id=\"dover-calais-ferry-timetable\">Orari del traghetto Dover\u2013Calais<\/h3>\n\nQuesto orario mostra le partenze in tempo reale da Dover e gli arrivi previsti a Calais. Anche in questo caso la visualizzazione predefinita \u00e8 di <strong>1 giorno<\/strong>, una soluzione ideale per una tratta con numerose partenze giornaliere. \u00c8 inoltre possibile consultare direttamente gli orari di P&#038;O Ferries, DFDS e Irish Ferries.\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-6f7fe6b elementor-widget elementor-widget-shortcode\" data-id=\"6f7fe6b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap tp-theme-extended_cards tp-day-setup-modern\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/calais-dover.com\\\/it\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;route&quot;:98,&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;theme&quot;:&quot;extended_cards&quot;,&quot;daySetup&quot;:&quot;modern&quot;,&quot;limit10&quot;:true,&quot;label&quot;:&quot;Dover - Calais&quot;,&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Data&quot;,&quot;ui_days&quot;:&quot;Giorni&quot;,&quot;ui_button&quot;:&quot;Mostra partenze&quot;,&quot;status_idle&quot;:&quot;Scegli una data e clicca su Mostra partenze&quot;,&quot;status_loading&quot;:&quot;Caricamento...&quot;,&quot;status_empty&quot;:&quot;Nessuna partenza trovata&quot;,&quot;status_found&quot;:&quot;%d partenze trovate&quot;,&quot;th_date&quot;:&quot;Data&quot;,&quot;th_dep&quot;:&quot;Partenza&quot;,&quot;th_arr&quot;:&quot;Arrivo&quot;,&quot;th_dur&quot;:&quot;Durata&quot;,&quot;th_ship&quot;:&quot;Nave&quot;,&quot;th_op&quot;:&quot;Operatore&quot;,&quot;th_route&quot;:&quot;Rotta&quot;,&quot;wd_sun&quot;:&quot;DOM&quot;,&quot;wd_mon&quot;:&quot;LUN&quot;,&quot;wd_tue&quot;:&quot;MAR&quot;,&quot;wd_wed&quot;:&quot;MER&quot;,&quot;wd_thu&quot;:&quot;GIO&quot;,&quot;wd_fri&quot;:&quot;VEN&quot;,&quot;wd_sat&quot;:&quot;SAB&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Controlla tutte le partenze %s nel nostro orario&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Controlla altre partenze %1$s e %2$s nel nostro orario&quot;,&quot;summary_footer_generic&quot;:&quot;Consulta il nostro orario per altre partenze&quot;,&quot;summary_header&quot;:&quot;Le prossime due partenze:&quot;,&quot;summary_no_upcoming&quot;:&quot;Nessuna partenza imminente trovata&quot;,&quot;more_link&quot;:&quot;Altre partenze&quot;,&quot;more_departures_button&quot;:&quot;Mostra altre partenze&quot;,&quot;day_nav_previous&quot;:&quot;Mostra giorno precedente&quot;,&quot;day_nav_next&quot;:&quot;Mostra giorno successivo&quot;,&quot;day_nav_today&quot;:&quot;Mostra oggi&quot;,&quot;day_nav_tomorrow&quot;:&quot;Mostra domani&quot;,&quot;local_time_pair&quot;:&quot;Orario locale porto di partenza: %1$s \\\/ Orario locale porto di arrivo: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Orario locale porto di partenza e arrivo: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Spesso prenotato&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 In partenza presto&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 In navigazione&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Arrivato&quot;,&quot;tag_overnight&quot;:&quot;Notturno&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:{&quot;p&amp;o ferries&quot;:&quot;P&amp;O Ferries&quot;,&quot;dfds&quot;:&quot;DFDS&quot;,&quot;irish ferries&quot;:&quot;Irish Ferries&quot;,&quot;norfolk line&quot;:&quot;DFDS&quot;},&quot;shipLinks&quot;:[],&quot;showShip&quot;:true,&quot;departurePort&quot;:&quot;Dover&quot;,&quot;arrivalPort&quot;:&quot;Calais&quot;,&quot;departureTimezone&quot;:&quot;Europe\\\/London&quot;,&quot;arrivalTimezone&quot;:&quot;Europe\\\/Paris&quot;}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date\">Data<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Data\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Giorni<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Giorni\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">Mostra partenze<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">Scegli una data e clicca su Mostra partenze<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Caricamento...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0c51859 elementor-widget elementor-widget-text-editor\" data-id=\"0c51859\" 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 id=\"calais-folkestone-eurotunnel-timetable\">Eurotunnel Calais\u2013Folkestone<\/h3>\n\nDi seguito sono riportati gli orari di partenza in tempo reale di Le Shuttle \/ Eurotunnel da Calais a Folkestone. Per impostazione predefinita mostriamo <strong>1 giorno<\/strong>. Si tratta del collegamento pi\u00f9 rapido su questo corridoio per auto, furgoni, motociclette, camper e traffico merci.\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-e26a2fb elementor-widget elementor-widget-shortcode\" data-id=\"e26a2fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap tp-theme-extended_cards tp-day-setup-modern\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/calais-dover.com\\\/it\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;route&quot;:8,&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;theme&quot;:&quot;extended_cards&quot;,&quot;daySetup&quot;:&quot;modern&quot;,&quot;limit10&quot;:true,&quot;label&quot;:&quot;Calais - Folkestone&quot;,&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Data&quot;,&quot;ui_days&quot;:&quot;Giorni&quot;,&quot;ui_button&quot;:&quot;Mostra partenze&quot;,&quot;status_idle&quot;:&quot;Scegli una data e clicca su Mostra partenze&quot;,&quot;status_loading&quot;:&quot;Caricamento...&quot;,&quot;status_empty&quot;:&quot;Nessuna partenza trovata&quot;,&quot;status_found&quot;:&quot;%d partenze trovate&quot;,&quot;th_date&quot;:&quot;Data&quot;,&quot;th_dep&quot;:&quot;Partenza&quot;,&quot;th_arr&quot;:&quot;Arrivo&quot;,&quot;th_dur&quot;:&quot;Durata&quot;,&quot;th_ship&quot;:&quot;Nave&quot;,&quot;th_op&quot;:&quot;Operatore&quot;,&quot;th_route&quot;:&quot;Rotta&quot;,&quot;wd_sun&quot;:&quot;DOM&quot;,&quot;wd_mon&quot;:&quot;LUN&quot;,&quot;wd_tue&quot;:&quot;MAR&quot;,&quot;wd_wed&quot;:&quot;MER&quot;,&quot;wd_thu&quot;:&quot;GIO&quot;,&quot;wd_fri&quot;:&quot;VEN&quot;,&quot;wd_sat&quot;:&quot;SAB&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Controlla tutte le partenze %s nel nostro orario&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Controlla altre partenze %1$s e %2$s nel nostro orario&quot;,&quot;summary_footer_generic&quot;:&quot;Consulta il nostro orario per altre partenze&quot;,&quot;summary_header&quot;:&quot;Le prossime due partenze:&quot;,&quot;summary_no_upcoming&quot;:&quot;Nessuna partenza imminente trovata&quot;,&quot;more_link&quot;:&quot;Altre partenze&quot;,&quot;more_departures_button&quot;:&quot;Mostra altre partenze&quot;,&quot;day_nav_previous&quot;:&quot;Mostra giorno precedente&quot;,&quot;day_nav_next&quot;:&quot;Mostra giorno successivo&quot;,&quot;day_nav_today&quot;:&quot;Mostra oggi&quot;,&quot;day_nav_tomorrow&quot;:&quot;Mostra domani&quot;,&quot;local_time_pair&quot;:&quot;Orario locale porto di partenza: %1$s \\\/ Orario locale porto di arrivo: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Orario locale porto di partenza e arrivo: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Spesso prenotato&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 In partenza presto&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 In navigazione&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Arrivato&quot;,&quot;tag_overnight&quot;:&quot;Notturno&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:{&quot;eurotunnel&quot;:&quot;Eurotunnel&quot;},&quot;shipLinks&quot;:[],&quot;showShip&quot;:true,&quot;departurePort&quot;:&quot;Calais&quot;,&quot;arrivalPort&quot;:&quot;Folkestone&quot;,&quot;departureTimezone&quot;:&quot;Europe\\\/Paris&quot;,&quot;arrivalTimezone&quot;:&quot;Europe\\\/London&quot;}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date\">Data<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Data\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Giorni<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Giorni\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">Mostra partenze<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">Scegli una data e clicca su Mostra partenze<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Caricamento...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f181323 elementor-widget elementor-widget-text-editor\" data-id=\"f181323\" 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 id=\"folkestone-calais-eurotunnel-timetable\">Eurotunnel Folkestone\u2013Calais<\/h3>\n\nQuesto orario mostra le partenze in tempo reale da Folkestone e gli arrivi previsti a Calais. Grazie alla visualizzazione su <strong>1 giorno<\/strong>, gli orari rimangono facili da consultare anche nelle giornate con un elevato numero di partenze. Sono inoltre disponibili ulteriori informazioni sull\u2019Eurotunnel.\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-767b96e elementor-widget elementor-widget-shortcode\" data-id=\"767b96e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap tp-theme-extended_cards tp-day-setup-modern\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/calais-dover.com\\\/it\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;route&quot;:56,&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;theme&quot;:&quot;extended_cards&quot;,&quot;daySetup&quot;:&quot;modern&quot;,&quot;limit10&quot;:true,&quot;label&quot;:&quot;Folkestone - Calais&quot;,&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Data&quot;,&quot;ui_days&quot;:&quot;Giorni&quot;,&quot;ui_button&quot;:&quot;Mostra partenze&quot;,&quot;status_idle&quot;:&quot;Scegli una data e clicca su Mostra partenze&quot;,&quot;status_loading&quot;:&quot;Caricamento...&quot;,&quot;status_empty&quot;:&quot;Nessuna partenza trovata&quot;,&quot;status_found&quot;:&quot;%d partenze trovate&quot;,&quot;th_date&quot;:&quot;Data&quot;,&quot;th_dep&quot;:&quot;Partenza&quot;,&quot;th_arr&quot;:&quot;Arrivo&quot;,&quot;th_dur&quot;:&quot;Durata&quot;,&quot;th_ship&quot;:&quot;Nave&quot;,&quot;th_op&quot;:&quot;Operatore&quot;,&quot;th_route&quot;:&quot;Rotta&quot;,&quot;wd_sun&quot;:&quot;DOM&quot;,&quot;wd_mon&quot;:&quot;LUN&quot;,&quot;wd_tue&quot;:&quot;MAR&quot;,&quot;wd_wed&quot;:&quot;MER&quot;,&quot;wd_thu&quot;:&quot;GIO&quot;,&quot;wd_fri&quot;:&quot;VEN&quot;,&quot;wd_sat&quot;:&quot;SAB&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Controlla tutte le partenze %s nel nostro orario&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Controlla altre partenze %1$s e %2$s nel nostro orario&quot;,&quot;summary_footer_generic&quot;:&quot;Consulta il nostro orario per altre partenze&quot;,&quot;summary_header&quot;:&quot;Le prossime due partenze:&quot;,&quot;summary_no_upcoming&quot;:&quot;Nessuna partenza imminente trovata&quot;,&quot;more_link&quot;:&quot;Altre partenze&quot;,&quot;more_departures_button&quot;:&quot;Mostra altre partenze&quot;,&quot;day_nav_previous&quot;:&quot;Mostra giorno precedente&quot;,&quot;day_nav_next&quot;:&quot;Mostra giorno successivo&quot;,&quot;day_nav_today&quot;:&quot;Mostra oggi&quot;,&quot;day_nav_tomorrow&quot;:&quot;Mostra domani&quot;,&quot;local_time_pair&quot;:&quot;Orario locale porto di partenza: %1$s \\\/ Orario locale porto di arrivo: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Orario locale porto di partenza e arrivo: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Spesso prenotato&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 In partenza presto&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 In navigazione&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Arrivato&quot;,&quot;tag_overnight&quot;:&quot;Notturno&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:{&quot;eurotunnel&quot;:&quot;Eurotunnel&quot;},&quot;shipLinks&quot;:[],&quot;showShip&quot;:true,&quot;departurePort&quot;:&quot;Folkestone&quot;,&quot;arrivalPort&quot;:&quot;Calais&quot;,&quot;departureTimezone&quot;:&quot;Europe\\\/London&quot;,&quot;arrivalTimezone&quot;:&quot;Europe\\\/Paris&quot;}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date\">Data<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Data\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Giorni<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Giorni\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">Mostra partenze<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">Scegli una data e clicca su Mostra partenze<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Caricamento...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba05fc8 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"ba05fc8\" 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 id=\"about-calais-dover-timetables\">Panoramica<\/h3>\n\nQuesta pagina raccoglie i principali orari di partenza in tempo reale tra Calais e Dover, oltre alla navetta Eurotunnel tra Calais e Folkestone. In questo modo, i principali collegamenti tra Francia e Inghilterra sono disponibili in un unico luogo e in modo chiaro.\n\nUtilizziamo per impostazione predefinita una <strong>visualizzazione di 1 giorno<\/strong>, poich\u00e9 su questa tratta sono previste numerose partenze ogni giorno. Questo rende gli orari facili da consultare, consentendo allo stesso tempo di selezionare rapidamente una data diversa.\n\nI collegamenti in traghetto sono operati da P&#038;O Ferries, DFDS e Irish Ferries. Il collegamento attraverso il tunnel \u00e8 gestito da Le Shuttle \/ Eurotunnel. I traghetti impiegano generalmente pi\u00f9 tempo per la traversata, mentre il tunnel rappresenta spesso la soluzione pi\u00f9 veloce per chi viaggia in auto.\n\n<blockquote>Viaggi in una giornata estiva particolarmente affollata, con vento forte o quando sono previste possibili interruzioni del servizio? In questi casi \u00e8 consigliabile verificare anche le informazioni fornite dall&#8217;operatore interessato. Gli orari in tempo reale possono talvolta subire lievi ritardi negli aggiornamenti a causa di cancellazioni improvvise, problemi nei porti, ritardi dovuti alle condizioni meteorologiche o traffico intenso.<\/blockquote>\n\nSe una partenza non compare negli orari, \u00e8 probabile che la programmazione successiva non sia ancora stata pubblicata oppure sia in fase di aggiornamento. Questo accade soprattutto durante i cambi di stagione, le modifiche agli orari e i periodi di maggiore affluenza.\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-464e24f elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"464e24f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b7043bb\" data-id=\"b7043bb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0b4c938 elementor-widget elementor-widget-heading\" data-id=\"0b4c938\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"inchecken\" 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\">Informazioni sul check-in<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f7c49ee elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f7c49ee\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-94656ae\" data-id=\"94656ae\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-687cfec elementor-widget elementor-widget-image\" data-id=\"687cfec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/2019\/08\/dfds-logo2.png\" class=\"lazyload attachment-large size-large wp-image-584\" alt=\"\" srcset=\"https:\/\/calais-dover.com\/wp-content\/uploads\/2019\/08\/dfds-logo2.png 600w, https:\/\/calais-dover.com\/wp-content\/uploads\/2019\/08\/dfds-logo2-300x200.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/>\t\t\t\t\t\t\t\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-050ade8 elementor-widget elementor-widget-text-editor\" data-id=\"050ade8\" 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<h4>Check-in DFDS<\/h4><ul><li>60-90 minuti. presente in anticipo<\/li><li>Giorni impegnativi: 90 min.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-cb75b2d\" data-id=\"cb75b2d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a889938 elementor-widget elementor-widget-image\" data-id=\"a889938\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"840\" height=\"560\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-1024x683.jpg\" class=\"lazyload attachment-large size-large wp-image-6134\" alt=\"logo p&amp;o ferries\" srcset=\"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-1024x683.jpg 1024w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-300x200.jpg 300w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-768x512.jpg 768w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-1536x1024.jpg 1536w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-2048x1365.jpg 2048w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-225x150.jpg 225w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-100x67.jpg 100w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-525x350.jpg 525w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries-788x525.jpg 788w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/logo-po-ferries.jpg 1200w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/>\t\t\t\t\t\t\t\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-ab837f1 elementor-widget elementor-widget-text-editor\" data-id=\"ab837f1\" 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<h4>Check-in P&amp;O Ferries<\/h4><ul><li>Il check-in chiude 90 minuti prima della partenza per i pedoni<\/li><li>Il check-in chiude per il traffico diverso 60 minuti prima della partenza<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-208f832\" data-id=\"208f832\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-497d59c elementor-widget elementor-widget-image\" data-id=\"497d59c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"840\" height=\"560\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-1024x683.jpg\" class=\"lazyload attachment-large size-large wp-image-5870\" alt=\"\" srcset=\"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-1024x683.jpg 1024w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-300x200.jpg 300w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-768x512.jpg 768w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-1536x1024.jpg 1536w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-2048x1365.jpg 2048w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-225x150.jpg 225w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-100x67.jpg 100w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-525x350.jpg 525w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries-788x525.jpg 788w, https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/05\/irish-ferries.jpg 1200w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/>\t\t\t\t\t\t\t\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-20b490e elementor-widget elementor-widget-text-editor\" data-id=\"20b490e\" 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<h4>Check-in Irish Ferries<\/h4><ul><li>Il check-in chiude 90 minuti prima della partenza per i pullman<\/li><li>Per gli altri trasporti il \u200b\u200bcheck-in chiude 60 minuti prima della partenza<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-aeb726a elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"aeb726a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-14a5650\" data-id=\"14a5650\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a6c1ae3 elementor-widget elementor-widget-shortcode\" data-id=\"a6c1ae3\" 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\"><style>.elementor-7449 .elementor-element.elementor-element-29016de3:not(.elementor-motion-effects-element-type-background), .elementor-7449 .elementor-element.elementor-element-29016de3 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:transparent;background-image:linear-gradient(167deg, #004080 0%, #00314E 100%);}.elementor-7449 .elementor-element.elementor-element-29016de3{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin-top:50px;margin-bottom:0px;padding:50px 0px 50px 0px;}.elementor-7449 .elementor-element.elementor-element-29016de3 > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-7449 .elementor-element.elementor-element-1a13ca64 .elementor-heading-title{color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-3d86f2c4{font-size:16px;line-height:25px;color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-4cf7db22 img{border-radius:40px 40px 40px 40px;}.elementor-7449 .elementor-element.elementor-element-4cf7db22 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7449 .elementor-element.elementor-element-4cf7db22{width:auto;max-width:auto;}.elementor-7449 .elementor-element.elementor-element-1c967caf img{border-radius:40px 40px 40px 40px;}.elementor-7449 .elementor-element.elementor-element-1c967caf > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7449 .elementor-element.elementor-element-1c967caf{width:auto;max-width:auto;}.elementor-7449 .elementor-element.elementor-element-3562e360 img{border-radius:40px 40px 40px 40px;}.elementor-7449 .elementor-element.elementor-element-3562e360 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7449 .elementor-element.elementor-element-3562e360{width:auto;max-width:auto;}.elementor-7449 .elementor-element.elementor-element-1da4e3bf img{border-radius:40px 40px 40px 40px;}.elementor-7449 .elementor-element.elementor-element-1da4e3bf > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7449 .elementor-element.elementor-element-1da4e3bf{width:auto;max-width:auto;}.elementor-7449 .elementor-element.elementor-element-3b782ffe img{border-radius:40px 40px 40px 40px;}.elementor-7449 .elementor-element.elementor-element-3b782ffe > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-7449 .elementor-element.elementor-element-3b782ffe{width:auto;max-width:auto;}.elementor-7449 .elementor-element.elementor-element-207e4774{text-align:end;top:69px;}.elementor-7449 .elementor-element.elementor-element-207e4774 img{width:64%;max-width:53%;}body:not(.rtl) .elementor-7449 .elementor-element.elementor-element-207e4774{left:1053px;}body.rtl .elementor-7449 .elementor-element.elementor-element-207e4774{right:1053px;}.elementor-7449 .elementor-element.elementor-element-207e4774 > .elementor-widget-container{--e-transform-flipX:-1;}.elementor-7449 .elementor-element.elementor-element-4ca38b23 .elementor-heading-title{color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-190f4037{font-size:16px;line-height:25px;color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-21593467 .elementor-heading-title{color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-4e106d71{font-size:16px;text-decoration:none;line-height:25px;color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-5229589 .elementor-heading-title{color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-4692668{font-size:16px;line-height:25px;color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-7fa884ac .elementor-heading-title{color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-47201a93{font-size:16px;line-height:25px;color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-69d4f695 .elementor-heading-title{color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-791ca26f{font-size:16px;line-height:25px;color:#FFFFFF;z-index:2;}.elementor-7449 .elementor-element.elementor-element-24df350 .elementor-heading-title{color:#FFFFFF;}.elementor-7449 .elementor-element.elementor-element-6b6c2a46 .elementor-icon-list-icon i{color:#FFFFFF;transition:color 0.3s;}.elementor-7449 .elementor-element.elementor-element-6b6c2a46 .elementor-icon-list-icon svg{fill:#FFFFFF;transition:fill 0.3s;}.elementor-7449 .elementor-element.elementor-element-6b6c2a46{--e-icon-list-icon-size:14px;--icon-vertical-align:flex-start;--icon-vertical-offset:5px;}.elementor-7449 .elementor-element.elementor-element-6b6c2a46 .elementor-icon-list-item > .elementor-icon-list-text, .elementor-7449 .elementor-element.elementor-element-6b6c2a46 .elementor-icon-list-item > a{font-size:16px;}.elementor-7449 .elementor-element.elementor-element-6b6c2a46 .elementor-icon-list-text{color:#FFFFFF;transition:color 0.3s;}@media(min-width:768px){.elementor-7449 .elementor-element.elementor-element-468abda8{width:35%;}.elementor-7449 .elementor-element.elementor-element-3d8f2a48{width:21.6%;}.elementor-7449 .elementor-element.elementor-element-52bce223{width:21.6%;}.elementor-7449 .elementor-element.elementor-element-73c2c3b1{width:21.8%;}}@media(max-width:767px){.elementor-7449 .elementor-element.elementor-element-29016de3{margin-top:50px;margin-bottom:0px;}body:not(.rtl) .elementor-7449 .elementor-element.elementor-element-207e4774{left:-51px;}body.rtl .elementor-7449 .elementor-element.elementor-element-207e4774{right:-51px;}.elementor-7449 .elementor-element.elementor-element-207e4774{top:938px;z-index:0;}}<\/style>\t\t<div data-elementor-type=\"page\" data-elementor-id=\"7449\" class=\"elementor elementor-7449\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-29016de3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"29016de3\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-468abda8\" data-id=\"468abda8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1a13ca64 elementor-widget elementor-widget-heading\" data-id=\"1a13ca64\" 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<h3 class=\"elementor-heading-title elementor-size-default\">Chi siamo<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d86f2c4 elementor-widget elementor-widget-text-editor\" data-id=\"3d86f2c4\" 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>La guida di viaggio definitiva da Calais a Dover, la distanza pi\u00f9 breve che puoi percorrere dalla Francia all&#8217;Inghilterra in traghetto o in treno.<\/p><p>Confronta i biglietti di P&amp;O Ferries, Irish Ferries, DFDS e Eurotunnel su Calais-Dover.com.<\/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-4cf7db22 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"4cf7db22\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/eurotunnel-le-shuttle-qp9h6azy3ibx4w0ocm79gn8dzuhhe8feoidkix7910.jpg\" title=\"eurotunnel-le-shuttle.jpg\" alt=\"eurotunnel-le-shuttle.jpg\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-1c967caf elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"1c967caf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/irish-ferries-logo-qp9h6949pu9cho3enle0bnpgt2qqyu7y092lkda1dg.jpg\" title=\"irish-ferries-logo.jpg\" alt=\"irish-ferries-logo.jpg\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-3562e360 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"3562e360\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/dfds-logo-qp9h678lc66rug64ykkr6o6jmb00jg0hbzrmltctpw.jpg\" title=\"dfds-logo.jpg\" alt=\"dfds-logo.jpg\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-1da4e3bf elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"1da4e3bf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/po-ferries-logo-qp9h66ar5c5hiu7i4264m6f30x4nbqwqzv454je7w4.jpg\" title=\"po-ferries-logo.jpg\" alt=\"po-ferries-logo.jpg\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-3b782ffe elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"3b782ffe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/thumbs_dir\/Eurostar-logo-qp9h6cvmh6ehs3xy1n0ilmrb6m87tmmvcrojhh4gok.jpg\" title=\"Eurostar-logo.jpg\" alt=\"Eurostar-logo.jpg\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-207e4774 elementor-absolute e-transform elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"207e4774\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;,&quot;_transform_flipX_effect&quot;:&quot;transform&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" class=\"lazyload\" src=\"https:\/\/calais-dover.com\/wp-content\/themes\/rehub-theme\/images\/default\/blank.gif\" data-src=\"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/06\/zeemeeuw.png\" title=\"zeemeeuw.png\" alt=\"zeemeeuw.png\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-3d8f2a48\" data-id=\"3d8f2a48\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4ca38b23 elementor-widget elementor-widget-heading\" data-id=\"4ca38b23\" 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<h3 class=\"elementor-heading-title elementor-size-default\">Informazioni<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-190f4037 elementor-widget elementor-widget-text-editor\" data-id=\"190f4037\" 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><strong><a href=\"https:\/\/calais-dover.com\/it\/prezzi\/\">Prezzi<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/orari\/\">Orario<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/meteo-e-webcam\/\">Meteo e webcam<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/porto-di-calais\/\">Porto di Calais<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/porto-di-dover\/\">Porto di Dover<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/parcheggio-a-calais\/\">Parcheggio a Calais<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/guidare-in-inghilterra\/\">Guidare in Inghilterra<\/a><\/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-21593467 elementor-widget elementor-widget-heading\" data-id=\"21593467\" 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<h3 class=\"elementor-heading-title elementor-size-default\">Guide ai trasporti<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e106d71 elementor-widget elementor-widget-text-editor\" data-id=\"4e106d71\" 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><strong><a href=\"https:\/\/calais-dover.com\/it\/passeggero-a-piedi\/\">Senza veicolo<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/calais-dover-in-macchina\/\">Con macchina<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/carovana\/\">Con carovana<\/a><\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-52bce223\" data-id=\"52bce223\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5229589 elementor-widget elementor-widget-heading\" data-id=\"5229589\" 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<h3 class=\"elementor-heading-title elementor-size-default\">Operatori<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4692668 elementor-widget elementor-widget-text-editor\" data-id=\"4692668\" 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><strong><a href=\"https:\/\/calais-dover.com\/it\/dfds\/\">DFDS<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/p-o-ferries\/\">P&amp;O Ferries<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/irish-ferries\/\">Irish Ferries<\/a><\/strong><br \/><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/conrontare\/\">Confronta i traghetti<\/a><\/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-7fa884ac elementor-widget elementor-widget-heading\" data-id=\"7fa884ac\" 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<h3 class=\"elementor-heading-title elementor-size-default\">Con il tunnel<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-47201a93 elementor-widget elementor-widget-text-editor\" data-id=\"47201a93\" 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><strong><a href=\"https:\/\/calais-dover.com\/it\/tunnel-della-manica\/\">Eurotunnel<\/a><\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-73c2c3b1\" data-id=\"73c2c3b1\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-69d4f695 elementor-widget elementor-widget-heading\" data-id=\"69d4f695\" 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<h3 class=\"elementor-heading-title elementor-size-default\">Calais-dover.com<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-791ca26f elementor-widget elementor-widget-text-editor\" data-id=\"791ca26f\" 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><strong><a href=\"https:\/\/calais-dover.com\/it\/chi-siamo\/\">Chi siamo<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/contatto\/\">Contatto<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/informativa-sulla-privacy\/\">Informativa sulla privacy<\/a><\/strong><br \/><strong><a href=\"https:\/\/calais-dover.com\/it\/disclaimer\/\">Disclaimer<\/a><\/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-24df350 elementor-widget elementor-widget-heading\" data-id=\"24df350\" 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<h3 class=\"elementor-heading-title elementor-size-default\">Dettagli aziendali<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b6c2a46 elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"6b6c2a46\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"rhicon rhi-map-marker-alt\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Jufferstraat 3<br>3701 AD<br> Zeist, Paesi Bassi<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-envelope\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">info@calais-dover.com<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t<\/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<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Partenze per giorno di viaggio, durata della traversata e orari P&amp;O, DFDS e Irish Ferries.<\/p>\n","protected":false},"author":1,"featured_media":6442,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-7261","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Orari traghetti Calais Dover | P&amp;O, DFDS e Irish Ferries<\/title>\n<meta name=\"description\" content=\"Consulta gli orari dei traghetti Calais Dover per giorno di viaggio. Partenze P&amp;O, DFDS e Irish Ferries, durata e Eurotunnel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/calais-dover.com\/it\/orari\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Orari traghetti Calais Dover | P&amp;O, DFDS e Irish Ferries\" \/>\n<meta property=\"og:description\" content=\"Consulta gli orari dei traghetti Calais Dover per giorno di viaggio. Partenze P&amp;O, DFDS e Irish Ferries, durata e Eurotunnel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/calais-dover.com\/it\/orari\/\" \/>\n<meta property=\"og:site_name\" content=\"Calais-Dover.com\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-09T14:50:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/06\/timetable-calais-dover.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\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=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/orari\\\/\",\"url\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/orari\\\/\",\"name\":\"Orari traghetti Calais Dover | P&O, DFDS e Irish Ferries\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/orari\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/orari\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/calais-dover.com\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/timetable-calais-dover.jpg\",\"datePublished\":\"2024-06-10T11:54:03+00:00\",\"dateModified\":\"2026-06-09T14:50:05+00:00\",\"description\":\"Consulta gli orari dei traghetti Calais Dover per giorno di viaggio. Partenze P&O, DFDS e Irish Ferries, durata e Eurotunnel.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/orari\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/calais-dover.com\\\/it\\\/orari\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/orari\\\/#primaryimage\",\"url\":\"https:\\\/\\\/calais-dover.com\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/timetable-calais-dover.jpg\",\"contentUrl\":\"https:\\\/\\\/calais-dover.com\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/timetable-calais-dover.jpg\",\"width\":1200,\"height\":800,\"caption\":\"Orari Calais Dover DFDS\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/orari\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Calais-Dover.com\",\"item\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/home\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Orari traghetti Calais Dover\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/\",\"name\":\"Calais-Dover.com\",\"description\":\"From Dover to Calais\",\"publisher\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/#organization\",\"name\":\"Calais-Dover.com\",\"url\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/calais-dover.com\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/Calais-Dover-logo.png\",\"contentUrl\":\"https:\\\/\\\/calais-dover.com\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/Calais-Dover-logo.png\",\"width\":450,\"height\":80,\"caption\":\"Calais-Dover.com\"},\"image\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/it\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Orari traghetti Calais Dover | P&O, DFDS e Irish Ferries","description":"Consulta gli orari dei traghetti Calais Dover per giorno di viaggio. Partenze P&O, DFDS e Irish Ferries, durata e Eurotunnel.","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:\/\/calais-dover.com\/it\/orari\/","og_locale":"it_IT","og_type":"article","og_title":"Orari traghetti Calais Dover | P&O, DFDS e Irish Ferries","og_description":"Consulta gli orari dei traghetti Calais Dover per giorno di viaggio. Partenze P&O, DFDS e Irish Ferries, durata e Eurotunnel.","og_url":"https:\/\/calais-dover.com\/it\/orari\/","og_site_name":"Calais-Dover.com","article_modified_time":"2026-06-09T14:50:05+00:00","og_image":[{"width":1200,"height":800,"url":"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/06\/timetable-calais-dover.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Tempo di lettura stimato":"3 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/calais-dover.com\/it\/orari\/","url":"https:\/\/calais-dover.com\/it\/orari\/","name":"Orari traghetti Calais Dover | P&O, DFDS e Irish Ferries","isPartOf":{"@id":"https:\/\/calais-dover.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/calais-dover.com\/it\/orari\/#primaryimage"},"image":{"@id":"https:\/\/calais-dover.com\/it\/orari\/#primaryimage"},"thumbnailUrl":"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/06\/timetable-calais-dover.jpg","datePublished":"2024-06-10T11:54:03+00:00","dateModified":"2026-06-09T14:50:05+00:00","description":"Consulta gli orari dei traghetti Calais Dover per giorno di viaggio. Partenze P&O, DFDS e Irish Ferries, durata e Eurotunnel.","breadcrumb":{"@id":"https:\/\/calais-dover.com\/it\/orari\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/calais-dover.com\/it\/orari\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/calais-dover.com\/it\/orari\/#primaryimage","url":"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/06\/timetable-calais-dover.jpg","contentUrl":"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/06\/timetable-calais-dover.jpg","width":1200,"height":800,"caption":"Orari Calais Dover DFDS"},{"@type":"BreadcrumbList","@id":"https:\/\/calais-dover.com\/it\/orari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Calais-Dover.com","item":"https:\/\/calais-dover.com\/it\/home\/"},{"@type":"ListItem","position":2,"name":"Orari traghetti Calais Dover"}]},{"@type":"WebSite","@id":"https:\/\/calais-dover.com\/it\/#website","url":"https:\/\/calais-dover.com\/it\/","name":"Calais-Dover.com","description":"From Dover to Calais","publisher":{"@id":"https:\/\/calais-dover.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/calais-dover.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/calais-dover.com\/it\/#organization","name":"Calais-Dover.com","url":"https:\/\/calais-dover.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/calais-dover.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/calais-dover.com\/wp-content\/uploads\/2023\/07\/Calais-Dover-logo.png","contentUrl":"https:\/\/calais-dover.com\/wp-content\/uploads\/2023\/07\/Calais-Dover-logo.png","width":450,"height":80,"caption":"Calais-Dover.com"},"image":{"@id":"https:\/\/calais-dover.com\/it\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/calais-dover.com\/it\/wp-json\/wp\/v2\/pages\/7261","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/calais-dover.com\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/calais-dover.com\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/calais-dover.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/calais-dover.com\/it\/wp-json\/wp\/v2\/comments?post=7261"}],"version-history":[{"count":5,"href":"https:\/\/calais-dover.com\/it\/wp-json\/wp\/v2\/pages\/7261\/revisions"}],"predecessor-version":[{"id":9874,"href":"https:\/\/calais-dover.com\/it\/wp-json\/wp\/v2\/pages\/7261\/revisions\/9874"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/calais-dover.com\/it\/wp-json\/wp\/v2\/media\/6442"}],"wp:attachment":[{"href":"https:\/\/calais-dover.com\/it\/wp-json\/wp\/v2\/media?parent=7261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}