/* TRIP REVEALS by boat / train / car (themes trip-*). GENERATED by tools/make-trip-app-page.py from src/index.html. */
:root{--amber:#ffc46b;--ink:#fff4e2;--glass:rgba(24,18,30,.5);--line:rgba(255,196,107,.45);--gold:#b8923a;--gold2:#e9d08c;--paper:#fffdf8;--mute:#7b7468;--tink:#1d1b18}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:#14121c;overflow:hidden;color:var(--ink);font-family:'Outfit',system-ui,sans-serif}
.pill{pointer-events:auto;border:1px solid var(--line);background:var(--glass);color:var(--ink);font:400 14px 'Outfit',sans-serif;letter-spacing:.04em;padding:9px 14px;border-radius:999px;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);cursor:pointer;display:inline-flex;align-items:center;gap:7px}
.hide{opacity:0!important;pointer-events:none!important}

/* stage: the two clips + the hall, all 9:16, cover-fitted */
.layer{position:fixed;inset:0;opacity:0;transition:opacity .9s ease}
.layer.on{opacity:1}
video.layer{width:100%;height:100%;object-fit:cover;background:#14121c}
#vPlane{background:#1b1a2a var(--trip-start) center/cover}
.hall{overflow:hidden;transition:opacity 1.1s ease}
.hallIn{position:absolute;transform-origin:0 0;transition:transform 5.2s cubic-bezier(.45,.05,.3,1)}
.hallIn img{display:block;width:100%;height:100%}
.board{position:absolute;left:0;top:0;transform-origin:0 0}
#hallDim{position:fixed;inset:0;background:linear-gradient(rgba(14,8,18,.35),rgba(14,8,18,.15) 40%,rgba(14,8,18,.55));opacity:0;transition:opacity 1s;pointer-events:none}
#hallDim.on{opacity:1}
#vig{position:fixed;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 45%,transparent 58%,rgba(10,4,16,.38) 100%)}

/* captions over the clips */
#cap{position:fixed;left:0;right:0;top:max(18px,env(safe-area-inset-top));padding:0 18px;text-align:center;z-index:3;pointer-events:none;transition:opacity .8s}
#cap .n{font:400 44px/1.05 'Great Vibes',cursive;color:#fff3e4;text-shadow:0 2px 14px rgba(40,10,30,.75)}
#cap .s{margin-top:4px;font:italic 500 18px/1.3 'Playfair Display',serif;color:#ffe9d2;text-shadow:0 1px 10px rgba(0,0,0,.8)}
#mute{position:fixed;top:max(14px,env(safe-area-inset-top));right:14px;z-index:7;padding:8px 11px}
#skip{position:fixed;bottom:max(16px,env(safe-area-inset-bottom));right:14px;z-index:7;font-size:12.5px;padding:7px 12px;opacity:.75}

/* start screen */
#start{position:fixed;inset:0;z-index:6;display:flex;align-items:center;justify-content:center;text-align:center;padding:24px 20px;
  background:radial-gradient(120% 80% at 50% 38%,rgba(40,22,40,.45),rgba(14,8,18,.9) 75%),var(--trip-start) center/cover;transition:opacity 1.1s}
#start.gone{opacity:0;pointer-events:none}
#start .in{max-width:340px;width:100%}
#start h1{margin:0;font:400 64px/1.05 'Great Vibes',cursive;color:#fff3e4;text-shadow:0 2px 18px rgba(255,150,110,.35);overflow-wrap:anywhere}
#start .sub{margin:6px 0 26px;font:italic 500 21px/1.35 'Playfair Display',serif;color:#ffe2c8}
#ld{width:180px;height:2px;margin:0 auto 22px;background:rgba(255,196,107,.2);border-radius:2px;overflow:hidden;transition:opacity .5s}
#ld i{display:block;height:100%;width:0;background:var(--amber);transition:width .3s}
#begin{font:600 17px 'Outfit',sans-serif;letter-spacing:.05em;padding:14px 30px;border-radius:999px;border:0;background:var(--amber);color:#2a1606;box-shadow:0 0 28px rgba(255,170,60,.55);cursor:pointer;animation:bob 2.4s ease-in-out infinite}
#begin:disabled{opacity:.45;animation:none;box-shadow:none}
#sndStart{margin-top:18px}
@keyframes bob{50%{transform:translateY(-4px)}}
body[data-mode="boat"] #win{margin-top:18px}   /* 17 Oct Gary: the brass ring sat on 'Scratch the porthole' */
.route #fromC,.route svg{display:none}
.route b#code{flex:1;min-width:0;text-align:center !important;display:block;font-size:21px;letter-spacing:.08em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#getPass{position:fixed;left:50%;bottom:max(34px,calc(env(safe-area-inset-bottom) + 22px));transform:translateX(-50%);z-index:7;white-space:nowrap;font:600 17px 'Outfit',sans-serif;letter-spacing:.04em;padding:15px 26px;border-radius:999px;border:0;background:var(--amber);color:#2a1606;box-shadow:0 0 30px rgba(255,170,60,.6);cursor:pointer;transition:opacity .6s;animation:bobx 2.4s ease-in-out infinite}
@keyframes bobx{50%{transform:translate(-50%,-4px)}}

