@charset "UTF-8";
@font-face{font-family:BadScript;src:url('assets/bad-script.ttf') format('truetype');font-weight:400;font-style:normal;font-display:swap}
:root{--paper:#faf7ef;--ink:#30453b;--green:#315f54;--muted:#6d786b;--rule:#d4d0bd;--hand:BadScript,'Segoe Print',cursive;--sans:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
*{box-sizing:border-box}html{background:var(--paper);scroll-behavior:smooth}body{margin:0;min-width:320px;background:var(--paper);color:var(--ink);font-family:var(--sans)}
body:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:20;background:url('assets/grain.svg');opacity:.38}
a,button{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{font:inherit;cursor:pointer}button:disabled{cursor:default}a{color:inherit}[hidden]{display:none!important}
button:focus-visible,a:focus-visible{outline:2px solid #a18a54;outline-offset:6px}h1:focus,h2:focus{outline:none}svg{fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}.svg-defs{position:absolute;width:0;height:0;overflow:hidden}
.site-shell{max-width:1600px;margin:auto;padding:0 58px;min-height:100svh;display:flex;flex-direction:column}
.masthead{height:104px;display:flex;justify-content:space-between;align-items:center;gap:25px;position:relative;z-index:5}
.brand{display:flex;align-items:center;gap:14px;text-decoration:none;font:23px var(--hand);color:var(--green)}
.brand-mark{display:grid;place-items:center;width:40px;height:40px;font:21px var(--hand);border:1px solid #81927b;border-radius:46% 48% 44% 47%;position:relative}
.brand-mark:before{content:"";position:absolute;inset:2px -2px -2px 2px;border:1px solid #75917c33;border-radius:47% 42% 48% 44%}
.edition{font-size:8px;letter-spacing:2.5px;color:var(--muted)}
main{flex:1;position:relative}.scene{position:relative;animation:scene-enter .6s ease both}
.invitation{min-height:670px;display:flex;align-items:center;padding:50px 0 75px;isolation:isolate}
.intro-copy{width:48%;position:relative;z-index:2;padding-left:30px}
.intro-greeting{font:20px/1.8 var(--hand);color:#6d7a62;margin:0 0 24px}
h1,h2{font-family:var(--hand);font-weight:400;margin:0;letter-spacing:-1.2px}h1{font-size:clamp(65px,6.1vw,88px);line-height:1.29;padding-bottom:8px}
h1 em{color:var(--green);font-style:normal;white-space:nowrap;position:relative;font-weight:400}h1 em:after{content:"";position:absolute;height:3px;left:1px;right:1px;bottom:5px;background:#cbb68273;clip-path:polygon(0 35%,35% 10%,100% 23%,97% 75%,50% 90%,1% 65%)}
.button{display:inline-flex;align-items:center;justify-content:center;gap:19px;min-height:64px;min-width:225px;border:0;border-radius:0;padding:16px 33px 16px 44px;font-size:13px;letter-spacing:.1px;position:relative;isolation:isolate;transition:transform .2s,filter .2s;text-decoration:none}
.button svg{width:22px;height:22px;stroke-width:1.25}.primary{background:transparent;color:#2d5b47}
.primary:before{content:"";position:absolute;inset:0;z-index:-1;background-image:url("data:image/svg+xml,%3Csvg%20fill%3D%22none%22%20stroke-width%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20320%2076%22%20preserveAspectRatio%3D%22none%22%3E%3Cpath%20d%3D%22m12%2038%2025-27h260l12%2012v30l-12%2012H37Z%22%20fill%3D%22%23f0ead8%22%20stroke%3D%22%236f8d79%22%2F%3E%3Cpath%20d%3D%22M43%2015h250l10%2011v25l-10%2010H43%22%20stroke%3D%22%23a9b59b%22%20stroke-width%3D%22.6%22%2F%3E%3Ccircle%20cx%3D%2231%22%20cy%3D%2238%22%20r%3D%223%22%20fill%3D%22%23faf7ef%22%20stroke%3D%22%237a947f%22%2F%3E%3Cpath%20d%3D%22m28%2036-17-8%22%20stroke%3D%22%23b29867%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat;background-size:100% 100%;pointer-events:none}
.primary:hover{transform:translateY(-2px);filter:brightness(.98)}.primary:active{transform:translateY(0)}.primary:disabled{opacity:.65}.intro-copy>.button{margin-top:31px}
.hero-art{position:absolute;right:-18px;top:-10px;width:70%;height:675px;z-index:1;pointer-events:none;overflow:hidden}
.hero-image{position:absolute;width:100%;height:auto;inset:50% 0 auto;transform:translateY(-50%);mix-blend-mode:multiply;mask-image:linear-gradient(to bottom,transparent,#000 7%,#000 100%)}
.wind-leaves{position:absolute;width:100%;height:100%;inset:0;fill:#7f934c;stroke:#687f47;stroke-width:.35;overflow:hidden;pointer-events:none}
.wind-leaves path{transform-box:fill-box;transform-origin:center;animation:leaf-drift 7s ease-in-out infinite;opacity:0}
.wind-leaves path:nth-child(2){animation-delay:-2.1s;animation-duration:8s;fill:#a6a35b}
.wind-leaves path:nth-child(3){animation-delay:-4.8s;animation-duration:9s}
.wind-leaves path:nth-child(4){animation-delay:-6s;animation-duration:8s;fill:#a6a35b}
.site-footer{min-height:83px;border-top:1px dashed #c8ceb9;display:flex;align-items:center;justify-content:center;margin-top:10px}
.journey-progress{display:flex;align-items:center;gap:15px;font-size:10px;color:#76816d}.journey-progress span{display:flex;align-items:center;gap:7px;white-space:nowrap}.journey-progress b{font:16px var(--hand);font-weight:400;width:26px;height:26px;display:grid;place-items:center;position:relative}.journey-progress i{width:25px;border-top:1px dashed #b9c1ad}.journey-progress [aria-current]{color:var(--green)}.journey-progress [aria-current] b:before{content:"";position:absolute;inset:0;border:1px solid #809778;border-radius:46%}
.section-heading{text-align:center;margin:29px 0 36px}.section-heading h2{font-size:47px;line-height:1.5}.section-heading>p{font-size:12px;line-height:1.8;color:var(--muted);margin:10px 0 0}
.ticket-scene{padding:0 0 28px;min-height:645px}
.boarding-pass{display:grid;grid-template-columns:43% 1fr 105px;max-width:1060px;min-height:340px;margin:0 auto;background:#fffdf6;border:1px solid #81917b73;box-shadow:0 14px 28px #5f624710;position:relative;isolation:isolate}
.boarding-pass:before{content:"";position:absolute;inset:5px;border:1px solid #81917b29;pointer-events:none;z-index:3}
.pass-art{position:relative;min-height:340px;overflow:hidden;border-right:1px solid #bbc3ad80}
.lisbon-background{width:100%;height:100%;position:absolute;inset:0;object-fit:cover;mix-blend-mode:multiply;opacity:.88}
.ticket-city{position:absolute;top:23px;left:23px;font-size:10px;letter-spacing:4px;color:#647c65;background:#faf7efb8;padding:5px 7px}
.tram-layer{position:absolute;width:92%;left:-4%;bottom:0;filter:drop-shadow(0 5px 2px #5c5b3b15)}
.tram-layer img{width:100%;height:auto;display:block}
.pass-details{padding:25px 28px 19px;display:flex;flex-direction:column;min-width:0}
.pass-topline{display:flex;align-items:center;justify-content:space-between;font-size:8px;letter-spacing:2.1px;color:#74846a;margin-bottom:18px}.pass-topline svg{width:34px;height:24px;stroke-width:1}
.pass-destination{display:flex;flex-direction:column;gap:5px}.field-label{font-size:8px;letter-spacing:1.5px;color:#7b8674;line-height:1.5}
.pass-destination strong{font:400 61px/1.05 Georgia,serif;color:#365c4d;letter-spacing:5px}.pass-destination>span:last-child{font-size:12px;color:#6c7b63}
.pass-passenger{display:flex;flex-direction:column;gap:8px;margin-top:21px;padding-top:17px;border-top:1px solid #c9cebc}.pass-passenger b{font-size:17px;font-weight:400;letter-spacing:.3px}
.pass-fields{display:grid;grid-template-columns:1fr 1fr 1fr;gap:15px;margin-top:20px}.pass-fields>div{display:flex;flex-direction:column;gap:6px}.pass-fields b{font-size:13px;font-weight:400}
.ticket-status{font-size:9px;color:#758169;line-height:1.5;min-height:14px;margin-top:18px}
.pass-stub{border-left:1px dashed #9eac916e;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;background:#eff0e348;padding:18px 12px}
.pass-stub>svg{width:34px;height:24px;color:#769075;stroke-width:1}.pass-stub>span{font:24px Georgia,serif;letter-spacing:2px;color:var(--green)}.pass-stub small{font-size:7px;letter-spacing:.7px;white-space:nowrap}
.barcode{width:35px;height:106px;background:repeating-linear-gradient(0deg,#5b735d 0 1px,transparent 1px 3px,#5b735d 3px 6px,transparent 6px 8px,#5b735d 8px 9px,transparent 9px 14px,#5b735d 14px 16px,transparent 16px 18px);opacity:.65}
.entry-stamp{position:absolute;width:178px;height:116px;left:calc(43% - 180px);top:103px;padding:5px;color:#874d3a;border:2px solid currentColor;border-radius:4px;background:#fcf7e69c;transform:rotate(-9deg) scale(1);opacity:0;pointer-events:none;z-index:4}
.stamp-inner{height:100%;border:1px solid currentColor;padding:9px 8px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:5px}.stamp-inner>span{font:10px Georgia,serif;letter-spacing:1px;white-space:nowrap}.stamp-inner>div{display:flex;align-items:center;gap:13px}.stamp-inner svg{height:24px;width:34px;stroke-width:1.4}.stamp-inner b{font:27px Georgia,serif;font-weight:400;letter-spacing:2px}.stamp-inner>strong{font-size:9px;letter-spacing:2.7px;font-weight:500}
.is-registering .tram-layer{animation:tram-journey 1.7s ease-in-out both}.is-registered .tram-layer{transform:translateX(24px)}.is-registered .entry-stamp{animation:arrival-stamp .4s ease both}
.ticket-actions{text-align:center;margin-top:31px}.ticket-actions .button{min-width:270px}.text-button{background:none;border:0;padding:12px 0;font-size:12px;color:var(--green);text-underline-offset:5px}.text-button:hover{text-decoration:underline}.back-button{display:block;margin:15px auto 0;color:#74806c;font-size:11px}
.boarding-scene{padding:0 0 23px;max-width:1080px;margin:auto;min-height:675px}.boarding-scene .section-heading{margin-bottom:0}
.airport-boarding{position:relative;max-width:1000px;height:405px;margin:4px auto 0;overflow:hidden;isolation:isolate}
.aircraft-interactive{display:block;position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;background:none;cursor:pointer}
.aircraft-interactive img{width:100%;height:100%;object-fit:contain;mix-blend-mode:multiply;transition:transform 1.4s ease}
.airport-boarding:focus-within{outline:2px dashed #b9b294;outline-offset:2px;border-radius:7px}.aircraft-interactive:focus-visible{outline:none}.aircraft-interactive:disabled{cursor:default}
.boarding-marker{position:absolute;left:54%;top:47%;width:30px;height:30px;display:grid;place-items:center;border:1px solid #8b9b7a;border-radius:50%;background:#f9f5e6b3;color:#6e875e;animation:marker-pulse 2s ease-out infinite}.boarding-marker svg{height:18px;width:18px;transform:rotate(-45deg)}
.boarding-token{position:absolute;left:34%;top:80%;width:34px;height:21px;background:#ece5d0;border:1px solid #8a967c;opacity:0;pointer-events:none;display:grid;place-items:center;box-shadow:1px 2px 4px #67715220}.boarding-token svg{width:21px;height:16px;color:#617d66}
.is-boarding .boarding-token{animation:boarding-pass-entry 1.4s ease-in-out both}.is-boarding .boarding-marker,.is-boarded .boarding-marker{display:none}.is-boarding .aircraft-interactive img,.is-boarded .aircraft-interactive img{transform:scale(1.025)}
.boarding-actions{text-align:center;min-height:66px;margin-top:0}.boarding-actions .button{min-width:270px;gap:15px}.play-triangle{width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:7px solid #497358}
.cinema-scene{max-width:1050px;margin:auto;padding:23px 0 30px}.cinema-heading{text-align:center;margin:0 0 27px}.cinema-heading h2{font-size:43px;line-height:1.6}
.screen-wrap{position:relative;line-height:0;background:#263c35;border:7px solid #fffdf5;outline:1px solid #b6bda767;box-shadow:2px 12px 25px #4f614d0e}.screen-wrap video{width:100%;aspect-ratio:16/9;display:block;background:#263c35}
.cinema-footer{display:flex;align-items:center;justify-content:space-between;gap:30px;margin-top:23px}.download-block{display:flex;flex-direction:column;align-items:center;gap:9px}.download-link{min-width:270px;min-height:64px;gap:15px}.download-block>small{font-size:9px;color:#78816e;letter-spacing:.2px}.cinema-footer>.text-button{font-size:11px}
.video-error{font-size:12px;color:#965537;line-height:1.7}.noscript{position:fixed;bottom:0;left:0;right:0;padding:20px;background:var(--paper);z-index:30;text-align:center}
@keyframes scene-enter{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}
@keyframes leaf-drift{0%{transform:translate(10px,-15px) rotate(-15deg) scale(.65);opacity:0}12%{opacity:.7}45%{transform:translate(-48px,48px) rotate(65deg) scale(.8);opacity:.8}78%{opacity:.6}100%{transform:translate(-125px,155px) rotate(155deg) scale(.7);opacity:0}}
@keyframes tram-journey{0%{transform:translateX(0)}15%{transform:translateX(-3px) translateY(-1px)}75%{transform:translateX(35px) translateY(-.5px)}100%{transform:translateX(24px)}}
@keyframes arrival-stamp{0%{opacity:0;transform:rotate(-9deg) scale(1.22)}60%{opacity:.85;transform:rotate(-9deg) scale(.97)}100%{opacity:.9;transform:rotate(-9deg) scale(1)}}
@keyframes marker-pulse{0%{box-shadow:0 0 0 0 #a9b48760}75%,100%{box-shadow:0 0 0 14px #a9b48700}}
@keyframes boarding-pass-entry{0%{left:34%;top:80%;opacity:0;transform:rotate(-12deg)}15%{opacity:1}60%{left:44%;top:62%;opacity:1;transform:rotate(-20deg)}90%{opacity:1}100%{left:54%;top:43%;opacity:0;transform:rotate(-10deg) scale(.35)}}
@media(min-width:1500px){.invitation{min-height:745px}.hero-art{height:745px}.intro-copy{padding-left:40px}}
@media(max-width:1200px){.site-shell{padding:0 38px}.intro-copy{padding-left:5px;width:50%}h1{font-size:74px}.invitation{min-height:620px}.hero-art{height:630px;width:68%;right:-16px}.intro-greeting{font-size:19px}.pass-details{padding:25px 22px 18px}.pass-topline{font-size:7px;letter-spacing:1.5px}.pass-passenger b{font-size:16px}.boarding-pass{grid-template-columns:42% 1fr 85px}.entry-stamp{left:calc(42% - 145px)}}
@media(max-width:1000px){.site-shell{padding:0 30px}.masthead{height:95px}h1{font-size:65px}.invitation{min-height:590px}.hero-art{width:66%;height:590px;right:-14px}.intro-greeting{font-size:18px}.button{font-size:12px}.boarding-pass{grid-template-columns:39% 1fr 75px}.pass-art{min-height:350px}.pass-details{padding:25px 20px 18px}.pass-destination strong{font-size:53px}.pass-passenger b{font-size:15px}.pass-fields{gap:10px}.pass-stub{padding:18px 8px}.pass-stub small{font-size:6px}.entry-stamp{left:calc(39% - 148px);top:120px;transform:rotate(-9deg) scale(1)}.section-heading h2{font-size:43px}.cinema-heading h2{font-size:39px}.airport-boarding{height:380px}}
@media(max-width:760px){
.site-shell{padding:0 24px}.masthead{height:84px;gap:15px}.brand{font-size:20px;gap:11px}.brand-mark{width:33px;height:33px;font-size:18px}.edition{font-size:7px;letter-spacing:1.6px}
.invitation{display:flex;flex-direction:column;align-items:stretch;min-height:0;padding:33px 0 15px}.intro-copy{width:100%;padding:0;text-align:center}.intro-greeting{font-size:19px;margin:0 0 21px}h1{font-size:clamp(48px,9.5vw,70px);line-height:1.35;letter-spacing:-.8px;padding-bottom:8px}h1 em:after{height:2px;bottom:2px}.intro-copy>.button{margin-top:26px}.button{font-size:12px;min-height:61px;padding:15px 31px 15px 41px}
.hero-art{position:relative;top:auto;right:auto;width:calc(100% + 48px);height:auto;aspect-ratio:1.48;min-height:260px;margin:14px -24px 0}.hero-image{inset:50% 0 auto;width:100%;height:auto}
.site-footer{min-height:80px;margin-top:16px}.journey-progress{font-size:8px;gap:6px}.journey-progress span{gap:4px}.journey-progress b{font-size:14px;width:22px;height:22px}.journey-progress i{width:9px}
.section-heading{margin:24px 0 28px}.section-heading h2{font-size:36px;line-height:1.6}.section-heading>p{font-size:11px;max-width:285px;margin:10px auto 0}.ticket-scene{min-height:0;padding-bottom:20px}
.boarding-pass{max-width:450px;grid-template-columns:1fr 65px;grid-template-rows:auto auto}.pass-art{grid-column:1 / 3;grid-row:1;min-height:236px;border-right:0;border-bottom:1px solid #b8c39f77}.ticket-city{top:17px;left:17px;font-size:8px;letter-spacing:3px}
.tram-layer{width:88%;left:0;bottom:-5px}.lisbon-background{object-position:50% 55%}
.pass-details{grid-column:1;grid-row:2;min-height:305px;padding:21px 20px 17px}.pass-topline{font-size:6px;letter-spacing:1.5px;margin-bottom:12px}.pass-topline svg{height:20px;width:28px}.pass-destination strong{font-size:49px}.pass-destination>span:last-child{font-size:11px}.field-label{font-size:7px;letter-spacing:1px}.pass-passenger{padding-top:14px;margin-top:16px;gap:6px}.pass-passenger b{font-size:16px;letter-spacing:0}.pass-fields{margin-top:16px;gap:12px}.pass-fields b{font-size:11px}.ticket-status{font-size:8px;margin-top:15px}.pass-stub{grid-column:2;grid-row:2;padding:18px 7px;gap:22px}.pass-stub>svg{width:28px;height:20px}.pass-stub>span{font-size:20px}.barcode{height:95px;width:28px}.pass-stub small{font-size:5px;letter-spacing:.5px}
.entry-stamp{left:auto;right:19px;top:111px;width:152px;height:103px;padding:4px}.stamp-inner{padding:7px;gap:4px}.stamp-inner>span{font-size:7.5px}.stamp-inner b{font-size:25px}.stamp-inner>strong{font-size:8px}.stamp-inner svg{width:30px;height:21px}
.ticket-actions{margin-top:27px}.ticket-actions .button{min-width:265px}.back-button{font-size:10px;margin-top:15px}
.boarding-scene{min-height:0;padding:0 0 20px}.boarding-scene .section-heading{margin-top:27px}.boarding-scene .section-heading h2{font-size:33px}.airport-boarding{height:290px;width:calc(100% + 34px);margin:9px -17px 0}.aircraft-interactive img{object-fit:contain}.boarding-marker{width:25px;height:25px;left:55%;top:45%}.boarding-marker svg{height:15px;width:15px}.boarding-token{width:29px;height:18px}.boarding-token svg{width:18px;height:13px}.boarding-actions{min-height:63px;margin-top:2px}.boarding-actions .button{min-width:266px}
.cinema-scene{padding:24px 0}.cinema-heading{margin-bottom:22px}.cinema-heading h2{font-size:31px;line-height:1.65}.screen-wrap{border-width:5px;margin:0 -11px}.cinema-footer{flex-direction:column;gap:12px;align-items:center;margin-top:23px}.download-block{gap:9px}.download-link{min-width:266px;min-height:61px;gap:13px}.download-block>small{font-size:8px}.cinema-footer>.text-button{font-size:11px}.video-error{font-size:11px}
}
@media(max-width:370px){.site-shell{padding:0 18px}.brand{font-size:18px}.brand-mark{width:29px;height:29px;font-size:17px}.edition{font-size:6px}.intro-greeting{font-size:18px}h1{font-size:47px;letter-spacing:-1px}.hero-art{width:calc(100% + 36px);margin-left:-18px;margin-right:-18px;min-height:240px}.journey-progress{font-size:7px;gap:4px}.journey-progress i{width:6px}.journey-progress b{font-size:13px;width:20px;height:20px}.pass-art{min-height:220px}.tram-layer{width:91%;left:-3%;bottom:-3px}.pass-details{padding:19px 16px;min-height:298px}.pass-passenger b{font-size:14px}.pass-topline{font-size:5px;letter-spacing:1.1px}.pass-fields{gap:8px}.pass-fields b{font-size:10px}.entry-stamp{right:17px;top:105px;width:144px;height:98px}.stamp-inner>span{font-size:7px}.stamp-inner b{font-size:23px}.ticket-actions .button{min-width:252px}.airport-boarding{width:100%;margin-left:0;margin-right:0;height:265px}.boarding-scene .section-heading h2{font-size:30px}.boarding-actions .button{min-width:250px}.download-link{min-width:250px}.cinema-heading h2{font-size:28px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;animation-iteration-count:1!important}.rustling-canopy,.wind-leaves{display:none}}
