{"id":2541,"date":"2023-07-05T11:25:43","date_gmt":"2023-07-05T11:25:43","guid":{"rendered":"https:\/\/calais-dover.com\/?page_id=2541"},"modified":"2026-06-09T14:11:57","modified_gmt":"2026-06-09T14:11:57","slug":"calais-dover-fahrplan","status":"publish","type":"page","link":"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/","title":{"rendered":"F\u00e4hre Calais Dover Fahrplan"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2541\" class=\"elementor elementor-2541 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-b2d2af5 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"b2d2af5\" 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-b976776\" data-id=\"b976776\" 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-8595d4f elementor-widget elementor-widget-shortcode\" data-id=\"8595d4f\" 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-8179 .elementor-element.elementor-element-2f2d2323:not(.elementor-motion-effects-element-type-background), .elementor-8179 .elementor-element.elementor-element-2f2d2323 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:transparent;background-image:linear-gradient(360deg, #004080 25%, #00314E 7%);}.elementor-8179 .elementor-element.elementor-element-2f2d2323 > .elementor-background-overlay{opacity:0.5;transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-8179 .elementor-element.elementor-element-2f2d2323{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-8179 .elementor-element.elementor-element-2f2d2323 > .elementor-shape-bottom svg{width:calc(122% + 1.3px);height:116px;transform:translateX(-50%) rotateY(180deg);}.elementor-8179 .elementor-element.elementor-element-2f2d2323 > .elementor-shape-bottom{z-index:2;pointer-events:none;}.elementor-8179 .elementor-element.elementor-element-528480ad > .elementor-element-populated{margin:0px 0px 0px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;padding:0px 0px 0px 0px;}.elementor-8179 .elementor-element.elementor-element-2ef6b257{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin-top:0px;margin-bottom:0px;}.elementor-8179 .elementor-element.elementor-element-2ef6b257 > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-8179 .elementor-element.elementor-element-43bb0946{font-family:\"Lato\", Sans-serif;color:#FFFFFF;width:auto;max-width:auto;align-self:center;}.elementor-8179 .elementor-element.elementor-element-43bb0946 a{color:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-43bb0946 > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-8179 .elementor-element.elementor-element-7eb26a46{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;margin-top:-30px;margin-bottom:20px;}.elementor-8179 .elementor-element.elementor-element-7eb26a46 > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-8179 .elementor-element.elementor-element-39fe519c.elementor-column > .elementor-widget-wrap{justify-content:flex-end;}.elementor-8179 .elementor-element.elementor-element-39fe519c > .elementor-element-populated{margin:15px 0px -15px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu .elementor-item{font-family:\"Lato\", Sans-serif;font-size:16px;font-weight:bold;text-decoration:none;letter-spacing:-0.2px;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--main .elementor-item{color:#FFFFFF;fill:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown a, .elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-menu-toggle{color:#00314E;fill:#00314E;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown a:hover,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown a:focus,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown a.elementor-item-active,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown a.highlighted,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-menu-toggle:hover,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-menu-toggle:focus{color:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown a:hover,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown a:focus,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown a.elementor-item-active,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown a.highlighted{background-color:#46A492;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown .elementor-item, .elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-nav-menu--dropdown  .elementor-sub-item{font-family:\"Lato\", Sans-serif;font-size:15px;font-weight:600;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 div.elementor-menu-toggle{color:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 div.elementor-menu-toggle svg{fill:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 .elementor-menu-toggle{background-color:#46A492;}.elementor-8179 .elementor-element.elementor-element-3b8d23a6 > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;border-radius:45px 45px 45px 45px;}.elementor-8179 .elementor-element.elementor-element-79584df3 > .elementor-container > .elementor-column > .elementor-widget-wrap{align-content:center;align-items:center;}.elementor-8179 .elementor-element.elementor-element-79584df3:not(.elementor-motion-effects-element-type-background), .elementor-8179 .elementor-element.elementor-element-79584df3 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-79584df3, .elementor-8179 .elementor-element.elementor-element-79584df3 > .elementor-background-overlay{border-radius:45px 45px 45px 45px;}.elementor-8179 .elementor-element.elementor-element-79584df3{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-8179 .elementor-element.elementor-element-79584df3 > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-8179 .elementor-element.elementor-element-a322474{text-align:start;}.elementor-8179 .elementor-element.elementor-element-a322474 > .elementor-widget-container{margin:0px 0px 0px 0px;}.elementor-8179 .elementor-element.elementor-element-6cc4a12f.elementor-column > .elementor-widget-wrap{justify-content:flex-end;}.elementor-8179 .elementor-element.elementor-element-6cc4a12f > .elementor-element-populated{margin:0px 0px 0px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu .elementor-item{font-family:\"Lato\", Sans-serif;font-size:16px;font-weight:bold;text-decoration:none;letter-spacing:-0.2px;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--main .elementor-item{color:#00314E;fill:#00314E;padding-left:20px;padding-right:20px;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown a, .elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-menu-toggle{color:#00314E;fill:#00314E;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown a:hover,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown a:focus,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown a.elementor-item-active,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown a.highlighted,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-menu-toggle:hover,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-menu-toggle:focus{color:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown a:hover,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown a:focus,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown a.elementor-item-active,\n\t\t\t\t\t.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown a.highlighted{background-color:#46A492;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown .elementor-item, .elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown  .elementor-sub-item{font-family:\"Lato\", Sans-serif;font-size:15px;font-weight:600;text-decoration:none;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown{border-radius:15px 15px 15px 15px;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown li:first-child a{border-top-left-radius:15px;border-top-right-radius:15px;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown li:last-child a{border-bottom-right-radius:15px;border-bottom-left-radius:15px;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--main .elementor-nav-menu--dropdown, .elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu__container.elementor-nav-menu--dropdown{box-shadow:0px 0px 10px 0px rgba(0, 0, 0, 0.11);}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-nav-menu--dropdown li:not(:last-child){border-style:none;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 div.elementor-menu-toggle{color:#000000;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 div.elementor-menu-toggle svg{fill:#000000;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 .elementor-menu-toggle{background-color:#FF7575;}.elementor-8179 .elementor-element.elementor-element-6b7ac1d4 > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;border-radius:45px 45px 45px 45px;}.elementor-8179 .elementor-element.elementor-element-551f6984{font-family:\"Lato\", Sans-serif;color:#FFFFFF;width:auto;max-width:auto;align-self:center;}.elementor-8179 .elementor-element.elementor-element-551f6984 a{color:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-248c9661 .elementor-heading-title{font-family:\"Open Sans\", Sans-serif;font-size:60px;color:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-248c9661 > .elementor-widget-container{margin:15px 0px -15px 0px;padding:5px 5px 0px 0px;}.elementor-8179 .elementor-element.elementor-element-35698371 .elementor-widget-container{font-family:\"Open Sans\", Sans-serif;font-size:21px;font-weight:600;color:#FFFFFF;}.elementor-8179 .elementor-element.elementor-element-35698371 > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 5px 5px 5px;}.elementor-8179 .elementor-element.elementor-element-4021c709{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-8179 .elementor-element.elementor-element-4021c709{left:831px;}body.rtl .elementor-8179 .elementor-element.elementor-element-4021c709{right:831px;}.elementor-8179 .elementor-element.elementor-element-ca99dad{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-8179 .elementor-element.elementor-element-ca99dad > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-8179 .elementor-element.elementor-element-1d0def3a > .elementor-element-populated, .elementor-8179 .elementor-element.elementor-element-1d0def3a > .elementor-element-populated > .elementor-background-overlay, .elementor-8179 .elementor-element.elementor-element-1d0def3a > .elementor-background-slideshow{border-radius:0px 0px 0px 0px;}.elementor-8179 .elementor-element.elementor-element-77651ad0 > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;background-color:#004080;border-radius:5px 5px 0px 0px;}.elementor-8179 .elementor-element.elementor-element-77651ad0{width:var( --container-widget-width, 101.91% );max-width:101.91%;--container-widget-width:101.91%;--container-widget-flex-grow:0;}.elementor-8179 .elementor-element.elementor-element-6f4a4ffb > .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-8179 .elementor-element.elementor-element-6f4a4ffb > .elementor-element-populated > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-8179 .elementor-element.elementor-element-6f4a4ffb{z-index:1;}.elementor-8179 .elementor-element.elementor-element-239da6c img{border-radius:40px 40px 40px 40px;}.elementor-8179 .elementor-element.elementor-element-239da6c > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8179 .elementor-element.elementor-element-239da6c{width:auto;max-width:auto;}.elementor-8179 .elementor-element.elementor-element-2845d7a1 img{border-radius:40px 40px 40px 40px;}.elementor-8179 .elementor-element.elementor-element-2845d7a1 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8179 .elementor-element.elementor-element-2845d7a1{width:auto;max-width:auto;}.elementor-8179 .elementor-element.elementor-element-64275831 img{border-radius:40px 40px 40px 40px;}.elementor-8179 .elementor-element.elementor-element-64275831 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8179 .elementor-element.elementor-element-64275831{width:auto;max-width:auto;}.elementor-8179 .elementor-element.elementor-element-6094fa29 img{border-radius:40px 40px 40px 40px;}.elementor-8179 .elementor-element.elementor-element-6094fa29 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8179 .elementor-element.elementor-element-6094fa29{width:auto;max-width:auto;}.elementor-8179 .elementor-element.elementor-element-a27b885 img{border-radius:40px 40px 40px 40px;}.elementor-8179 .elementor-element.elementor-element-a27b885 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8179 .elementor-element.elementor-element-a27b885{width:auto;max-width:auto;}@media(max-width:1024px){.elementor-8179 .elementor-element.elementor-element-4021c709{width:var( --container-widget-width, 738px );max-width:738px;--container-widget-width:738px;--container-widget-flex-grow:0;}}@media(min-width:768px){.elementor-8179 .elementor-element.elementor-element-43047973{width:10%;}.elementor-8179 .elementor-element.elementor-element-6cc4a12f{width:90%;}.elementor-8179 .elementor-element.elementor-element-1d0def3a{width:71.939%;}.elementor-8179 .elementor-element.elementor-element-6f4a4ffb{width:27.967%;}}@media(max-width:767px){.elementor-8179 .elementor-element.elementor-element-551f6984 > .elementor-widget-container{margin:0px 0px 0px 10px;}.elementor-8179 .elementor-element.elementor-element-551f6984{width:var( --container-widget-width, 338.156px );max-width:338.156px;--container-widget-width:338.156px;--container-widget-flex-grow:0;}.elementor-8179 .elementor-element.elementor-element-248c9661 .elementor-heading-title{font-size:50px;}.elementor-8179 .elementor-element.elementor-element-248c9661 > .elementor-widget-container{margin:15px 0px -15px 5px;}.elementor-8179 .elementor-element.elementor-element-35698371 > .elementor-widget-container{margin:0px 0px 0px 5px;}.elementor-8179 .elementor-element.elementor-element-77651ad0 > .elementor-widget-container{margin:0px 0px 0px 0px;}}<\/style>\t\t<div data-elementor-type=\"section\" data-elementor-id=\"8179\" class=\"elementor elementor-8179\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2f2d2323 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2f2d2323\" 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-528480ad\" data-id=\"528480ad\" 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-2ef6b257 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2ef6b257\" 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-6a8dd29\" data-id=\"6a8dd29\" 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-43bb0946 elementor-widget__width-auto elementor-hidden-mobile elementor-widget elementor-widget-breadcrumbs\" data-id=\"43bb0946\" 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\/de\/\">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-7eb26a46 elementor-hidden-desktop elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7eb26a46\" 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-39fe519c\" data-id=\"39fe519c\" 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-3b8d23a6 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=\"3b8d23a6\" 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-3b8d23a6\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-2539\"><a href=\"https:\/\/calais-dover.com\/de\/\" class=\"elementor-item\">Home<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2560\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/\" class=\"elementor-item\">F\u00e4hrplan<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2852\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Reederei<\/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-8786\"><a href=\"https:\/\/calais-dover.com\/de\/po-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-8784\"><a href=\"https:\/\/calais-dover.com\/de\/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-8785\"><a href=\"https:\/\/calais-dover.com\/de\/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-8511\"><a href=\"https:\/\/calais-dover.com\/de\/vergleichen\/\" class=\"elementor-sub-item\">Vergleichen<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2617\"><a href=\"https:\/\/calais-dover.com\/de\/tunnel-nach-engeland\/\" class=\"elementor-item\">Tunnel<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2538\"><a href=\"https:\/\/calais-dover.com\/de\/fahrpreis\/\" class=\"elementor-item\">F\u00e4hrpreise<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8512\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Wie reist du?<\/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-8516\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-mit-dem-auto\/\" class=\"elementor-sub-item\">Auto<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8515\"><a href=\"https:\/\/calais-dover.com\/de\/mit-der-wohwagen-nach-england\/\" class=\"elementor-sub-item\">Wohnwagen<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8514\"><a href=\"https:\/\/calais-dover.com\/de\/fuspassagiere\/\" class=\"elementor-sub-item\">Fu\u00dfpassagiere<\/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-8517\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Vorbereitung<\/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-2559\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-webcams-wetter\/\" class=\"elementor-sub-item\">Webcams &#038; Wetter<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8513\"><a href=\"https:\/\/calais-dover.com\/de\/autofahren-in-england\/\" class=\"elementor-sub-item\">Autofahren in England<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8520\"><a href=\"#\" class=\"elementor-sub-item elementor-item-anchor\">Hafeninformationen<\/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-8519\"><a href=\"https:\/\/calais-dover.com\/de\/calais-hafen\/\" class=\"elementor-sub-item\">Hafen von Calais<\/a><\/li>\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8518\"><a href=\"https:\/\/calais-dover.com\/de\/dover-hafen\/\" class=\"elementor-sub-item\">Hafen von 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-2737\"><a href=\"https:\/\/calais-dover.com\/de\/parken-calais-hafen\/\" class=\"elementor-sub-item\">Parken Calais Hafen<\/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=\"Men\u00fc Umschalter\" 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-3b8d23a6\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-2539\"><a href=\"https:\/\/calais-dover.com\/de\/\" class=\"elementor-item\" tabindex=\"-1\">Home<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2560\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/\" class=\"elementor-item\" tabindex=\"-1\">F\u00e4hrplan<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2852\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Reederei<\/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-8786\"><a href=\"https:\/\/calais-dover.com\/de\/po-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-8784\"><a href=\"https:\/\/calais-dover.com\/de\/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-8785\"><a href=\"https:\/\/calais-dover.com\/de\/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-8511\"><a href=\"https:\/\/calais-dover.com\/de\/vergleichen\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Vergleichen<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2617\"><a href=\"https:\/\/calais-dover.com\/de\/tunnel-nach-engeland\/\" class=\"elementor-item\" tabindex=\"-1\">Tunnel<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2538\"><a href=\"https:\/\/calais-dover.com\/de\/fahrpreis\/\" class=\"elementor-item\" tabindex=\"-1\">F\u00e4hrpreise<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8512\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Wie reist du?<\/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-8516\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-mit-dem-auto\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Auto<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8515\"><a href=\"https:\/\/calais-dover.com\/de\/mit-der-wohwagen-nach-england\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Wohnwagen<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8514\"><a href=\"https:\/\/calais-dover.com\/de\/fuspassagiere\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Fu\u00dfpassagiere<\/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-8517\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Vorbereitung<\/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-2559\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-webcams-wetter\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Webcams &#038; Wetter<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8513\"><a href=\"https:\/\/calais-dover.com\/de\/autofahren-in-england\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Autofahren in England<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8520\"><a href=\"#\" class=\"elementor-sub-item elementor-item-anchor\" tabindex=\"-1\">Hafeninformationen<\/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-8519\"><a href=\"https:\/\/calais-dover.com\/de\/calais-hafen\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Hafen von Calais<\/a><\/li>\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8518\"><a href=\"https:\/\/calais-dover.com\/de\/dover-hafen\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Hafen von 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-2737\"><a href=\"https:\/\/calais-dover.com\/de\/parken-calais-hafen\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Parken Calais Hafen<\/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-79584df3 elementor-hidden-tablet elementor-hidden-mobile elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"79584df3\" 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-43047973\" data-id=\"43047973\" 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-a322474 elementor-widget elementor-widget-image\" data-id=\"a322474\" 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\/de\/\">\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-1-qq4damiinswu7g41dbiun0lp7v4xqfyshq58lncgdw.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-6cc4a12f\" data-id=\"6cc4a12f\" 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-6b7ac1d4 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=\"6b7ac1d4\" 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-6b7ac1d4\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-2539\"><a href=\"https:\/\/calais-dover.com\/de\/\" class=\"elementor-item\">Home<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2560\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/\" class=\"elementor-item\">F\u00e4hrplan<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2852\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Reederei<\/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-8786\"><a href=\"https:\/\/calais-dover.com\/de\/po-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-8784\"><a href=\"https:\/\/calais-dover.com\/de\/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-8785\"><a href=\"https:\/\/calais-dover.com\/de\/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-8511\"><a href=\"https:\/\/calais-dover.com\/de\/vergleichen\/\" class=\"elementor-sub-item\">Vergleichen<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2617\"><a href=\"https:\/\/calais-dover.com\/de\/tunnel-nach-engeland\/\" class=\"elementor-item\">Tunnel<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2538\"><a href=\"https:\/\/calais-dover.com\/de\/fahrpreis\/\" class=\"elementor-item\">F\u00e4hrpreise<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8512\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Wie reist du?<\/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-8516\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-mit-dem-auto\/\" class=\"elementor-sub-item\">Auto<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8515\"><a href=\"https:\/\/calais-dover.com\/de\/mit-der-wohwagen-nach-england\/\" class=\"elementor-sub-item\">Wohnwagen<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8514\"><a href=\"https:\/\/calais-dover.com\/de\/fuspassagiere\/\" class=\"elementor-sub-item\">Fu\u00dfpassagiere<\/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-8517\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\">Vorbereitung<\/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-2559\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-webcams-wetter\/\" class=\"elementor-sub-item\">Webcams &#038; Wetter<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8513\"><a href=\"https:\/\/calais-dover.com\/de\/autofahren-in-england\/\" class=\"elementor-sub-item\">Autofahren in England<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8520\"><a href=\"#\" class=\"elementor-sub-item elementor-item-anchor\">Hafeninformationen<\/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-8519\"><a href=\"https:\/\/calais-dover.com\/de\/calais-hafen\/\" class=\"elementor-sub-item\">Hafen von Calais<\/a><\/li>\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8518\"><a href=\"https:\/\/calais-dover.com\/de\/dover-hafen\/\" class=\"elementor-sub-item\">Hafen von 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-2737\"><a href=\"https:\/\/calais-dover.com\/de\/parken-calais-hafen\/\" class=\"elementor-sub-item\">Parken Calais Hafen<\/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=\"Men\u00fc Umschalter\" 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-6b7ac1d4\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-2539\"><a href=\"https:\/\/calais-dover.com\/de\/\" class=\"elementor-item\" tabindex=\"-1\">Home<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2560\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/\" class=\"elementor-item\" tabindex=\"-1\">F\u00e4hrplan<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2852\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Reederei<\/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-8786\"><a href=\"https:\/\/calais-dover.com\/de\/po-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-8784\"><a href=\"https:\/\/calais-dover.com\/de\/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-8785\"><a href=\"https:\/\/calais-dover.com\/de\/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-8511\"><a href=\"https:\/\/calais-dover.com\/de\/vergleichen\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Vergleichen<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2617\"><a href=\"https:\/\/calais-dover.com\/de\/tunnel-nach-engeland\/\" class=\"elementor-item\" tabindex=\"-1\">Tunnel<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-2538\"><a href=\"https:\/\/calais-dover.com\/de\/fahrpreis\/\" class=\"elementor-item\" tabindex=\"-1\">F\u00e4hrpreise<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8512\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Wie reist du?<\/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-8516\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-mit-dem-auto\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Auto<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8515\"><a href=\"https:\/\/calais-dover.com\/de\/mit-der-wohwagen-nach-england\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Wohnwagen<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8514\"><a href=\"https:\/\/calais-dover.com\/de\/fuspassagiere\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Fu\u00dfpassagiere<\/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-8517\"><a href=\"#\" class=\"elementor-item elementor-item-anchor\" tabindex=\"-1\">Vorbereitung<\/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-2559\"><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-webcams-wetter\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Webcams &#038; Wetter<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8513\"><a href=\"https:\/\/calais-dover.com\/de\/autofahren-in-england\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Autofahren in England<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-8520\"><a href=\"#\" class=\"elementor-sub-item elementor-item-anchor\" tabindex=\"-1\">Hafeninformationen<\/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-8519\"><a href=\"https:\/\/calais-dover.com\/de\/calais-hafen\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Hafen von Calais<\/a><\/li>\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-8518\"><a href=\"https:\/\/calais-dover.com\/de\/dover-hafen\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Hafen von 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-2737\"><a href=\"https:\/\/calais-dover.com\/de\/parken-calais-hafen\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Parken Calais Hafen<\/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-551f6984 elementor-widget__width-auto elementor-hidden-desktop elementor-hidden-tablet elementor-widget-mobile__width-initial elementor-widget elementor-widget-breadcrumbs\" data-id=\"551f6984\" 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\/de\/\">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-35698371 elementor-widget elementor-widget-theme-post-excerpt\" data-id=\"35698371\" 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\tAktuelle Abfahrten heute, Dauer der \u00dcberfahrt und Fahrpl\u00e4ne f\u00fcr P&amp;O, DFDS und Irish Ferries.\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4021c709 elementor-absolute elementor-widget__width-initial elementor-widget-tablet__width-initial elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"4021c709\" 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\/06\/Zonder-titel-300-x-130-px-300-x-200-px-1-1.png\" title=\"Zonder-titel-300-x-130-px-300-x-200-px-1.png\" alt=\"Zonder-titel-300-x-130-px-300-x-200-px-1.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<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-ca99dad elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ca99dad\" 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-1d0def3a\" data-id=\"1d0def3a\" 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-77651ad0 elementor-widget__width-initial elementor-widget elementor-widget-shortcode\" data-id=\"77651ad0\" 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=F5663G&cult=de-DE&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-6f4a4ffb elementor-hidden-mobile\" data-id=\"6f4a4ffb\" 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-239da6c elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"239da6c\" 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-1-1-qq4dapc13x5424wzwkiuzll8xo6amy5j6a6ymmu1ro.jpg\" title=\"po-ferries-logo-1.jpg\" alt=\"po-ferries-logo-1.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-2845d7a1 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"2845d7a1\" 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-1-1-qq4dar7phl7opcu9llc44l464fx12cczujhxl6r9f8.jpg\" title=\"dfds-logo-1.jpg\" alt=\"dfds-logo-1.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-64275831 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"64275831\" 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-2-1-qq4das5jof8z0yswg3qqp2vmptsea1gq6o5f2gpv90.jpg\" title=\"irish-ferries-logo-2.jpg\" alt=\"irish-ferries-logo-2.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-6094fa29 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"6094fa29\" 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-a27b885 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"a27b885\" 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-2-1-qq4davwwfre4benfu5d8z1xh3d9v4tvnj6rczkkak4.jpg\" title=\"Eurostar-logo-2.jpg\" alt=\"Eurostar-logo-2.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-78816cda elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"78816cda\" 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-top-column elementor-element elementor-element-6156cb22\" data-id=\"6156cb22\" 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-12644190 elementor-widget elementor-widget-text-editor\" data-id=\"12644190\" 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>Pr\u00fcfen Sie den Fahrplan der F\u00e4hre Calais Dover f\u00fcr heute und kommende Reisetage. Die Strecke wird von P&amp;O Ferries, DFDS und Irish Ferries bedient und geh\u00f6rt zu den wichtigsten F\u00e4hrverbindungen zwischen Frankreich und England.<\/p><p>Auf dieser Seite finden Sie Abfahrtszeiten f\u00fcr Calais nach Dover und Dover nach Calais, Hinweise zur Fahrtdauer, Check-in-Zeiten und Links zu Wetter, Webcams und Eurotunnel als Alternative.<\/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\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7d504602 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7d504602\" 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-100 elementor-top-column elementor-element elementor-element-764fff0\" data-id=\"764fff0\" 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-7622c3c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7622c3c\" data-element_type=\"section\" data-e-type=\"section\">\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-top-column elementor-element elementor-element-0384079\" data-id=\"0384079\" 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-56d00a7 elementor-widget elementor-widget-text-editor\" data-id=\"56d00a7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Aktuelle Abfahrten der F\u00e4hre Calais Dover<\/h2><p>Die F\u00e4hren zwischen Calais und Dover fahren tags\u00fcber regelm\u00e4\u00dfig. Die meisten Reisenden pr\u00fcfen den Fahrplan kurz vor der Abfahrt, weil Uhrzeit, Betreiber und Check-in-Zeit entscheidend f\u00fcr die Planung am Hafen sind.<\/p><p>Nutzen Sie den Fahrplan unten f\u00fcr die n\u00e4chsten Abfahrten. F\u00fcr kurzfristige \u00c4nderungen, Wetter, Hafenverkehr oder Versp\u00e4tungen sollten Sie zus\u00e4tzlich die Hinweise Ihrer Reederei pr\u00fcfen.<\/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-f20ce05 elementor-widget elementor-widget-text-editor\" data-id=\"f20ce05\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 id=\"fahrplan-calais-dover\">Fahrplan Calais nach Dover heute<\/h2><p>Der Fahrplan unten zeigt die n\u00e4chsten Abfahrten von Calais nach Dover. Achten Sie nicht nur auf die Uhrzeit, sondern auch auf den Betreiber. Auf dieser Strecke fahren <strong>P&amp;O Ferries, DFDS und Irish Ferries<\/strong>. Je nach Ticket kann die Check-in-Zeit unterschiedlich sein.<\/p><p>Wichtig beim Lesen der Zeiten: Frankreich ist eine Stunde vor England. Eine Ankunft in Dover kann deshalb auf dem Papier sehr nah an der Abfahrt in Calais liegen, obwohl die \u00dcberfahrt selbst deutlich l\u00e4nger dauert.<\/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-183b3dd elementor-widget elementor-widget-shortcode\" data-id=\"183b3dd\" 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\\\/de\\\/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;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;\\u00dcberfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;W\\u00e4hlen Sie ein Datum und klicken Sie auf \\u00dcberfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Wird geladen...&quot;,&quot;status_empty&quot;:&quot;Keine \\u00dcberfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d \\u00dcberfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiff&quot;,&quot;th_op&quot;:&quot;Betreiber&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SO&quot;,&quot;wd_mon&quot;:&quot;MO&quot;,&quot;wd_tue&quot;:&quot;DI&quot;,&quot;wd_wed&quot;:&quot;MI&quot;,&quot;wd_thu&quot;:&quot;DO&quot;,&quot;wd_fri&quot;:&quot;FR&quot;,&quot;wd_sat&quot;:&quot;SA&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Alle %s Abfahrten im Fahrplan ansehen&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Mehr Abfahrten von %1$s und %2$s im Fahrplan ansehen&quot;,&quot;summary_footer_generic&quot;:&quot;Weitere \\u00dcberfahrten im Fahrplan ansehen&quot;,&quot;summary_header&quot;:&quot;Die n\\u00e4chsten zwei Abfahrten:&quot;,&quot;summary_no_upcoming&quot;:&quot;Keine kommenden Abfahrten gefunden&quot;,&quot;more_link&quot;:&quot;Weitere \\u00dcberfahrten&quot;,&quot;more_departures_button&quot;:&quot;Weitere Abfahrten anzeigen&quot;,&quot;day_nav_previous&quot;:&quot;Vorherigen Tag anzeigen&quot;,&quot;day_nav_next&quot;:&quot;N\\u00e4chsten Tag anzeigen&quot;,&quot;day_nav_today&quot;:&quot;Heute anzeigen&quot;,&quot;day_nav_tomorrow&quot;:&quot;Morgen anzeigen&quot;,&quot;local_time_pair&quot;:&quot;Ortszeit Abfahrtshafen: %1$s \\\/ Ortszeit Ankunftshafen: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Ortszeit Abfahrts- &amp; Ankunftshafen: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Oft gebucht&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 Bald abfahrend&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 Derzeit unterwegs&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Angekommen&quot;,&quot;tag_overnight&quot;:&quot;\\u00dcber Nacht&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:{&quot;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\">Datum<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Tage<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">\u00dcberfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">W\u00e4hlen Sie ein Datum und klicken Sie auf \u00dcberfahrten anzeigen<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Wird geladen...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7963287 elementor-widget elementor-widget-text-editor\" data-id=\"7963287\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Fahrplan F\u00e4hre Dover nach Calais<\/h2><p>Diese Tabelle zeigt Abfahrten von Dover nach Calais. Bei der Ankunft in Frankreich ist es eine Stunde sp\u00e4ter als in England. Planen Sie deshalb immer mit der tats\u00e4chlichen Fahrtdauer und nicht nur mit der Differenz zwischen Abfahrts- und Ankunftszeit.<\/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-51bdd81 elementor-widget elementor-widget-shortcode\" data-id=\"51bdd81\" 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\\\/de\\\/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;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;\\u00dcberfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;W\\u00e4hlen Sie ein Datum und klicken Sie auf \\u00dcberfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Wird geladen...&quot;,&quot;status_empty&quot;:&quot;Keine \\u00dcberfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d \\u00dcberfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiff&quot;,&quot;th_op&quot;:&quot;Betreiber&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SO&quot;,&quot;wd_mon&quot;:&quot;MO&quot;,&quot;wd_tue&quot;:&quot;DI&quot;,&quot;wd_wed&quot;:&quot;MI&quot;,&quot;wd_thu&quot;:&quot;DO&quot;,&quot;wd_fri&quot;:&quot;FR&quot;,&quot;wd_sat&quot;:&quot;SA&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Alle %s Abfahrten im Fahrplan ansehen&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Mehr Abfahrten von %1$s und %2$s im Fahrplan ansehen&quot;,&quot;summary_footer_generic&quot;:&quot;Weitere \\u00dcberfahrten im Fahrplan ansehen&quot;,&quot;summary_header&quot;:&quot;Die n\\u00e4chsten zwei Abfahrten:&quot;,&quot;summary_no_upcoming&quot;:&quot;Keine kommenden Abfahrten gefunden&quot;,&quot;more_link&quot;:&quot;Weitere \\u00dcberfahrten&quot;,&quot;more_departures_button&quot;:&quot;Weitere Abfahrten anzeigen&quot;,&quot;day_nav_previous&quot;:&quot;Vorherigen Tag anzeigen&quot;,&quot;day_nav_next&quot;:&quot;N\\u00e4chsten Tag anzeigen&quot;,&quot;day_nav_today&quot;:&quot;Heute anzeigen&quot;,&quot;day_nav_tomorrow&quot;:&quot;Morgen anzeigen&quot;,&quot;local_time_pair&quot;:&quot;Ortszeit Abfahrtshafen: %1$s \\\/ Ortszeit Ankunftshafen: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Ortszeit Abfahrts- &amp; Ankunftshafen: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Oft gebucht&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 Bald abfahrend&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 Derzeit unterwegs&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Angekommen&quot;,&quot;tag_overnight&quot;:&quot;\\u00dcber Nacht&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:{&quot;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\">Datum<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Tage<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">\u00dcberfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">W\u00e4hlen Sie ein Datum und klicken Sie auf \u00dcberfahrten anzeigen<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Wird geladen...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-99e8581 elementor-widget elementor-widget-text-editor\" data-id=\"99e8581\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Wie lange dauert die F\u00e4hre Calais Dover?<\/h2><p>Die F\u00e4hre zwischen Calais und Dover dauert in der Regel etwa 90 bis 100 Minuten. P&amp;O nennt f\u00fcr Dover nach Calais typischerweise rund 90 Minuten, w\u00e4hrend DFDS f\u00fcr Dover nach Calais und Calais nach Dover etwa 100 Minuten angibt. Die tats\u00e4chliche Dauer kann je nach Betreiber, Wetter und Verkehrslage am Hafen abweichen.<\/p><p>Wichtig: Die Uhrzeit in England liegt eine Stunde hinter Frankreich. Bei Calais nach Dover kann die Ankunftszeit deshalb sehr nah an der Abfahrtszeit liegen, obwohl die \u00dcberfahrt rund anderthalb Stunden dauert.<\/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-ed0adbd elementor-widget elementor-widget-text-editor\" data-id=\"ed0adbd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Eurotunnel Calais Folkestone<\/h2><p>Hier finden Sie die Abfahrtszeiten von Le Shuttle zwischen Calais\/Coquelles und Folkestone. Die Tabelle zeigt die Verbindungen pro Reisetag und eignet sich zum Vergleich mit der F\u00e4hre Calais Dover.<\/p><p>Der Eurotunnel ist die schnellste Verbindung auf diesem Korridor f\u00fcr Autos, Motorr\u00e4der, Wohnmobile, Transporter und G\u00fcterverkehr.<\/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-7ddcd9c elementor-widget elementor-widget-shortcode\" data-id=\"7ddcd9c\" 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\\\/de\\\/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;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;\\u00dcberfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;W\\u00e4hlen Sie ein Datum und klicken Sie auf \\u00dcberfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Wird geladen...&quot;,&quot;status_empty&quot;:&quot;Keine \\u00dcberfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d \\u00dcberfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiff&quot;,&quot;th_op&quot;:&quot;Betreiber&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SO&quot;,&quot;wd_mon&quot;:&quot;MO&quot;,&quot;wd_tue&quot;:&quot;DI&quot;,&quot;wd_wed&quot;:&quot;MI&quot;,&quot;wd_thu&quot;:&quot;DO&quot;,&quot;wd_fri&quot;:&quot;FR&quot;,&quot;wd_sat&quot;:&quot;SA&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Alle %s Abfahrten im Fahrplan ansehen&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Mehr Abfahrten von %1$s und %2$s im Fahrplan ansehen&quot;,&quot;summary_footer_generic&quot;:&quot;Weitere \\u00dcberfahrten im Fahrplan ansehen&quot;,&quot;summary_header&quot;:&quot;Die n\\u00e4chsten zwei Abfahrten:&quot;,&quot;summary_no_upcoming&quot;:&quot;Keine kommenden Abfahrten gefunden&quot;,&quot;more_link&quot;:&quot;Weitere \\u00dcberfahrten&quot;,&quot;more_departures_button&quot;:&quot;Weitere Abfahrten anzeigen&quot;,&quot;day_nav_previous&quot;:&quot;Vorherigen Tag anzeigen&quot;,&quot;day_nav_next&quot;:&quot;N\\u00e4chsten Tag anzeigen&quot;,&quot;day_nav_today&quot;:&quot;Heute anzeigen&quot;,&quot;day_nav_tomorrow&quot;:&quot;Morgen anzeigen&quot;,&quot;local_time_pair&quot;:&quot;Ortszeit Abfahrtshafen: %1$s \\\/ Ortszeit Ankunftshafen: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Ortszeit Abfahrts- &amp; Ankunftshafen: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Oft gebucht&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 Bald abfahrend&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 Derzeit unterwegs&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Angekommen&quot;,&quot;tag_overnight&quot;:&quot;\\u00dcber Nacht&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:{&quot;eurotunnel&quot;:&quot;Eurotunnel&quot;},&quot;shipLinks&quot;:[],&quot;showShip&quot;:false,&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\">Datum<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Tage<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">\u00dcberfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">W\u00e4hlen Sie ein Datum und klicken Sie auf \u00dcberfahrten anzeigen<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Wird geladen...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41586e9 elementor-widget elementor-widget-text-editor\" data-id=\"41586e9\" 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 Calais<\/h3>\n\n<p>Hier finden Sie die Abfahrtszeiten von Le Shuttle ab Folkestone nach Calais\/Coquelles. Die Tabelle zeigt die Verbindungen pro Reisetag und bleibt dadurch auch bei vielen Abfahrten \u00fcbersichtlich.<\/p>\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-c3ed55f elementor-widget elementor-widget-shortcode\" data-id=\"c3ed55f\" 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\\\/de\\\/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;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;\\u00dcberfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;W\\u00e4hlen Sie ein Datum und klicken Sie auf \\u00dcberfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Wird geladen...&quot;,&quot;status_empty&quot;:&quot;Keine \\u00dcberfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d \\u00dcberfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiff&quot;,&quot;th_op&quot;:&quot;Betreiber&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;SO&quot;,&quot;wd_mon&quot;:&quot;MO&quot;,&quot;wd_tue&quot;:&quot;DI&quot;,&quot;wd_wed&quot;:&quot;MI&quot;,&quot;wd_thu&quot;:&quot;DO&quot;,&quot;wd_fri&quot;:&quot;FR&quot;,&quot;wd_sat&quot;:&quot;SA&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Alle %s Abfahrten im Fahrplan ansehen&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Mehr Abfahrten von %1$s und %2$s im Fahrplan ansehen&quot;,&quot;summary_footer_generic&quot;:&quot;Weitere \\u00dcberfahrten im Fahrplan ansehen&quot;,&quot;summary_header&quot;:&quot;Die n\\u00e4chsten zwei Abfahrten:&quot;,&quot;summary_no_upcoming&quot;:&quot;Keine kommenden Abfahrten gefunden&quot;,&quot;more_link&quot;:&quot;Weitere \\u00dcberfahrten&quot;,&quot;more_departures_button&quot;:&quot;Weitere Abfahrten anzeigen&quot;,&quot;day_nav_previous&quot;:&quot;Vorherigen Tag anzeigen&quot;,&quot;day_nav_next&quot;:&quot;N\\u00e4chsten Tag anzeigen&quot;,&quot;day_nav_today&quot;:&quot;Heute anzeigen&quot;,&quot;day_nav_tomorrow&quot;:&quot;Morgen anzeigen&quot;,&quot;local_time_pair&quot;:&quot;Ortszeit Abfahrtshafen: %1$s \\\/ Ortszeit Ankunftshafen: %2$s&quot;,&quot;local_time_combined&quot;:&quot;Ortszeit Abfahrts- &amp; Ankunftshafen: %s&quot;,&quot;tag_often_booked&quot;:&quot;\\u2b50 Oft gebucht&quot;,&quot;tag_leaving_soon&quot;:&quot;\\ud83d\\udd34 Bald abfahrend&quot;,&quot;tag_currently_sailing&quot;:&quot;\\ud83d\\udfe2 Derzeit unterwegs&quot;,&quot;tag_arrived&quot;:&quot;\\u26ab Angekommen&quot;,&quot;tag_overnight&quot;:&quot;\\u00dcber Nacht&quot;},&quot;showLogo&quot;:true,&quot;activityBoosters&quot;:true,&quot;shipMap&quot;:{&quot;eurotunnel&quot;:&quot;Eurotunnel&quot;},&quot;shipLinks&quot;:[],&quot;showShip&quot;:false,&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\">Datum<\/label><br>\n      <input id=\"tp-date\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div class=\"tp-day-field\">\n      <label for=\"tp-range\">Tage<\/label><br>\n      <select id=\"tp-range\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load\" class=\"tp-btn\">\u00dcberfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  <div class=\"tp-local-nav-row\">\n    <div class=\"tp-local-times\" id=\"tp-local-times\" aria-live=\"polite\"><\/div>\n    <div class=\"tp-day-nav-host\"><\/div>\n  <\/div>\n  <div id=\"tp-status\" class=\"tp-muted\" aria-live=\"polite\">W\u00e4hlen Sie ein Datum und klicken Sie auf \u00dcberfahrten anzeigen<\/div>\n  <div id=\"tp-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Wird geladen...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date');\n  const daysEl = wrap.querySelector('#tp-range');\n  const btn    = wrap.querySelector('#tp-load');\n  const status = wrap.querySelector('#tp-status');\n  const out    = wrap.querySelector('#tp-results');\n  const loader = wrap.querySelector('.tp-loader');\n  const controls = wrap.querySelector('.tp-controls');\n  const navHost = wrap.querySelector('.tp-day-nav-host');\n  const localTimesEl = wrap.querySelector('#tp-local-times');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n  const activityBoosters = !!cfg.activityBoosters;\n  const daySetup = (cfg.daySetup === 'modern') ? 'modern' : 'classic';\n  const limit10 = !!cfg.limit10;\n  let featuredKey = '';\n  let soonKey = '';\n  let revealAll = false;\n\n  if (daySetup === 'modern') {\n    const dayField = wrap.querySelector('.tp-day-field');\n    if (dayField) dayField.style.display = 'none';\n  }\n\n  dateEl.valueAsDate = new Date();\n  dateEl.min = new Date().toISOString().split('T')[0];\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); } \/\/ short, no year\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function formatZoneTime(tz){\n    if (!tz) return '--:--';\n    try {\n      return new Intl.DateTimeFormat([], {hour:'2-digit', minute:'2-digit', hour12:false, timeZone: tz}).format(new Date());\n    } catch (e) {\n      return '--:--';\n    }\n  }\n\n  function renderLocalTimes(){\n    if (!localTimesEl) return;\n    if (!cfg.departureTimezone || !cfg.arrivalTimezone) {\n      localTimesEl.textContent = '';\n      return;\n    }\n    const depTime = formatZoneTime(cfg.departureTimezone);\n    const arrTime = formatZoneTime(cfg.arrivalTimezone);\n    const pairTpl = L.local_time_pair || 'Departure Port Local Time: %1$s \/ Arrival Port Local Time: %2$s';\n    const combinedTpl = L.local_time_combined || 'Departure & Arrival Port Local Time: %s';\n    if (depTime === arrTime) {\n      localTimesEl.textContent = combinedTpl.replace('%s', depTime);\n      return;\n    }\n    localTimesEl.textContent = pairTpl.replace('%1$s', depTime).replace('%2$s', arrTime);\n  }\n\n  function setStatusInline(html){\n    let box = wrap.querySelector('.tp-controls-status');\n    if (!box) {\n      box = document.createElement('div');\n      box.className = 'tp-controls-status';\n      controls.appendChild(box);\n    }\n    box.innerHTML = html || '';\n  }\n\n  function clearStatusInline(){\n    const box = wrap.querySelector('.tp-controls-status');\n    if (box) box.innerHTML = '';\n  }\n\n  function navHtml(){\n    if (daySetup !== 'modern') return '';\n    const base = new Date(dateEl.value || new Date());\n    const today = new Date();\n    const tomorrow = new Date(today);\n    tomorrow.setDate(today.getDate() + 1);\n    const isToday = base.toDateString() === today.toDateString();\nlet prevLabel = L.day_nav_previous || 'Show previous day';\nlet nextLabel = L.day_nav_next || 'Show next day';\nif (isToday) nextLabel = L.day_nav_tomorrow || 'Show tomorrow';\nif (base.toDateString() === tomorrow.toDateString()) prevLabel = L.day_nav_today || 'Show today';\n    return '<div class=\"tp-day-nav\">'\n      + (isToday ? '' : '<a href=\"#\" data-shift=\"-1\">'+prevLabel+'<\/a>')\n      + '<a href=\"#\" data-shift=\"1\">'+nextLabel+'<\/a>'\n      + '<\/div>';\n  }\n\n  function shiftDate(delta){\n    const base = new Date(dateEl.value || new Date());\n    base.setDate(base.getDate() + delta);\n    dateEl.value = iso(base);\n    load();\n  }\n\n  function moreButtonHtml(hiddenCount){\n    if (!limit10 || revealAll || hiddenCount <= 0) return '';\n    return '<div style=\"margin-top:12px;text-align:center\">'\n      + '<button type=\"button\" class=\"tp-btn tp-more-btn\">'+(L.more_departures_button || 'Show more departures')+' ('+hiddenCount+')<\/button>'\n      + '<\/div>';\n  }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function rowKey(r){\n    return [String(r.opId||''), String(+r.dep||0), String(+r.arr||0), String(r.ship||'')].join('|');\n  }\n\n  function pickFeaturedKey(rows, avoidKey){\n    if (!activityBoosters || !rows.length) return '';\n    const routeSeed = parseInt(cfg.route, 10) || 0;\n    const dateSeed = parseInt(String(dateEl.value || '').replace(\/-\/g,''), 10) || 0;\n\n    let pool = rows;\n    if (avoidKey) {\n      const soonIdx = rows.findIndex(r => rowKey(r) === avoidKey);\n      if (soonIdx >= 0) {\n        const later = rows.slice(soonIdx + 1).filter(r => rowKey(r) !== avoidKey);\n        pool = later.length ? later : rows.filter(r => rowKey(r) !== avoidKey);\n      } else {\n        pool = rows.filter(r => rowKey(r) !== avoidKey);\n      }\n    }\n\n    if (!pool.length) return '';\n    const idx = Math.abs((routeSeed + dateSeed + rows.length) % pool.length);\n    return rowKey(pool[idx]);\n  }\n\n  function pickSoonKey(rows){\n    if (!activityBoosters || !rows.length) return '';\n    const now = Date.now();\n    const todayStr = new Date(now).toDateString();\n    const firstUpcoming = rows.find(r => (r.dep instanceof Date) && r.dep.getTime() > now && r.dep.toDateString() === todayStr);\n    return firstUpcoming ? rowKey(firstUpcoming) : '';\n  }\n\n  function boostersFor(r){\n    if (!activityBoosters) return [];\n    const now = Date.now();\n    const depMs = (r.dep instanceof Date) ? r.dep.getTime() : 0;\n    const arrMs = (r.arr instanceof Date) ? r.arr.getTime() : 0;\n    const depIsToday = (r.dep instanceof Date) && (new Date(now).toDateString() === r.dep.toDateString());\n\n    if (depMs > 0 && arrMs > 0 && depMs <= now && arrMs > now) {\n      return [{cls:'tp-booster-sailing', text:(L.tag_currently_sailing || '\ud83d\udfe2 Currently sailing')}];\n    }\n    if (depIsToday && arrMs > 0 && arrMs <= now) {\n      return [{cls:'tp-booster-arrived', text:(L.tag_arrived || '\u26ab Arrived')}];\n    }\n    if (rowKey(r) === soonKey) return [{cls:'tp-booster-soon', text:(L.tag_leaving_soon || '\ud83d\udd34 Leaving soon')}];\n    if (r.dep && r.arr && r.dep.toDateString() !== r.arr.toDateString()) return [{cls:'tp-booster-overnight', text:(L.tag_overnight || 'Overnight')}];\n\n    return [];\n  }\n\n  function boostersHtml(r, floating){\n    const tags = boostersFor(r);\n    if (!tags.length) return '';\n    const cls = floating ? 'tp-boosters tp-boosters-float' : 'tp-boosters';\n    return '<div class=\"'+cls+'\">' + tags.map(t => '<span class=\"tp-booster '+t.cls+'\">'+boosterLabelHtml(t.text)+'<\/span>').join('') + '<\/div>';\n  }\n\n  function boosterLabelHtml(text){\n    return String(text || '').replace(\/^(\ud83d\udd34|\ud83d\udfe2|\u26ab|\u2b50)\\s*\/, '<span class=\"tp-booster-emoji\">$1<\/span>');\n  }\n\n  function routeTicketHtml(label){\n    const raw = String(label || '').trim();\n    if (!raw) return '';\n    if (cfg.theme !== 'small_cards') return escAttr(raw);\n    const parts = raw.split(\/\\s*[\\-\u2013]\\s*\/, 2);\n    if (parts.length < 2) return escAttr(raw);\n    return escAttr(parts[0]) + '<br>' + escAttr(parts[1]);\n  }\n\n  function escAttr(v){\n    return String(v||'').replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));\n  }\n\n  function bindRowLinks(){\n    if (cfg.theme !== 'max_clickouts') return;\n    out.querySelectorAll('tr.tp-row-link').forEach((row)=>{\n      row.setAttribute('role','link');\n      row.setAttribute('tabindex','0');\n      row.addEventListener('click', (e)=>{\n        if (e.target && e.target.closest('a')) return;\n        const href = row.getAttribute('data-row-link');\n        if (!href) return;\n        window.open(href, '_blank', 'noopener,noreferrer');\n      });\n      row.addEventListener('keydown', (e)=>{\n        if (e.key !== 'Enter' && e.key !== ' ') return;\n        e.preventDefault();\n        row.click();\n      });\n    });\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const clickable = (cfg.theme === 'max_clickouts' && r.opLink);\n      const rowAttr = clickable ? (' class=\"tp-row-link\" data-row-link=\"'+escAttr(r.opLink)+'\"') : '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span>'+boostersHtml(r, false)+'<\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr'+rowAttr+'>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    if (cfg.theme === 'extended_cards') {\n      return renderExtendedCards(rows);\n    }\n\n    const routeName = cfg.label || '';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+boostersHtml(r, true)+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+(showShip ? shipBadge(r.ship) : '')+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator + route label (no book button)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          (routeName ? ('<div class=\"rhs\"><span class=\"tp-route-ticket\">'+routeTicketHtml(routeName)+'<\/span><\/div>') : '<div class=\"rhs\"><\/div>')+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  function renderExtendedCards(rows){\n    const routeName = cfg.label || '';\n    const ctaText = L.more_link || 'More sailings';\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const link = r.opLink ? ('<a class=\"tp-ext-cta\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/a>') : '<span class=\"tp-ext-cta\">'+ctaText+' <span class=\"tp-ext-cta-arrow\">\u00bb<\/span><\/span>';\n      html += '<div class=\"tp-ext-card\">'\n        + boostersHtml(r, true)\n        + '<div class=\"tp-ext-left\">'\n        +   '<div>'+opCell(r)+'<\/div>'\n        +   (showShip ? ('<div>'+shipBadge(r.ship)+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-mid\">'\n        +   '<div class=\"tp-ext-top\"><span class=\"tp-sub\">'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><\/div>'\n        +   '<div class=\"tp-ext-times\"><span class=\"tp-ext-time\">'+hhmm(r.dep)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-dur\">'+dur(r.min)+'<\/span><span class=\"tp-ext-line\"><\/span><span class=\"tp-ext-time\">'+hhmm(r.arr)+'<\/span><\/div>'\n        +   (routeName ? ('<div class=\"tp-ext-route\">'+routeName+'<\/div>') : '')\n        + '<\/div>'\n        + '<div class=\"tp-ext-right\">'+link+'<\/div>'\n        + '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n    const start = new Date(dateEl.value || new Date());\n    const days  = (daySetup === 'modern') ? 1 : Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const url = new URL(cfg.rest); url.searchParams.set('route', String(cfg.route));\n    url.searchParams.set('from', iso(start)); url.searchParams.set('to', iso(end));\n    try{\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) throw new Error('HTTP '+res.status);\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      let rows = list.map(t=>({\n        opId:t.operatorId||null, opName:t.operatorName||'', opLogo:t.operatorLogo||'', opLink:t.operatorLink||'',\n        dep:toLocal(t.departureTime), arr:toLocal(t.arrivalTime), min:t.durationInMinutes||0, ship:t.shipName||''\n      })).sort((a,b)=>a.dep-b.dep);\n      const todayStr = new Date().toDateString();\n      const nowMs = Date.now();\n      const arrivedToday = rows\n        .filter(r => (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs)\n        .sort((a,b) => b.arr - a.arr);\n      if (arrivedToday.length > 2) {\n        const keep = new Set(arrivedToday.slice(0,2).map(rowKey));\n        rows = rows.filter(r => {\n          const isArrivedToday = (r.dep instanceof Date) && (r.arr instanceof Date) && r.dep.toDateString() === todayStr && r.arr.getTime() <= nowMs;\n          return !isArrivedToday || keep.has(rowKey(r));\n        });\n      }\n      if(rows.length===0){ status.textContent = L.status_empty; clearStatusInline(); out.innerHTML=''; return; }\n      const visibleRows = (limit10 && !revealAll && rows.length > 10) ? rows.slice(0,10) : rows;\n      const hiddenCount = rows.length - visibleRows.length;\n      soonKey = pickSoonKey(visibleRows);\n      featuredKey = pickFeaturedKey(visibleRows, soonKey);\n      status.textContent = '';\n      setStatusInline(\n  (L.status_found || '%d sailings found').replace('%d', '<strong>'+rows.length+'<\/strong>')\n);\n      out.innerHTML = renderTable(visibleRows) + renderCards(visibleRows) + moreButtonHtml(hiddenCount);\n      bindRowLinks();\n      if (navHost) navHost.innerHTML = navHtml();\n    }catch(e){\n      status.textContent = 'Failed to load data'; out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    }finally{ setLoader(false); btn.disabled=false; }\n  }\n\n  wrap.addEventListener('click', function(e){\n    const nav = e.target.closest('.tp-day-nav a[data-shift]');\n    if (nav) {\n      e.preventDefault();\n      shiftDate(parseInt(nav.getAttribute('data-shift'),10) || 0);\n      return;\n    }\n    const more = e.target.closest('.tp-more-btn');\n    if (more) {\n      e.preventDefault();\n      revealAll = true;\n      load();\n    }\n  });\n\n  btn.addEventListener('click', load);\n  if (navHost) navHost.innerHTML = navHtml();\n  renderLocalTimes();\n  setInterval(renderLocalTimes, 30000);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1e3eedb elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"1e3eedb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>\u00dcbersicht<\/h2><p>Diese Seite b\u00fcndelt die wichtigsten Abfahrtszeiten auf dem Korridor Calais Dover: die F\u00e4hren zwischen Calais und Dover sowie Le Shuttle durch den Eurotunnel zwischen Calais\/Coquelles und Folkestone. Damit k\u00f6nnen Sie an einem Ort pr\u00fcfen, ob die F\u00e4hre oder der Tunnel besser zu Ihrem Reisetag passt.<\/p><p><strong>F\u00e4hre oder Tunnel?<\/strong> Die F\u00e4hren fahren zwischen Calais und Dover und werden von P&amp;O Ferries, DFDS und Irish Ferries betrieben. Le Shuttle f\u00e4hrt durch den Eurotunnel zwischen Calais\/Coquelles und Folkestone. Die F\u00e4hre ist die direkte Seeverbindung nach Dover, der Tunnel ist meist die schnellere Verbindung f\u00fcr Autos, Motorr\u00e4der, Wohnmobile, Transporter und Fracht.<\/p><p>Die Tabellen sind pro Reisetag aufgebaut. Das h\u00e4lt die \u00dcbersicht lesbar, weil auf dieser Route viele Abfahrten stattfinden. W\u00e4hlen Sie ein anderes Datum, wenn Sie nicht f\u00fcr heute, sondern f\u00fcr einen sp\u00e4teren Reisetag planen.<\/p><p><strong>Wichtig bei kurzfristiger Reise:<\/strong> Der Fahrplan ist der Startpunkt, aber nicht die einzige Kontrolle. Pr\u00fcfen Sie vor der Abfahrt auch Check-in-Zeit, Betreiber, Wetter, Hafenverkehr und m\u00f6gliche St\u00f6rungen. Der <a href=\"https:\/\/www.portofdover.com\/ferry\/\" target=\"_blank\" rel=\"noopener\">Port of Dover<\/a> nennt P&amp;O Ferries, DFDS und Irish Ferries als F\u00e4hrbetreiber ab Dover und bietet zus\u00e4tzlich Informationen zum heutigen F\u00e4hrverkehr.<\/p><p>Wenn eine Abfahrt fehlt, ist sie nicht automatisch gestrichen. Fahrpl\u00e4ne k\u00f6nnen bei Saisonwechseln, Betreiber\u00e4nderungen, starkem Reiseverkehr oder laufenden Aktualisierungen sp\u00e4ter erscheinen. Bei einer bereits gebuchten \u00dcberfahrt gilt immer die Information des jeweiligen Anbieters und Ihre Buchungsbest\u00e4tigung.<\/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\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b76ec66 elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b76ec66\" 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-d87ed00\" data-id=\"d87ed00\" 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-30d9cdc3 elementor-widget elementor-widget-heading\" data-id=\"30d9cdc3\" 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\">Informationen zum 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-4e453c46 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4e453c46\" 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-2edd5356\" data-id=\"2edd5356\" 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-6ae5baba elementor-widget elementor-widget-image\" data-id=\"6ae5baba\" 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-583\" 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-45d07b4b elementor-widget elementor-widget-text-editor\" data-id=\"45d07b4b\" 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>DFDS-Check-in<\/h4><ul><li>60-90 Min. vorab anwesend sein<\/li><li>An arbeitsreichen Tagen: 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-5e1c66fc\" data-id=\"5e1c66fc\" 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-3fc83954 elementor-widget elementor-widget-image\" data-id=\"3fc83954\" 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-6133\" 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-63977bc7 elementor-widget elementor-widget-text-editor\" data-id=\"63977bc7\" 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>P&amp;O Check-in<\/h4><ul><li>Der Check-in schlie\u00dft 90 Minuten vor Fu\u00dfg\u00e4ngerabgang<\/li><li>Der Check-in schlie\u00dft f\u00fcr den \u00fcbrigen Verkehr 60 Minuten vor Abflug<\/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-64dc9f67\" data-id=\"64dc9f67\" 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-64132089 elementor-widget elementor-widget-image\" data-id=\"64132089\" 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-5869\" 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-1d68c8a2 elementor-widget elementor-widget-text-editor\" data-id=\"1d68c8a2\" 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>Irish Ferries Check-in<\/h4><ul><li>F\u00fcr Reisebusse schlie\u00dft der Check-in 90 Minuten vor Abfahrt<\/li><li>F\u00fcr andere Verkehrsmittel schlie\u00dft der Check-in 60 Minuten vor Abfahrt<\/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-39be4a8 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"39be4a8\" 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-06a350a\" data-id=\"06a350a\" 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-ebf6d77 elementor-widget elementor-widget-shortcode\" data-id=\"ebf6d77\" 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-8239 .elementor-element.elementor-element-599bd084:not(.elementor-motion-effects-element-type-background), .elementor-8239 .elementor-element.elementor-element-599bd084 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:transparent;background-image:linear-gradient(167deg, #004080 0%, #00314E 100%);}.elementor-8239 .elementor-element.elementor-element-599bd084{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-8239 .elementor-element.elementor-element-599bd084 > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-8239 .elementor-element.elementor-element-29cd7f5c .elementor-heading-title{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-53e32801{font-size:16px;line-height:25px;color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-27b51a23 img{border-radius:40px 40px 40px 40px;}.elementor-8239 .elementor-element.elementor-element-27b51a23 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8239 .elementor-element.elementor-element-27b51a23{width:auto;max-width:auto;}.elementor-8239 .elementor-element.elementor-element-2f345079 img{border-radius:40px 40px 40px 40px;}.elementor-8239 .elementor-element.elementor-element-2f345079 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8239 .elementor-element.elementor-element-2f345079{width:auto;max-width:auto;}.elementor-8239 .elementor-element.elementor-element-1b56ba5a img{border-radius:40px 40px 40px 40px;}.elementor-8239 .elementor-element.elementor-element-1b56ba5a > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8239 .elementor-element.elementor-element-1b56ba5a{width:auto;max-width:auto;}.elementor-8239 .elementor-element.elementor-element-4708e2d1 img{border-radius:40px 40px 40px 40px;}.elementor-8239 .elementor-element.elementor-element-4708e2d1 > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8239 .elementor-element.elementor-element-4708e2d1{width:auto;max-width:auto;}.elementor-8239 .elementor-element.elementor-element-5c00559f img{border-radius:40px 40px 40px 40px;}.elementor-8239 .elementor-element.elementor-element-5c00559f > .elementor-widget-container{padding:3px 3px 3px 3px;}.elementor-8239 .elementor-element.elementor-element-5c00559f{width:auto;max-width:auto;}.elementor-8239 .elementor-element.elementor-element-319eb731{text-align:end;top:69px;}.elementor-8239 .elementor-element.elementor-element-319eb731 img{width:64%;max-width:53%;}body:not(.rtl) .elementor-8239 .elementor-element.elementor-element-319eb731{left:1053px;}body.rtl .elementor-8239 .elementor-element.elementor-element-319eb731{right:1053px;}.elementor-8239 .elementor-element.elementor-element-319eb731 > .elementor-widget-container{--e-transform-flipX:-1;}.elementor-8239 .elementor-element.elementor-element-16f9ee56 > .elementor-element-populated{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-16f9ee56 .elementor-element-populated a{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-21eeaf2c .elementor-heading-title{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-4d791007{font-size:16px;text-decoration:none;line-height:25px;color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-7a9ee0df .elementor-heading-title{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-3e414f13{font-size:16px;text-decoration:none;line-height:25px;color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-2b1d2773 > .elementor-element-populated{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-2b1d2773 .elementor-element-populated a{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-2b1d2773 .elementor-element-populated a:hover{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-1aafe18f .elementor-heading-title{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-25c0ed7b{font-size:16px;text-decoration:none;line-height:25px;color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-36380b8f .elementor-heading-title{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-2b49ecf9{font-size:16px;text-decoration:none;line-height:25px;color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-13a40405 > .elementor-element-populated{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-13a40405 .elementor-element-populated a{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-13a40405 .elementor-element-populated a:hover{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-33b2220c .elementor-heading-title{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-1c7b167e{font-size:16px;text-decoration:none;line-height:25px;color:#FFFFFF;z-index:2;}.elementor-8239 .elementor-element.elementor-element-1ad848b1 .elementor-heading-title{color:#FFFFFF;}.elementor-8239 .elementor-element.elementor-element-5babbf65 .elementor-icon-list-icon i{color:#FFFFFF;transition:color 0.3s;}.elementor-8239 .elementor-element.elementor-element-5babbf65 .elementor-icon-list-icon svg{fill:#FFFFFF;transition:fill 0.3s;}.elementor-8239 .elementor-element.elementor-element-5babbf65{--e-icon-list-icon-size:14px;--icon-vertical-align:flex-start;--icon-vertical-offset:5px;}.elementor-8239 .elementor-element.elementor-element-5babbf65 .elementor-icon-list-item > .elementor-icon-list-text, .elementor-8239 .elementor-element.elementor-element-5babbf65 .elementor-icon-list-item > a{font-size:16px;}.elementor-8239 .elementor-element.elementor-element-5babbf65 .elementor-icon-list-text{color:#FFFFFF;transition:color 0.3s;}@media(min-width:768px){.elementor-8239 .elementor-element.elementor-element-2dc7d25a{width:35%;}.elementor-8239 .elementor-element.elementor-element-16f9ee56{width:21.6%;}.elementor-8239 .elementor-element.elementor-element-2b1d2773{width:21.6%;}.elementor-8239 .elementor-element.elementor-element-13a40405{width:21.8%;}}@media(max-width:767px){.elementor-8239 .elementor-element.elementor-element-599bd084{margin-top:50px;margin-bottom:0px;}body:not(.rtl) .elementor-8239 .elementor-element.elementor-element-319eb731{left:-51px;}body.rtl .elementor-8239 .elementor-element.elementor-element-319eb731{right:-51px;}.elementor-8239 .elementor-element.elementor-element-319eb731{top:938px;z-index:0;}}<\/style>\t\t<div data-elementor-type=\"page\" data-elementor-id=\"8239\" class=\"elementor elementor-8239\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-599bd084 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"599bd084\" 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-2dc7d25a\" data-id=\"2dc7d25a\" 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-29cd7f5c elementor-widget elementor-widget-heading\" data-id=\"29cd7f5c\" 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\">\u00dcber uns<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-53e32801 elementor-widget elementor-widget-text-editor\" data-id=\"53e32801\" 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>Der ultimative Leitfaden f\u00fcr Reisende von Calais nach Dover, die k\u00fcrzeste Strecke, die Sie mit der F\u00e4hre oder dem Zug von Frankreich nach England zur\u00fccklegen k\u00f6nnen.<\/p><p>Vergleichen Sie auf Calais-Dover.com Tickets von P&amp;O Ferries, Irish Ferries, DFDS und Eurotunnel.<\/p><ul><li><a href=\"https:\/\/calais-dover.com\/de\/impressum\/\">Impressum<\/a><\/li><\/ul>\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-27b51a23 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"27b51a23\" 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-2-1-qq4dau1823bjo6q654jzu2ejwlj4pfo6uxge10n2wk.jpg\" title=\"eurotunnel-le-shuttle-2.jpg\" alt=\"eurotunnel-le-shuttle-2.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-2f345079 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"2f345079\" 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-2-1-qq4das5jof8z0yswg3qqp2vmptsea1gq6o5f2gpv90.jpg\" title=\"irish-ferries-logo-2.jpg\" alt=\"irish-ferries-logo-2.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-1b56ba5a elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"1b56ba5a\" 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-1-1-qq4dar7phl7opcu9llc44l464fx12cczujhxl6r9f8.jpg\" title=\"dfds-logo-1.jpg\" alt=\"dfds-logo-1.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-4708e2d1 elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"4708e2d1\" 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-1-1-qq4dapc13x5424wzwkiuzll8xo6amy5j6a6ymmu1ro.jpg\" title=\"po-ferries-logo-1.jpg\" alt=\"po-ferries-logo-1.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-5c00559f elementor-widget__width-auto elementor-widget elementor-widget-image\" data-id=\"5c00559f\" 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-2-1-qq4davwwfre4benfu5d8z1xh3d9v4tvnj6rczkkak4.jpg\" title=\"Eurostar-logo-2.jpg\" alt=\"Eurostar-logo-2.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-319eb731 elementor-absolute e-transform elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"319eb731\" 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-1-1.png\" title=\"zeemeeuw-1.png\" alt=\"zeemeeuw-1.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-16f9ee56\" data-id=\"16f9ee56\" 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-21eeaf2c elementor-widget elementor-widget-heading\" data-id=\"21eeaf2c\" 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\">Reiseinformation<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4d791007 elementor-widget elementor-widget-text-editor\" data-id=\"4d791007\" 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><a href=\"https:\/\/calais-dover.com\/de\/fahrpreis\/\">Preise<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/\">F\u00e4hrplan<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-webcams-wetter\/\">Wetter und Webcams<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/calais-hafen\/\">Calais Hafen<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/dover-hafen\/\">Dover Hafen<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/parken-calais-hafen\/\">Parken in Calais<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/autofahren-in-england\/\">Autofahren in England<\/a><\/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-7a9ee0df elementor-widget elementor-widget-heading\" data-id=\"7a9ee0df\" 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\">Transportf\u00fchrer\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e414f13 elementor-widget elementor-widget-text-editor\" data-id=\"3e414f13\" 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><a href=\"https:\/\/calais-dover.com\/de\/fuspassagiere\/\">Ohne Fahrzeug<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/calais-dover-mit-dem-auto\/\">Mit Auto<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/mit-der-wohwagen-nach-england\/\">Mit Wohnwagen<\/a><\/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-2b1d2773\" data-id=\"2b1d2773\" 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-1aafe18f elementor-widget elementor-widget-heading\" data-id=\"1aafe18f\" 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\">F\u00e4hrbetreiber<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25c0ed7b elementor-widget elementor-widget-text-editor\" data-id=\"25c0ed7b\" 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><a href=\"https:\/\/calais-dover.com\/de\/dfds\/\">DFDS<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/po-ferries\/\">P&amp;O Ferries<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/irish-ferries\/\">Irish Ferries<\/a><\/p><p><a href=\"https:\/\/calais-dover.com\/de\/vergleichen\/\">Vergleichen Sie F\u00e4hren<\/a><\/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-36380b8f elementor-widget elementor-widget-heading\" data-id=\"36380b8f\" 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\">Mit dem Tunnel<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b49ecf9 elementor-widget elementor-widget-text-editor\" data-id=\"2b49ecf9\" 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><a href=\"https:\/\/calais-dover.com\/de\/tunnel-nach-engeland\/\">Eurotunnel<\/a><\/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-13a40405\" data-id=\"13a40405\" 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-33b2220c elementor-widget elementor-widget-heading\" data-id=\"33b2220c\" 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-1c7b167e elementor-widget elementor-widget-text-editor\" data-id=\"1c7b167e\" 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><a href=\"https:\/\/calais-dover.com\/de\/ueber-uns\/\">\u00dcber uns<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/kontakt\/\">Kontakt<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/datenschutzerklarung\/\">Datenschutzerkl\u00e4rung<\/a><br \/><a href=\"https:\/\/calais-dover.com\/de\/haftungsausschluss\/\">Haftungsausschluss<\/a><\/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-1ad848b1 elementor-widget elementor-widget-heading\" data-id=\"1ad848b1\" 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\">Firmendetails<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5babbf65 elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"5babbf65\" 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=\"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>Aktuelle Abfahrten heute, Dauer der \u00dcberfahrt und Fahrpl\u00e4ne f\u00fcr P&amp;O, DFDS und Irish Ferries.<\/p>\n","protected":false},"author":1,"featured_media":6441,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2541","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>F\u00e4hre Calais Dover Fahrplan heute | Zeiten &amp; Dauer<\/title>\n<meta name=\"description\" content=\"Pr\u00fcfen Sie den Fahrplan der F\u00e4hre Calais Dover heute. Mit Abfahrtszeiten, Dauer, Check-in und Hinweisen zu P&amp;O, DFDS und Irish Ferries.\" \/>\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\/de\/calais-dover-fahrplan\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"F\u00e4hre Calais Dover Fahrplan heute | Zeiten &amp; Dauer\" \/>\n<meta property=\"og:description\" content=\"Pr\u00fcfen Sie den Fahrplan der F\u00e4hre Calais Dover heute. Mit Abfahrtszeiten, Dauer, Check-in und Hinweisen zu P&amp;O, DFDS und Irish Ferries.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/\" \/>\n<meta property=\"og:site_name\" content=\"Calais-Dover.com\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-09T14:11:57+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=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"4\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/calais-dover-fahrplan\\\/\",\"url\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/calais-dover-fahrplan\\\/\",\"name\":\"F\u00e4hre Calais Dover Fahrplan heute | Zeiten & Dauer\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/calais-dover-fahrplan\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/calais-dover-fahrplan\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/calais-dover.com\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/timetable-calais-dover.jpg\",\"datePublished\":\"2023-07-05T11:25:43+00:00\",\"dateModified\":\"2026-06-09T14:11:57+00:00\",\"description\":\"Pr\u00fcfen Sie den Fahrplan der F\u00e4hre Calais Dover heute. Mit Abfahrtszeiten, Dauer, Check-in und Hinweisen zu P&O, DFDS und Irish Ferries.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/calais-dover-fahrplan\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/calais-dover.com\\\/de\\\/calais-dover-fahrplan\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/calais-dover-fahrplan\\\/#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\":\"Fahrplan von DFDS\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/calais-dover-fahrplan\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Calais-Dover.com\",\"item\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"F\u00e4hre Calais Dover Fahrplan\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/\",\"name\":\"Calais-Dover.com\",\"description\":\"From Dover to Calais\",\"publisher\":{\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/#organization\",\"name\":\"Calais-Dover.com\",\"url\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/calais-dover.com\\\/de\\\/#\\\/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\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"F\u00e4hre Calais Dover Fahrplan heute | Zeiten & Dauer","description":"Pr\u00fcfen Sie den Fahrplan der F\u00e4hre Calais Dover heute. Mit Abfahrtszeiten, Dauer, Check-in und Hinweisen zu P&O, DFDS und Irish Ferries.","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\/de\/calais-dover-fahrplan\/","og_locale":"de_DE","og_type":"article","og_title":"F\u00e4hre Calais Dover Fahrplan heute | Zeiten & Dauer","og_description":"Pr\u00fcfen Sie den Fahrplan der F\u00e4hre Calais Dover heute. Mit Abfahrtszeiten, Dauer, Check-in und Hinweisen zu P&O, DFDS und Irish Ferries.","og_url":"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/","og_site_name":"Calais-Dover.com","article_modified_time":"2026-06-09T14:11:57+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":{"Gesch\u00e4tzte Lesezeit":"4\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/","url":"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/","name":"F\u00e4hre Calais Dover Fahrplan heute | Zeiten & Dauer","isPartOf":{"@id":"https:\/\/calais-dover.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/#primaryimage"},"image":{"@id":"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/#primaryimage"},"thumbnailUrl":"https:\/\/calais-dover.com\/wp-content\/uploads\/2024\/06\/timetable-calais-dover.jpg","datePublished":"2023-07-05T11:25:43+00:00","dateModified":"2026-06-09T14:11:57+00:00","description":"Pr\u00fcfen Sie den Fahrplan der F\u00e4hre Calais Dover heute. Mit Abfahrtszeiten, Dauer, Check-in und Hinweisen zu P&O, DFDS und Irish Ferries.","breadcrumb":{"@id":"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/#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":"Fahrplan von DFDS"},{"@type":"BreadcrumbList","@id":"https:\/\/calais-dover.com\/de\/calais-dover-fahrplan\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Calais-Dover.com","item":"https:\/\/calais-dover.com\/de\/"},{"@type":"ListItem","position":2,"name":"F\u00e4hre Calais Dover Fahrplan"}]},{"@type":"WebSite","@id":"https:\/\/calais-dover.com\/de\/#website","url":"https:\/\/calais-dover.com\/de\/","name":"Calais-Dover.com","description":"From Dover to Calais","publisher":{"@id":"https:\/\/calais-dover.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/calais-dover.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/calais-dover.com\/de\/#organization","name":"Calais-Dover.com","url":"https:\/\/calais-dover.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/calais-dover.com\/de\/#\/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\/de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/calais-dover.com\/de\/wp-json\/wp\/v2\/pages\/2541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/calais-dover.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/calais-dover.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/calais-dover.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/calais-dover.com\/de\/wp-json\/wp\/v2\/comments?post=2541"}],"version-history":[{"count":5,"href":"https:\/\/calais-dover.com\/de\/wp-json\/wp\/v2\/pages\/2541\/revisions"}],"predecessor-version":[{"id":9857,"href":"https:\/\/calais-dover.com\/de\/wp-json\/wp\/v2\/pages\/2541\/revisions\/9857"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/calais-dover.com\/de\/wp-json\/wp\/v2\/media\/6441"}],"wp:attachment":[{"href":"https:\/\/calais-dover.com\/de\/wp-json\/wp\/v2\/media?parent=2541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}