/* ---------- passport booklet + boarding pass ---------- */
#pass{position:fixed;inset:0;z-index:5;opacity:0;pointer-events:none;transition:opacity .7s;display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:max(12px,env(safe-area-inset-top)) 16px max(12px,env(safe-area-inset-bottom));color:var(--tink);font-family:'IBM Plex Mono',monospace}
#pass.on{opacity:1;pointer-events:auto}
.bgl{position:fixed;inset:-4%;background:center/cover no-repeat;transition:opacity 1.6s;animation:breathe 24s ease-in-out infinite alternate;opacity:0}
.bgl.on{opacity:1}
@keyframes breathe{from{transform:scale(1)}to{transform:scale(1.06) translate(-1%,-1%)}}
#sky{background:radial-gradient(60% 34% at 50% 78%,rgba(255,236,190,.95),rgba(255,200,150,0) 70%),linear-gradient(#6f8fc4 0%,#b7a6c9 34%,#f2b3a4 62%,#ffd2a1 80%,#f7b98d 100%)}
#book{position:relative;flex:none;width:min(100%,360px);height:min(610px,calc(100svh - 150px));z-index:2;perspective:1600px;
  transform:translateY(115vh) rotate(5deg);transition:transform 1.25s cubic-bezier(.2,.8,.2,1)}
