1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="utf-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1" /> 7 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 8 <title data-react-helmet="true">Trainline App | Check train times, book tickets, save time & money</title> 9 <meta data-react-helmet="true" name="description" content="Find out more about the Trainline, Europeâs leading train, and coach app here. Get live times, tickets and platform info in your pocket."/><meta data-react-helmet="true" name="robots" content="index,follow"/><meta data-react-helmet="true" property="og:site_name" content="Trainline"/><meta data-react-helmet="true" property="og:title" content="Trainline App | Check train times, book tickets, save time & money"/><meta data-react-helmet="true" property="og:description" content="Find out more about the Trainline, Europeâs leading train, and coach app here. Get live times, tickets and platform info in your pocket."/><meta data-react-helmet="true" property="og:image" content="https://www.thetrainline.com/cms/media/1255/man_phone-hero_mobile.jpg"/><meta data-react-helmet="true" property="og:url" content="https://www.thetrainline.com/information/apps"/><meta data-react-helmet="true" property="fb:app_id" content="431799653605766"/><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"/><meta data-react-helmet="true" name="twitter:site" content="@thetrainline"/> 10
10<script> 11 if("PerformancePaintTiming" in window){var observer=new PerformanceObserver(function(r){var e=!0,n=!1,t=void 0;try{for(var a,i=r.getEntries()[Symbol.iterator]();!(e=(a=i.next()).done);e=!0){var o=a.value;"first-contentful-paint"===o.name&&(window.fcp=Math.round(o.startTime+o.duration))}}catch(r){n=!0,t=r}finally{try{e||null==i.return||i.return()}finally{if(n)throw t}}});observer.observe({entryTypes:["paint"]})} 12 !function(){if("PerformanceLongTaskTiming" in window){var g=window.__tti={e:[]}; 13 g.o=new PerformanceObserver(function(l){g.e=g.e.concat(l.getEntries())}); 14 g.o.observe({entryTypes:["longtask"]})}}(); 15 </script>
15 16 <link rel="preload" as="script" href="https://dd.thetrainline.com/tags.js">
16<script>function pushDataDomeEvent(eventAction, eventLabel, customGenericValues) { 17 if (window.dataLayer && window.__ANALYTICS_CORE_PROPERTIES__) { 18 const coreProperties = typeof window.__ANALYTICS_CORE_PROPERTIES__ === 'object' ? window.__ANALYTICS_CORE_PROPERTIES__ : {}; 19 const globalGenericValues = { globalGV1: coreProperties.genericValue1, globalGV2: coreProperties.genericValue2, globalGV3: coreProperties.genericValue3 }; 20 21 const corePropertiesWithGenericValues = { 22 ...coreProperties, 23 genericValue1: JSON.stringify(customGenericValues), 24 genericValue2: JSON.stringify(globalGenericValues), 25 } 26 27 window.dataLayer.push({ 28 coreProperties: corePropertiesWithGenericValues, 29 event: 'generic event', 30 eventProperties: { 31 eventAction: eventAction, 32 eventCategory: 'Datadome', 33 eventLabel: eventLabel, 34 }, 35 }) 36 } 37 }; 38 39 window.addEventListener("dd_ready", function (event) { 40 if (window) { 41 window.datadomeReady = true; 42 43 if (window.newrelic && window.newrelic.addPageAction) { 44 window.newrelic.addPageAction("datadomeReady", { ...event.detail }); 45 } 46 47 try { 48 window.performance.mark("PERF_DD_READY"); 49 } catch (error) { 50 // noop 51 } 52 } 53 54 }, { once: true }); 55 56 window.addEventListener("dd_captcha_displayed", function (event) { 57 pushDataDomeEvent("dd_captcha_displayed", "datadome SDK fired captcha_displayed event", { ...event.detail }); 58 59 if (window && window.newrelic && window.newrelic.addPageAction) { 60 window.newrelic.addPageAction("datadomeCaptchaDisplayed", { ...event.detail }); 61 } 62 }); 63 64 window.addEventListener("dd_captcha_passed", function (event) { 65 pushDataDomeEvent("dd_captcha_passed", "datadome SDK fired captcha_passed event"); 66 67 if (window && window.newrelic && window.newrelic.addPageAction) { 68 window.newrelic.addPageAction("datadomeCaptchaPassed", { ...event.detail }); 69 } 70 }); 71 72 window.addEventListener("dd_response_error", function (event) { 73 pushDataDomeEvent("dd_response_error", "datadome SDK fired response_error event", { ...event.detail }); 74 75 if (window && window.newrelic && window.newrelic.addPageAction) { 76 const { rootElement: omitted, ...rest } = event.detail; 77 window.newrelic.addPageAction("datadomeError", { ...rest }); 78 } 79 }); 80 81 window.addEventListener("dd_blocked", function (event) { 82 pushDataDomeEvent("dd_blocked", "datadome SDK fired response_blocked event for request - " + event.detail.url, { ...event.detail }); 83 84 if (window && window.newrelic && window.newrelic.addPageAction) { 85 window.newrelic.addPageAction("datadomeBlocked", { ...event.detail }); 86 } 87 }); 88 89 window.addEventListener("dd_response_displayed", function (event) { 90 pushDataDomeEvent("dd_response_displayed", "datadome SDK fired response_displayed event for request", { ...event.detail }); 91 92 if (window && window.newrelic && window.newrelic.addPageAction) { 93 const { rootElement: omitted, ...rest } = event.detail; 94 window.newrelic.addPageAction("datadomeResponseDisplayed", { ...rest }); 95 } 96 }); 97 98 window.addEventListener("dd_response_passed", function (event) { 99 pushDataDomeEvent("dd_response_passed", "datadome SDK fired response_passed event for request", { ...event.detail }); 100 101 if (window && window.newrelic && window.newrelic.addPageAction) { 102 window.newrelic.addPageAction("datadomeChallengePassed", { ...event.detail }); 103 } 104 }); 105window.ddjskey = 'E1950F58FF4C3B67C237DE42A4D080'; 106window.ddoptions = { 107 enableTagEvents: true, 108 ajaxListenerPath: true, 109 endpoint: 'https://dd.thetrainline.com/js/', 110 overrideAbortFetch: true 111};</script>
vendor: 1 bytes, line 111
111
112<script src="https://dd.thetrainline.com/tags.js" async></script>
112 113
113<script type="text/javascript" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async></script>
113 114
114<script type='text/javascript' >window.NREUM||(NREUM={});NREUM.info = {"agent":"","beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"80752ce357","applicationID":"563468445","applicationTime":71.219949,"transactionName":"YVxWMhRZW0JYBhVYXFgWcR4WSlBCSg8SHnRzbRtJTA==","queueTime":0,"ttGuid":"eda2836543dcfd5e","agentToken":null}; (window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:[]},session_trace:{sampling_rate:10.0,mode:"FIXED_RATE",enabled:true,error_sampling_rate:100.0},performance:{capture_marks:true,capture_detail:true,capture_measures:true}};(window.NREUM||(NREUM={})).loader_config={xpid:"UAcAUVNUGwYGV1VUDwUDUw==",licenseKey:"80752ce357",applicationID:"563468445",browserID:"574821188"};;/*! For license information please see nr-loader-full-1.322.0.min.js.LICENSE.txt */ 115(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let a in s)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.322.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
115e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof a.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{a[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[a[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,o,()=>new s.y(o)):new s.y(o)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(a[r]=a[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},9119(e,t,r){"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},7485(e,t,r){"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
115const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>S,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
115if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,R(e,t)}function R(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function w(e,t,r,n,i){if(R(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(w(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(w(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function S(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let R=0,w=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(R=R>0?Math.min(R,e):e),t&&(w=w>0?Math.max(w,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return R>0?Math.min(e,R):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return w>0?Math.max(e,w):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
115o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,a.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){u([e],r)}for(var n in e)o.call(e,n)&&(t[n]=e[n])}
115(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
115;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({95:"nr-full-compressor",222:"nr-full-recorder",649:"nr-full-iframe-message-handler",89
1151:"nr-full"}[e]+"-1.322.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.322.0.PROD:";r.l=(n,i,s,a)=>{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={891:"sha512-YFF+tf82v8eglmCSz5XYYPZ9svAEVPEL8CjIs/VJ5WDjxajLkBKoCp6iBhqtcYRu8v8sXwAWX58PGV4RVzB2dQ==",222:"sha512-y0XrI32v2ZxZdktMLngwYUsETp/i/aYkdx9JOeIAmr2KYJdlDneMKYdNwPaZiOX3gb7AXywTby7jg1okwEkArw==",95:"sha512-WtCe89dmBu8YGhCnszRdHzYCzOqwTSeitVhY/ahmZczjI+0C6KOazsnU/vPsTDaM7VSG+iZW7zidI1t5+hpiYQ==",649:"sha512-AYJxsYTPRDF5tWSm4lWONX5VM69Ou9twLFZ8apchUI9gNOrXBkzP8QZ+PQkMz8nGjh/7oVMR+1cA+5dWFYhmmw=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={85:0,959:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.322.0.PROD"]=self["webpackChunk:NRBA-1.322.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
115ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,l.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++v},listeningForIframeMessages:!1};var R=r(9232);var w=r(7836),T=r(3241);const S={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var A=r(9908),x=r(9752);function _(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,S)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:R.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=w.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,A.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var O=r(1863),k=r(4261),L=r(1738);var M=r(1687),P=r(4234),N=r(5289),j=r(5270),I=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends P.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,C.J)(()=>{(0,M.Ak)(e,this.featureName),t()}))}):(0,M.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
115{if((0,I.V)(e.init))try{const{setupAgentSession:t}=await r.e(891).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,A.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(649).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(891).then(r.bind(r,6589)),r.e(891).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,M.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,M.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,N.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,j.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}_(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,L.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,A.p)("api-"+k.Fw,[(0,O.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(891).then(r.bind(r,908)):r.e(891).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,N.sB)(t=>{e(t,"DOMContentLoaded")}),(0,N.GG)(t=>{e(t,"load")}),(0,N.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),_(this,e,e.loaderType||"agent"),t=this,(0,L.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,L.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,L.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,A.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,L.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,L.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,L.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,L.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,L.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,A.p)("api-"+k.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,A.p)("docHidden",[(0,O.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,A.p)("winPagehide",[(0,O.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(891).then(r.bind(r,9018))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(891).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,O.t)()){"string"==typeof e&&(e=new Error(e)),(0,A.p)("err",[e,s,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,A.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,O.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,O.t)()){(0,A.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,O.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
115null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,A.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,O.t)()){(0,A.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,O.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,O.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,O.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const Re=["entry","scripts","all"],we=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Se={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Ae(e){(0,L.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Se.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=R.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:R.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||Re.includes(r.timingMethod)||(Se.invalidTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||R.f.BA,"parent.id":r.parent?.id})}
115),Object.entries(r.tags).forEach(([e,t])=>{we.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Se.disabled),u(r.id)&&u(r.name)||d(()=>Se.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Se.duplicateName(r),n===r.id&&t!==r.name&&Se.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Se.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,O.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
115imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,O.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,A.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class _e extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,L.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,L.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,L.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Ae(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,A.p)("ierr",[ee(t),(0,O.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,A.p)("err",[te(t),(0,O.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,A.p)("err",[re(t),(0,O.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(891).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var Oe=r(8990);let ke=1;function Le(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,Oe.I)(e,"nr@id",function(){return ke++})}function Me(e){if("string"==typeof e)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,X.A)(e).length}catch(e){return}}}var Pe=r(8139),Ne=r(3434),je=r(5732);const Ie={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||w.ee;const n=function(e){return(e||w.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(Ie[n.debugId]++)return n;Ie[n.debugId]=1,(0,Pe.u)(r,t);var i=(0,Ne.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,je.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||w.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,je.$5)(t);var o;r.emit(i+"before-start",[e],n),n[w.P]&&n[w.P].dt&&(o=n[w.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
115return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s=(0,ye.ZF)(),a=(0,ye.el)(),o=Date.now(),c={spanId:s,traceId:a,timestamp:o};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(c.traceContextParentHeader=this.generateTraceContextParentHeader(s,a),c.traceContextStateHeader=this.generateTraceContextStateHeader(s,o,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(c.newrelicHeader=this.generateTraceHeader(s,a,o,r,n,i)),c}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,Ge.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(e),this.handler=(e,t,r,n)=>(0,A.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=S,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){_(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Me(i);a&&(n.txSize=a)}this.startTime=(0,O.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
115!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+Le(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Le(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,O.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,O.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,O.t)()-this.xhrCbStart,this.onload,t],t)}function R(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,Ge.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function w(e,t){this.params={},this.metrics={},this.startTime=(0,O.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Me(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,O.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Me(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function S(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):_(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Me(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function _(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?Me(e.response):"text"===r||""===r||void 0===r?Me(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,A.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",R),r.on("fetch-start",w),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(891).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||w.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Ne.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,L.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,A.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,A.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,L.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,A.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
115if(!(0,I.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Pe.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,O.t)()}),this.eventsEE.on(pt,function(e,r){(0,A.p)("bst",[e[0],r,this.bstStart,(0,O.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,O.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,A.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,A.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(891).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,L.Y)(k.CH,function(){(0,A.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,L.Y)(k.Tb,function(){(0,A.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,j.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(891).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,A.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,j.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(891),r.e(222)]).then(r.bind(r,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var Rt=r(981);const wt={},Tt=new Set;function St(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class At{constructor(e,t){this.timestamp=(0,O.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class xt extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,n,s];var c;let d;if(c=e,(0,L.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,L.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Ae(e),function(e){(0,L.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(wt[r.debugId]++)return r;wt[r.debugId]=1,(0,V.G)(()=>{const e=(0,O.t)();Tt.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
115class n extends WebSocket{static name=Rt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new At(e[0],e[1]),this.targets=(0,je.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,O.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),Tt.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=St(e.data);this.nrData.messageOrigin??=(0,Ee.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,O.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,Tt.delete(this),r.emit("ws",[this.nrData,this.targets],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=St(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,A.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,A.p)("spv",[_t(e),(0,O.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,A.p)("spv",[_t(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,A.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
115h(e=>{const t=(0,C.s)(e=>{(0,A.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,A.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,A.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,A.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,A.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(891).then(r.bind(r,8019))):this.deregisterDrain()}}function _t(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Ot=r(2646);const kt=new Map;function Lt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||w.ee).get("logger")}(e),o=(0,Ne.YM)(a,void 0,s),c=new Ot.y(w.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Ne.Jt]||t[r];return kt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>kt.get(d),void 0,!0),a}var Mt=r(1910);class Pt extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,L.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,L.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Lt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Ae(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Mt.i)(g.gm.console[t]),Lt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(891).then(r.bind(r,5288)))}}new F({features:[K,G,vt,Et,nt,Y,_e,xt,Pt],loaderType:"pro"})})()})();</script>
115 116 <link data-react-helmet="true" rel="preload" as="image" href="https://www.thetrainline.com/cms/media/1255/man_phone-hero_mobile.jpg" media="(max-width: 767.9px)"/><link data-react-helmet="true" rel="preload" as="image" href="https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg" media="(min-width: 768px) and (-webkit-max-device-pixel-ratio: 1.99) and (max-width: 1439.9px), (min-width: 768px) and (max-resolution: 191dpi) and (max-width: 1439.9px)"/><link data-react-helmet="true" rel="preload" as="image" href="https://www.thetrainline.com/cmsmedia/cms/9486/man_phone-hero_2x.jpg" media="(min-width: 768px) and (-webkit-min-device-pixel-ratio: 2), (min-width: 768px) and (min-resolution: 192dpi), (min-width: 1440px)"/><link data-react-helmet="true" rel="canonical" href="https://www.thetrainline.com/information/apps"/><link data-react-helmet="true" rel="alternate" hrefLang="fr" href="https://www.thetrainline.com/fr/information/trainline-eu-app"/><link data-react-helmet="true" rel="alternate" hrefLang="en" href="https://www.thetrainline.com/information/apps"/><link data-react-helmet="true" rel="alternate" hrefLang="it" href="https://www.thetrainline.com/it/informazioni/trainline-app"/><link data-react-helmet="true" rel="alternate" hrefLang="es" href="https://www.thetrainline.com/es/informacion/trainline-app"/><link data-react-helmet="true" rel="alternate" hrefLang="de" href="https://www.thetrainline.com/de/info/trainline-app"/><link data-react-helmet="true" rel="alternate" hrefLang="x-default" href="https://www.thetrainline.com/information/apps"/> 117 118 <link rel="icon" href="https://static.trainlinecontent.com/content/WEB/images/favicon.ico" sizes="32x32" /> 119 <link rel="icon" href="https://static.trainlinecontent.com/content/WEB/images/favicon.ico" sizes="16x16" /> 120 <link rel="apple-touch-icon" href="https://static.trainlinecontent.com/content/WEB/images/favicon.ico" /> 121 <link rel="shortcut icon" href="https://static.trainlinecontent.com/content/WEB/images/favicon.ico" /> 122 123 <link rel="preload" href="https://www.thetrainline.com/content/WEB/fonts/tl-circular-1.0.1/TLCircular-Bold.woff2" as="font" type="font/woff2" crossorigin> 124 125 <style data-critical-css>:root { 126 --dp_r2: 0.125rem; 127 --dp_r4: 0.25rem; 128 --dp_r8: 0.5rem; 129 --dp_r12: 0.75rem; 130 --dp_r16: 1rem; 131} 132 133:root { 134 --dp_font_weight_regular: 400; 135 --dp_font_weight_medium: 500; 136 --dp_font_weight_semibold: 600; 137 --dp_font_weight_bold: 700; 138} 139 140@font-face { 141 font-display: swap; 142 font-family: TLCircular; 143 font-style: normal; 144 font-weight: 700; 145 src: url("https://www.thetrainline.com/content/WEB/fonts/tl-circular-1.0.1/TLCircular-Bold.woff2") 146 format("woff2"), 147 url("https://www.thetrainline.com/content/WEB/fonts/tl-circular-1.0.1/TLCircular-Bold.woff") 148 format("woff"); 149} 150 151:root { 152 --dp_opacity_0_02: 0.02; 153 --dp_opacity_0_04: 0.04; 154 --dp_opacity_0_08: 0.08; 155 --dp_opacity_0_12: 0.12; 156 --dp_opacity_0_24: 0.24; 157 --dp_opacity_0_4: 0.4; 158 --dp_opacity_0_48: 0.48; 159 --dp_opacity_0_64: 0.64; 160 --dp_opacity_0_8: 0.8; 161 --dp_opacity_1: 1; 162} 163 164:root { 165 --dp_shadows_normal_lifting: 0px 2px 6px 0px rgba(5, 45, 18, 0.12), 166 0px 0px 4px 0px rgba(5, 45, 18, 0.12); 167 --dp_shadows_normal_floating: 0px 4px 8px 0px rgba(5, 45, 18, 0.12), 168 0px 0px 4px 0px rgba(5, 45, 18, 0.12); 169 --dp_shadows_normal_flying: 0px 4px 16px 0px rgba(5, 45, 18, 0.12), 170 0px 0px 4px 0px rgba(5, 45, 18, 0.12); 171 --dp_shadows_inverted_lifting: 0px -2px 6px 0px rgba(5, 45, 18, 0.12), 172 0px 0px 4px 0px rgba(5, 45, 18, 0.12); 173 --dp_shadows_inverted_floating: 0px -4px 8px 0px rgba(5, 45, 18, 0.12), 174 0px 0px 4px 0px rgba(5, 45, 18, 0.12); 175 --dp_shadows_inverted_flying: 0px -4px 16px 0px rgba(5, 45, 18, 0.12), 176 0px 0px 4px 0px rgba(5, 45, 18, 0.12); 177} 178 179:root { 180 --dp_s2: 0.125rem; 181 --dp_s4: 0.25rem; 182 --dp_s8: 0.5rem; 183 --dp_s12: 0.75rem; 184 --dp_s16: 1rem; 185 --dp_s24: 1.5rem; 186 --dp_s32: 2rem; 187 --dp_s40: 2.5rem; 188 --dp_s48: 3rem; 189 --dp_s64: 4rem; 190 --dp_s80: 5rem; 191 --dp_s96: 6rem; 192} 193 194:root { 195 --dp_transitions_base_easing_standard_productive: cubic-bezier( 196 0.68, 197 0, 198 0.32, 199 1 200 ); 201 --dp_transitions_base_easing_standard_expressive: cubic-bezier( 202 0.83, 203 0, 204 0.17, 205 1 206 ); 207 --dp_transitions_base_easing_entrance_productive: cubic-bezier( 208 0.32, 209 1, 210 0.68, 211 1 212 ); 213 --dp_transitions_base_easing_entrance_expressive: cubic-bezier( 214 0.22, 215 1, 216 0.36, 217 1 218 ); 219 --dp_transitions_base_easing_exit_productive: cubic-bezier(0.32, 0, 0.68, 0); 220 --dp_transitions_base_easing_exit_expressive: cubic-bezier(0.64, 0, 0.78, 0); 221 --dp_transitions_base_duration_fast1: 70ms; 222 --dp_transitions_base_duration_fast2: 110ms;
223 --dp_transitions_base_duration_medium1: 150ms; 224 --dp_transitions_base_duration_medium2: 240ms; 225 --dp_transitions_base_duration_slow1: 400ms; 226 --dp_transitions_base_duration_slow2: 700ms; 227 --dp_transitions_base_delay_productive: 240ms; 228 --dp_transitions_base_delay_expressive: 700ms; 229} 230 231:root { 232 --dp_hero_font_family: TLCircular, -apple-system, BlinkMacSystemFont, 233 "Segoe UI", Roboto, Helvetica, Arial, PingFang SC, Microsoft YaHei New, 234 Microsoft Yahei, 微软é é», STXihei, åæç»é», sans-serif; 235 --dp_hero_letter_spacing: -0.02em; 236 --dp_hero_font_size: 2rem; 237 238 @media (--dp_viewport_m) { 239 & { 240 --dp_hero_font_size: 3rem; 241 } 242 } 243 244 --dp_hero_line_height: 2.5rem; 245 246 @media (--dp_viewport_m) { 247 & { 248 --dp_hero_line_height: 3.5rem; 249 } 250 } 251 252 --dp_title1_font_family: TLCircular, -apple-system, BlinkMacSystemFont, 253 "Segoe UI", Roboto, Helvetica, Arial, PingFang SC, Microsoft YaHei New, 254 Microsoft Yahei, 微软é é», STXihei, åæç»é», sans-serif; 255 --dp_title1_letter_spacing: -0.02em; 256 --dp_title1_font_size: 1.5rem; 257 258 @media (--dp_viewport_m) { 259 & { 260 --dp_title1_font_size: 2rem; 261 } 262 } 263 264 --dp_title1_line_height: 1.75rem; 265 266 @media (--dp_viewport_m) { 267 & { 268 --dp_title1_line_height: 2.5rem; 269 } 270 } 271 272 --dp_title2_font_family: TLCircular, -apple-system, BlinkMacSystemFont, 273 "Segoe UI", Roboto, Helvetica, Arial, PingFang SC, Microsoft YaHei New, 274 Microsoft Yahei, 微软é é», STXihei, åæç»é», sans-serif; 275 --dp_title2_letter_spacing: -0.02em; 276 --dp_title2_font_size: 1.25rem; 277 278 @media (--dp_viewport_m) { 279 & { 280 --dp_title2_font_size: 1.5rem; 281 } 282 } 283 284 --dp_title2_line_height: 1.75rem; 285 286 @media (--dp_viewport_m) { 287 & { 288 --dp_title2_line_height: 2rem; 289 } 290 } 291 292 --dp_title3_font_family: TLCircular, -apple-system, BlinkMacSystemFont, 293 "Segoe UI", Roboto, Helvetica, Arial, PingFang SC, Microsoft YaHei New, 294 Microsoft Yahei, 微软é é», STXihei, åæç»é», sans-serif; 295 --dp_title3_letter_spacing: -0.01em; 296 297 @media (--dp_viewport_m) { 298 & { 299 --dp_title3_letter_spacing: -0.02em; 300 } 301 } 302 303 --dp_title3_font_size: 1.125rem; 304 305 @media (--dp_viewport_m) { 306 & { 307 --dp_title3_font_size: 1.25rem; 308 } 309 } 310 311 --dp_title3_line_height: 1.5rem; 312 313 @media (--dp_viewport_m) { 314 & { 315 --dp_title3_line_height: 1.75rem; 316 } 317 } 318 319 --dp_large_letter_spacing: 0em; 320 --dp_large_font_size: 1.125rem; 321 --dp_large_line_height: 1.5rem; 322 --dp_body_letter_spacing: 0em; 323 --dp_body_font_size: 1rem; 324 --dp_body_line_height: 1.5rem; 325 --dp_small_letter_spacing: 0em; 326 --dp_small_font_size: 0.9375rem; 327 328 @media (--dp_viewport_m) { 329 & { 330 --dp_small_font_size: 0.875rem; 331 } 332 } 333 334 --dp_small_line_height: 1.25rem; 335 --dp_mini_letter_spacing: 0em; 336 --dp_mini_font_size: 0.875rem; 337 338 @media (--dp_viewport_m) { 339 & { 340 --dp_mini_font_size: 0.75rem; 341 } 342 } 343 344 --dp_mini_line_height: 1.25rem; 345 346 @media (--dp_viewport_m) { 347 & { 348 --dp_mini_line_height: 1rem; 349 } 350 } 351 352 --dp_micro_letter_spacing: 0em; 353 --dp_micro_font_size: 0.75rem; 354 355 @media (--dp_viewport_m) { 356 & { 357 --dp_micro_font_size: 0.625rem; 358 } 359 } 360 361 --dp_micro_line_height: 1rem; 362 363 @media (--dp_viewport_m) { 364 & { 365 --dp_micro_line_height: 0.75rem; 366 } 367 } 368} 369 370:root { 371 --spacing-spacer_1: 4px; 372 --spacing-spacer_2: 8px; 373 --spacing-spacer_3: 12px; 374 --spacing-spacer_4: 16px; 375 --spacing-spacer_5: 24px; 376 --spacing-spacer_6: 32px; 377 --spacing-spacer_7: 40px; 378 --spacing-spacer_8: 48px; 379 --spacing-spacer_9: 64px; 380 --spacing-spacer_10: 80px; 381 --spacing-spacer_11: 96px; 382} 383 384:root { 385 --border-radius-r2: 2px; 386 --border-radius-r4: 4px; 387 --border-radius-r8: 8px; 388 --border-radius-r12: 12px; 389 --border-radius-r16: 16px; 390 --border-radius-r20: 20px; 391} 392</style> 393 <style data-depot-css>:root { 394 --dp_app_negative_brightest: rgba(255, 239, 240, 1); 395 --dp_app_negative_brighter: rgba(255, 229, 230, 1); 396 --dp_app_negative_bright: rgba(255, 157, 161, 1); 397 --dp_app_negative_mid: rgba(239, 55, 14, 1); 398 --dp_app_negative_dull: rgba(199, 13, 0, 1); 399 --dp_app_negative_duller: rgba(149, 10, 0, 1); 400 --dp_app_negative_dullest: rgba(115, 3, 3, 1); 401 --dp_app_warning_brightest: rgba(253, 247, 201, 1); 402 --dp_app_warning_brighter: rgba(255, 246, 177, 1); 403 --dp_app_warning_bright: rgba(252, 236, 131, 1); 404 --dp_app_warning_mid: rgba(255, 197, 8, 1); 405 --dp_app_warning_dull: rgba(213, 128, 0, 1); 406 --dp_app_warning_duller: rgba(149, 82, 0, 1); 407 --dp_app_warning_dullest: rgba(80, 46, 0, 1); 408 --dp_app_info_brightest: rgba(235, 242, 255, 1); 409 --dp_app_info_brighter: rgba(223, 235, 255, 1); 410 --dp_app_info_bright: rgba(120, 163, 255, 1); 411 --dp_app_info_mid: rgba(0, 79, 249, 1); 412 --dp_app_info_dull: rgba(0, 53, 169, 1); 413 --dp_app_info_duller: rgba(0, 36, 114, 1); 414 --dp_app_info_dullest: rgba(0, 24, 72, 1); 415 --dp_app_positive_brightest: rgba(225, 251, 215, 1); 416 --dp_app_positive_brighter: rgba(214, 243, 203, 1); 417 --dp_app_positive_bright: rgba(115, 219, 94, 1); 418 --dp_app_positive_mid: rgba(17, 172, 35, 1); 419 --dp_app_positive_dull: rgba(12, 115, 43, 1); 420 --dp_app_positive_duller: rgba(15, 76, 35, 1); 421 --dp_app_positive_dullest: rgba(5, 45, 18, 1); 422 --dp_app_selection_brightest: rgba(243, 241, 253, 1); 423 --dp_app_selection_brighter: rgba(236, 232, 252, 1); 424 --dp_app_selection_bright: rgba(213, 206, 247, 1); 425 --dp_app_selection_mid: rgba(151, 134, 230, 1); 426 --dp_app_selection_dim: rgba(76, 79, 223, 1); 427 --dp_app_selection_dull: rgba(35, 50, 196, 1); 428 --dp_app_selection_duller: rgba(45, 0, 177, 1); 429 --dp_app_selection_dullest: rgba(22, 0, 120, 1); 430 --dp_app_text_base: rgba(25, 35, 37, 1); 431 --dp_app_text_subtle: rgba(63, 75, 78, 1); 432 --dp_app_text_subdued: rgba(91, 100, 102, 1); 433 --dp_app_text_inverted: rgba(255, 255, 255, 1); 434 --dp_app_text_base_inverted: rgba(255, 255, 255, 1); 435 --dp_app_text_negative: rgba(199, 13, 0, 1); 436 --dp_app_text_warning: rgba(149, 82, 0, 1); 437 --dp_app_text_positive: rgba(12, 115, 43, 1); 438 --dp_app_text_disabled: rgba(91, 100, 102, 1); 439 --dp_app_text_urgency_medium: rgba(149, 82, 0, 1); 440 --dp_app_text_urgency_high: rgba(199, 13, 0, 1); 441 --dp_app_link_base: rgba(0, 79, 249, 1); 442 --dp_app_link_hover: rgba(0, 24, 72, 1); 443 --dp_app_link_pressed: rgba(0, 24, 72, 1); 444 --dp_app_link_visited_base: rgba(45, 0, 177, 1); 445 --dp_app_link_visited: rgba(45, 0, 177, 1); 446 --dp_app_link_visited_hover: rgba(35, 50, 196, 1); 447 --dp_app_link_visited_pressed: rgba(22, 0, 120, 1); 448 --dp_app_backdrop_base: rgba(255, 255, 255, 1); 449 --dp_app_backdrop_white: rgba(255, 255, 255, 1); 450 --dp_app_backdrop_dull: rgba(242, 244, 244, 1); 451 --dp_app_backdrop_base_brightest: rgba(242, 244, 244, 1); 452 --dp_app_backdrop_duller: rgba(231, 235, 235, 1); 453 --dp_app_backdrop_base_brighter: rgba(231, 235, 235, 1); 454 --dp_app_backdrop_one_brightest: rgba(255, 239, 223, 1); 455 --dp_app_backdrop_one_brighter: rgba(255, 230, 207, 1); 456 --dp_app_backdrop_one_duller: rgba(149, 10, 0, 1); 457 --dp_app_backdrop_one_dullest: rgba(115, 3, 3, 1); 458 --dp_app_backdrop_two_brightest: rgba(253, 247, 201, 1); 459 --dp_app_backdrop_two_brighter: rgba(255, 246, 177, 1); 460 --dp_app_backdrop_two_duller: rgba(149, 82, 0, 1); 461 --dp_app_backdrop_two_dullest: rgba(80, 46, 0, 1); 462 --dp_app_backdrop_three_brightest: rgba(235, 242, 255, 1); 463 --dp_app_backdrop_three_brighter: rgba(223, 235, 255, 1); 464 --dp_app_backdrop_three_duller: rgba(0, 36, 114, 1); 465 --dp_app_backdrop_three_dullest: rgba(0, 24, 72, 1); 466 --dp_app_backdrop_four_brightest: rgba(225, 251, 215, 1); 467 --dp_app_backdrop_four_brighter: rgba(214, 243, 203, 1); 468 --dp_app_backdrop_four_duller: rgba(9, 57, 17, 1); 469 --dp_app_backdrop_four_dullest: rgba(5, 45, 18, 1); 470 --dp_app_border_base: rgba(208, 212, 213, 1); 471 --dp_app_border_bright: rgba(242, 244, 244, 1); 472 --dp_app_border_dull: rgba(138, 148, 151, 1); 473 --dp_app_action_primary: rgba(0, 168, 143, 1); 474 --dp_app_co2_banner_background: rgba(226, 246, 240, 1); 475 --dp_app_co2_banner_background_hover: rgba(211, 241, 232, 1); 476 --dp_app_co2_banner_action_icon_fill: rgba(0, 168, 143, 1); 477 --dp_app_co2_banner_body: rgba(0, 168, 143, 1); 478 --dp_app_action_secondary: rgba(35, 50, 196, 1); 479 --dp_app_action_tertiary: rgba(255, 255, 255, 1); 480 --dp_app_action_destructive: rgba(199, 13, 0, 1); 481 --dp_app_action_disabled: rgba(231, 235, 235, 1); 482 --dp_app_focus_ring: rgba(35, 50, 196, 0.48); 483 --dp_app_focus_ring_inverted: rgba(213, 206, 247, 0.88); 484 --dp_app_box_shadow: rgba(5, 45, 18, 0.12); 485 --dp_app_overlay_backdrop_dim: rgba(25, 35, 37, 0.24); 486 --dp_app_overlay_backdrop_dull: rgba(25, 35, 37, 0.48); 487 --dp_app_overlay_backdrop_dullest: rgba(25, 35, 37, 0.8); 488 --dp_app_modal_background: rgba(255, 255, 255, 1); 489 --dp_app_button_primary_background: rgba(0, 168, 143, 1); 490 --dp_app_button_primary_background_hover: rgba(0, 112, 95, 1); 491 --dp_app_button_primary_background_pressed: rgba(0, 62, 52, 1); 492 --dp_app_button_secondary_background: rgba(35, 50, 196, 1); 493 --dp_app_button_secondary_background_hover: rgba(45, 0, 177, 1); 494 --dp_app_button_secondary_background_pressed: rgba(22, 0, 120, 1);
495 --dp_app_button_tertiary_background: rgba(255, 255, 255, 1); 496 --dp_app_button_tertiary_background_hover: rgba(242, 244, 244, 1); 497 --dp_app_button_tertiary_background_pressed: rgba(208, 212, 213, 1); 498 --dp_app_button_tertiary_border: rgba(208, 212, 213, 1); 499 --dp_app_message_info_background: rgba(235, 242, 255, 1); 500 --dp_app_message_info_left_edge: rgba(0, 79, 249, 1); 501 --dp_app_message_info_border: rgba(120, 163, 255, 1); 502 --dp_app_message_positive_background: rgba(225, 251, 215, 1); 503 --dp_app_message_positive_left_edge: rgba(17, 172, 35, 1); 504 --dp_app_message_positive_border: rgba(115, 219, 94, 1); 505 --dp_app_message_warning_background: rgba(253, 247, 201, 1); 506 --dp_app_message_warning_left_edge: rgba(255, 197, 8, 1); 507 --dp_app_message_warning_border: rgba(255, 197, 8, 1); 508 --dp_app_message_negative_background: rgba(255, 239, 240, 1); 509 --dp_app_message_negative_left_edge: rgba(239, 55, 14, 1); 510 --dp_app_message_negative_border: rgba(255, 157, 161, 1); 511 --dp_app_carrier_logo_monochrome_fill: rgba(138, 148, 151, 1); 512 --dp_app_search_form_background: rgba(0, 24, 72, 1); 513 --dp_app_text_field_border: rgba(138, 148, 151, 1); 514 --dp_app_text_field_border_hover: rgba(76, 79, 223, 1); 515 --dp_app_text_field_border_focus: rgba(35, 50, 196, 1); 516 --dp_app_text_field_border_invalid: rgba(239, 55, 14, 1); 517 --dp_app_text_field_placeholder: rgba(91, 100, 102, 1); 518 --dp_app_text_subtle_inverted: rgba(231, 235, 235, 1); 519 --dp_app_text_subdued_inverted: rgba(208, 212, 213, 1); 520 --dp_app_backdrop_black: rgba(0, 0, 0, 1); 521 --dp_app_backdrop_base_duller: rgba(47, 56, 58, 1); 522 --dp_app_backdrop_base_dullest: rgba(25, 35, 37, 1); 523 --dp_app_backdrop_primary_brightest: rgba(226, 246, 240, 1); 524 --dp_app_backdrop_primary_brighter: rgba(211, 241, 232, 1); 525 --dp_app_backdrop_primary_duller: rgba(0, 44, 37, 1); 526 --dp_app_backdrop_primary_dullest: rgba(0, 38, 32, 1); 527 --dp_app_backdrop_secondary_brightest: rgba(243, 241, 253, 1); 528 --dp_app_backdrop_secondary_brighter: rgba(236, 232, 252, 1); 529 --dp_app_backdrop_secondary_duller: rgba(45, 0, 177, 1); 530 --dp_app_backdrop_secondary_dullest: rgba(22, 0, 120, 1); 531 --dp_app_backdrop_tertiary_brightest: rgba(255, 239, 240, 1); 532 --dp_app_backdrop_tertiary_brighter: rgba(255, 229, 230, 1); 533 --dp_app_backdrop_tertiary_duller: rgba(102, 0, 52, 1); 534 --dp_app_backdrop_tertiary_dullest: rgba(72, 0, 37, 1); 535 --dp_app_button_destructive_background: rgba(199, 13, 0, 1); 536 --dp_app_button_destructive_background_hover: rgba(149, 10, 0, 1); 537 --dp_app_button_destructive_background_pressed: rgba(115, 3, 3, 1); 538 --dp_app_button_promo1_background: rgba(255, 157, 161, 1); 539 --dp_app_button_promo1_background_hover: rgba(255, 92, 98, 1); 540 --dp_app_button_promo1_background_pressed: rgba(255, 229, 230, 1); 541 --dp_app_button_promo2_background: rgba(25, 35, 37, 1); 542 --dp_app_button_promo2_background_hover: rgba(47, 56, 58, 1); 543 --dp_app_button_promo2_background_pressed: rgba(63, 75, 78, 1); 544 --dp_app_button_transparent_background: rgba(25, 35, 37, 0); 545 --dp_app_button_transparent_background_hover: rgba(25, 35, 37, 0.08); 546 --dp_app_button_transparent_background_pressed: rgba(25, 35, 37, 0.24); 547 --dp_app_inline_text_button_label: rgba(35, 50, 196, 1); 548 --dp_app_inline_text_button_label_inverted: rgba(213, 206, 247, 1); 549 --dp_app_message_primary_background: rgba(226, 246, 240, 1); 550 --dp_app_message_primary_border: rgba(160, 223, 209, 1); 551 --dp_app_message_secondary_background: rgba(243, 241, 253, 1); 552 --dp_app_message_neutral_background: rgba(242, 244, 244, 1); 553 --dp_app_message_neutral_border: rgba(208, 212, 213, 1); 554 --dp_app_message_action_icon_fill: rgba(63, 75, 78, 1); 555 --dp_app_selectable_text: rgba(63, 75, 78, 1); 556 --dp_app_selectable_background_base: rgba(255, 255, 255, 1); 557 --dp_app_selectable_background_hover: rgba(243, 241, 253, 1); 558 --dp_app_selectable_background_pressed: rgba(236, 232, 252, 1); 559 --dp_app_selectable_disabled_background: rgba(231, 235, 235, 1); 560 --dp_app_selectable_border_base: rgba(208, 212, 213, 1); 561 --dp_app_selectable_border_dull: rgba(138, 148, 151, 1); 562 --dp_app_selectable_border_hover: rgba(76, 79, 223, 1); 563 --dp_app_selectable_border_pressed: rgba(76, 79, 223, 1); 564 --dp_app_selectable_border_invalid: rgba(239, 55, 14, 1); 565 --dp_app_selected_text: rgba(35, 50, 196, 1); 566 --dp_app_selected_background_base: rgba(243, 241, 253, 1); 567 --dp_app_selected_background_dull: rgba(35, 50, 196, 1); 568 --dp_app_selected_background_hover: rgba(45, 0, 177, 1); 569 --dp_app_selected_background_pressed: rgba(22, 0, 120, 1); 570 --dp_app_selected_border_base: rgba(35, 50, 196, 1); 571 --dp_app_selected_border_hover: rgba(45, 0, 177, 1); 572 --dp_app_selected_border_pressed: rgba(22, 0, 120, 1); 573 --dp_app_spinner_background_base: rgba(35, 50, 196, 1); 574 --dp_app_spinner_background_inverted: rgba(255, 255, 255, 1); 575 --dp_app_text_field_background_base: rgba(255, 255, 255, 1); 576 --dp_app_text_field_background_disabled: rgba(231, 235, 235, 1); 577 --dp_app_text_field_label_base: rgba(25, 35, 37, 1); 578 --dp_app_text_field_label_focus: rgba(35, 50, 196, 1); 579 --dp_app_text_field_icon_fill_base: rgba(91, 100, 102, 1); 580 --dp_app_text_field_icon_fill_brighter: rgba(138, 148, 151, 1); 581 --dp_app_icon_fill_base: rgba(25, 35, 37, 1); 582 --dp_app_icon_fill_subtle: rgba(63, 75, 78, 1); 583 --dp_app_icon_fill_subdued: rgba(91, 100, 102, 1); 584 --dp_app_icon_fill_inverted: rgba(255, 255, 255, 1); 585 --dp_app_overlay_background_base: rgba(255, 255, 255, 1); 586 --dp_app_overlay_background_inverted: rgba(25, 35, 37, 1); 587 --dp_app_tooltip_background: rgba(25, 35, 37, 1); 588 --dp_app_snackbar_background: rgba(25, 35, 37, 1); 589 --dp_app_bubble_background: rgba(255, 255, 255, 1); 590 --dp_app_header_background_secondary: rgba(22, 0, 120, 1); 591 --dp_app_text_tlb_brand_primary: rgba(122, 103, 211, 1); 592 --dp_app_ouigo_brand_primary: rgba(227, 0, 106, 1); 593 --dp_app_trenitalia_brand_primary: rgba(0, 108, 107, 1); 594 --dp_app_text_brand: rgba(0, 168, 143, 1); 595 --dp_app_icon_fill_subtle_inverted: rgba(231, 235, 235, 1); 596 --dp_app_icon_fill_subdued_inverted: rgba(208, 212, 213, 1); 597 --dp_app_icon_fill_negative: rgba(199, 13, 0, 1); 598 --dp_app_icon_fill_warning: rgba(149, 82, 0, 1); 599 --dp_app_icon_fill_positive: rgba(12, 115, 43, 1); 600 --dp_app_icon_fill_disabled: rgba(91, 100, 102, 1); 601 --dp_app_icon_fill_urgency_medium: rgba(149, 82, 0, 1); 602 --dp_app_icon_fill_urgency_high: rgba(199, 13, 0, 1); 603 --dp_app_icon_fill_brand: rgba(0, 168, 143, 1); 604 --dp_app_icon_fill_badge: rgba(239, 55, 14, 1); 605 --dp_app_border_subtle: rgba(242, 244, 244, 1); 606 --dp_app_border_bold: rgba(138, 148, 151, 1); 607 --dp_app_divider_base: rgba(231, 235, 235, 1); 608 --dp_app_selectable_background_disabled: rgba(231, 235, 235, 1); 609 --dp_app_selectable_border_bold: rgba(138, 148, 151, 1); 610 --dp_app_selected_icon_fill: rgba(35, 50, 196, 1); 611 --dp_app_selected_background_element: rgba(243, 241, 253, 1); 612 --dp_app_selected_background_input: rgba(35, 50, 196, 1); 613 --dp_app_button_content: rgba(255, 255, 255, 1); 614 --dp_app_button_content_inverted: rgba(25, 35, 37, 1); 615 --dp_app_button_primary_content: rgba(255, 255, 255, 1); 616 --dp_app_button_secondary_content: rgba(255, 255, 255, 1);
617 --dp_app_button_tertiary_content: rgba(25, 35, 37, 1); 618 --dp_app_button_secondary2_background: rgba(255, 157, 161, 1); 619 --dp_app_button_secondary2_background_hover: rgba(255, 92, 98, 1); 620 --dp_app_button_secondary2_background_pressed: rgba(255, 229, 230, 1); 621 --dp_app_button_secondary2_content: rgba(25, 35, 37, 1); 622 --dp_app_button_secondary3_background: rgba(25, 35, 37, 1); 623 --dp_app_button_secondary3_background_hover: rgba(47, 56, 58, 1); 624 --dp_app_button_secondary3_background_pressed: rgba(63, 75, 78, 1); 625 --dp_app_button_secondary3_content: rgba(255, 255, 255, 1); 626 --dp_app_button_destructive_content: rgba(255, 255, 255, 1); 627 --dp_app_button_tertiary_destructive_background: rgba(255, 255, 255, 1); 628 --dp_app_button_tertiary_destructive_background_hover: rgba(242, 244, 244, 1); 629 --dp_app_button_tertiary_destructive_background_pressed: rgba( 630 208, 631 212, 632 213, 633 1 634 ); 635 --dp_app_button_tertiary_destructive_border: rgba(208, 212, 213, 1); 636 --dp_app_button_tertiary_destructive_content: rgba(199, 13, 0, 1); 637 --dp_app_button_disabled_background: rgba(231, 235, 235, 1); 638 --dp_app_button_disabled_content: rgba(91, 100, 102, 1); 639 --dp_app_inline_textbutton_text: rgba(35, 50, 196, 1); 640 --dp_app_inline_textbutton_text_inverted: rgba(213, 206, 247, 1); 641 --dp_app_tag_primary_background: rgba(226, 246, 240, 1); 642 --dp_app_tag_primary_border: rgba(160, 223, 209, 1); 643 --dp_app_tag_secondary_background: rgba(243, 241, 253, 1); 644 --dp_app_tag_secondary_border: rgba(213, 206, 247, 1); 645 --dp_app_tag_neutral_background: rgba(242, 244, 244, 1); 646 --dp_app_tag_neutral_border: rgba(208, 212, 213, 1); 647 --dp_app_tag_info_background: rgba(235, 242, 255, 1); 648 --dp_app_tag_info_border: rgba(120, 163, 255, 1); 649 --dp_app_tag_positive_background: rgba(225, 251, 215, 1); 650 --dp_app_tag_positive_border: rgba(115, 219, 94, 1); 651 --dp_app_tag_warning_background: rgba(253, 247, 201, 1); 652 --dp_app_tag_warning_border: rgba(255, 197, 8, 1); 653 --dp_app_tag_negative_background: rgba(255, 239, 240, 1); 654 --dp_app_tag_negative_border: rgba(255, 157, 161, 1); 655 --dp_app_message_secondary_border: rgba(213, 206, 247, 1); 656 --dp_app_textfield_label_base: rgba(25, 35, 37, 1); 657 --dp_app_textfield_label_focus: rgba(35, 50, 196, 1); 658 --dp_app_textfield_placeholder: rgba(91, 100, 102, 1); 659 --dp_app_textfield_icon_fill_base: rgba(63, 75, 78, 1); 660 --dp_app_textfield_icon_fill_subtle: rgba(91, 100, 102, 1); 661 --dp_app_textfield_background_base: rgba(255, 255, 255, 1); 662 --dp_app_textfield_background_disabled: rgba(231, 235, 235, 1); 663 --dp_app_textfield_border_base: rgba(138, 148, 151, 1); 664 --dp_app_textfield_border_hover: rgba(76, 79, 223, 1); 665 --dp_app_textfield_border_focus: rgba(35, 50, 196, 1); 666 --dp_app_textfield_border_invalid: rgba(239, 55, 14, 1); 667 --dp_app_travelalert_cancellation_backdrop: rgba(199, 13, 0, 1); 668 --dp_app_travelalert_cancellation_icon: rgba(255, 255, 255, 1); 669 --dp_app_travelalert_delay_disruption_backdrop: rgba(255, 197, 8, 1); 670 --dp_app_travelalert_delay_disruption_icon: rgba(25, 35, 37, 1); 671 --dp_app_travelalert_accesibility_backdrop: rgba(255, 230, 207, 1); 672 --dp_app_travelalert_accessibility_icon: rgba(80, 46, 0, 1); 673 --dp_app_travelalert_travel_info_backdrop: rgba(223, 235, 255, 1); 674 --dp_app_travelalert_travel_info_icon: rgba(0, 24, 72, 1); 675 --dp_app_travelalert_other_info_backdrop: rgba(231, 235, 235, 1); 676 --dp_app_travelalert_other_info_icon: rgba(91, 100, 102, 1); 677 --dp_app_skeleton_background_base: rgba(25, 35, 37, 0.12); 678 --dp_app_skeleton_background_bold: rgba(25, 35, 37, 0.24); 679 --dp_app_skeleton_background_base_inverted: rgba(255, 255, 255, 0.32); 680 --dp_app_skeleton_background_bold_inverted: rgba(255, 255, 255, 0.48); 681 --dp_app_overlay_backdrop_one: rgba(25, 35, 37, 0.24); 682 --dp_app_overlay_backdrop_two: rgba(25, 35, 37, 0.48); 683 --dp_app_overlay_backdrop_three: rgba(25, 35, 37, 0.8); 684 --dp_app_railcard_text: rgba(255, 255, 255, 1); 685 --dp_app_railcard_text_inverted: rgba(0, 0, 0, 1); 686 --dp_app_railcard_background_16_17_one: rgba(255, 232, 2, 1); 687 --dp_app_railcard_background_16_25_one: rgba(235, 116, 0, 1); 688 --dp_app_railcard_background_16_25_two: rgba(209, 83, 0, 1); 689 --dp_app_railcard_background_26_30_one: rgba(235, 77, 0, 1); 690 --dp_app_railcard_background_26_30_two: rgba(235, 55, 0, 1); 691 --dp_app_railcard_background_family_friends_one: rgba(227, 3, 45, 1); 692 --dp_app_railcard_background_family_friends_two: rgba(166, 0, 0, 1); 693 --dp_app_railcard_background_two_together_one: rgba(113, 33, 127, 1); 694 --dp_app_railcard_background_two_together_two: rgba(55, 0, 104, 1); 695 --dp_app_railcard_background_senior_one: rgba(26, 9, 89, 1); 696 --dp_app_railcard_background_senior_two: rgba(4, 6, 53, 1); 697 --dp_app_railcard_background_network_one: rgba(16, 119, 209, 1); 698 --dp_app_railcard_background_network_two: rgba(24, 88, 166, 1); 699 --dp_app_railcard_background_gold_card_one: rgba(255, 204, 82, 1); 700 --dp_app_railcard_background_gold_card_two: rgba(204, 138, 0, 1); 701 --dp_app_co2_super_routes_fill: rgba(115, 219, 94, 1); 702 --dp_app_splitsave_text: rgba(0, 79, 249, 1); 703 --dp_app_splitsave_icon_fill: rgba(0, 79, 249, 1);
704 --dp_app_carrier_brand_ouigo_base: rgba(227, 0, 106, 1); 705 --dp_app_carrier_brand_trenitalia_base: rgba(0, 108, 107, 1); 706 --dp_app_carrier_brand_renfe_base: rgba(137, 33, 105, 1); 707 --dp_app_carrier_brand_ilsa_base: rgba(226, 5, 19, 1); 708 --dp_app_carrier_brand_ntv_base: rgba(179, 8, 56, 1); 709 --dp_app_carrier_brand_db_base: rgba(240, 20, 20, 1); 710 --dp_app_partner_brand_flixtrain: rgba(143, 203, 1, 1); 711 --dp_app_partner_brand_flixtrain_content: rgba(25, 35, 37, 1); 712 --dp_app_partner_brand_ouigo: rgba(227, 0, 106, 1); 713 --dp_app_partner_brand_ouigo_content: rgba(255, 255, 255, 1); 714 --dp_app_partner_brand_ouigo_spain: rgba(227, 0, 106, 1); 715 --dp_app_partner_brand_ouigo_spain_content: rgba(255, 255, 255, 1); 716 --dp_app_partner_brand_trenitalia: rgba(0, 108, 107, 1); 717 --dp_app_partner_brand_trenitalia_content: rgba(255, 255, 255, 1); 718 --dp_app_partner_brand_trenitalia_france: rgba(0, 108, 107, 1); 719 --dp_app_partner_brand_trenitalia_france_content: rgba(255, 255, 255, 1); 720 --dp_app_partner_brand_renfe: rgba(137, 33, 105, 1); 721 --dp_app_partner_brand_renfe_content: rgba(255, 255, 255, 1); 722 --dp_app_partner_brand_ilsa: rgba(226, 5, 19, 1); 723 --dp_app_partner_brand_ilsa_content: rgba(255, 255, 255, 1); 724 --dp_app_partner_brand_ntv: rgba(179, 8, 56, 1); 725 --dp_app_partner_brand_ntv_content: rgba(255, 255, 255, 1); 726 --dp_app_partner_brand_db: rgba(240, 20, 20, 1); 727 --dp_app_partner_brand_db_content: rgba(255, 255, 255, 1); 728 --dp_app_partner_brand_sncf_premium_dark: rgba(0, 34, 57, 1); 729 --dp_app_partner_brand_sncf_premium_dark_content: rgba(255, 255, 255, 1); 730 --dp_app_partner_brand_sncf_premium_light: rgba(88, 121, 147, 1); 731 --dp_app_partner_brand_sncf_premium_light_content: rgba(255, 255, 255, 1); 732 --dp_app_partner_brand_booking_base: rgba(0, 59, 149, 1); 733 --dp_app_partner_brand_booking_action: rgba(0, 108, 228, 1); 734 --dp_app_partner_brand_booking_accent: rgba(255, 183, 0, 1); 735 --dp_app_partner_brand_inoui_zap: rgba(0, 179, 190, 1); 736 --dp_app_partner_brand_inoui_zap_content: rgba(25, 35, 37, 1); 737 --dp_app_partner_brand_inoui_zen: rgba(116, 118, 120, 1); 738 --dp_app_partner_brand_inoui_zen_content: rgba(255, 255, 255, 1); 739 --dp_brand_primary_core: rgba(0, 168, 143, 1); 740 --dp_brand_primary_brightest: rgba(226, 246, 240, 1); 741 --dp_brand_primary_brighter: rgba(211, 241, 232, 1); 742 --dp_brand_primary_bright: rgba(160, 223, 209, 1); 743 --dp_brand_primary_mid: rgba(0, 168, 143, 1); 744 --dp_brand_primary_dim: rgba(0, 112, 95, 1); 745 --dp_brand_primary_dull: rgba(0, 62, 52, 1); 746 --dp_brand_primary_duller: rgba(0, 44, 37, 1); 747 --dp_brand_primary_dullest: rgba(0, 38, 32, 1); 748 --dp_brand_secondary_core: rgba(35, 50, 196, 1); 749 --dp_brand_secondary_brightest: rgba(243, 241, 253, 1); 750 --dp_brand_secondary_brighter: rgba(236, 232, 252, 1); 751 --dp_brand_secondary_bright: rgba(213, 206, 247, 1); 752 --dp_brand_secondary_mid: rgba(151, 134, 230, 1); 753 --dp_brand_secondary_dim: rgba(76, 79, 223, 1); 754 --dp_brand_secondary_dull: rgba(35, 50, 196, 1); 755 --dp_brand_secondary_duller: rgba(45, 0, 177, 1); 756 --dp_brand_secondary_dullest: rgba(22, 0, 120, 1); 757 --dp_brand_tertiary_core: rgba(255, 157, 161, 1); 758 --dp_brand_tertiary_brightest: rgba(255, 239, 240, 1); 759 --dp_brand_tertiary_brighter: rgba(255, 229, 230, 1); 760 --dp_brand_tertiary_bright: rgba(255, 157, 161, 1); 761 --dp_brand_tertiary_mid: rgba(255, 92, 98, 1); 762 --dp_brand_tertiary_dim: rgba(197, 0, 79, 1); 763 --dp_brand_tertiary_dull: rgba(147, 0, 71, 1); 764 --dp_brand_tertiary_duller: rgba(102, 0, 52, 1); 765 --dp_brand_tertiary_dullest: rgba(72, 0, 37, 1); 766 --dp_brand_neutral_core: rgba(25, 35, 37, 1); 767 --dp_brand_neutral_brightest: rgba(242, 244, 244, 1); 768 --dp_brand_neutral_brighter: rgba(231, 235, 235, 1); 769 --dp_brand_neutral_bright: rgba(208, 212, 213, 1); 770 --dp_brand_neutral_mid: rgba(138, 148, 151, 1); 771 --dp_brand_neutral_dim: rgba(91, 100, 102, 1); 772 --dp_brand_neutral_dull: rgba(63, 75, 78, 1); 773 --dp_brand_neutral_duller: rgba(47, 56, 58, 1); 774 --dp_brand_neutral_dullest: rgba(25, 35, 37, 1); 775 --dp_brand_white: rgba(255, 255, 255, 1); 776 --dp_brand_black: rgba(0, 0, 0, 1); 777 --dp_brand_negative_brightest: rgba(255, 239, 240, 1); 778 --dp_brand_negative_brighter: rgba(255, 229, 230, 1); 779 --dp_brand_negative_bright: rgba(255, 157, 161, 1); 780 --dp_brand_negative_mid: rgba(239, 55, 14, 1); 781 --dp_brand_negative_dull: rgba(199, 13, 0, 1); 782 --dp_brand_negative_duller: rgba(149, 10, 0, 1); 783 --dp_brand_negative_dullest: rgba(115, 3, 3, 1); 784 --dp_brand_warning_brightest: rgba(253, 247, 201, 1); 785 --dp_brand_warning_brighter: rgba(255, 246, 177, 1); 786 --dp_brand_warning_bright: rgba(252, 236, 131, 1); 787 --dp_brand_warning_mid: rgba(255, 197, 8, 1); 788 --dp_brand_warning_dull: rgba(213, 128, 0, 1); 789 --dp_brand_warning_duller: rgba(149, 82, 0, 1); 790 --dp_brand_warning_dullest: rgba(80, 46, 0, 1); 791 --dp_brand_info_brightest: rgba(235, 242, 255, 1); 792 --dp_brand_info_brighter: rgba(223, 235, 255, 1); 793 --dp_brand_info_bright: rgba(120, 163, 255, 1); 794 --dp_brand_info_mid: rgba(0, 79, 249, 1); 795 --dp_brand_info_dull: rgba(0, 53, 169, 1); 796 --dp_brand_info_duller: rgba(0, 36, 114, 1); 797 --dp_brand_info_dullest: rgba(0, 24, 72, 1); 798 --dp_brand_positive_brightest: rgba(225, 251, 215, 1); 799 --dp_brand_positive_brighter: rgba(214, 243, 203, 1); 800 --dp_brand_positive_bright: rgba(115, 219, 94, 1); 801 --dp_brand_positive_mid: rgba(17, 172, 35, 1); 802 --dp_brand_positive_dull: rgba(12, 115, 43, 1); 803 --dp_brand_positive_duller: rgba(15, 76, 35, 1); 804 --dp_brand_positive_dullest: rgba(5, 45, 18, 1); 805 --dp_brand_selection_brightest: rgba(243, 241, 253, 1); 806 --dp_brand_selection_brighter: rgba(236, 232, 252, 1); 807 --dp_brand_selection_bright: rgba(213, 206, 247, 1); 808 --dp_brand_selection_mid: rgba(151, 134, 230, 1); 809 --dp_brand_selection_dim: rgba(76, 79, 223, 1); 810 --dp_brand_selection_dull: rgba(35, 50, 196, 1); 811 --dp_brand_selection_duller: rgba(45, 0, 177, 1); 812 --dp_brand_selection_dullest: rgba(22, 0, 120, 1); 813 --dp_comp_button_primary_background: rgba(0, 168, 143, 1); 814 --dp_comp_button_primary_background_hover: rgba(0, 112, 95, 1); 815 --dp_comp_button_primary_background_pressed: rgba(0, 62, 52, 1); 816 --dp_comp_button_secondary_background: rgba(35, 50, 196, 1); 817 --dp_comp_button_secondary_background_hover: rgba(45, 0, 177, 1); 818 --dp_comp_button_secondary_background_pressed: rgba(22, 0, 120, 1);
819 --dp_comp_button_tertiary_background: rgba(255, 255, 255, 1); 820 --dp_comp_button_tertiary_background_hover: rgba(242, 244, 244, 1); 821 --dp_comp_button_tertiary_background_pressed: rgba(208, 212, 213, 1); 822 --dp_comp_table_row: rgba(242, 244, 244, 1); 823 --dp_comp_table_row_hover: rgba(226, 246, 240, 1); 824 --dp_comp_table_row_active_border: rgba(0, 168, 143, 1); 825 --dp_comp_skeleton_background_base: rgba(242, 244, 244, 1); 826 --dp_comp_skeleton_background_duller: rgba(231, 235, 235, 1); 827 --dp_comp_message_negative_background: rgba(255, 239, 240, 1); 828 --dp_comp_message_negative_left_edge: rgba(239, 55, 14, 1); 829 --dp_comp_message_negative_border: rgba(255, 157, 161, 1); 830 --dp_comp_message_warning_background: rgba(253, 247, 201, 1); 831 --dp_comp_message_warning_left_edge: rgba(255, 197, 8, 1); 832 --dp_comp_message_warning_border: rgba(255, 197, 8, 1); 833 --dp_comp_message_info_background: rgba(235, 242, 255, 1); 834 --dp_comp_message_info_left_edge: rgba(0, 79, 249, 1); 835 --dp_comp_message_info_border: rgba(120, 163, 255, 1); 836 --dp_comp_message_positive_background: rgba(225, 251, 215, 1); 837 --dp_comp_message_positive_left_edge: rgba(17, 172, 35, 1); 838 --dp_comp_message_positive_border: rgba(115, 219, 94, 1); 839 --dp_comp_input_border: rgba(208, 212, 213, 1); 840 --dp_comp_input_border_hover: rgba(76, 79, 223, 1); 841 --dp_comp_input_border_focus: rgba(35, 50, 196, 1); 842 --dp_comp_input_invalid_border: rgba(239, 55, 14, 1); 843 --dp_comp_input_invalid_border_hover: rgba(199, 13, 0, 1); 844 --dp_comp_input_invalid_border_focus: rgba(239, 55, 14, 1); 845 --dp_comp_input_placeholder_text: rgba(91, 100, 102, 1); 846 --dp_comp_carrier_logo_monochrome_fill: rgba(138, 148, 151, 1); 847 --dp_comp_focus_ring: rgba(35, 50, 196, 0.5); 848 --dp_comp_box_shadow: rgba(5, 45, 18, 0.12); 849 --dp_comp_input_binary_background_base: rgba(255, 255, 255, 1); 850 --dp_comp_input_binary_background_hover: rgba(236, 232, 252, 1); 851 --dp_comp_input_binary_background_pressed: rgba(213, 206, 247, 1); 852 --dp_comp_input_binary_border_base: rgba(138, 148, 151, 1); 853 --dp_comp_input_binary_border_hover: rgba(76, 79, 223, 1); 854 --dp_comp_input_binary_border_pressed: rgba(76, 79, 223, 1); 855 --dp_comp_input_binary_selected_background_base: rgba(35, 50, 196, 1); 856 --dp_comp_input_binary_selected_background_hover: rgba(45, 0, 177, 1); 857 --dp_comp_input_binary_selected_background_pressed: rgba(22, 0, 120, 1); 858 --dp_comp_input_binary_selected_border_base: rgba(35, 50, 196, 1); 859 --dp_comp_journey_search_form_bg: rgba(0, 24, 72, 1); 860 --dp_comp_quick_buy_button_bg: rgba(0, 24, 72, 1); 861 --dp_comp_journey_summary_header_bg: rgba(0, 24, 72, 1); 862 --dp_comp_swap_stations: rgba(0, 24, 72, 1); 863 --dp_comp_time_picker_disabled: rgba(0, 24, 72, 1); 864 --dp_comp_eu_trip_header_bg: rgba(0, 24, 72, 1); 865 --dp_comp_confirmation_header_bg: rgba(0, 62, 52, 1); 866 --dp_comp_basic_header_bg: rgba(255, 255, 255, 1); 867} 868dialog::backdrop { 869 --dp_app_overlay_backdrop_dim: rgba(25, 35, 37, 0.24); 870} 871</style> 872 873 <link rel="preload" as="style" href="/cms-web/public/shareable.d882bfaefd38180ac556.css" /> 874 <link rel="preload" as="style" href="/cms-web/public/sgpFleetPage.d302830b4e54d95c6b94.css" /> 875 <link rel="stylesheet" href="/cms-web/public/shareable.d882bfaefd38180ac556.css"/> 876 <link rel="stylesheet" href="/cms-web/public/sgpFleetPage.d302830b4e54d95c6b94.css"/> 877 878 879 <!-- Google Tag Manager --> 880
880<script>(function (w, d, s, l, i) { 881 w[l] = w[l] || []; w[l].push({ 882 'gtm.start': 883 new Date().getTime(), event: 'gtm.js' 884 }); var f = d.getElementsByTagName(s)[0], 885 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 886 '/metrics/?id=' + i + dl; f.parentNode.insertBefore(j, f); 887 })(window, document, 'script', 'dataLayer', 'GTM-NJRBF7N');</script>
887 888 <!-- End Google Tag Manager --> 889
889<script data-react-helmet="true" type="application/ld+json">{"@context":"https://schema.org/","@type":"BreadcrumbList","@id":"#breadcrumbs","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.thetrainline.com/"},{"@type":"ListItem","position":2,"name":"Information","item":"https://www.thetrainline.com/information"},{"@type":"ListItem","position":3,"name":"Europe's leading train and coach app","item":"https://www.thetrainline.com/information/apps"}]}</script>
889<script data-react-helmet="true" type="application/ld+json">[{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"How do I download the Trainline app?","acceptedAnswer":{"@type":"Answer","text":"Our app is available to download on the App Store and Google Play store. Want to download it now? Simply visit our get our app page, enter your phone number and weâll text you a quick and easy download link for free."}},{"@type":"Question","name":"Is the Trainline app free?","acceptedAnswer":{"@type":"Answer","text":"Yes! Itâs free to download the app and set up an account, giving you instant access to live train and coach times and tickets for more than 270 European operators in 45 countries."}},{"@type":"Question","name":"How do I use the Trainline app?","acceptedAnswer":{"@type":"Answer","text":"That depends what youâd like to do with it. Once you open the app, use the Search tab to check live journey times and ticket prices by entering your âfromâ and âtoâ destinations. If youâre looking for tickets, you can also add passenger numbers, railcards and specific dates of travel in this section. You can also mark certain journeys as favourites, and find instant live times and journey information for these in the Favourites tab."}},{"@type":"Question","name":"How do I activate a train ticket on the Trainline app?","acceptedA
889nswer":{"@type":"Answer","text":"Once youâve purchased a Mobile Ticket in the app, head to the My Tickets section. Here you can download your ticket to your device to view the barcode that gets scanned at the station. On the day of travel, click âActivate Ticketâ and youâre good to go. Just make sure you only do this on the day of travel, as once a ticket is activated it canât be changed, moved or refunded. Check out our help page for more information."}}],"@id":"https://www.thetrainline.com/information/apps#FAQPage","about":{"@id":"https://www.thetrainline.com/information/apps#Article"}},{"@context":"https://schema.org","@type":"MobileApplication","name":"Trainline: Train travel Europe","operatingSystem":"Android","applicationCategory":"Maps & Navigation","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.3","ratingCount":"24800"},"offers":{"@type":"Offer","price":"0.00","priceCurrency":"GBP"}},{"@context":"https://schema.org","@type":"MobileApplication","name":"Trainline: Book train tickets","operatingSystem":"iOS","applicationCategory":"Travel","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.82","ratingCount":"11000"},"offers":{"@type":"Offer","price":"0.00","priceCurrency":"GBP"}},{"@context":"https://schema.org","@type":"Article","@id":"https://www.thetrainline.com/information/apps#Article","mainEntityOfPage":{"@type":"WebPage","@id":"https://www.thetrainline.com/information/apps"},"name":"Europe's leading train and coach app","headline":"Europe's leading train and coach app","url":"https://www.thetrainline.com/information/apps","articleSection":"Information","inLanguage":"en-gb","abstract":"<p style=\"color: #333;\" class=\"pullout\">From live times and disruptions info to split tickets and price alerts for the cheapest tickets, the Trainline app gives you control of your journey. It makes train and coach travel across the UK and the rest of Europe easy.</p>\n<p style=\"margin-bottom: -32px; color: #333;\" class=\"pullout\">So, with more than 270 train and coach operators for 45 countries in one place, the question is, where will the Trainline app take you next?</p>","image":[{"@type":"ImageObject","url":"https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg?mode=crop&width=720&height=360&quality=70"},{"@type":"ImageObject","url":"https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg?mode=crop&width=860&height=574&quality=70"},{"@type":"ImageObject","url":"https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg?mode=crop&width=1080&height=1080&quality=70"}]}]</script>
889 890</head> 891 892 <body> 893 <div class="page" id="app"><div class="page-template sgp-fleet-template has-call-to-action-button">
893<script data-testid="@trainline-shareable/header-Leisure-messages-script" type="text/javascript"> 894 window.translations = window.translations || {}; 895 window.translations["@trainline-shareable/header-Leisure"] = { 896 locale: "en-gb", 897 messages: {"header.accountButton.guest":"Guest","header.accountButton.guestsignout":"Not you? Sign out","header.accountButton.myAccount":"My account","header.accountButton.accountSettings":"Account settings","header.accountButton.sustainabilityText":"My sustainability story","header.accountButton.signin":"Sign in","header.accountButton.signout":"Sign out","header.bubble.close":"Close","header.basket.label":"Basket","header.basket.message1":"No tickets in your basket.","header.basket.message2":"Why not plan a trip?","header.bookings.title":"My Bookings","header.business.title":"Business","header.contextualHelp.label.new":"New","header.contextualHelp.results-page.title":"Search Results","header.contextualHelp.ticket-options-page.title":"Ticket Options","header.contextualHelp.travel-options-page.title":"Seating and extras","header.contextualHelp.default.description":"Hello traveller! <br/><br/>We donât have tips for this section yet. Click the tips button on other pages for tips, or visit our help pages.","header.contextualHelp.isMyTicketFlexible.alt":"pictogram change your ticket","header.contextualHelp.isMyTicketFlexible.description":"Depending on your chosen fare, your ticket will have different rules regarding cancellation and/or exchange. When youâre booking tickets, check out our <b>flexibility options</b> to find out whatâs up.","header.contextualHelp.isMyTicketFlexible.title":"Is my ticket flexible?","header.contextualHelp.planMultiCityTrip.alt":"pictogram map","header.contextualHelp.planMultiCityTrip.description":"Yep! Search for one leg at a time, placing your tickets in the basket. Then go to checkout and pay all in one go.","header.contextualHelp.planMultiCityTrip.title":"Can I plan a multi-city trip?","header.contextualHelp.selectMySeat.alt":"pictogram confirm seat","header.contextualHelp.selectMySeat.description":"In Europe, there are 3 possible scenarios when it comes to seats: <br/><br/><ul><li>Trains where you can select a specific seat (via seat-map).</li><li>Trains where a seat will be assigned to you. Tell us your preferences (like aisle or window) and weâll do our best to get you them â just donât ask for fireworks or backup dancers, you divas out there.</li><li>Trains where you can sit anywhere.</li></ul>","header.contextualHelp.selectMySeat.title":"Can I select my seat(s)?","header.contextualHelp.subTitle":"on <b>{pageTitle}</b>","header.contextualHelp.takeLuggageOnboard.alt":"pictogram suitcase","header.contextualHelp.takeLuggageOnboard.description":"Yes, you can always take luggage onboard a European train. Most carriers allow a large bag and a small piece of hand luggage for free. <br/><br/>Some other carriers may charge for luggage. Weâll tell you when this is the case.","header.contextualHelp.takeLuggageOnboard.title":"Can I take luggage with me onboard?","header.contextualHelp.theBestTimeToBook.alt":"pictogram best time to book","header.contextualHelp.theBestTimeToBook.description":"Three months in advance! Itâs when most carriers release their tickets (apart from Eurostar â look for Eurostar tickets six months in advance). <br/><br/>Want to get the best price for your journey? <b>Book early</b>. Prices normally go up closer to the departure date. <br/><br/>Plus, you might not get seats together if you book late (which might be a bonus for the introverts out there).","header.contextualHelp.theBestTimeToBook.title":"Whatâs the best time to book?","header.contextualHelp.title":"Conductorâs Tips","header.contextualHelp.travelWithMyFriendsOrFamily.alt":"pictogram person group","header.contextualHelp.travelWithMyFriendsOrFamily.description":"When you book for multiple people, weâll group your party together (subject to availability). <br/><br/>If you want to be absolutely certain youâll sit together, we recommend booking a train with a seat-map. <br/><br/>If you want to sit next to someone whoâs already made a booking, you can use our <b>Sit next to</b> feature.","header.contextualHelp.travelWithMyFriendsOrFamily.title":"How can I make sure to travel with my friends or family?","header.contextualHelp.whatDoIGetFromFirstClass.alt":"pictogram favourite seat","header.contextualHelp.whatDoIGetFromFirstClass.description":"Depending on the train, you might get anything from better seats to luxurious meals. Check out our <b>
897Classes</b> section to find out more.","header.contextualHelp.whatDoIGetFromFirstClass.title":"What do I get from First Class?","header.contextualHelp.whenAndWhereToBoard.alt":"pictogram trainline phone app","header.contextualHelp.whenAndWhereToBoard.description":"Grab our app. On the day of travel you'll get travel times, platforms, disruption info, and more.","header.contextualHelp.whenAndWhereToBoard.title":"How do I know when and where to board?","header.currencies.AUD":"Australian Dollar ({code}/{symbol})","header.currencies.CAD":"Canadian Dollar ({code}/{symbol})","header.currencies.CHF":"Swiss Franc ({code})","header.currencies.DKK":"Danish Krone ({code}/{symbol})","header.currencies.EUR":"Euro ({code}/{symbol})","header.currencies.GBP":"Pound Sterling ({code}/{symbol})","header.currencies.JPY":"Japanese Yen ({code}/{symbol})","header.currencies.NOK":"Norwegian Krone ({code}/{symbol})","header.currencies.SEK":"Swedish Krona ({code}/{symbol})","header.currencies.USD":"US Dollar ({code}/{symbol})","header.currencies.normal":"{code} ({symbol})","header.currencies.nosymbol":"{code}","header.currencies.title":"Currency","header.languagePicker.alt":"Change language or currency","header.languagePicker.label":"Change language or currency","header.languagePicker.title":"Language","header.languages.cs-cz":"Czech","header.languages.da-dk":"Danish","header.languages.de-at":"German (Austria)","header.languages.de-ch":"German (Switzerland)","header.languages.de-de":"German","header.languages.en-gb":"English","header.languages.en-us":"English (US)","header.languages.es-es":"Spanish","header.languages.fr-ch":"French (Switzerland)","header.languages.fr-fr":"French","header.languages.it-ch":"Italian (Switzerland)","header.languages.it-it":"Italian","header.languages.nb-no":"Norwegian","header.languages.nl-nl":"Netherlands","header.languages.pl-pl":"Polish","header.languages.pt-br":"Portuguese (BR)","header.languages.pt-pt":"Portuguese","header.languages.sv-se":"Swedish","header.languages.zh-cn":"Chinese","header.register.dialog.label":"Register with us","header.register.goBack":"Go back","header.login.registerEmail.title":"Register with us","header.login.businessRegisterEmail.title":"Register your business with us","header.login.signIn.registerNow":"New customer? Register now","header.login.signIn.title":"Sign in","header.login.signIn.innerSubTitle":"Sign in","header.login.signIn.findBooking":"Find a booking","header.login.signIn.findBookingLink":"https://www.thetrainline.com/my-account/find-booking","header.preferences.title":"Account created!","header.railcardsShopfront.title":"Railcards","header.secondaryMenu.app":"Get our app","header.secondaryMenu.business":"Business","header.secondaryMenu.delay-repay":"Delay Repay","header.secondaryMenu.help":"Help","header.secondaryMenu.home":"Train and coach tickets","header.secondaryMenu.liveDepartures":"Live departures","header.secondaryMenu.railcards":"Railcards","header.secondaryMenu.register":"Register","header.secondaryMenu.seasons":"Season tickets","header.secondaryMenu.tripFinder":"Find destinations by budget","header.secondaryMenu.tripFinder.label":"New","header.seoLinks.logoHref":"/","header.skipToMainContent":"Skip to main content","header.skiplink.content":"Skip to content","header.features":"Features","header.aboutUs":"About us","header.featuresLink":"https://www.thetrainline.com/business/features","header.aboutUsLink":"https://www.thetrainline.com/business/about-us","header.secondaryMenu.registerLink":"https://www.thetrainline.com/business","header.burgerMenu.title":"Menu Icon","header.burgerMenu.description":"Icon opening the menu","header.burgerMenu.dialog.ariaTitle":"Menu","header.seoLinks.businessLogoHref":"/business","header.logoAlt":"Trainline homepage","header.logoSource":"https://static.trainlinecontent.com/content/vul/logos/trainline-mint.svg","header.logoMobileSource":"","header.logoTitle":"Trainline","header.seoLinks.mainLinks":"{\"mainLinks\":[{\"label\":\"Train and coach tickets\",\"href\":\"https://www.thetrainline.com\"},{\"label\":\"Business\",\"isMobileOnly\":true,\"href\":\"https://www.thetrainline.com/business\"},{\"label\":\"Get our app\",\"isHeaderWebToApp\":true,\"rel\":\"nofollow\"},{\"label\":\"Find destinations by budget\",\"hasNewLabel\":true,\"href\":\"https://www.thetrainline.com/en/trip-planner\"},{\"label\":\"Help\",\"href\":\"https://support.thetrainline.com/en/support/home\"},{\"label\":\"Travel Inspiration\",\"href\":\"https://www.thetrainline.com/via\"}],\"secondaryLinks\":[{\"label\":\"UK trains\",\"links\":[{\"label\":\"UK train times\",\"href\":\"https://www.thetrainline.com/train-times\"},{\"label\":\"Cheap train tickets\",\"href\":\"https://www.thetrainline.com/information/cheap-train-tickets\"},{\"label\":\"Live train times\",\"href\":\"https://www.thetrainline.com/live\"},{\"label\":\"Journey Planner\",\"href\":\"https://www.thetrainline.com/journey-planner\"},{\"label\":\"Season Tickets\",\"href\":\"https://www.thetrainline.com/season-tickets\"},{\"label\":\"Advance Ticket Alert\",\"href\":\"https://www.thetrainline.com/ticketalert\"},{\"label\":\"Group train tickets\",\"href\":\"https://www.thetrainline.com/trains/great-britain/ticket-types/groupsave-train-tickets\"},{\"label\":\"Split tickets\",\"href\":\"https://www.thetrainline.com/trains/great-britain/split-tickets\"},{\"label\":\"Flexi Season Tickets\",\"href\":\"https://www.thetrainline.com/season-tickets/flexi\"},{\"label\":\"Digital Season Tickets\",\"href\":\"https://www.thetrainline.com/season-tickets/digital\"}]},{\"label\":\"European trains\",\"links\":[{\"label\":\"Trains in Europe\",\"href\":\"https://www.thetrainline.com/trains/europe\"},{\"label\":\"Cheap European train tickets\",\"href\":\"https://www.thetrainline.com/trains/europe/cheap-european-train-tickets\"},{\"label\":\"Italy train tickets\",\"href\":\"https://www.thetrainline.com/trains/italy\"},{\"label\":\"Spain train tickets\",\"href\":\"https://www.thetrainline.com/trains/spain\"},{\"label\":\"Germany train tickets\",\"href\":\"https://www.thetrainline.com/trains/germany\"},{\"label\":\"France train tickets\",\"href\":\"https://www.thetrainline.com/trains/france\"},{\"label\":\"Belgium train tickets\",\"href\":\"https://www.thetrainline.com/trains/belgium\"}]},{\"label\":\"Train companies\",\"links\":[{\"label\":\"UK train companies\",\"href\":\"https://www.thetrainline.com/train-companies\"},{\"label\":\"Eurostar tickets\",\"href\":\"https://www.thetrainline.com/en/train-companies/eurostar\"},{\"label\":\"Trenitalia tickets\",\"href\":\"https://www.thetrainline.com/en/train-companies/trenitalia\"},{\"label\":\"Deutsche Bahn tickets\",\"href\":\"https://www.thetrainline.com/en/train-companies/deutsche-bahn\"},{\"label\":\"SNCF tickets\",\"href\":\"https://www.thetrainline.com/en/train-companies/sncf\"},{\"label\":\"Renfe tickets\",\"href\":\"https://www.thetrainline.com/en/train-companies/renfe\"},{\"label\":\"OBB tickets\",\"href\":\"https://www.thetrainline.com/en/train-companies/obb\"},{\"label\":\"Frecciarossa trains\",\"href\":\"https://www.thetrainline.com/en/train-companies/frecciarossa\"}]},{\"label\":\"Popular journeys\",\"links\":[{\"label\":\"London to Paris train\",\"href\":\"https://www.thetrainline.com/en/train-times/london-to-paris\"},{\"label\":\"Paris to Amsterdam train\",\"href\":\"https://www.thetrainline.com/en/train-times/paris-to-amsterdam\"},{\"label\":\"Paris to London train\",\"href\":\"https://www.thetrainline.com/en/train-times/paris-to-london\"},{\"label\":\"Barcelona to Madrid train\",\"href\":\"https://www.thetrainline.com/en/train-times/barcelona-to-madrid\"},{\"label\":\"Amsterdam to Paris train\",\"href\":\"https://www.thetrainline.com/en/train-times/amsterdam-to-paris\"},{\"label\":\"Brussels to Bruges train\",\"href\":\"https://www.thetrainline.com/en/train-times/brussels-to-bruges-brugge\"},{\"label\":\"Paris to Brussels train\",\"href\":\"https://www.thetrainline.com/en/train-times/paris-to-brussels\"}]}]}","header.seoLinks.marketingPageLinks":"{\"mainLinks\":[{\"label\":\"Features\",\"href\":\"https://www.thetrainline.com/business/features\"},{\"label\":\"About us\",\"href\":\"https://www.thetrainline.com/business/about-us\"}]}","header.travelPlans.link":"https://www.thetrainline.com/en/travel-plans","header.railcardLink":"/trains/great-britain/railcards"}, 898 }; 899 </script>
899<header data-testid="trainline-shareable/header" class="root-PjtD4"><div class="logoWrapper-Na8Fx" data-testid="logo-wrapper"><a href="/" class="logoLink-m6nF+" data-testid="trainline-logo-link" aria-label="Trainline homepage"><picture><source srcSet="https://static.trainlinecontent.com/content/vul/logos/trainline-mint.svg" media="(min-width: 992px)"/><img data-testid="trainline-logo-image" class="logo-oVgUw" alt="Trainline homepage" src="https://static.trainlinecontent.com/content/vul/logos/trainline-mint.svg"/></picture></a></div><div class="root-5Yj-j interactiveElement-6Q+VW down-juFvU verticalCenter-pS-bW largeViewport-AaoK9"><button class="root-urSZd large-Un91M large-DLXFv ghost-8OFyV languageButton--fP6C" data-testid="normal-currency-and-language-picker" type="button" id="bubble-interactive-overlay-currency-language" aria-label="Change language or currency" aria-controls="bubble-overlay-currency-language"><div class="flagContainer-hKV-Q"><img class="flagIcon-sf5kK" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='18' style='background:%23015fbc'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='%23015FBC' d='M0 0h24v18H0z'/%3E%3Cpath fill='%23FFF' d='M-.905-1.736l12.869 9.35 12.84-9.329 1.175 1.618-12.314 8.946 11.508 8.36-1.175 1.619-12.034-8.743L.482 18.43l-1.
899176-1.62 10.957-7.962L-2.08-.118l1.175-1.618z'/%3E%3Cpath fill='%23E32D2D' d='M10.085 10.209l.294.405-10.518 7.64-.294-.404 8.659-6.29 1.859-1.351zm4.02-.509l10.518 7.641-.294.405-10.517-7.641.294-.405zM.162.4L10.68 8.041l-.294.405L-.133.805.161.4zm23.924-1l.294.405-10.518 7.64-.294-.404L24.085-.6z'/%3E%3Cpath fill='%23FFF' d='M14 0l-.001 7H25v4H13.999L14 18h-4l-.001-7H-1V7H9.999L10 0h4z'/%3E%3Cpath fill='%23E32D2D' d='M13 0v8h11.5v2H13v8h-2v-8H-.5V8H11V0h2z'/%3E%3C/g%3E%3C/svg%3E" alt="Change language or currency"/></div><span class="iconWrapper-Lupc8" data-testid="button-side-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="icon-pJTja"><g fill="none" fill-rule="evenodd"><g fill="#192325" fill-rule="nonzero"><g><g><g><g><path d="M9.22 8.03c-.293-.293-.293-.767 0-1.06.293-.293.767-.293 1.06 0l4.5 4.5c.293.293.293.767 0 1.06l-4.5 4.5c-.293.293-.767.293-1.06 0-.293-.293-.293-.767 0-1.06L13.19 12 9.22 8.03z" transform="translate(-473 -1398) translate(96 1378) translate(345 12) translate(0 4) rotate(90 26 30)"></path></g></g></g></g></g></g></svg></span></button><dialog data-testid="content-wrapper" class="root-5Yj-j bubble-MdZBh down-juFvU verticalCenter-pS-bW largeViewport-AaoK9 overlay-2q2Cz" id="bubble-overlay-currency-language" aria-hidden="false"><div class="header-6+5CS"><button class="close-b5ahC overlayButton-WE2SO clickable-lV+P9" type="button" aria-label="close" autofocus=""><svg role="img" id="Close" aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" height="24px" width="24px"><title>Close</title><desc>Close</desc><path d="M18.5303 18.5302C18.8228 18.2377 18.8228 17.7622 18.5303 17.4697L13.0605 11.9999L18.5303 6.53019C18.8228 6.23694 18.8228 5.76219 18.5303 5.46969C18.2378 5.17719 17.7623 5.17644 17.4698 5.46969L12 10.9394L6.53025 5.46969C6.237 5.17644 5.76225 5.17644 5.46975 5.46969C5.17725 5.76294 5.1765 6.23769 5.46975 6.53019L10.9395 11.9999L5.46975 17.4697C5.1765 17.7622 5.1765 18.2377 5.46975 18.5302C5.763 18.8227 6.23775 18.8227 6.53025 18.5302L12 13.0604L17.4698 18.5302C17.7623 18.8227 18.2378 18.8227 18.5303 18.5302Z"></path></svg></button></div><div class="pickersContainer-KnTsb maxWidth-4kFgS" data-testid="inline-currency-and-language-picker"><div class="pickers-m0avT"><div data-testid="dropdown-container" class="fullWidth-956XM"><label class="root-3iWrD base-byb8B mini-0F+Yt label-AIBln" data-testid="typography">Language</label><div class="dropdownContainer-69rw9"><select aria-label="Language" data-testid="language-picker" class="select-TzU+q body-ug-nk"><option class="option-8TE0S" value="language" disabled="">Language</option><option selected="" class="option-8TE0S" value="en-gb">ð¬ð§ English (UK)</option><option class="option-8TE0S" value="de-de">ð©ðª Deutsch</option><option class="option-8TE0S" value="es-es">ðªð¸ Español</option><option class="option-8TE0S" value="fr-fr">ð«ð· Français</option><option class="option-8TE0S" value="it-it">ð®ð¹ Italiano</option></select><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="arrowChevron-5xr5T" focusable="false"><g fill="none" fill-rule="evenodd"><g fill="#192325" fill-rule="nonzero"><g><g><g><g><path d="M12.586 12L9.293 8.707c-.39-.39-.39-1.024 0-1.414.39-.39 1.024-.39 1.414 0l4 4c.39.39.39 1.024 0 1.414l-4 4c-.39.39-1.024.39-1.414 0-.39-.39-.39-1.024 0-1.414L12.586 12z" transform="translate(-1274 -612) translate(1182 604) translate(12 8) rotate(90 52 52)"></path></g></g></g></g></g></g></svg></div></div></div></div></dialog></div><a class="root-urSZd small-eyOof small-rFTiC ghost-8OFyV fontWeightNormal-nPchi" data-testid="railcards-button" href="/trains/great-britain/railcards"><span>Railcards</span></a><a class="root-urSZd small-eyOof small-rFTiC ghost-8OFyV fontWeightNormal-nPchi" data-testid="business-button" href="/business" rel="nofollow"><span>Business</span></a><div class="root-5Yj-j interactiveElement-6Q+VW down-juFvU verticalCenter-pS-bW largeViewport-AaoK9"><button class="root-urSZd small-eyOof small-rFTiC ghost-8OFyV fontWeightNormal-nPchi basketButton-KQ6m+" data-testid="interactive-element" type="button" role="presentation" aria-label="basket-button" id="bubble-interactive-basket-info"><svg class="mobileIcon-vG1GQ" role="img" id="Basket" fill="currentColor" viewBox="0 0 24 24" height="32px" width="32px"><title>Basket</title><desc>
899Basket</desc><path d="M8.35725 4.86378L5.4255 9.75003H5.01525C5.00625 9.75003 4.9965 9.75003 4.9875 9.75003H3C2.586 9.75003 2.25 10.086 2.25 10.5C2.25 10.914 2.586 11.25 3 11.25H4.37325L6.012 20.3828C6.0765 20.7405 6.387 21 6.75 21H17.25C17.613 21 17.9242 20.7398 17.988 20.3828L19.6268 11.25H21C21.414 11.25 21.75 10.914 21.75 10.5C21.75 10.086 21.414 9.75003 21 9.75003H19.0125C19.0035 9.75003 18.9937 9.75003 18.9847 9.75003H18.5745L15.6427 4.86378C15.4298 4.50828 14.9693 4.39353 14.6138 4.60653C14.2583 4.81953 14.1435 5.28003 14.3565 5.63553L16.8248 9.75003H7.17375L9.642 5.63553C9.855 5.28003 9.74025 4.81953 9.38475 4.60653C9.02925 4.39353 8.56875 4.50828 8.35575 4.86378H8.35725ZM18.1035 11.25L16.623 19.5H7.37775L5.89725 11.25H18.1035Z"></path></svg><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontSemiBold-SU984 basketLabel-Qfrb0">Basket</span></button><dialog data-testid="content-wrapper" class="root-5Yj-j bubble-MdZBh down-juFvU verticalCenter-pS-bW largeViewport-AaoK9 overlay-2q2Cz" id="bubble-basket-info" aria-hidden="false"><div class="header-6+5CS"><button class="close-b5ahC overlayButton-WE2SO clickable-lV+P9" type="button" aria-label="close" autofocus=""><svg role="img" id="Close" aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" height="24px" width="24px"><title>Close</title><desc>Close</desc><path d="M18.5303 18.5302C18.8228 18.2377 18.8228 17.7622 18.5303 17.4697L13.0605 11.9999L18.5303 6.53019C18.8228 6.23694 18.8228 5.76219 18.5303 5.46969C18.2378 5.17719 17.7623 5.17644 17.4698 5.46969L12 10.9394L6.53025 5.46969C6.237 5.17644 5.76225 5.17644 5.46975 5.46969C5.17725 5.76294 5.1765 6.23769 5.46975 6.53019L10.9395 11.9999L5.46975 17.4697C5.1765 17.7622 5.1765 18.2377 5.46975 18.5302C5.763 18.8227 6.23775 18.8227 6.53025 18.5302L12 13.0604L17.4698 18.5302C17.7623 18.8227 18.2378 18.8227 18.5303 18.5302Z"></path></svg></button></div><div class="basketBubble-NfhFO" aria-label="basket-overlay-content"><svg xmlns="http://www.w3.org/2000/svg" class="basketBubbleImage-fTdSq" width="64" height="57" viewBox="0 0 64 57"><g fill="none" fill-rule="evenodd"><g><g><path fill="#8A9497" d="M55 18c-.443 0-.848-.295-.967-.742L50.43 3.75c-.117-.436-.519-.747-.978-.751H14.537c-.447.004-.85.315-.966.751L9.967 17.258c-.142.533-.69.849-1.224.709-.534-.143-.851-.69-.71-1.224l3.605-13.507c.347-1.3 1.534-2.22 2.887-2.236h34.938c1.365.016 2.552.935 2.9 2.236l3.603 13.507c.142.534-.175 1.08-.709 1.224-.086.023-.173.033-.258.033" transform="translate(-236 -734) translate(236 734)"></path><path fill="#2332C4" d="M60 25.008l-3.78 30.24c-.12.949-.89 1.672-1.828 1.746l-.158.006H9.765c-.955 0-1.769-.674-1.958-1.596l-.026-.156-3.78-30.24h56zm-13 3.999c-1.25 0-2 .75-2 2V51c0 1.25.75 2 2 2s2-.75 2-2V31.006c0-1.25-.75-2-2-2zm-10 0c-1.25 0-2 .75-2 2V51c0 1.25.75 2 2 2s2-.75 2-2V31.006c0-1.25-.75-2-2-2zm-20 0c-1.25 0-2 .75-2 2V51c0 1.25.75 2 2 2s2-.75 2-2V31.006c0-1.25-.75-2-2-2zm10 0c-1.25 0-2 .75-2 2V51c0 1.25.75 2 2 2s2-.75 2-2V31.006c0-1.25-.75-2-2-2zM60 17c2.5 0 4 1.5 4 3.999 0 2.5-1.5 3.999-4 3.999H4c-2.5 0-4-1.5-4-3.999C0 18.499 1.5 17 4 17zM42.742 4H21.258C20.563 4 20 3.437 20 2.741V1.258C20 .562 20.563 0 21.258 0h21.484C43.437 0 44 .562 44 1.258v1.483C44 3.437 43.437 4 42.742 4" transform="translate(-236 -734) translate(236 734)"></path></g></g></g></svg><p class="root-9kggJ title3-ria8W colourBase-+RoA3">No tickets in your basket.</p><p class="root-9kggJ title3-ria8W colourBase-+RoA3">Why not plan a trip?</p></div></dialog></div><a class="root-urSZd small-eyOof small-rFTiC ghost-8OFyV fontWeightNormal-nPchi" data-testid="bookings-button" href="/my-account/bookings" rel="nofollow">My Bookings</a><div class="root-5Yj-j interactiveElement-6Q+VW down-juFvU verticalCenter-pS-bW largeViewport-AaoK9"><button class="root-urSZd small-eyOof small-rFTiC ghost-8OFyV fontWeightNormal-nPchi registerButton-YpLo5" data-testid="register-button" type="button" aria-haspopup="dialog"><span>Register</span></button><div class=""><dialog data-testid="content-wrapper" class="root-5Yj-j bubble-MdZBh down-juFvU verticalCenter-pS-bW largeViewport-AaoK9 hideBubble-VeGOn root-5Yj-j bubble-MdZBh down-juFvU verticalCenter-pS-bW largeViewport-AaoK9 overlay-2q2Cz overlay-2q2Cz" id="bubble" aria-hidden="false" aria-label="Register with us"><div class="root-eKOWz"><svg aria-labelledby="f3q435t-aria" role="img" width="300" height="300" viewB
899ox="0 0 300 300"><title id="f3q435t-aria">Loading...</title><rect role="presentation" x="0" y="0" width="100%" height="100%" clip-path="url(#f3q435t-diff)" style="fill:url(#f3q435t-animated-diff)"></rect><defs role="presentation"><clipPath id="f3q435t-diff"><rect x="0" y="0" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="50" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="100" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="160" rx="0" ry="0" width="109" height="16"></rect><rect x="0" y="180" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="228" rx="0" ry="0" width="109" height="16"></rect><rect x="0" y="248" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="393" rx="0" ry="0" width="172" height="20"></rect><rect x="0" y="367" rx="0" ry="0" width="195" height="20"></rect><rect x="0" y="419" rx="0" ry="0" width="144" height="20"></rect><rect x="0" y="306" rx="0" ry="0" width="390" height="40"></rect></clipPath><linearGradient id="f3q435t-animated-diff"><stop offset="0%" stop-color="#e7ebeb" stop-opacity="1"><animate attributeName="offset" values="-2; -2; 1" keyTimes="0; 0.25; 1" dur="2s" repeatCount="indefinite"></animate></stop><stop offset="50%" stop-color="#f2f4f4" stop-opacity="1"><animate attributeName="offset" values="-1; -1; 2" keyTimes="0; 0.25; 1" dur="2s" repeatCount="indefinite"></animate></stop><stop offset="100%" stop-color="#e7ebeb" stop-opacity="1"><animate attributeName="offset" values="0; 0; 3" keyTimes="0; 0.25; 1" dur="2s" repeatCount="indefinite"></animate></stop></linearGradient></defs></svg></div></dialog></div></div><nav><button class="root-urSZd large-Un91M large-DLXFv ghost-8OFyV fontWeightNormal-nPchi burgerMenu-NSJFI" data-testid="hamburger-menu-button" type="button" aria-controls="secondary-menu" aria-haspopup="dialog" aria-expanded="false"><svg role="img" id="Burger" fill="currentColor" viewBox="0 0 24 24" height="32px" width="32px"><title>Menu Icon</title><desc>Icon opening the menu</desc><path d="M3.75 6.75C3.75 6.336 4.086 6 4.5 6H19.5C19.914 6 20.25 6.336 20.25 6.75C20.25 7.164 19.914 7.5 19.5 7.5H4.5C4.086 7.5 3.75 7.164 3.75 6.75Z"></path><path d="M3.75 17.25C3.75 16.836 4.086 16.5 4.5 16.5H19.5C19.914 16.5 20.25 16.836 20.25 17.25C20.25 17.664 19.914 18 19.5 18H4.5C4.086 18 3.75 17.664 3.75 17.25Z"></path><path d="M4.5 11.25C4.086 11.25 3.75 11.586 3.75 12C3.75 12.414 4.086 12.75 4.5 12.75H19.5C19.914 12.75 20.25 12.414 20.25 12C20.25 11.586 19.914 11.25 19.5 11.25H4.5Z"></path></svg></button><dialog title="Menu" data-testid="collapsible" id="secondary-menu" main-height="0px" style="min-height:0;max-height:auto" class="root-sMNEw rootExited-l3GsT"><div data-testid="collapsible-content" class="contentWrapper-ciNd8"><div class="content-kdzDo"><div class="root-pNazn" data-testid="seo-links" aria-hidden="true"><ul class="mainLinks-NxN6Z oneColumn-Na9wI"><li class="mainItem-NKhME"><a class="root-urSZd title3-Wefm1 title3-NR7eA ghost-8OFyV button-Icuzo" data-testid="button" href="https://www.thetrainline.com">Train and coach tickets</a></li><li class="mainItem-NKhME" role="none" data-testid="seo-links-app-button"><a class="root-urSZd title3-Wefm1 title3-NR7eA ghost-8OFyV button-Icuzo" data-testid="header-campaign-link" href="https://2n8w.app.link?~channel=Web--Direct&~feature=AllPages&~campaign=ShareableHeader&~tags=locale%3Den_GB&~tags=version%3D1&~tags=target%3Dgeneric&$android_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.thetrainline%26hl%3Den-GB&$android_deepview=false&$android_passive_deepview=false&$ios_url=https%3A%2F%2Fitunes.apple.com%2FGB%2Fapp%2Fthetrainline%2Fid334235181&$ios_deepview=false&$ios_passive_deepview=false&$fallback_url=https%3A%2F%2Fwww.thetrainline.com%2Fapps%2Fget-a-link&$deeplink_path=com.thetrainline" rel="nofollow">Get our app</a></li><li class="mainItem-NKhME"><a class="root-urSZd title3-Wefm1 title3-NR7eA ghost-8OFyV button-Icuzo" data-testid="button" href="https://www.thetrainline.com/en/trip-planner">Find destinations by budget</a></li><li class="mainItem-NKhME"><a class="root-urSZd title3-Wefm1 title3-NR7eA ghost-8OFyV button-Icuzo" data-testid="button" href="https://support.thetrainline.com/en/support/home">Help</a></li><li class="mainItem-NKhME"><a class="root-urSZd title3-Wefm1 title3-NR7eA ghost-8OFyV button-Icuzo" data-testid="button" href="https://www.thetrainline.com/via">Travel Inspiration</a></li></ul><div class="secondaryLinks-c9jRq" data-testid="seo-links-collapsible"><ul class="root-BJQTY"><li class="item-TguCD"><button class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV fullWidth-Cf3MW button-QQVuV" data-testid="menu-item-button" type="button" aria-owns="menu-itemUK trains" aria-expanded="false">UK trains</button><div class="collapsible-k-Jsz" aria-hidden="true" data-testid="collapsible-wrapper" style="min-height:0"><ul data-testid="collapsible-list" class="list-mWbC4" id="menu-itemUK trains"><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/train-times" tabindex="-1">UK train times</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/information/cheap-train-tickets" tabindex="-1">Cheap train tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/live" tabindex="-1">Live train times</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/journey-planner" tabindex="-1">Journey Planner</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/season-tickets" tabindex="-1">Season Tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/ticketalert" tabindex="-1">Advance Ticket Alert</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/trains/great-britain/ticket-types/groupsave-train-tickets" tabindex="-1">Group train tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/trains/great-britain/split-tickets" tabindex="-1">Split tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/season-tickets/flexi" tabindex="-1">Flexi Season Tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/season-tickets/digital" tabindex="-1">Digital Season Tickets</a></li></ul></div></li><li class="item-TguCD"><button class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV fullWidth-Cf3MW button-QQVuV" data-testid="menu-item-button" type="button" aria-owns="menu-itemEuropean trains" aria-expanded="false">European trains</button><div class="collapsible-k-Jsz" aria-hidden="true" data-testid="collapsible-wrapper" style="min-height:0"><ul data-testid="collapsible-list" class="list-mWbC4" id="menu-itemEuropean trains"><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/trains/europe" tabindex="-1">Trains in Europe</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/trains/europe/cheap-european-train-tickets" tabindex="-1">Cheap European train tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/trains/italy" tabindex="-1">Italy train tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/trains/spain" tabindex="-1">Spain train tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/trains/germany" tabindex="-1">Germany train tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/trains/france" tabindex="-1">France train tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/trains/belgium" tabindex="-1">Belgium train tickets</a></li></ul></div></li><li class="item-TguCD"><button class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV fullWidth-Cf3MW button-QQVuV" data-testid="menu-item-button" type="button" aria-owns="menu-itemTrain companies" aria-expanded="false">Train companies</button><div class="collapsible-k-Jsz" aria-hidden="true" data-testid="collapsible-wrapper" style="min-height:0"><ul data-testid="collapsible-list" class="list-mWbC4" id="menu-itemTrain companies"><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/train-companies" tabindex="-1">UK train companies</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-companies/eurostar" tabindex="-1">Eurostar tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-companies/trenitalia" tabindex="-1">Trenitalia tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-companies/deutsche-bahn" tabindex="-1">Deutsche Bahn tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-companies/sncf" tabindex="-1">SNCF tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-companies/renfe" tabindex="-1">Renfe tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-companies/obb" tabindex="-1">OBB tickets</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-companies/frecciarossa" tabindex="-1">Frecciarossa trains</a></li></ul></div></li><li class="item-TguCD"><button class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV fullWidth-Cf3MW button-QQVuV" data-testid="menu-item-button" type="button" aria-owns="menu-itemPopular journeys" aria-expanded="false">Popular journeys</button><div class="collapsible-k-Jsz" aria-hidden="true" data-testid="collapsible-wrapper" style="min-height:0"><ul data-testid="collapsible-list" class="list-mWbC4" id="menu-itemPopular journeys">
899<li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-times/london-to-paris" tabindex="-1">London to Paris train</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-times/paris-to-amsterdam" tabindex="-1">Paris to Amsterdam train</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-times/paris-to-london" tabindex="-1">Paris to London train</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-times/barcelona-to-madrid" tabindex="-1">Barcelona to Madrid train</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-times/amsterdam-to-paris" tabindex="-1">Amsterdam to Paris train</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-times/brussels-to-bruges-brugge" tabindex="-1">Brussels to Bruges train</a></li><li><a class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV secondaryLink-NUXQ4" data-testid="collapsible-link" href="https://www.thetrainline.com/en/train-times/paris-to-brussels" tabindex="-1">Paris to Brussels train</a></li></ul></div></li></ul></div></div></div></div></dialog></nav><div class="bubble-HAgLF root-5Yj-j interactiveElement-6Q+VW down-juFvU offsetLeft-CUxyl largeViewport-AaoK9"><button class="root-urSZd body-UtirY body-ug-nk ghost-8OFyV root-JOHEO" data-testid="account-button--unknown" aria-labelledby="account-button-id" aria-haspopup="dialog" disabled="" aria-disabled="true"><span class="iconTraveler-ReXnA" data-testid="account-button-profile"></span></button><dialog data-testid="content-wrapper" class="root-5Yj-j bubble-MdZBh down-juFvU offsetLeft-CUxyl largeViewport-AaoK9 hideBubble-1CPsJ root-5Yj-j bubble-MdZBh down-juFvU offsetLeft-CUxyl largeViewport-AaoK9 overlay-2q2Cz overlay-2q2Cz" id="bubble" aria-hidden="false" aria-label="account-dialog"><div class="root-eKOWz"><svg aria-labelledby="sw3ymsi-aria" role="img" width="300" height="300" viewBox="0 0 300 300"><title id="sw3ymsi-aria">Loading...</title><rect role="presentation" x="0" y="0" width="100%" height="100%" clip-path="url(#sw3ymsi-diff)" style="fill:url(#sw3ymsi-animated-diff)"></rect><defs role="presentation"><clipPath id="sw3ymsi-diff"><rect x="0" y="0" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="50" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="100" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="160" rx="0" ry="0" width="109" height="16"></rect><rect x="0" y="180" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="228" rx="0" ry="0" width="109" height="16"></rect><rect x="0" y="248" rx="0" ry="0" width="390" height="40"></rect><rect x="0" y="393" rx="0" ry="0" width="172" height="20"></rect><rect x="0" y="367" rx="0" ry="0" width="195" height="20"></rect><rect x="0" y="419" rx="0" ry="0" width="144" height="20"></rect><rect x="0" y="306" rx="0" ry="0" width="390" height="40"></rect></clipPath><linearGradient id="sw3ymsi-animated-diff"><stop offset="0%" stop-color="#e7ebeb" stop-opacity="1"><animate attributeName="offset" values="-2; -2; 1" keyTimes="0; 0.25; 1" dur="2s" repeatCount="indefinite"></animate></stop><stop offset="50%" stop-color="#f2f4f4" stop-opacity="1"><animate attributeName="offset" values="-1; -1; 2" keyTimes="0; 0.25; 1" dur="2s" repeatCount="indefinite"></animate></stop><stop offset="100%" stop-color="#e7ebeb" stop-opacity="1"><animate attributeName="offset" values="0; 0; 3" keyTimes="0; 0.25; 1" dur="2s" repeatCount="indefinite"></animate></stop></linearGradient></defs></svg></div></dialog></div></header><span class="no-overflow-sibling"></span><div class="page-header-container header-container" id="pageHeader"><div class="page-header header"><picture><source srcSet="https://www.thetrainline.com/cms/media/1255/man_phone-hero_mobile.jpg" media="(max-width: 767.9px)"/><source srcSet="https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg" media="(min-width: 768px) and (-webkit-max-device-pixel-ratio: 1.99) and (max-width: 1439.9px), (min-width: 768px) and (max-resolution: 191dpi) and (max-width: 1439.9px)"/><source srcSet="https://www.thetrainline.com/cmsmedia/cms/9486/man_phone-hero_2x.jpg" media="(min-width: 768px) and (-webkit-min-device-pixel-ratio: 2), (min-width: 768px) and (min-resolution: 192dpi), (min-width: 1440px)"/><img class="hero-image" src="https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg" alt="" aria-hidden="true"/></picture><div class="page-header-wrapper hero-image-overlay"><div class="page-header-content"><div class="header-text text-invert"><h1>Europe's leading train and coach app</h1><div class="page-template-custom-action row"><div class="col-xs-8 offset-4 col-sm-6 offset-sm-0 col-md-4"><a class="btn btn-primary btn-block" href="https://2n8w.app.link/e/eP6l7bIkVZ" target="_top" rel="noreferrer noopener">Get our app</a></div></div></div></div></div></div><div class="page-header-search"></div></div><div id="LL_breadcrumbs"><div class="breadcrumb container hidden-xs"><ol><li><a href="https://www.thetrainline.com/">Home</a></li><li><a href="https://www.thetrainline.com/information">Information</a></li><li><a href="https://www.thetrainline.com/information/apps">Europe's leading train and coach app</a></li></ol></div></div><div class="dynamic-content-wrapper"><div id="dynamic-content_LL_multiColumnContainerV2-0"><div id="" class="base-container container"><div class="row"><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-0-0"><p style="color:#333" class="pullout">From live times and disruptions info to split tickets and price alerts for the cheapest tickets, the Trainline app gives you control of your journey. It makes train and coach travel across the UK and the rest of Europe easy.</p> 900<p style="margin-bottom:-32px;color:#333" class="pullout">So, with more than 270 train and coach operators for 45 countries in one place, the question is, where will the Trainline app take you next?</p></div></div></div><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-0-1"></div></div></div></div></div></div><div id="dynamic-content_LL_multiColumnContainerV2-1"><div id="" class="base-container container"><div class="row"><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-1-0"><p><div></div></p></div></div></div><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-1-1"><h2 style="color:#333">Digital tickets</h2> 901<p>For safe, contactless travel, use our app to book an eticket or Mobile Ticket. We'll show you whichever option is available for your route when you book, so thereâs no need to print paper tickets or queue at the station. Scan them directly from your phone, or show to station staff to go straight to the platform.</p> 902<p>Even if youâre making multiple trips, thereâs no need to walk around with a wad of paper tickets in your wallet â your phone is all you need. Once downloaded, you won't even need internet access to use them. Digital tickets are available for the majority of routes in the UK and weâre always adding more. </p></div></div></div></div></div></div><div id="dynamic-content_LL_multiColumnContainerV2-2"><div id="" class="base-container container"><div class="row"><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-2-0"><p style="text-align:center"><div></div></p></div></div></div><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-2-1"><h2>
902Flexi Season tickets</h2> 903<p>Spending fewer days in the office and only want to pay for the days you need to commute? Download the Trainline app and travel with a <a rel="noopener" href="https://www.thetrainline.com/season-tickets/flexi" target="_blank" title="Flexi Season ticket">Flexi Season ticket</a>, a new UK ticket type designed for more flexible commutes that offers savings for commuters travelling during Peak times, 2-3 days a week.</p> 904<p>Coming as a bundle of 8 Day Passes to use when you need them over 28 days, a Flexi Season gives you unlimited travel between your two chosen stations. You can pick and choose which days you want to take the train instantly on our app. Perfect for those with flexible schedules splitting their time between home and the workplace.</p></div></div></div></div></div></div><div id="dynamic-content_LL_multiColumnContainerV2-3"><div id="" class="base-container container"><div class="row"><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-3-0"><p style="text-align:center"><div></div></p></div></div></div><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-3-1"><h2 style="color:#333">SplitSave</h2> 905<p>Still like the idea of getting cheap train tickets? Download the Trainline app and split your train tickets with <a rel="noopener" href="https://www.thetrainline.com/trains/great-britain/split-tickets" target="_blank" title="SplitSave">SplitSave</a> â our web and app feature â it can be much cheaper than buying a single ticket, especially if youâre travelling on a long journey.</p> 906<p>We find clever combinations of tickets to save you money, simply look out for the SplitSave icon when searching for your route. Weâll show you how much you can save and give you a detailed breakdown â youâll just need to show different tickets along your journey. You can store SplitSave tickets in your Trainline app or add them to your Apple Wallet.</p></div></div></div></div></div></div><div id="dynamic-content_LL_multiColumnContainerV2-4"><div style="background-color:#ff9da1"><div id="" class="base-container container"><div class="row"><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-4-0"><h2 style="color:#333">Live times and journey info on the go</h2> 907<p>Plan your journey to the minute with the Trainline app â handy when youâve got important places to be! Search for your journey to see live train times in one place, then tap 'Track' to check all the stops along your route and where your train is. If youâre taking more than one train along the way, you can also see when your next change is and what platform you need to go to.</p> 908<p>And, if anything crops up along your route, weâll let you know
908with our live disruption alerts.</p> 909<p>Download the Trainline app today to start travelling smarter.</p></div></div></div><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-4-1"><div id="live-times"> 910<p style="text-align:center"><div></div></p> 911</div></div></div></div><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-4-2"><p><div></div></p></div></div></div><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-4-3"><h2>Keep up to date with our next train widget</h2> 912<p>Stay on top of your trip with our next train widget for iOS.</p> 913<p>View your next UK train at a glance, including live times and platform number.</p> 914<p>Find out more about our <a href="https://www.thetrainline.com/information/apps/widgets">next train widget</a>.</p></div></div></div></div></div></div></div><div id="dynamic-content_LL_multiColumnContainerV2-5"><div id="" class="base-container container"><div class="row"><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-5-0"><p style="text-align:center"><div></div></p></div></div></div><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-5-1"><h2 style="color:#333">Easy bookings</h2> 915<p>Who has time to search all the different operators to find the best price and journey option? Not you! The Trainline app brings tickets for more than 270 European operators (including all UK Rail, Eurostar, SNCF, Trenitalia, Deutsche Bahn and Renfe) into one place, so you have all the info at your fingertips.</p> 916<p>Book trips on the go, up to 15 minutes before departure and pay quickly and securely with Apple Pay, PayPal, Amex, Visa and more. Plus, if your plans change, you can manage your booking in the app â change the time or date of your trip or refund your ticket.</p> 917<p>Download the Trainline app today to start travelling smarter.</p></div></div></div></div></div></div><div id="dynamic-content_LL_multiColumnContainerV2-6"><div style="background-color:#2332c4"><div id="" class="base-container container"><div class="row"><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-6-0"><h2 class="text-invert">Price Prediction</h2> 918<p class="text-invert">If you like saving money â and letâs face it, who doesnât? â Price Prediction could be your new best friend! This handy in-app tool helps you find the cheapest tickets for your route, by using historical price trends to highlight potential fare increases.</p> 919<p class="text-invert">The key is searching in advance, about 12 weeks is enough. If dataâs available for your route, youâll see Price Prediction in your search results and be able to see a detailed breakdown of ticket prices.</p></div></div></div><div class="base-container-item col-xs-12 col-sm-6 col-md-6"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-6-1"><p style="text-align:center"><div></div></p></div></div></div></div></div></div></div><div id="dynamic-content_LL_multiColumnContainerV2-7"><div id="" class="base-container container"><div class="row"><div class="base-container-item col-xs-12 col-sm-4 col-md-4"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-7-0"><h2 style="color:#333">Good to know</h2></div></div></div><div class="base-container-item col-xs-12 col-sm-8 col-md-8"><div class="multi-column-container-wrapper"><div id="dynamic-content_LL_html-7-1"><h3>How do I download the Trainline app?</h3> 920<p style="margin-bottom:32px">Our app is available to download on the App Store and Google Play store. Want to download it now? Simply visit our <a href="https://2n8w.app.link/e/eP6l7bIkVZ">get our app</a> page, enter your phone number and weâll text you a quick and easy download link for free.</p> 921<h3>Is the Trainline app free?</h3> 922<p style="margin-bottom:32px">Yes! Itâs free to download the app and set up an account, giving you instant access to live train and coach times and tickets for more than 270 European operators in 45 countries.</p> 923<h3>How do I use the Trainline app?</h3> 924<p style="margin-bottom:32px">That depends what youâd like to do with it. Once you open the app, use the Search tab to check live journey times and ticket prices by entering your âfromâ and âtoâ destinations. If youâre looking for tickets, you can also add passenger numbers, railcards and specific dates of travel in this section. You can also mark certain
924journeys as favourites, and find instant live times and journey information for these in the Favourites tab.</p> 925<h3>How do I activate a train ticket on the Trainline app?</h3> 926<p>Once youâve purchased a Mobile Ticket in the app, head to the My Tickets section. Here you can download your ticket to your device to view the barcode that gets scanned at the station. On the day of travel, click âActivate Ticketâ and youâre good to go. Just make sure you only do this on the day of travel, as once a ticket is activated it canât be changed, moved or refunded. Check out our <a href="https://support.thetrainline.com/en/support/solutions/articles/78000000396">help page</a> for more information.</p></div></div></div></div></div></div></div><div class="footnotes-wrapper"><div id="LL_footnotes"></div></div><div class="app-banner-wrapper"><div id="LL_appBanner"><div class="app-banner text-invert"><div class="container app-banner-container"><div class="app-banner-content"><h2 class="app-banner-title" id="travelWithTrainline">Europeâs leading train and coach app</h2><p class="app-banner-description">We help customers across Europe make more than 172,000 smarter journeys every day.</p><div class="app-store-icons"><a href="https://2n8w.app.link?~campaign=Web--Organic&~channel=W2A&~feature=FleetComponents--AppBanner&~placement=cms-web-landing-pages-fleet-page&~tags=locale%3Den_GB&~tags=version%3D1&~tags=target%3Dios&$ios_url=https%3A%2F%2Fitunes.apple.com%2FGB%2Fapp%2Fthetrainline%2Fid334235181&$ios_deepview=false&$ios_passive_deepview=false&$fallback_url=https%3A%2F%2Fitunes.apple.com%2FGB%2Fapp%2Fthetrainline%2Fid334235181&~stage=Apps&$deeplink_path=com.thetrainline" data-test="apple-store-link" class="app-store-icon first-store-badge" name="download app link ios" target="_blank" rel="noopener noreferrer"><div></div></a><a href="https://2n8w.app.link?~campaign=Web--Organic&~channel=W2A&~feature=FleetComponents--AppBanner&~placement=cms-web-landing-pages-fleet-page&~tags=locale%3Den_GB&~tags=version%3D1&~tags=target%3Dandroidos&$android_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.thetrainline%26hl%3Den&$android_deepview=false&$android_passive_deepview=false&$fallback_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.thetrainline%26hl%3Den&~stage=Apps&$deeplink_path=com.thetrainline" data-test="play-store-link" class="app-store-icon" name="download app link android" target="_blank" rel="noopener noreferrer"><div></div></a><a class="btn btn-primary btn-block text-me-button" data-test="sms-link" href="https://2n8w.app.link?~campaign=Web--Organic&~channel=W2A&~feature=FleetComponents--AppBanner&~placement=cms-web-landing-pages-fleet-page&~tags=locale%3Den_GB&~tags=version%3D1&~tags=target%3Dgeneric&$android_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.thetrainline%26hl%3Den&$android_deepview=false&$android_passive_deepview=false&$ios_url=https%3A%2F%2Fitunes.apple.com%2FGB%2Fapp%2Fthetrainline%2Fid334235181&$ios_deepview=false&$ios_passive_deepview=false&$fallback_url=https%3A%2F%2Fwww.thetrainline.com%2Fapps%2Fget-a-link&~stage=Apps&$deeplink_path=com.thetrainline" target="_blank" rel="noopener noreferrer"><span>Get a link</span></a></div></div><div class="app-banner-visual-container"><div></div></div></div></div></div></div><footer data-testid="footer" class="root--MygG container"><div class=""><div class=""><div class="footerContent-jet2S"><div data-testid="footer-links"><ul class="root-rUusJ introLinks-kErRv"><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/about-us">About Trainline</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.trainlinegroup.com/media/en/">News</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.trainlinegroup.com/investors/">Investors</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.trainlinegroup.com/careers/en/">Careers</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://tps.thetrainline.com">Trainline Partner Solutions</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/about-us/partnerships">Affiliates and Partnerships</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/terms">Terms and conditions</a></span> / <span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/terms/security">Security</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/terms/privacy">Privacy</a></span> / <span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/terms/cookie
926s">Cookies</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" target="_blank" href="https://www.trainlinegroup.com/modern-slavery-act-statement/" rel="nofollow noopener noreferrer">Modern Slavery Act (UK)</a></span></li></ul></div><div class="rc-collapse-accordion" role="tablist"><div class="rc-collapse-accordion-item"><div class="rc-collapse-accordion-header header-BZdG+ firstHeader-x6kx+" aria-expanded="false" aria-disabled="false" role="tab" tabindex="0"><span class="rc-collapse-accordion-header-text"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontBold-9z+Or panelHeader-CxN1k">Help and useful information</span></span></div><div class="rc-collapse-accordion-content rc-collapse-accordion-content-inactive" style="display:none" role="tabpanel"><div class="rc-collapse-accordion-content-box"><div class="accordionItem-2mTIb"><div data-testid="footer-links"><ul class="root-rUusJ linkComponent-9CLDd"><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://support.thetrainline.com/en/support/home">Help & contact us</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://support.thetrainline.com/en/support/solutions/78000000017">Ticket refunds and changes</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://support.thetrainline.com/en/support/solutions/78000000020">Getting your ticket</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://support.thetrainline.com/en/support/solutions/folders/78000000026">Delays and disruption</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/trains/great-britain/delay-repay">Delay Repay</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://support.thetrainline.com/en/support/solutions/articles/78000000440-how-to-book-assistance-or-check-accessibility-for-disabled-passengers-">Travel assistance</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/airport-transfers">Airport transfers</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/off-peak">Off-Peak train times</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/information/apps">Mobile apps</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/trains/deals-discounts">Deals and offers</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/trains/great-britain/ticket-types/advance-train-tickets">Advance train tickets</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/trains/europe/popular-journeys">Popular train journeys</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/trains/great-britain/railcards">Railcards</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/information/digital-tickets">Mobile Tickets</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/trains/great-britain/sleeper-trains">Sleeper trains (UK only)</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/via/trips">Day trips</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/season-tickets/weekly">Weekly Season Tickets</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/season-tickets/monthly">Monthly Season Tickets</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/season-tickets/annual">Annual Season Tickets</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/sustainable-travel">I came by train</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/price-prediction">Price Prediction</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/about-us/authors">Our authors</a></span></li></ul></div></div></div></div></div>
926<div class="rc-collapse-accordion-item"><div class="rc-collapse-accordion-header header-BZdG+" aria-expanded="false" aria-disabled="false" role="tab" tabindex="0"><span class="rc-collapse-accordion-header-text"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontBold-9z+Or panelHeader-CxN1k">Train and bus companies</span></span></div><div class="rc-collapse-accordion-content rc-collapse-accordion-content-inactive" style="display:none" role="tabpanel"><div class="rc-collapse-accordion-content-box"><div class="accordionItem-2mTIb"><div data-testid="footer-links"><ul class="root-rUusJ linkComponent-9CLDd"><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies">European train companies</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-companies/lumo">Lumo</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-companies/avanti">Avanti West Coast</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-companies/london-north-eastern-railway">LNER</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-companies/great-western-railway">GWR</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-companies/scotrail">ScotRail</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-companies/gatwick-express">Gatwick Express</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-companies/stansted-express">Stansted Express</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-companies/heathrow-express">Heathrow Express</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-companies/elizabeth-line">Elizabeth line</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/leonardo-express">Leonardo Express</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/malpensa-express">Malpensa Express</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/ouigo">OUIGO</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/ouigo-spain">OUIGO Spain</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/westbahn">Westbahn</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/sncf/tgv">TGV</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/italo">Italo</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/flixtrain">FlixTrain</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/bus-companies/blablabus">BlaBlaCar Bus</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/renfe/avlo">Avlo</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-companies/renfe/ave">AVE</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/bus-companies/flixbus">Flixbus</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/bus-companies/national-express">National Express</a></span></li></ul></div></div></div></div></div>
926<div class="rc-collapse-accordion-item"><div class="rc-collapse-accordion-header header-BZdG+" aria-expanded="false" aria-disabled="false" role="tab" tabindex="0"><span class="rc-collapse-accordion-header-text"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontBold-9z+Or panelHeader-CxN1k">Train journeys in the UK</span></span></div><div class="rc-collapse-accordion-content rc-collapse-accordion-content-inactive" style="display:none" role="tabpanel"><div class="rc-collapse-accordion-content-box"><div class="accordionItem-2mTIb"><div data-testid="footer-links"><ul class="root-rUusJ linkComponent-9CLDd"><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/london-to-manchester">London to Manchester</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/leeds-to-london">Leeds to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/london-to-birmingham">London to Birmingham</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/london-to-newcastle">London to Newcastle</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/manchester-to-london">Manchester to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/edinburgh-to-london">Edinburgh to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/london-to-liverpool">London to Liverpool</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/glasgow-to-manchester">Glasgow to Manchester</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/manchester-to-glasgow">Manchester to Glasgow</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/glasgow-to-liverpool">Glasgow to Liverpool</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/birmingham-to-glasgow">Birmingham to Glasgow</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/edinburgh-to-glasgow-queen-street">Edinburgh to Glasgow</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/glasgow-central-to-leeds">Glasgow to Leeds</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/york-to-london">York to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/london-to-edinburgh">London to Edinburgh</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/london-to-brighton">London to Brighton</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/glasgow-to-london">Glasgow to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/cardiff-central-to-london">Cardiff to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/bristol-temple-meads-to-london-paddington">Bristol to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/newcastle-to-london">Newcastle to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href=" https://www.thetrainline.com/train-times/edinburgh-to-manchester">Edinburgh to Manchester</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/london-to-norwich">London to Norwich</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/birmingham-to-london">Birmingham to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/train-times/london-to-glasgow-central">London to Glasgow</a></span></li></ul></div></div></div></div></div>
926<div class="rc-collapse-accordion-item"><div class="rc-collapse-accordion-header header-BZdG+" aria-expanded="false" aria-disabled="false" role="tab" tabindex="0"><span class="rc-collapse-accordion-header-text"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontBold-9z+Or panelHeader-CxN1k">Trains and buses in Europe</span></span></div><div class="rc-collapse-accordion-content rc-collapse-accordion-content-inactive" style="display:none" role="tabpanel"><div class="rc-collapse-accordion-content-box"><div class="accordionItem-2mTIb"><div data-testid="footer-links"><ul class="root-rUusJ linkComponent-9CLDd"><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times">European train times</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/london-to-brussels">London to Brussels</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/london-to-amsterdam">London to Amsterdam</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/paris-to-lyon">Paris to Lyon</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/rome-to-milan">Rome to Milan</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/paris-to-milan">Paris to Milan</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/alicante-terminal-to-madrid">Alicante to Madrid</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/rome-to-florence">Rome to Florence</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/valencia-to-madrid">Valencia to Madrid</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/london-to-barcelona">London to Barcelona</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/london-to-madrid">London to Madrid</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/barcelona-to-valencia">Barcelona to Valencia</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/rome-to-venice">Rome to Venice</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/london-to-rome">
926London to Rome</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/rome-to-naples">Rome to Naples</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/london-to-amsterdam-centraal">London to Amsterdam Centraal</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/malaga-to-madrid">Malaga to Madrid</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/madrid-to-barcelona">Madrid to Barcelona</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/train-times/milan-to-venice">Milan to Venice</a></span></li></ul></div></div></div></div></div><div class="rc-collapse-accordion-item"><div class="rc-collapse-accordion-header header-BZdG+" aria-expanded="false" aria-disabled="false" role="tab" tabindex="0"><span class="rc-collapse-accordion-header-text"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontBold-9z+Or panelHeader-CxN1k">Top destinations</span></span></div><div class="rc-collapse-accordion-content rc-collapse-accordion-content-inactive" style="display:none" role="tabpanel"><div class="rc-collapse-accordion-content-box"><div class="accordionItem-2mTIb"><div data-testid="footer-links"><ul class="root-rUusJ linkComponent-9CLDd"><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/destinations">European destinations</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/destinations/trains-to-london">Trains to London</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/destinations/trains-to-manchester">Trains to Manchester</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/destinations/trains-to-birmingham">Trains to Birmingham</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/destinations/trains-to-leeds">Trains to Leeds</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/destinations/trains-to-edinburgh">Trains to Edinburgh</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/destinations/trains-to-glasgow">Trains to Glasgow</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/airport-transfers/united-kingdom/trains-to-heathrow-airport">Trains to Heathrow Airport</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/airport-transfers/united-kingdom/trains-to-luton-airport">Trains to Luton Airport</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/destinations/trains-to-brighton">Trains to Brighton</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/airport-transfers/united-kingdom/trains-to-gatwick-airport">Trains to Gatwick Airport</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/airport-transfers/united-kingdom/trains-to-stansted-airport">Trains to Stansted Airport</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/destinations/trains-to-france">Trains to France</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/destinations/trains-to-paris">Trains to Paris</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/destinations/trains-to-amsterdam">Trains to Amsterdam</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/destinations/trains-to-disneyland-paris">Trains to Disneyland Paris</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/destinations/trains-to-brussels">Trains to Brussels</a></span></li></ul></div></div></div></div></div>
926<div class="rc-collapse-accordion-item"><div class="rc-collapse-accordion-header header-BZdG+ lastHeader-RQUDV" aria-expanded="false" aria-disabled="false" role="tab" tabindex="0"><span class="rc-collapse-accordion-header-text"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontBold-9z+Or panelHeader-CxN1k">Stations</span></span></div><div class="rc-collapse-accordion-content rc-collapse-accordion-content-inactive" style="display:none" role="tabpanel"><div class="rc-collapse-accordion-content-box"><div class="accordionItem-2mTIb"><div data-testid="footer-links"><ul class="root-rUusJ linkComponent-9CLDd"><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/stations">UK train stations</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/stations">European train stations</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/stations/london-paddington">London Paddington</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/stations/barcelona-sants">Barcelona Sants</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/stations/birmingham-new-street">Birmingham New Street</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/stations/milan-central-station">Milan Central Station</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/stations/edinburgh">Edinburgh Waverley</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/stations/london-euston">London Euston</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/stations/london-kings-cross">London Kings Cross</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/stations/gatwick-airport">Gatwick Airport</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/stations/paris-gare-du-nord">Paris Gare du Nord</a></span></li><li class="sectionLink-lN0DW"><span class="root-2N0eP small-9qjFE colourBase-+RoA3 fontRegular-1mUJr"><a data-testid="footer-links-anchor" class="link-oHDkY root-unTNO inherit-ue7pc" href="https://www.thetrainline.com/en/stations/amsterdam-centraal">Amsterdam Centraal</a></span></li></ul></div></div></div></div></div></div></div><div class="badges-XtmFm"><div class="social-FHc9i"><span class="root-R-GuY" data-testid="footer-icon"><a aria-label="Facebook" class="anchor-oHjLb" href="https://www.facebook.com/trainline.uk/" target="_blank" rel="nofollow noopener noreferrer"><span class="image-Upg+u"></span></a></span><span class="root-R-GuY" data-testid="footer-icon"><a aria-label="Twitter" class="anchor-oHjLb" href="https://twitter.com/thetrainline" target="_blank" rel="nofollow noopener noreferrer"><span class="image-Upg+u"></span></a></span></div><div class="accreditation-vZ1ET"><span class="root-R-GuY" data-testid="footer-icon"><span class="image-Upg+u"></span></span><span class="root-R-GuY" data-testid="footer-icon"><span class="image-Upg+u"></span></span><span class="root-R-GuY" data-testid="footer-icon"><span class="image-Upg+u"></span></span><span class="root-R-GuY" data-testid="footer-icon"><span class="image-Upg+u"></span></span></div></div></div><div class="root-2N0eP mini-7zc5N colourSubdued-V7GJl fontRegular-1mUJr root-yB8Qw"><span>Copyright © 2026 Trainline.com Limited and its affiliated companies. All rights reserved.</span><address class="address-4fKgn">Trainline.com Limited is registered in England and Wales. Company No. 3846791. Registered address: 1 Stonecutter St, London EC4A 4AH, United Kingdom. VAT number: 791 7261 06.</address></div></div></footer></div></div> 927 928
928<script> 929 var __TRANSLATIONS__ = {"webToAppBanner.heading":"Search for {trainCompanyName} trains in the Trainline app","@fleet-components/app-store-icons.getAppText":"Get a link","@fleet-components/app-store-icons.ios.link.name":"download app link ios","@fleet-components/app-store-icons.ios.image.alt":"Go to app store","@fleet-components/app-store-icons.android.link.name":"download app link android","@fleet-components/app-store-icons.android.image.alt":"Go to google play","@fleet-components/app-banner.title":"Europeâs leading train and coach app","@fleet-components/app-banner.description":"We help customers across Europe make more than 172,000 smarter journeys every day.","@fleet-components/sgp-app-install-banner.title":"Europe's leading train and coach app","@fleet-components/sgp-app-install-banner.btn.get":"Get our app","@fleet-components/sgp-app-install-banner.btn.dismiss":"No, thanks","@fleet-components/concise-confidence-messaging.carrierTitle":"Prices from hundreds of train and coach companies","@fleet-components/concise-confidence-messaging.carrierTitleVariant":"Compare prices from over 270 rail and coach companies in Europe","@fleet-components/concise-confidence-messaging.concisePeople":"Join millions of people who use us every day","@fleet-components/concise-confidence-messaging.concisePeopleVariant":"Buy your tickets with us and easily find them on your phone","@fleet-components/concise-confidence-messaging.concisePeopleVariantLogo":"trainline-phone-tickets.svg","@fleet-components/concise-confidence-messaging.conciseDestinations":"Travel to thousands of destinations in 45 countries","@fleet-components/concise-confidence-messaging.conciseDestinationsVariant":"Safely pay with PayPal, Visa and all international payment cards","@fleet-components/concise-confidence-messaging.conciseDestinationsVariantLogo":"trainline-safe-payments.svg","@fleet-components/concise-confidence-messaging.digitalTicket":"Go contactless with digital tickets on your phone","@fleet-components/concise-confidence-messaging.digitalTicketVariant":"Get digital tickets and Railcards in one place on your phone","@fleet-components/concise-confidence-messaging.paymentMethod.Sofort":"Pay now with Sofort, PayPal and all international credit cards","@fleet-components/concise-confidence-messaging.paymentMethod.Postepay":"Pay now with Postepay, PayPal and all international credit cards","@fleet-components/concise-confidence-messaging.new":"New","@fleet-components/savings-message.savingsMessage":"Save {savings, number, percent} on average when you buy in advance â ","@fleet-components/savings-message.savingsDisclaimer":"â Average savings on advance fares booked at least one week before day of travel vs Anytime fares purchased on day of travel. Subject to availability. Excludes coach.","@fleet-components/button-close.close":"Cancel","@fleet-components/language-redirect.locale":"en","date-time-countdown.days":"{days, plural, one {Day} other {Days}}","date-time-countdown.hours":"{hours, plural, one {Hour} other {Hours}}","date-time-countdown.minutes":"{minutes, plural, one {Minute} other {Minutes}}","railcards.purchaseOrRenew.button.text":"Purchase or Renew","railcards.purchaseOrRenew.labels.ageRange":"Ages {min} - {max}","railcards.purchaseOrRenew.labels.ageRange.plus":"Ages {max}+","railcards.purchaseOrRenew.labels.new":"New"}; 930 var __GRAPHQL_STATE__ = {}; 931 var __REACT_QUERY_STATE__ = {"mutations":[],"queries":[{"state":{"data":[{"type":"promoBanner","content":{"message":""},"options":{"theme":"info"}}],"dataUpdateCount":1,"dataUpdatedAt":1790238254788,"error":null,"errorUpdateCount":0,"errorUpdatedAt":0,"fetchFailureCount":0,"fetchMeta":null,"isFetching":false,"isInvalidated":false,"isPaused":false,"status":"success"},"queryKey":["cmsabledata",{"payload":{"pageType":"fleet-page","locale":"en","channel":"landing-pages","path":"en-uk"}}],"queryHash":"[\"cmsabledata\",{\"payload\":{\"channel\":\"landing-pages\",\"locale\":\"en\",\"pageType\":\"fleet-page\",\"path\":\"en-uk\"}}]"},{"state":{"data":{"content":[{"links":[{"text":"About Trainline","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fabout-us"},{"text":"News","href":"https:\u002F\u002Fwww.trainlinegroup.com\u002Fmedia\u002Fen\u002F"},{"text":"Investors","href":"https:\u002F\u002Fwww.trainlinegroup.com\u002Finvestors\u002F"},{"text":"Careers","href":"https:\u002F\u002Fwww.trainlinegroup.com\u002Fcareers\u002Fen\u002F"},{"text":"Trainline Partner Solutions","href":"https:\u002F\u002Ftps.thetrainline.com"},{"text":"Affiliates and Partnerships","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fabout-us\u002Fpartnerships"},[{"text":"Terms and conditions","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fterms"},{"text":"Security","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fterms\u002Fsecurity"}],[{"text":"Privacy","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fterms\u002Fprivacy"},{"text":"Cookies","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fterms\u002Fcookies"}],{"text":"Modern Slavery Act (UK)","href":"https:\u002F\u002Fwww.trainlinegroup.com\u002Fmodern-slavery-act-statement\u002F","target":"_blank","rel":"nofollow noopener noreferrer"}]},{"header":"Help and useful information","links":[{"text":"Help & contact us","href":"https:\u002F\u002Fsupport.thetrainline.com\u002Fen\u002Fsupport\u002Fhome"},{"text":"Ticket refunds and changes","href":"https:\u002F\u002Fsupport.thetrainline.com\u002Fen\u002Fsupport\u002Fsolutions\u002F78000000017"},{"text":"Getting your ticket","href":"https:\u002F\u002Fsupport.thetrainline.com\u002Fen\u002Fsupport\u002Fsolutions\u002F78000000020"},{"text":"Delays and disruption","href":"https:\u002F\u002Fsupport.thetrainline.com\u002Fen\u002Fsupport\u002Fsolutions\u002Ffolders\u002F78000000026"},{"text":"Delay Repay","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrains\u002Fgreat-britain\u002Fdelay-repay"},{"text":"Travel assistance","href":"https:\u002F\u002Fsupport.thetrainline.com\u002Fen\u002Fsupport\u002Fsolutions\u002Farticles\u002F78000000440-how-to-book-assistance-or-check-accessibility-for-disabled-passengers-"},{"text":"Airport transfers","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fairport-transfers"},{"text":"Off-Peak train times","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Foff-peak"},{"text":"Mobile apps","href":"https:\u002F\u002Fwww.thetrainline.com\u002Finformation\u002Fapps"},{"text":"Deals and offers","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrains\u002Fdeals-discounts"},{"text":"Advance train tickets","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrains\u002Fgreat-britain\u002Fticket-types\u002Fadvance-train-tickets"},{"text":"Popular train journeys","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrains\u002Feurope\u002Fpopular-journeys"},{"text":"Railcards","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrains\u002Fgreat-britain\u002Frailcards"},{"text":"Mobile Tickets","href":"https:\u002F\u002Fwww.thetrainline.com\u002Finformation\u002Fdigital-tickets"},{"text":"Sleeper trains (UK only)","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrains\u002Fgreat-britain\u002Fsleeper-trains"},{"text":"Day trips","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fvia\u002Ftrips"},{"text":"Weekly Season Tickets","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fseason-tickets\u002Fweekly"},{"text":"Monthly Season Tickets","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fseason-tickets\u002Fmonthly"},{"text":"Annual Season Tickets","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fseason-tickets\u002Fannual"},{"text":"I came by train","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fsustainable-travel"},{"text":"Price Prediction","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fprice-prediction"},{"text":"Our authors","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fabout-us\u002Fauthors"}]},{"header":"Train and bus companies","links":[{"text":"European train companies","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies"},{"text":"Lumo","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-companies\u002Flumo"},{"text":"Avanti West Coast","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-companies\u002Favanti"},{"text":"LNER","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-companies\u002Flondon-north-eastern-railway"},{"text":"GWR","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-companies\u002Fgreat-western-railway"},{"text":"ScotRail","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-companies\u002Fscotrail"},{"text":"Gatwick Express","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-companies\u002Fgatwick-express"},{"text":"Stansted Express","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-companies\u002Fstansted-express"},{"text":"Heathrow Express","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-companies\u002Fheathrow-express"},{"text":"Elizabeth line","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-companies\u002Felizabeth-line"},{"text":"Leonardo Express","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Fleonardo-express"},{"text":"Malpensa Express","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Fmalpensa-express"},{"text":"OUIGO","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Fouigo"},{"text":"OUIGO Spain","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Fouigo-spain"},{"text":"Westbahn","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Fwestbahn"},{"text":"TGV","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Fsncf\u002Ftgv"},{"text":"Italo","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Fitalo"},{"text":"FlixTrain","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Fflixtrain"},{"text":"BlaBlaCar Bus","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fbus-companies\u002Fblablabus"},{"text":"Avlo","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Frenfe\u002Favlo"},{"text":"AVE","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-companies\u002Frenfe\u002Fave"},{"text":"Flixbus","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fbus-companies\u002Fflixbus"},{"text":"National Express","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fbus-companies\u002Fnational-express"}]},{"header":"Train journeys in the UK","links":[{"text":"London to Manchester","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Flondon-to-manchester"},{"text":"Leeds to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fleeds-to-london"},{"text":"London to Birmingham","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Flondon-to-birmingham"},{"text":"London to Newcastle","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Flondon-to-newcastle"},{"text":"Manchester to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fmanchester-to-london"},{"text":"Edinburgh to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fedinburgh-to-london"},{"text":"London to Liverpool","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Flondon-to-liverpool"},{"text":"Glasgow to Manchester","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fglasgow-to-manchester"},{"text":"Manchester to Glasgow","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fmanchester-to-glasgow"},{"text":"Glasgow to Liverpool","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fglasgow-to-liverpool"},{"text":"Birmingham to Glasgow","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fbirmingham-to-glasgow"},{"text":"Edinburgh to Glasgow","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fedinburgh-to-glasgow-queen-street"},{"text":"Glasgow to Leeds","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fglasgow-central-to-leeds"}
931,{"text":"York to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fyork-to-london"},{"text":"London to Edinburgh","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Flondon-to-edinburgh"},{"text":"London to Brighton","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Flondon-to-brighton"},{"text":"Glasgow to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fglasgow-to-london"},{"text":"Cardiff to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fcardiff-central-to-london"},{"text":"Bristol to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fbristol-temple-meads-to-london-paddington"},{"text":"Newcastle to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fnewcastle-to-london"},{"text":"Edinburgh to Manchester","href":" https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fedinburgh-to-manchester"},{"text":"London to Norwich","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Flondon-to-norwich"},{"text":"Birmingham to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Fbirmingham-to-london"},{"text":"London to Glasgow","href":"https:\u002F\u002Fwww.thetrainline.com\u002Ftrain-times\u002Flondon-to-glasgow-central"}]},{"header":"Trains and buses in Europe","links":[{"text":"European train times","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times"},{"text":"London to Brussels","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Flondon-to-brussels"},{"text":"London to Amsterdam","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Flondon-to-amsterdam"},{"text":"Paris to Lyon","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Fparis-to-lyon"},{"text":"Rome to Milan","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Frome-to-milan"},{"text":"Paris to Milan","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Fparis-to-milan"},{"text":"Alicante to Madrid","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Falicante-terminal-to-madrid"},{"text":"Rome to Florence","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Frome-to-florence"},{"text":"Valencia to Madrid","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Fvalencia-to-madrid"},{"text":"London to Barcelona","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Flondon-to-barcelona"},{"text":"London to Madrid","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Flondon-to-madrid"},{"text":"Barcelona to Valencia","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Fbarcelona-to-valencia"},{"text":"Rome to Venice","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Frome-to-venice"},{"text":"London to Rome","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Flondon-to-rome"},{"text":"Rome to Naples","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Frome-to-naples"},{"text":"London to Amsterdam Centraal","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Flondon-to-amsterdam-centraal"},{"text":"Malaga to Madrid","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Fmalaga-to-madrid"},{"text":"Madrid to Barcelona","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Fmadrid-to-barcelona"},{"text":"Milan to Venice","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Ftrain-times\u002Fmilan-to-venice"}]},{"header":"Top destinations","links":[{"text":"European destinations","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fdestinations"},{"text":"Trains to London","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fdestinations\u002Ftrains-to-london"},{"text":"Trains to Manchester","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fdestinations\u002Ftrains-to-manchester"},{"text":"Trains to Birmingham","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fdestinations\u002Ftrains-to-birmingham"},{"text":"Trains to Leeds","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fdestinations\u002Ftrains-to-leeds"},{"text":"Trains to Edinburgh","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fdestinations\u002Ftrains-to-edinburgh"},{"text":"Trains to Glasgow","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fdestinations\u002Ftrains-to-glasgow"},{"text":"Trains to Heathrow Airport","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fairport-transfers\u002Funited-kingdom\u002Ftrains-to-heathrow-airport"},{"text":"Trains to Luton Airport","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fairport-transfers\u002Funited-kingdom\u002Ftrains-to-luton-airport"},{"text":"Trains to Brighton","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fdestinations\u002Ftrains-to-brighton"},{"text":"Trains to Gatwick Airport","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fairport-transfers\u002Funited-kingdom\u002Ftrains-to-gatwick-airport"},{"text":"Trains to Stansted Airport","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fairport-transfers\u002Funited-kingdom\u002Ftrains-to-stansted-airport"},{"text":"Trains to France","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fdestinations\u002Ftrains-to-france"},{"text":"Trains to Paris","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fdestinations\u002Ftrains-to-paris"},{"text":"Trains to Amsterdam","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fdestinations\u002Ftrains-to-amsterdam"},{"text":"Trains to Disneyland Paris","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fdestinations\u002Ftrains-to-disneyland-paris"},{"text":"Trains to Brussels","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fdestinations\u002Ftrains-to-brussels"}]},{"header":"Stations","links":[{"text":"UK train stations","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fstations"},{"text":"European train stations","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fstations"},{"text":"London Paddington","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fstations\u002Flondon-paddington"},{"text":"Barcelona Sants","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fstations\u002Fbarcelona-sants"},{"text":"Birmingham New Street","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fstations\u002Fbirmingham-new-street"},{"text":"Milan Central Station","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fstations\u002Fmilan-central-station"},{"text":"Edinburgh Waverley","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fstations\u002Fedinburgh"},{"text":"London Euston","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fstations\u002Flondon-euston"},{"text":"London Kings Cross","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fstations\u002Flondon-kings-cross"},{"text":"Gatwick Airport","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fstations\u002Fgatwick-airport"},{"text":"Paris Gare du Nord","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fstations\u002Fparis-gare-du-nord"},{"text":"Amsterdam Centraal","href":"https:\u002F\u002Fwww.thetrainline.com\u002Fen\u002Fstations\u002Famsterdam-centraal"}]}],"followUs":{"links":[{"text":"Facebook","href":"https:\u002F\u002Fwww.facebook.com\u002Ftrainline.uk\u002F","imagePath":"https:\u002F\u002Fwww.thetrainline.com\u002Fcontent\u002Ffooter\u002Ffacebook.svg"},{"text":"Twitter","href":"https:\u002F\u002Ftwitter.com\u002Fthetrainline","imagePath":"https:\u002F\u002Fwww.thetrainline.com\u002Fcontent\u002Ffooter\u002Ftwitter.svg"}]},"paymentLogos":[{"text":"PayPal","imagePath":"https:\u002F\u002Fwww.thetrainline.com\u002Fcontent\u002Ffooter\u002Fpaypal.svg","height":30,"width":74},{"text":"Apple Pay","imagePath":"https:\u002F\u002Fwww.thetrainline.com\u002Fcontent\u002Ffooter\u002Fapple-pay.svg","height":28,"width":44},{"text":"Google Pay","imagePath":"https:\u002F\u002Fwww.thetrainline.com\u002Fcontent\u002Ffooter\u002Fgoogle-pay.svg","height":28,"width":54}],"accreditations":[{"text":"National Rail Accredited","imagePath":"https:\u002F\u002Fwww.thetrainline.com\u002Fcontent\u002Ffooter\u002Fnational-rail.svg","height":37,"width":102}],"companyInformation":{"copyright":"Copyright © %YEAR% Trainline.com Limited and its affiliated companies. All rights reserved.","addressInfo":"Trainline.com Limited is registered in England and Wales. Company No. 3846791. Registered address: 1 Stonecutter St, London EC4A 4AH, United Kingdom. VAT number: 791 7261 06."},"locale":"en","hideTrustpilotWidget":true,"version":"4.5.1"},"dataUpdateCount":1,"dataUpdatedAt":1790238254801,"error":null,"errorUpdate
931Count":0,"errorUpdatedAt":0,"fetchFailureCount":0,"fetchMeta":null,"isFetching":false,"isInvalidated":false,"isPaused":false,"status":"success"},"queryKey":["footerContent","en","Prod","Leisure"],"queryHash":"[\"footerContent\",\"en\",\"Prod\",\"Leisure\"]"}]}; 932 var __PROPS__ = {"cmsablePayload":{"pageType":"fleet-page","locale":"en","channel":"landing-pages","path":"en-uk"},"path":"/information/apps","pageData":{"content":{"titlePrefix":"","titleSuffix":"","animatedSubtitle":"","templateVersion":"UK","heroImages":{"mobileUrl":"https://www.thetrainline.com/cms/media/1255/man_phone-hero_mobile.jpg","desktopUrl":"https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg","desktopRetinaUrl":"https://www.thetrainline.com/cmsmedia/cms/9486/man_phone-hero_2x.jpg","__typename":"Image"},"heroVideos":null,"components":[{"name":"multiColumnContainerV2","properties":[{"key":"numberOfColumns","value":2,"__typename":"ContentProperty"},{"key":"backgroundColour","value":null,"__typename":"ContentProperty"},{"key":"titleColour","value":"","__typename":"ContentProperty"},{"key":"widthType","value":null,"__typename":"ContentProperty"},{"key":"symmetry","value":"symmetric","__typename":"ContentProperty"},{"key":"title","value":"","__typename":"ContentProperty"},{"key":"intro","value":"","__typename":"ContentProperty"},{"key":"shortcutText","value":"","__typename":"ContentProperty"},{"key":"shortcutLink","value":false,"__typename":"ContentProperty"},{"key":"id","value":"","__typename":"ContentProperty"},{"key":"components","value":[{"name":"html","properties":[{"key":"markup","value":"<p style=\"color: #333;\" class=\"pullout\">From live times and disruptions info to split tickets and price alerts for the cheapest tickets, the Trainline app gives you control of your journey. It makes train and coach travel across the UK and the rest of Europe easy.</p>\n<p style=\"margin-bottom: -32px; color: #333;\" class=\"pullout\">So, with more than 270 train and coach operators for 45 countries in one place, the question is, where will the Trainline app take you next?</p>"}]},{"name":"html","properties":[{"key":"markup","value":null}]}],"__typename":"ContentProperty"}],"__typename":"ContentComponent"},{"name":"multiColumnContainerV2","properties":[{"key":"numberOfColumns","value":2,"__typename":"ContentProperty"},{"key":"backgroundColour","value":null,"__typename":"ContentProperty"},{"key":"titleColour","value":"","__typename":"ContentProperty"},{"key":"widthType","value":"wide","__typename":"ContentProperty"},{"key":"symmetry","value":"symmetric","__typename":"ContentProperty"},{"key":"title","value":"","__typename":"ContentProperty"},{"key":"intro","value":"","__typename":"ContentProperty"},{"key":"shortcutText","value":"","__typename":"ContentProperty"},{"key":"shortcutLink","value":false,"__typename":"ContentProperty"},{"key":"id","value":"","__typename":"ContentProperty"},{"key":"components","value":[{"name":"html","properties":[{"key":"markup","value":"<p><img style=\"width: 80%; height: auto; display: block; margin-left: auto; margin-right: auto;\" src=\"/cms/media/3734/eticket-ui.png?width=500&height=382.2992700729927\" alt=\"eticket on a mobile phone\" data-udi=\"umb://media/5f5052e991ef415998efa8d764d99fd7\" /></p>"}]},{"name":"html","properties":[{"key":"markup","value":"<h2 style=\"color: #333;\">Digital tickets</h2>\n<p>For safe, contactless travel, use our app to book an eticket or Mobile Ticket. We'll show you whichever option is available for your route when you book, so thereâs no need to print paper tickets or queue at the station. Scan them directly from your phone, or show to station staff to go straight to the platform.</p>\n<p>Even if youâre making multiple trips, thereâs no need to walk around with a wad of paper tickets in your wallet â your phone is all you need. Once downloaded, you won't even need internet access to use them. Digital tickets are available for the majority of routes in the UK and weâre always adding more. </p>"}]}],"__typename":"ContentProperty"}],"__typename":"ContentComponent"},{"name":"multiColumnContainerV2","properties":[{"key":"numberOfColumns","value":2,"__typename":"ContentProperty"},{"key":"backgroundColour","value":null,"__typename":"ContentProperty"},{"key":"titleColour","value":"none","__typename":"ContentProperty"},{"key":"widthType","value":"wide","__typename":"ContentProperty"},{"key":"symmetry","value":"symmetric","__typename":"ContentProperty"},{"key":"title","value":"","__typename":"ContentProperty"},{"key":"intro","value":"","__typename":"ContentProperty"},{"key":"shortcutText","value":"","__typename":"ContentProperty"},{"key":"shortcutLink","value":false,"__typename":"ContentProperty"},{"key":"id","value":"","__typename":"ContentProperty"},{"key":"components","value":[{"name":"html","properties":[{"key":"markup","value":"<p style=\"text-align: center;\"><img style=\"width: 70%; height: auto;\" src=\"/cms/media/5321/app_ticket_options_flexi_london_terminals.png\" alt=\"Flexi Season t
932ickets\" data-udi=\"umb://media/b3045a037c3f49a39e23ea943b675adb\" /></p>"}]},{"name":"html","properties":[{"key":"markup","value":"<h2>Flexi Season tickets</h2>\n<p>Spending fewer days in the office and only want to pay for the days you need to commute? Download the Trainline app and travel with a <a rel=\"noopener\" href=\"https://www.thetrainline.com/season-tickets/flexi\" target=\"_blank\" title=\"Flexi Season ticket\">Flexi Season ticket</a>, a new UK ticket type designed for more flexible commutes that offers savings for commuters travelling during Peak times, 2-3 days a week.</p>\n<p>Coming as a bundle of 8 Day Passes to use when you need them over 28 days, a Flexi Season gives you unlimited travel between your two chosen stations. You can pick and choose which days you want to take the train instantly on our app. Perfect for those with flexible schedules splitting their time between home and the workplace.</p>"}]}],"__typename":"ContentProperty"}],"__typename":"ContentComponent"},{"name":"multiColumnContainerV2","properties":[{"key":"numberOfColumns","value":2,"__typename":"ContentProperty"},{"key":"backgroundColour","value":null,"__typename":"ContentProperty"},{"key":"titleColour","value":"none","__typename":"ContentProperty"},{"key":"widthType","value":"wide","__typename":"ContentProperty"},{"key":"symmetry","value":"symmetric","__typename":"ContentProperty"},{"key":"title","value":"","__typename":"ContentProperty"},{"key":"intro","value":"","__typename":"ContentProperty"},{"key":"shortcutText","value":"","__typename":"ContentProperty"},{"key":"shortcutLink","value":false,"__typename":"ContentProperty"},{"key":"id","value":"","__typename":"ContentProperty"},{"key":"components","value":[{"name":"html","properties":[{"key":"markup","value":"<p style=\"text-align: center;\"><img style=\"width: 50%; height: auto;\" src=\"/cms/media/3004/splitsave-01-splitsave-found.png?width=234.8336594911937;height=500\" alt=\"SplitSave tickets found\" data-udi=\"umb://media/aea1a50d8cf447d7af588df02204115f\" /></p>"}]},{"name":"html","properties":[{"key":"markup","value":"<h2 style=\"color: #333;\">SplitSave</h2>\n<p>Still like the idea of getting cheap train tickets? Download the Trainline app and split your train tickets with <a rel=\"noopener\" href=\"https://www.thetrainline.com/trains/great-britain/split-tickets\" target=\"_blank\" title=\"SplitSave\">SplitSave</a> â our web and app feature â it can be much cheaper than buying a single ticket, especially if youâre travelling on a long journey.</p>\n<p>We find clever combinations of tickets to save you money, simply look out for the SplitSave icon when searching for your route. Weâll show you how much you can save and give you a detailed breakdown â youâll just need to show different tickets along your journey. You can store SplitSave tickets in your Trainline app or add them to your Apple Wallet.</p>"}]}],"__typename":"ContentProperty"}],"__typename":"ContentComponent"},{"name":"multiColumnContainerV2","properties":[{"key":"numberOfColumns","value":2,"__typename":"ContentProperty"},{"key":"backgroundColour","value":"#ff9da1","__typename":"ContentProperty"},{"key":"titleColour","value":"none","__typename":"ContentProperty"},{"key":"widthType","value":"wide","__typename":"ContentProperty"},{"key":"symmetry","value":"symmetric","__typename":"ContentProperty"},{"key":"title","value":"","__typename":"ContentProperty"},{"key":"intro","value":"","__typename":"ContentProperty"},{"key":"shortcutText","value":"","__typename":"ContentProperty"},{"key":"shortcutLink","value":false,"__typename":"ContentProperty"},{"key":"id","value":"","__typename":"ContentProperty"},{"key":"components","value":[{"name":"html","properties":[{"key":"markup","value":"<h2 style=\"color: #333;\">Live times and journey info on the go</h2>\n<p>Plan your journey to the minute with the Trainline app â handy when youâve got important places to be! Search for your journey to see live train times in one place, then tap 'Track' to check all the stops along your route and where your train is. If youâre taking more than one train along the way, you can also see when your next change is and what platform you need to go to.</p>\n<p>And, if anything crops up along your route, weâll let you know
932with our live disruption alerts.</p>\n<p>Download the Trainline app today to start travelling smarter.</p>"}]},{"name":"html","properties":[{"key":"markup","value":"<div id=\"live-times\">\n<p style=\"text-align: center;\"><img style=\"height: 400px;\" src=\"/cms/media/5947/global-live-tracker-brighton-to-london-victoria.png\" alt=\"Global Live Tracker Brighton to London\" data-udi=\"umb://media/a7fbe4bdc89943f49e1c40835025ff95\" /></p>\n</div>"}]},{"name":"html","properties":[{"key":"markup","value":"<p><img style=\"width: 100%; display: block; margin-left: auto; margin-right: auto;\" src=\"/cms/media/6246/next-train-widget.png\" alt=\"Trainline's next train widget\" data-udi=\"umb://media/448bc7e62b3d48ac9533429b671e6de0\" /></p>"}]},{"name":"html","properties":[{"key":"markup","value":"<h2>Keep up to date with our next train widget</h2>\n<p>Stay on top of your trip with our next train widget for iOS.</p>\n<p>View your next UK train at a glance, including live times and platform number.</p>\n<p>Find out more about our <a href=\"https://www.thetrainline.com/information/apps/widgets\">next train widget</a>.</p>"}]}],"__typename":"ContentProperty"}],"__typename":"ContentComponent"},{"name":"multiColumnContainerV2","properties":[{"key":"numberOfColumns","value":2,"__typename":"ContentProperty"},{"key":"backgroundColour","value":null,"__typename":"ContentProperty"},{"key":"titleColour","value":"none","__typename":"ContentProperty"},{"key":"widthType","value":"wide","__typename":"ContentProperty"},{"key":"symmetry","value":"symmetric","__typename":"ContentProperty"},{"key":"title","value":"","__typename":"ContentProperty"},{"key":"intro","value":"","__typename":"ContentProperty"},{"key":"shortcutText","value":"","__typename":"ContentProperty"},{"key":"shortcutLink","value":false,"__typename":"ContentProperty"},{"key":"id","value":"","__typename":"ContentProperty"},{"key":"components","value":[{"name":"html","properties":[{"key":"markup","value":"<p style=\"text-align: center;\"><img style=\"width: 50%; height: auto;\" src=\"/cms/media/2801/03_easy-bookings.png\" alt=\"Easy bookings on your phone\" data-udi=\"umb://media/62176ecb71c546c48cde884af4c66e41\" /></p>"}]},{"name":"html","properties":[{"key":"markup","value":"<h2 style=\"color: #333;\">Easy bookings</h2>\n<p>Who has time to search all the different operators to find the best price and journey option? Not you! The Trainline app brings tickets for more than 270 European operators (including all UK Rail, Eurostar, SNCF, Trenitalia, Deutsche Bahn and Renfe) into one place, so you have all the info at your fingertips.</p>\n<p>Book trips on the go, up to 15 minutes before departure and pay quickly and securely with Apple Pay, PayPal, Amex, Visa and more. Plus, if your plans change, you can manage your booking in the app â change the time or date of your trip or refund your ticket.</p>\n<p>Download the Trainline app today to start travelling smarter.</p>"}]}],"__typename":"ContentProperty"}],"__typename":"ContentComponent"},{"name":"multiColumnContainerV2","properties":[{"key":"numberOfColumns","value":2,"__typename":"ContentProperty"},{"key":"backgroundColour","value":"#2332c4","__typename":"ContentProperty"},{"key":"titleColour","value":"none","__typename":"ContentProperty"},{"key":"widthType","value":"wide","__typename":"ContentProperty"},{"key":"symmetry","value":"symmetric","__typename":"ContentProperty"},{"key":"title","value":"","__typename":"ContentProperty"},{"key":"intro","value":"","__typename":"ContentProperty"},{"key":"shortcutText","value":"","__typename":"ContentProperty"},{"key":"shortcutLink","value":false,"__typename":"ContentProperty"},{"key":"id","value":"","__typename":"ContentProperty"},{"key":"components","value":[{"name":"html","properties":[{"key":"markup","value":"<h2 class=\"text-invert\">Price Prediction</h2>\n<p class=\"text-invert\">If you like saving money â and letâs face it, who doesnât? â Price Prediction could be your new best friend! This handy in-app tool helps you find the cheapest tickets for your route, by using historical price trends to highlight potential fare increases.</p>\n<p class=\"text-invert\">The key is searching in advance, about 12 weeks is enough. If dataâs available for your route, youâll see Price Prediction in your search results and be able to see a detailed breakdown of ticket prices.</p>"}]},{"name":"html","properties":[{"key":"markup","value":"<p style=\"text-align: center;\"><img style=\"width: 50%; height: auto;\" src=\"/cms/media/2802/04_price-prediction.png\" alt=\"Price prediction on your phone\" data-udi=\"umb://media/954e9673a12e4de9964686e0f0161d3b\" /></p>"}]}],"__typename":"ContentProperty"}],"__typename":"ContentComponent"},{"name":"multiColumnContainerV2","properties":[{"key":"numberOfColumns","value":2,"__typename":"ContentProperty"},{"key":"backgroundColour","value":null,"__typename":"ContentProperty"},{"key":"titleColour","value":"none","__typename":"ContentProperty"},{"key":"widthType","value":"narrow","__typename":"ContentProperty"},{"key":"symmetry","value":"right-asymmetric","__typename":"ContentProperty"},{"key":"title","value":"","__typename":"ContentProperty"},{"key":"intro","value":"","__typename":"ContentProperty"},{"key":"shortcutText","value":"","__typename":"ContentProperty"},{"key":"shortcutLink","value":false,"__typename":"ContentProperty"},{"key":"id","value":"","__typename":"ContentProperty"},{"key":"components","value":[{"name":"html","properties":[{"key":"markup","value":"<h2 style=\"color: #333;\">Good to know</h2>"}]},{"name":"html","properties":[{"key":"markup","value":"<h3>How do I download the Trainline app?</h3>\n<p style=\"margin-bottom: 32px;\">Our app is available to download on the App Store and Google Play store. Want to download it now? Simply visit our <a href=\"https://2n8w.app.link/e/eP6l7bIkVZ\">get our app</a> page, enter your phone number and weâll text you a quick and easy download link for free.</p>\n<h3>Is the Trainline app free?</h3>\n<p style=\"margin-bottom: 32px;\">Yes! Itâs free to download the app and set up an account, giving you instant access to live train and coach times and tickets for more than 270 European operators in 45 countries.</p>\n<h3>How do I use the Trainline app?</h3>\n<p style=\"margin-bottom: 32px;\">That depends what youâd like to do with it. Once you open the app, use the Search tab to check live journey times and ticket prices by entering your âfromâ and âtoâ destinations. If youâre looking for tickets, you can also add passenger numbers, railcards and specific dates of travel in this section. You can also mark certain
932journeys as favourites, and find instant live times and journey information for these in the Favourites tab.</p>\n<h3>How do I activate a train ticket on the Trainline app?</h3>\n<p>Once youâve purchased a Mobile Ticket in the app, head to the My Tickets section. Here you can download your ticket to your device to view the barcode that gets scanned at the station. On the day of travel, click âActivate Ticketâ and youâre good to go. Just make sure you only do this on the day of travel, as once a ticket is activated it canât be changed, moved or refunded. Check out our <a href=\"https://support.thetrainline.com/en/support/solutions/articles/78000000396\">help page</a> for more information.</p>"}]}],"__typename":"ContentProperty"}],"__typename":"ContentComponent"}],"__typename":"FleetPageContent","pageTitle":"Europe's leading train and coach app"},"metadata":{"carrierLocale":"en-gb","breadcrumbs":[{"title":"Home","url":"https://www.thetrainline.com/","__typename":"Breadcrumb"},{"title":"Information","url":"https://www.thetrainline.com/information","__typename":"Breadcrumb"},{"title":"Europe's leading train and coach app","url":"https://www.thetrainline.com/information/apps","__typename":"Breadcrumb"}],"translatedPages":[{"href":"/fr/information/trainline-eu-app","lang":"fr","current":false,"__typename":"TranslatedPage"},{"href":"/information/apps","lang":"en","current":true,"__typename":"TranslatedPage"},{"href":"/it/informazioni/trainline-app","lang":"it","current":false,"__typename":"TranslatedPage"},{"href":"/es/informacion/trainline-app","lang":"es","current":false,"__typename":"TranslatedPage"},{"href":"/de/info/trainline-app","lang":"de","current":false,"__typename":"TranslatedPage"},{"href":"/information/apps","lang":"x-default","current":true,"__typename":"TranslatedPage"}],"__typename":"FleetPageMetadata","seoTitle":"Trainline App | Check train times, book tickets, save time & money","metaDescription":"Find out more about the Trainline, Europeâs leading train, and coach app here. Get live times, tickets and platform info in your pocket.","metaKeywords":"","metaRobots":"index,follow","canonicalTags":"https://www.thetrainline.com/information/apps","jSONLDScripts":"[{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"How do I download the Trainline app?\",\"acceptedA
932nswer\":{\"@type\":\"Answer\",\"text\":\"Our app is available to download on the App Store and Google Play store. Want to download it now? Simply visit our get our app page, enter your phone number and weâll text you a quick and easy download link for free.\"}},{\"@type\":\"Question\",\"name\":\"Is the Trainline app free?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! Itâs free to download the app and set up an account, giving you instant access to live train and coach times and tickets for more than 270 European operators in 45 countries.\"}},{\"@type\":\"Question\",\"name\":\"How do I use the Trainline app?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"That depends what youâd like to do with it. Once you open the app, use the Search tab to check live journey times and ticket prices by entering your âfromâ and âtoâ destinations. If youâre looking for tickets, you can also add passenger numbers, railcards and specific dates of travel in this section. You can also mark certain journeys as favourites, and find instant live times and journey information for these in the Favourites tab.\"}},{\"@type\":\"Question\",\"name\":\"How do I activate a train ticket on the Trainline app?\",\"acceptedA
932nswer\":{\"@type\":\"Answer\",\"text\":\"Once youâve purchased a Mobile Ticket in the app, head to the My Tickets section. Here you can download your ticket to your device to view the barcode that gets scanned at the station. On the day of travel, click âActivate Ticketâ and youâre good to go. Just make sure you only do this on the day of travel, as once a ticket is activated it canât be changed, moved or refunded. Check out our help page for more information.\"}}],\"@id\":\"https://www.thetrainline.com/information/apps#FAQPage\",\"about\":{\"@id\":\"https://www.thetrainline.com/information/apps#Article\"}},{\"@context\":\"https://schema.org\",\"@type\":\"MobileApplication\",\"name\":\"Trainline: Train travel Europe\",\"operatingSystem\":\"Android\",\"applicationCategory\":\"Maps & Navigation\",\"aggregateRating\":{\"@type\":\"AggregateRating\",\"ratingValue\":\"4.3\",\"ratingCount\":\"24800\"},\"offers\":{\"@type\":\"Offer\",\"price\":\"0.00\",\"priceCurrency\":\"GBP\"}},{\"@context\":\"https://schema.org\",\"@type\":\"MobileApplication\",\"name\":\"Trainline: Book train tickets\",\"operatingSystem\":\"iOS\",\"applicationCategory\":\"Travel\",\"aggregateRating\":{\"@type\":\"AggregateRating\",\"ratingValue\":\"4.82\",\"ratingCount\":\"11000\"},\"offers\":{\"@type\":\"Offer\",\"price\":\"0.00\",\"priceCurrency\":\"GBP\"}},{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"@id\":\"https://www.thetrainline.com/information/apps#Article\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.thetrainline.com/information/apps\"},\"name\":\"Europe's leading train and coach app\",\"headline\":\"Europe's leading train and coach app\",\"url\":\"https://www.thetrainline.com/information/apps\",\"articleSection\":\"Information\",\"inLanguage\":\"en-gb\",\"abstract\":\"<p style=\\\"color: #333;\\\" class=\\\"pullout\\\">From live times and disruptions info to split tickets and price alerts for the cheapest tickets, the Trainline app gives you control of your journey. It makes train and coach travel across the UK and the rest of Europe easy.</p>\\n<p style=\\\"margin-bottom: -32px; color: #333;\\\" class=\\\"pullout\\\">So, with more than 270 train and coach operators for 45 countries in one place, the question is, where will the Trainline app take you next?</p>\",\"image\":[{\"@type\":\"ImageObject\",\"url\":\"https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg?mode=crop&width=720&height=360&quality=70\"},{\"@type\":\"ImageObject\",\"url\":\"https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg?mode=crop&width=860&height=574&quality=70\"},{\"@type\":\"ImageObject\",\"url\":\"https://www.thetrainline.com/cmsmedia/cms/9484/man_phone-hero_1x.jpg?mode=crop&width=1080&height=1080&quality=70\"}]}]","name":"Apps","openGraphTitle":"","openGraphDescription":""},"settings":{"pageCallToAction":{"action":"custom-cta","webToAppLinkName":null,"customCtaLink":{"url":"https://2n8w.app.link/e/eP6l7bIkVZ","name":"Get our app","target":null,"__typename":"Link"},"__typename":"PageCallToAction"},"hideCarriers":true,"carrierLogo":"","hideAppBanner":false,"hideConfidenceMessaging":true,"hideBreadcrumb":false,"hidePromoBanner":false,"priceCardsCarouselPageId":"","abTestSpecificPropsId":"","showOnlyMenuBar":false,"hideSavingsMessage":true,"confidenceMessaging":{"introMessage":{"intro":null,"__typename":"IntroConfidenceMessage"},"__typename":"ConfidenceMessaging"},"__typename":"FleetPageSettings","hideFooter":false,"hideHeader":false,"origin":null,"destination":null,"transportMethod":""},"__typename":"FleetPage","contentTypeAlias":"fleetPage"},"deviceInfo":{"type":"desktop"},"hostname":"https://www.thetrainline.com","locale":"en","query":{},"portal":"Leisure","portalName":"Trainline"}; 933 var __ANALYTICS__ = {"coreProperties":{"appVersion":"cmsweb development","platform":"responsive","siteSection":"landing page","loginStatus":"unknown","contextAliasId":null,"customerId":null,"genericValue1":null,"genericValue2":null,"genericValue3":null,"currencyCode":"GBP","siteSubSection":"uk fleet cms web","pageName":"uk fleet cms web - information - apps","productLanguage":"en-gb"}}; 934 var __APPDATA__ = {"urls":{"trainlineGraphqlGatewayPath":"https://www.thetrainline.com/graphql","graphqlPath":"https://api.thetrainline.com/seo/graphql","pageUrl":"https://www.thetrainline.com/information/apps"},"webToAppCampaignData":{"deepLinkingData":{},"tags":[],"campaign":"Web--Organic","channel":"W2A"},"isFirstTimeUser":true,"mentionMe":{"urlBase":"tag.mention-me.com","partnerCode":"mmc75da0a4"}
934,"userCountry":"US","isAppToWebPunchout":false,"statsigUser":{"userID":"","customIDs":{"stableID":"a0779de1-b5cc-4734-b4c8-8edc0c686dc8"},"country":"US","statsigEnvironment":{"tier":"prod"}}}; 935 var __ANALYTICS_CORE_PROPERTIES__ = {"appVersion":"cmsweb development","platform":"responsive","siteSection":"landing page","loginStatus":"unknown","contextAliasId":null,"customerId":null,"genericValue1":null,"genericValue2":null,"genericValue3":null,"currencyCode":"GBP","siteSubSection":"uk fleet cms web","pageName":"uk fleet cms web - information - apps","productLanguage":"en-gb"}; 936 var __PORTAL_CONFIG__ = {"MANAGED_GROUP_ID":20,"MANAGED_GROUP_NAME":"TRAINLINE","DESKTOP_ENTRY_POINT":2000,"MOBILE_ENTRY_POINT":2010,"PORTAL":"Leisure","FAVICON":"https://static.trainlinecontent.com/content/WEB/images/favicon.ico","APP_NAME":"Trainline","GTM_ID":"GTM-NJRBF7N","STATSIG_CLIENT_SDK_KEY":"client-RVCeNYu4gWuQiQGGJXpYHSDfsPPsnEwbt1ejZCAO4JS","STATSIG_ENABLED":true,"HOST_NAME":"www.thetrainline.com","OFFLINE_HOST_NAME":"www.offline.thetrainline.com"}; 937 var __ACID__ = "a0779de1-b5cc-4734-b4c8-8edc0c686dc8"; 938 var __STATSIG_BOOTSTRAP_VALUES__ = "{\"feature_gates\":{\"1961418377\":{\"name\":\"1961418377\",\"rule_id\":\"disabled\",\"secondary_exposures\":[],\"id_type\":\"stableID\",\"value\":true}},\"dynamic_configs\":{\"1782680627\":{\"name\":\"1782680627\",\"rule_id\":\"assignmentPaused\",\"secondary_exposures\":[],\"id_type\":\"stableID\",\"value\":{},\"is_device_based\":true,\"is_experiment_active\":true,\"is_user_in_experiment\":false}},\"layer_configs\":{},\"time\":1789547250902,\"has_updates\":true,\"hash_used\":\"djb2\",\"user\":{\"userID\":\"\",\"customIDs\":{\"stableID\":\"a0779de1-b5cc-4734-b4c8-8edc0c686dc8\"},\"country\":\"US\",\"statsigEnvironment\":{\"tier\":\"prod\"}},\"sdkInfo\":{\"sessionId\":\"353b1cd7-53bb-4a94-8922-5335608fa382\",\"sdkVersion\":\"0.16.2\",\"sdkType\":\"statsig-server-core-node\"},\"sdkParams\":{},\"evaluated_keys\":{\"customIDs\":{\"stableID\":\"a0779de1-b5cc-4734-b4c8-8edc0c686dc8\"}},\"param_stores\":{},\"can_record_session\":true,\"session_recording_rate\":1.0,\"recording_blocked\":false,\"session_recording_privacy_settings\":{\"privacy_mode\":\"min\"}}"; 939 </script>
939 940 941
941<script src="/cms-web/public/shareable-b2355c1960517c296af2.js"></script>
941 942
942<script src="/cms-web/public/vendors-98b5433f23e6743a1ef0.js"></script>
942 943
943<script src="/cms-web/public/vendors~locale-data-en-7d0cccacf4ca693126ee.js"></script>
943 944
944<script src="/cms-web/public/sgpFleetPage-16e792d5743ecec5e1da.js"></script>
944 945 946
946<script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="af9905cb-5054-4f35-8eac-90611a62f404" data-document-language="true"></script>
946 947
947<script type="text/javascript"> 948 var oneTrustLoaded = false; 949 950 function OptanonWrapper() { 951 if (!oneTrustLoaded) { 952 953 window.cookieConsent = { 954 userCountry: 'US', 955 withErrorHandling: function withErrorHandling(callback) { var _window = window, newrelic = _window.newrelic; var optanon = window.Optanon; if (typeof optanon === 'undefined') { return null; } try { return callback(); } catch (error) { return newrelic && newrelic.noticeError(error); }}, 956 onConsentChangedCallback: function onConsentChangedCallback(appName, cookieApiDomain, shouldSetServerSideCookies) { var _window = window, newrelic = _window.newrelic, cookieConsent = _window.cookieConsent; var documentCookies = document.cookie.split('; '); var tlCookieConsentSeparator = '#tl-cookie-expires='; var getCookieValue = function getCookieValue(cookie) { return decodeURIComponent(cookie.substring(cookie.indexOf('=') + 1)); }; var optanonConsentValue; var optanonAlertBoxClosedValue; var eupubconsentV2Value; documentCookies.forEach(function (cookie) { if (cookie.includes('OptanonConsent')) optanonConsentValue = getCookieValue(cookie); if (cookie.includes('OptanonAlertBoxClosed')) optanonAlertBoxClosedValue = getCookieValue(cookie); if (cookie.includes('eupubconsent-v2')) eupubconsentV2Value = getCookieValue(cookie); }); if (optanonConsentValue && optanonAlertBoxClosedValue && Date.parse(optanonAlertBoxClosedValue)) { var date = new Date(optanonAlertBoxClosedValue); date.setFullYear(date.getFullYear() + 1); date.setMilliseconds(0); var domain = window.location.hostname; if (domain.includes('thetrainline')) { domain = 'thetrainline.com'; } var cookiesToSet = [{ name: 'OptanonAlertBoxClosed', value: optanonAlertBoxClosedValue, expires: new Date(date), domain: domain }, { name: 'TLCookieConsent', value: [optanonConsentValue, date].join(tlCookieConsentSeparator), expires: new Date(date), domain: domain }, { name: 'TLCookieConsentTCF2', value: [eupubconsentV2Value, date].join(tlCookieConsentSeparator), expires: new Date(date), domain: domain }]; if (shouldSetServerSideCookies) { fetch("".concat(cookieApiDomain, "/api/set-cookies"), { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-version': appName }, body: JSON.stringify({ cookies: cookiesToSet }) }).finally(function () { return cookieConsent.saveUserConsent(appName, cookieApiDomain, shouldSetServerSideCookies, true); }); } window.document.dispatchEvent(new CustomEvent('ONETRUST_CONSENT_CHANGED', { bubbles: true })); return null; } if (newrelic) { newrelic.noticeError(new Error("CookieConsent - Error handling the values of the cookies 'OptanonConsent' and/or 'OptanonAlertBoxClosed'. 'TLCookieConsent' cookie not set."), { OptanonConsent: optanonConsentValue, OptanonAlertBoxClosed: optanonAlertBoxClosedValue, OptanonAlertBoxClosedDate: Date.parse(optanonAlertBoxClosedValue), cookies: documentCookies, cookieApiDomain: cookieApiDomain, shouldSetServerSideCookies: shouldSetServerSideCookies, hostname: window.location.hostname }); }}, 957 onVisibilityChange: function onVisibilityChange() { var optanon = window.Optanon; if (document.visibilityState === 'visible' && optanon.IsAlertBoxClosedAndValid()) { window.location.reload(); window.removeEventListener('visibilitychange', onVisibilityChange); }}, 958 lockScroll: function lockScroll() { document.querySelector('body').classList.add('onetrust-no-scroll');}, 959 unlockScroll: function unlockScroll() { document.querySelector('body').classList.remove('onetrust-no-scroll');}, 960 onSdkLoad: function onSdkLoad(appName, cookieApiDomain) { var shouldSetServerSideCookies = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var shouldRetry = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; var _window = window, optanon = _window.Optanon, cookieConsent = _window.cookieConsent; var analytics = cookieConsent.analytics, localStorageHandler = cookieConsent.localStorageHandler; var onLoad = function onLoad() { var _window2 = window, LUX = _window2.LUX; var UK_COUNTRY_CODE = 'GB';
960 if (LUX) { LUX.addData('cookieConsentLoaded', 1); } window.document.dispatchEvent(new CustomEvent('ONETRUST_LOADED', { bubbles: true })); if (!optanon.IsAlertBoxClosedAndValid()) { window.cookieConsent.isTCF2Template = analytics.getListPartnersButtonElement() != null; analytics.markImpression(); analytics.addEventListeners(); if (window.cookieConsent.userCountry !== UK_COUNTRY_CODE) { window.cookieConsent.disableToggles(); } window.addEventListener('visibilitychange', cookieConsent.onVisibilityChange); } optanon.OnConsentChanged(function () { analytics.removeEventListeners(); cookieConsent.onConsentChangedCallback(appName, cookieApiDomain, shouldSetServerSideCookies); }); }; window.cookieConsent.withErrorHandling(onLoad); if (shouldRetry && localStorageHandler.getItem('consent_retries') !== null) window.cookieConsent.saveUserConsent(appName, cookieApiDomain, shouldSetServerSideCookies);}, 961 onSdkRun: function onSdkRun() { var onRun = function onRun() { var _window = window, optanon = _window.Optanon, cookieConsent = _window.cookieConsent; var _window2 = window, LUX = _window2.LUX; var _window3 = window, LUX_COOKIE_CONSENT_SHOWN = _window3.LUX_COOKIE_CONSENT_SHOWN; if (!optanon.IsAlertBoxClosedAndValid()) { cookieConsent.lockScroll(); if (LUX) { LUX.addData('cookieConsentModalShown', 1); window.LUX_COOKIE_CONSENT_SHOWN = true; } window.document.dispatchEvent(new CustomEvent('ONETRUST_AWAITING_CONSENT', { bubbles: true })); return; } cookieConsent.unlockScroll(); window.removeEventListener('visibilitychange', cookieConsent.onVisibilityChange); window.document.dispatchEvent(new CustomEvent('ONETRUST_HAS_CONSENT', { bubbles: true })); if (LUX && !LUX_COOKIE_CONSENT_SHOWN) { LUX.addData('cookieConsentModalShown', 0); } }; window.cookieConsent.withErrorHandling(onRun);}, 962 fetchWithTimeout: function fetchWithTimeout(url, timeout, initWithTimeout) { var controller = new AbortController(); var id = setTimeout(function () { return controller.abort(); }, timeout); return fetch(url, Object.assign(initWithTimeout, { signal: controller.signal })).then(function (res) { clearTimeout(id); return res; });}, 963 saveUserConsent: function saveUserConsent(appName, cookieApiDomain, shouldSetServerSideCookies) { var hasConsentChanged = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var _window = window, newrelic = _window.newrelic, _window$cookieConsent = _window.cookieConsent, fetchWithTimeout = _window$cookieConsent.fetchWithTimeout, parseDocumentCookies = _window$cookieConsent.parseDocumentCookies, localStorageHandler = _window$cookieConsent.localStorageHandler, crypto = _window.crypto; var cookies = parseDocumentCookies(document.cookie); var consentKey = 'consent_retries'; var maxRetries = 2; var consentValue = localStorageHandler.getItem(consentKey); var retries = parseInt(consentValue, 10); if (Number.isNaN(retries) || hasConsentChanged) { retries = 0; } if (retries >= maxRetries && !hasConsentChanged) return null; var calculatedRetries = retries + 1; var OptanonConsent = cookies.OptanonConsent, EuPubConsentV2 = cookies['eupubconsent-v2']; if (!OptanonConsent || !EuPubConsentV2) return null; return fetchWithTimeout("".concat(cookieApiDomain, "/api/set-consents"), 2000, { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', 'X-App-Version': appName, 'X-Platform-Type': 'web', 'X-Api-ManagedGroupName': 'trainline', conversationId: crypto.randomUUID() } }).then(function (res) { if (!res.ok) { localStorageHandler.setItem(consentKey, calculatedRetries.toString()); throw new Error("Not ok - status ".concat(res.status)); } res.json().then(function (responseBody) { var _responseBody$v2_setP; if ((responseBody === null || responseBody === void 0 ? void 0 : (_responseBody$v2_setP = responseBody.v2_setPrivacyConsentsFromCookies) === null || _responseBody$v2_setP === void 0 ? void 0 : _responseBody$v2_setP.success) === true) { localStorageHandler.setItem(consentKey, maxRetries.toString()); return; } localStorageHandler.setItem(consentKey, calculatedRetries.toString()); }); }).catch(function (error) { localStorageHandler.setItem(consentKey, maxRetries.toString()); var optanonAlertBoxClosed = cookies.OptanonAlertBoxClosed; if (newrelic) { newrelic.noticeError(new Error("CookieConsent - Error calling /graphql"), { OptanonConsent: OptanonConsent, OptanonAlertBoxClosed: optanonAlertBoxClosed, OptanonAlertBoxClosedDate: Date.parse(optanonAlertBoxClosed), cookies: cookies, cookieApiDomain: cookieApiDomain, shouldSetServerSideCookies: shouldSetServerSideCookies, hostname: window.location.hostname, error: error }); } });}, 964 parseDocumentCookies: function parseDocumentCookies(documentCookie) { var cookies = {}; var splitCookies = documentCookie.split('; ');
964 splitCookies.forEach(function (cookie) { var key = cookie.substring(0, cookie.indexOf('=')); var value = cookie.substring(cookie.indexOf('=') + 1, cookie.length); if (key && value) cookies[decodeURIComponent(key)] = decodeURIComponent(value); }); return cookies;}, 965 localStorageHandler: { 966 getItem: function getItem(key) { try { if (typeof window === 'undefined' || typeof window.localStorage === 'undefined') return null; localStorage.setItem('detect', 'detectvalue'); if (localStorage.getItem('detect') === null) return null; localStorage.removeItem('detect'); } catch (e) { return null; } return window.localStorage.getItem(key);}, 967 setItem: function setItem(key, value) { try { if (typeof window === 'undefined' || typeof window.localStorage === 'undefined') return null; localStorage.setItem('detect', 'detectvalue'); if (localStorage.getItem('detect') === null) return null; localStorage.removeItem('detect'); } catch (e) { return null; } window.localStorage.setItem(key, value); return true;}, 968 removeItem: function removeItem(key) { try { if (typeof window === 'undefined' || typeof window.localStorage === 'undefined') return null; localStorage.setItem('detect', 'detectvalue'); if (localStorage.getItem('detect') === null) return null; localStorage.removeItem('detect'); } catch (e) { return null; } window.localStorage.removeItem(key); return true;}, 969 }, 970 analytics: { 971 markImpression: function markImpression() { var _window$newrelic; (_window$newrelic = window.newrelic) === null || _window$newrelic === void 0 ? void 0 : _window$newrelic.addPageAction("cookieConsent-".concat(window.cookieConsent.userCountry), { impression: '', isTCF2Template: window.cookieConsent.isTCF2Template });}, 972 getRejectButtonElements: function getRejectButtonElements() { return document.querySelectorAll('#onetrust-reject-all-handler, .ot-pc-refuse-all-handler');}, 973 getAcceptButtonElement: function getAcceptButtonElement() { return document.getElementById('onetrust-accept-btn-handler');}, 974 getChooseCookiesButtonElement: function getChooseCookiesButtonElement() { return document.getElementById('onetrust-pc-btn-handler');}, 975 getCloseButtonElement: function getCloseButtonElement() { return document.querySelector('#onetrust-close-btn-container .onetrust-close-btn-handler');}, 976 getListPartnersButtonElement: function getListPartnersButtonElement() { var _document$getElements; return (_document$getElements = document.getElementsByClassName('onetrust-vendors-list-handler')) === null || _document$getElements === void 0 ? void 0 : _document$getElements[0];}, 977 getDoneButtonElement: function getDoneButtonElement() { var buttons = document.getElementsByClassName('save-preference-btn-handler onetrust-close-btn-handler'); var firstButton = buttons === null || buttons === void 0 ? void 0 : buttons[0]; return firstButton;}, 978 eventHandlers: { 979 onRejectClick: function onRejectClick() { var _window$newrelic; (_window$newrelic = window.newrelic) === null || _window$newrelic === void 0 ? void 0 : _window$newrelic.addPageAction("cookieConsent-".concat(window.cookieConsent.userCountry), { cta: 'reject', isTCF2Template: window.cookieConsent.isTCF2Template });}, 980 onAcceptClick: function onAcceptClick() { var _window$newrelic2; (_window$newrelic2 = window.newrelic) === null || _window$newrelic2 === void 0 ? void 0 : _window$newrelic2.addPageAction("cookieConsent-".concat(window.cookieConsent.userCountry), { cta: 'accept', isTCF2Template: window.cookieConsent.isTCF2Template });}, 981 onChooseCookiesClick: function onChooseCookiesClick() { var _window$newrelic3; (_window$newrelic3 = window.newrelic) === null || _window$newrelic3 === void 0 ? void 0 : _window$newrelic3.addPageAction("cookieConsent-".concat(window.cookieConsent.userCountry), { cta: 'chooseCookies', isTCF2Template: window.cookieConsent.isTCF2Template });}, 982 onListPartnersClick: function onListPartnersClick() { var _window$newrelic4; (_window$newrelic4 = window.newrelic) === null || _window$newrelic4 === void 0 ? void 0 : _window$newrelic4.addPageAction("cookieConsent-".concat(window.cookieConsent.userCountry), { cta: 'listPartners', isTCF2Template: window.cookieConsent.isTCF2Template });}, 983 onDoneClick: function onDoneClick() { var _window$newrelic5; (_window$newrelic5 = window.newrelic) === null || _window$newrelic5 === void 0 ? void 0 : _window$newrelic5.addPageAction("cookieConsent-".concat(window.cookieConsent.userCountry), { cta: 'done', isTCF2Template: window.cookieConsent.isTCF2Template });}, 984 onCloseClick: function onCloseClick() { var _window$newrelic6; (_window$newrelic6 = window.newrelic) === null || _window$newrelic6 === void 0 ? void 0 : _window$newrelic6.addPageAction("cookieConsent-".concat(window.cookieConsent.userCountry), { cta: 'close', isTCF2Template: window.cookieConsent.isTCF2Template });}, 985 }, 986 addEventListeners: function addEventListeners() { var _window = window, newrelic = _window.newrelic; var _window$cookieConsent = window.cookieConsent, userCountry = _window$cookieConsent.userCountry, _window$cookieConsent2 = _window$cookieConsent.analytics, eventHandlers = _window$cookieConsent2.eventHandlers, getRejectButtonElements = _window$cookieConsent2.getRejectButtonElements, getAcceptButtonElement = _window$cookieConsent2.getAcceptButtonElement, getChooseCookiesButtonElement = _window$cookieConsent2.getChooseCookiesButtonElement, getCloseButtonElement = _window$cookieConsent2.getCloseButtonElement, getListPartnersButtonElement = _window$cookieConsent2.getListPartnersButtonElement, getDoneButtonElement = _window$cookieConsent2.getDoneButtonElement; var onRejectClick = eventHandlers.onRejectClick, onAcceptClick = eventHandlers.onAcceptClick, onChooseCookiesClick = eventHandlers.onChooseCookiesClick, onListPartnersClick = eventHandlers.onListPartnersClick, onDoneClick = eventHandlers.onDoneClick, onCloseClick = eventHandlers.onCloseClick; var rejectButtonElements = getRejectButtonElements(); var acceptButtonElement = getAcceptButtonElement(); var chooseCookiesButtonElement = getChooseCookiesButtonElement(); var closeButtonElement = getCloseButtonElement(); var listPartnersButtonElement = getListPartnersButtonElement(); var doneButtonElement = getDoneButtonElement();
986 if (acceptButtonElement) { acceptButtonElement.addEventListener('click', onAcceptClick); } else { newrelic === null || newrelic === void 0 ? void 0 : newrelic.noticeError("Cookie Consent: Accept button is missing for ".concat(userCountry, " traffic")); } if (chooseCookiesButtonElement) { chooseCookiesButtonElement.addEventListener('click', onChooseCookiesClick); } else { newrelic === null || newrelic === void 0 ? void 0 : newrelic.noticeError("Cookie Consent: Choose Cookies button is missing for ".concat(userCountry, " traffic")); } if (listPartnersButtonElement) { listPartnersButtonElement.addEventListener('click', onListPartnersClick); } if (doneButtonElement) { doneButtonElement.addEventListener('click', onDoneClick); } else { newrelic === null || newrelic === void 0 ? void 0 : newrelic.noticeError("Cookie Consent: Done button is missing for ".concat(userCountry, " traffic")); } rejectButtonElements.forEach(function (rejectButtonElement) { return rejectButtonElement.addEventListener('click', onRejectClick); }); if (closeButtonElement) { closeButtonElement.addEventListener('click', onCloseClick); }}, 987 removeEventListeners: function removeEventListeners() { var _getAcceptButtonEleme, _getChooseCookiesButt, _getCloseButtonElemen, _getListPartnersButto, _getDoneButtonElement; var _window$cookieConsent = window.cookieConsent.analytics, getRejectButtonElements = _window$cookieConsent.getRejectButtonElements, getAcceptButtonElement = _window$cookieConsent.getAcceptButtonElement, getChooseCookiesButtonElement = _window$cookieConsent.getChooseCookiesButtonElement, getCloseButtonElement = _window$cookieConsent.getCloseButtonElement, getListPartnersButtonElement = _window$cookieConsent.getListPartnersButtonElement, getDoneButtonElement = _window$cookieConsent.getDoneButtonElement, _window$cookieConsent2 = _window$cookieConsent.eventHandlers, onRejectClick = _window$cookieConsent2.onRejectClick, onAcceptClick = _window$cookieConsent2.onAcceptClick, onChooseCookiesClick = _window$cookieConsent2.onChooseCookiesClick, onListPartnersClick = _window$cookieConsent2.onListPartnersClick, onDoneClick = _window$cookieConsent2.onDoneClick, onCloseClick = _window$cookieConsent2.onCloseClick; getRejectButtonElements().forEach(function (rejectButtonElement) { return rejectButtonElement.removeEventListener('click', onRejectClick); }); (_getAcceptButtonEleme = getAcceptButtonElement()) === null || _getAcceptButtonEleme === void 0 ? void 0 : _getAcceptButtonEleme.removeEventListener('click', onAcceptClick); (_getChooseCookiesButt = getChooseCookiesButtonElement()) === null || _getChooseCookiesButt === void 0 ? void 0 : _getChooseCookiesButt.removeEventListener('click', onChooseCookiesClick); (_getCloseButtonElemen = getCloseButtonElement()) === null || _getCloseButtonElemen === void 0 ? void 0 : _getCloseButtonElemen.removeEventListener('click', onCloseClick); (_getListPartnersButto = getListPartnersButtonElement()) === null || _getListPartnersButto === void 0 ? void 0 : _getListPartnersButto.removeEventListener('click', onListPartnersClick); (_getDoneButtonElement = getDoneButtonElement()) === null || _getDoneButtonElement === void 0 ? void 0 : _getDoneButtonElement.removeEventListener('click', onDoneClick);}, 988 }, 989 disableToggles: function disableToggles() { var preferenceCentreToggles = document.getElementsByClassName('category-switch-handler'); var asArray = [].slice.call(preferenceCentreToggles).filter(function (input) { return input.checked; }); asArray.forEach(function (input) { input.click(); });}, 990 991 }; 992 993 994 window.cookieConsent.onSdkLoad('CmsWeb', 'https://www.thetrainline.com', true, false); 995 oneTrustLoaded = true; 996 } 997 998 if (window.requestIdleCallback) { 999 window.requestIdleCallback(window.cookieConsent.onSdkRun); 1000 } else { 1001 window.cookieConsent.onSdkRun(); 1002 } 1003 1004 1005 }; 1006 1007 </script>
1007 1008
1008<script type="text/javascript">window.dataLayer=window.dataLayer||[]; 1009function gtag(){dataLayer.push(arguments)} 1010gtag( 1011 'consent', 1012 'default', 1013 { 1014 'ad_storage':'denied', 1015 'analytics_storage':'denied', 1016 'functionality_storage':'denied', 1017 'personalization_storage':'denied', 1018 'security_storage':'denied', 1019 'ad_user_data':'denied', 1020 'ad_personalization':'denied' 1021 } 1022)</script>
1022 1023 1024</body> 1025 1026</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.