#book.up{transform:none}
#tk{position:absolute;inset:0;background:var(--paper);border-radius:18px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 50px rgba(20,8,10,.5)}
#tk:before{content:'';position:absolute;inset:8px;border:1.5px solid var(--gold);border-radius:12px;pointer-events:none}
.top,.fields,.tear,.tbot{position:relative}
.top{padding:26px 22px 4px}
.title{font:400 40px/1.05 'Great Vibes',cursive;text-align:center}
.route{display:flex;align-items:center;gap:10px;margin-top:10px;letter-spacing:.06em}
.route b{font-size:24px;min-width:3.2ch}
.route b.to{text-align:right;display:inline-block;transition:transform .45s}
.route b.flip{transform:rotateX(90deg)}
.route svg{flex:1;height:22px;min-width:0}
.fields{display:grid;grid-template-columns:1fr 1fr;gap:10px 12px;padding:12px 22px 0;text-align:center}
.fields label,.msg label{display:block;font-weight:600;font-size:9.5px;letter-spacing:.16em;color:var(--mute);margin-bottom:2px}
.fields span{display:block;font-size:13px;line-height:1.3;letter-spacing:.04em;text-transform:uppercase;overflow-wrap:anywhere}
.mid{flex:1;min-height:0;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:6px 0 8px}
.lbl{font:italic 500 16px 'Playfair Display';color:#8a6a22;margin-bottom:10px;min-height:1.2em}
#win{position:relative;width:max(96px,min(50vw,196px,calc((min(610px,100svh - 150px) - 330px) * .714)));aspect-ratio:100/140;flex:none;touch-action:none}
#wmask{position:absolute;inset:0;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 140'%3E%3Cpath d='M46 0H54A46 46 0 0 1 100 46V94A46 46 0 0 1 54 140H46A46 46 0 0 1 0 94V46A46 46 0 0 1 46 0Z'/%3E%3C/svg%3E") center/100% 100% no-repeat;
          mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 140'%3E%3Cpath d='M46 0H54A46 46 0 0 1 100 46V94A46 46 0 0 1 54 140H46A46 46 0 0 1 0 94V46A46 46 0 0 1 46 0Z'/%3E%3C/svg%3E") center/100% 100% no-repeat}
#wmask:not(.ready) #photo,#wmask:not(.ready) #destBox{visibility:hidden}
#photo{position:absolute;inset:0;background:linear-gradient(#7fbde9,#cfe8f8 60%,#f5e7cf) center/cover no-repeat}
#destBox{position:absolute;left:0;right:0;top:30%;text-align:center;padding:0 8%;color:#fff;text-shadow:0 2px 3px rgba(0,0,0,.55),0 0 18px rgba(0,0,0,.4)}
#dest{font:400 clamp(28px,9vw,40px)/1 'Great Vibes',cursive;overflow-wrap:anywhere}
#ctry{margin-top:6px;font:600 10px 'IBM Plex Mono',monospace;letter-spacing:.2em;text-transform:uppercase}
#foil{position:absolute;inset:0;width:100%;height:100%}
#foil.fade{transition:opacity .8s;opacity:0;pointer-events:none}
#wline{position:absolute;inset:-7%;width:114%;height:114%;pointer-events:none;overflow:visible}
.tear{height:0;border-top:2px dashed #d9cfbd;margin:0 18px}
#tk{--ty:-99px;-webkit-mask:radial-gradient(circle 12px at 0 var(--ty),#0000 11.5px,#000 12.5px) left/51% 100% no-repeat,radial-gradient(circle 12px at 100% var(--ty),#0000 11.5px,#000 12.5px) right/51% 100% no-repeat;
  mask:radial-gradient(circle 12px at 0 var(--ty),#0000 11.5px,#000 12.5px) left/51% 100% no-repeat,radial-gradient(circle 12px at 100% var(--ty),#0000 11.5px,#000 12.5px) right/51% 100% no-repeat}
.tbot{display:flex;align-items:flex-end;gap:14px;padding:12px 22px 18px}
.msg{flex:1;min-width:0;font-size:11.5px;line-height:1.55;letter-spacing:.03em;text-transform:uppercase}
.msg span{display:block;overflow-wrap:anywhere;transition:opacity .8s}
.msg span.soft{color:#a39a8a;text-transform:none;font-style:italic;letter-spacing:.02em}
#qr{width:50px;height:50px;flex:none}
#scrHint{position:relative;z-index:2;margin-top:12px;text-align:center;font:italic 500 16px 'Playfair Display';color:#fff4e2;text-shadow:0 1px 8px rgba(0,0,0,.8);transition:opacity .6s;padding:0 10px;opacity:0}
#scrHint.on{opacity:1}
body.revealed #scrHint{display:none}
#after{position:relative;z-index:2;margin-top:12px;display:flex;flex-wrap:wrap;justify-content:center;gap:8px;max-width:360px;opacity:0;pointer-events:none;transition:opacity .6s}
#after.on{opacity:1;pointer-events:auto}
body:not(.revealed) #after{display:none}
.btn{font:600 11px 'IBM Plex Mono';letter-spacing:.08em;padding:11px 14px;border-radius:999px;border:1.5px solid var(--gold);background:#fffdf8;color:#7a5a1a;text-transform:uppercase;cursor:pointer;text-decoration:none;white-space:nowrap}
.btn.solid{background:var(--gold);color:#fff}
.btn.go{background:#2a1606;border-color:var(--amber);color:var(--amber);box-shadow:0 0 22px rgba(255,170,60,.55);width:100%;max-width:300px;text-align:center;font-size:12.5px;padding:13px 16px}
#confetti{position:fixed;inset:0;z-index:8;pointer-events:none}
@media (max-height:720px){#win{width:max(96px,min(50vw,196px,calc((min(610px,100svh - 150px) - 290px) * .714)))}.title{font-size:34px}.top{padding-top:18px}.fields{gap:6px 12px;padding-top:8px}.route{margin-top:6px}.lbl{margin-bottom:6px}.tbot{padding:8px 22px 14px}#qr{width:42px;height:42px}#start h1{font-size:54px}}
