/* ==========================================================================
   THE ORANGE LINE — Marsport to Contact
   Scroll-journey experience · MonoByte Creatives
   ========================================================================== */
:root{
  --jo:#FF6A1A; --jo-soft:#FF9A4D; --jo-deep:#ED5606;
  --jink:#0B0C10; --jglass:rgba(10,11,16,.55); --jline:rgba(255,255,255,.14);
  --jtext:#F4F2EF; --jdim:#9AA0B0;
  --mono:'JetBrains Mono',ui-monospace,Menlo,monospace;
  --disp:'Sora',system-ui,sans-serif;
  --body:'Inter',system-ui,sans-serif;
}
*{box-sizing:border-box}
html{scroll-behavior:auto}
body.jbody{margin:0;background:var(--jink);color:var(--jtext);font-family:var(--body);
  overflow-x:hidden;-webkit-font-smoothing:antialiased}
#jtrack{height:1500vh;pointer-events:none}
@media (max-width:760px){#jtrack{height:1200vh}}
#jcanvas{position:fixed;inset:0;width:100%;height:100%;z-index:1;display:block;background:#0B0C10}

/* ---------- film layer ---------- */
#jvig{position:fixed;inset:0;z-index:5;pointer-events:none;opacity:.72;
  background:radial-gradient(ellipse 72% 62% at 50% 50%,transparent 52%,rgba(0,0,0,.82) 100%)}
#jgrain{position:fixed;inset:-60px;z-index:5;pointer-events:none;opacity:.22;mix-blend-mode:soft-light;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:jgr .6s steps(4) infinite}
@keyframes jgr{0%{transform:translate(0,0)}25%{transform:translate(-18px,12px)}50%{transform:translate(14px,-16px)}75%{transform:translate(-10px,-8px)}100%{transform:translate(0,0)}}
@media (prefers-reduced-motion:reduce){#jgrain{animation:none}}
.jbar{position:fixed;left:0;right:0;height:0;background:#000;z-index:6;pointer-events:none;
  will-change:transform}
.jbar.top{top:0;transform-origin:center top}.jbar.bot{bottom:0;transform-origin:center bottom}

/* ==========================================================================
   LOADER — #jboot cinematic boot sequence
   Markup + inline engine live in journey.html (#jboot); hud.js boot() wraps
   window.__jboot. Everything here is scoped to #jboot / .jb-*.
   Timeline from first paint (ms): tunnel 0–1400 · tile outline 100–850 ·
   candles 350–1050 · wicks 780–1320 · V 1000–1550 · tile fill 1400–2000 ·
   wordmark 1050–2450 · subtitle 1700–2500 · chrome 300–1450.
   Exit: .is-full (100% pulse) → .is-out (+360, chrome fades, horizon flares)
   → .is-open/.is-fly (+660, shutters part at the horizon, emblem docks into
   the HUD logo) → node removed (+1760). Reduced motion: .is-fade only.
   ========================================================================== */
#jboot{position:fixed;inset:0;z-index:40;overflow:hidden;color:var(--jtext);
  font-family:var(--mono);-webkit-user-select:none;user-select:none;cursor:progress;
  --hz:45%;--ed:clamp(150px,22vh,200px);--lg:calc(var(--ed) * .5);
  --gx:clamp(20px,3.4vw,52px);--ty:clamp(44px,7vh,62px);--gauge:20%;
  --bg:#07070A;--o:#F46A18;--ol:#FF8A42;--od:#DD4A06}
#jboot i{font-style:normal}

/* ---- shutters: the two halves of the boot world, split at the horizon ---- */
#jboot .jb-sh{position:absolute;left:0;right:0;overflow:hidden;background:var(--bg);
  will-change:transform;transition:transform 1s cubic-bezier(.77,0,.18,1),box-shadow .6s ease}
#jboot .jb-sh.t{top:0;height:var(--hz)}
#jboot .jb-sh.b{bottom:0;height:calc(100% - var(--hz));background:linear-gradient(180deg,#0D0806,var(--bg) 42%)}
#jboot .jb-sh>*{animation:jb-fade 1.4s .05s ease backwards}
#jboot .jb-glow{position:absolute;inset:0;
  background:radial-gradient(64vw 40vh at 50% 100%,rgba(244,106,24,.2),rgba(237,86,6,.06) 46%,transparent 74%)}
#jboot .jb-sh.b .jb-glow{background:radial-gradient(64vw 46vh at 50% 0,rgba(244,106,24,.24),rgba(237,86,6,.07) 46%,transparent 74%)}
#jboot .jb-glow::after{content:"";position:absolute;inset:0;
  background:radial-gradient(26vw 10vh at 50% 100%,rgba(255,168,110,.34),transparent 72%);
  animation:jb-glow 3.6s ease-in-out infinite alternate}
#jboot .jb-sh.b .jb-glow::after{background:radial-gradient(26vw 10vh at 50% 0,rgba(255,168,110,.34),transparent 72%)}

/* converging spokes (static) + rails */
#jboot .jb-spokes{position:absolute;top:0;left:-30%;width:160%;height:100%;overflow:visible}
#jboot .jb-spokes path{fill:none;stroke:rgba(255,255,255,.07);stroke-width:1;vector-effect:non-scaling-stroke}
#jboot .jb-spokes .r{stroke:rgba(255,150,90,.85);stroke-width:1.4}
#jboot .jb-spokes .rg{stroke:rgba(244,106,24,.2);stroke-width:7}
#jboot .jb-sh.t .jb-spokes,#jboot .jb-sh.t .jb-ties{-webkit-mask-image:linear-gradient(0deg,transparent 26%,#000 52%,rgba(0,0,0,.6));
  mask-image:linear-gradient(0deg,transparent 26%,#000 52%,rgba(0,0,0,.6))}
#jboot .jb-sh.b .jb-spokes,#jboot .jb-sh.b .jb-ties{-webkit-mask-image:linear-gradient(180deg,transparent 33%,#000 58%,#000 74%,rgba(0,0,0,.4));
  mask-image:linear-gradient(180deg,transparent 33%,#000 58%,#000 74%,rgba(0,0,0,.4))}

/* sleepers + ceiling lamps rushing at the viewer: each is a full-height layer
   scaled about the vanishing point, so scale() alone is a true projection */
#jboot .jb-ties{position:absolute;inset:0}
#jboot .jb-ties i{position:absolute;left:0;right:0;height:100%;will-change:transform;
  animation:jb-tie 6s linear infinite;animation-delay:calc(var(--k) * -.6s)}
#jboot .jb-sh.b .jb-ties i{top:0;transform-origin:50% 0;
  background:linear-gradient(rgba(255,138,66,.62),rgba(255,138,66,.62)) 50% 100%/var(--gauge) 3px no-repeat,
    linear-gradient(90deg,transparent 8%,rgba(255,255,255,.075) 32%,rgba(255,255,255,.075) 68%,transparent 92%) 50% 100%/100% 1px no-repeat}
#jboot .jb-sh.t .jb-ties i{bottom:0;transform-origin:50% 100%;animation-delay:calc(var(--k) * -.75s);
  background:radial-gradient(closest-side,#FFE6D2,rgba(255,138,66,.75) 50%,transparent) 50% 0/14% 6px no-repeat,
    radial-gradient(closest-side,rgba(244,106,24,.3),transparent) 50% -16px/34% 48px no-repeat}

/* ---- film layers ---- */
#jboot .jb-noise{position:absolute;inset:-60px;z-index:2;pointer-events:none;opacity:.08;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:jb-grain .7s steps(4) infinite;transition:opacity .5s}
#jboot .jb-seam{position:absolute;z-index:2;left:0;right:0;top:var(--hz);height:1px;margin-top:-.5px;
  background:linear-gradient(90deg,transparent 3%,rgba(255,138,66,.3) 28%,rgba(255,226,204,.8) 50%,rgba(255,138,66,.3) 72%,transparent 97%);
  opacity:.6;transform:scaleX(.6);animation:jb-seam 1.6s .2s cubic-bezier(.2,.8,.2,1) backwards;
  transition:transform .45s cubic-bezier(.2,.8,.2,1),opacity .35s,box-shadow .35s}
#jboot .jb-ui{position:absolute;inset:0;z-index:3}
#jboot .jb-ui::before{content:"";position:absolute;inset:0;pointer-events:none;transition:opacity .35s;
  background:radial-gradient(130% 95% at 50% 45%,transparent 52%,rgba(0,0,0,.6) 100%)}

/* ---- chrome: crop marks + corner slates ---- */
#jboot .jb-crop{position:absolute;width:16px;height:16px;border:0 solid rgba(255,255,255,.26);
  animation:jb-fade .8s .3s backwards;transition:opacity .3s}
#jboot .jb-crop.tl{top:16px;left:16px;border-width:1px 0 0 1px}
#jboot .jb-crop.tr{top:16px;right:16px;border-width:1px 1px 0 0}
#jboot .jb-crop.bl{bottom:16px;left:16px;border-width:0 0 1px 1px}
#jboot .jb-crop.br{bottom:16px;right:16px;border-width:0 1px 1px 0}
#jboot .jb-corner{position:absolute;top:24px;font-size:10px;line-height:1.75;letter-spacing:.22em;
  text-transform:uppercase;color:rgba(244,242,239,.4);
  animation:jb-rise .9s .45s cubic-bezier(.2,.8,.2,1) backwards;transition:opacity .3s,transform .45s}
#jboot .jb-corner.tl{left:44px}
#jboot .jb-corner.tr{right:44px;text-align:right}
#jboot .jb-corner b{display:block;font-weight:500;color:rgba(244,242,239,.88)}
#jboot .jb-corner span{display:block}
#jboot .jb-corner.tr span{color:rgba(255,138,66,.8)}

/* ---- emblem: halo, instrument dial, shock ring, the logo ---- */
#jboot .jb-center{position:absolute;inset:0}
#jboot .jb-emblem{position:absolute;left:50%;top:var(--hz);width:var(--ed);height:var(--ed);
  margin:calc(var(--ed) / -2) 0 0 calc(var(--ed) / -2)}
#jboot .jb-emblem::before,#jboot .jb-emblem::after{content:"";position:absolute;inset:-16px;border-radius:50%;
  transition:opacity .35s}
#jboot .jb-emblem::before{border:1px solid rgba(255,255,255,.07);animation:jb-fade 1s .7s backwards}
#jboot .jb-emblem::after{background:radial-gradient(circle at 50% 0,#FFD2AE 0 2px,rgba(255,138,66,.5) 2.6px,transparent 6px);
  animation:jb-fade 1s .9s backwards,jb-orbit 7s linear infinite}
#jboot .jb-halo{position:absolute;left:50%;top:50%;width:calc(var(--ed) * 2);height:calc(var(--ed) * 2);
  margin:calc(var(--ed) * -1) 0 0 calc(var(--ed) * -1);border-radius:50%;
  background:radial-gradient(closest-side,rgba(244,106,24,.3),rgba(237,86,6,.1) 45%,transparent 72%);
  animation:jb-fade 1.2s 1.25s ease backwards;transition:opacity .35s}
#jboot .jb-halo::before{content:"";position:absolute;inset:20%;border-radius:50%;
  background:radial-gradient(closest-side,rgba(255,170,110,.3),transparent 72%);
  animation:jb-breathe 3.2s 1.5s ease-in-out infinite alternate}
#jboot .jb-dial{position:absolute;inset:0;border-radius:50%;--p:0;
  -webkit-mask:radial-gradient(closest-side,transparent calc(100% - 9px),#000 calc(100% - 8.5px),#000 calc(100% - .5px),transparent);
  mask:radial-gradient(closest-side,transparent calc(100% - 9px),#000 calc(100% - 8.5px),#000 calc(100% - .5px),transparent);
  animation:jb-dial 1.2s .4s cubic-bezier(.2,.8,.2,1) backwards;transition:opacity .35s,transform .5s cubic-bezier(.2,.8,.2,1)}
#jboot .jb-dial i{position:absolute;inset:0;border-radius:50%}
#jboot .jb-dial .base{background:repeating-conic-gradient(from -.4deg,rgba(255,255,255,.2) 0 .8deg,transparent .8deg 6deg)}
#jboot .jb-dial .lit{background:repeating-conic-gradient(from -.5deg,#FFB27A 0 1deg,transparent 1deg 6deg);
  -webkit-mask:conic-gradient(#000 calc(var(--p) * 3.6deg),transparent 0);
  mask:conic-gradient(#000 calc(var(--p) * 3.6deg),transparent 0)}
#jboot .jb-wave{position:absolute;inset:20%;border-radius:50%;border:1.5px solid rgba(255,150,90,.9);
  opacity:0;pointer-events:none}
#jboot .jb-mark{position:absolute;z-index:2;left:50%;top:50%;width:var(--lg);height:var(--lg);
  margin:calc(var(--lg) / -2) 0 0 calc(var(--lg) / -2);transform-origin:50% 50%}
#jboot .jb-logo{display:block;width:100%;height:100%;overflow:visible;
  filter:drop-shadow(0 10px 30px rgba(244,106,24,.42));transition:filter .6s}
/* the logo builds itself: outline → candles → wicks → V → tile fills, glyph whitens */
#jboot .jb-outline{fill:none;stroke:var(--ol);stroke-width:1.3;stroke-dasharray:1;opacity:0;
  animation:jb-outline 1.95s .1s cubic-bezier(.65,0,.35,1) backwards}
#jboot .jb-glyph rect{fill:#fff;transform-box:fill-box;transform-origin:50% 100%;
  animation:jb-grow .62s cubic-bezier(.2,.9,.25,1.12) backwards,jb-ink .5s ease both;
  animation-delay:var(--d,.35s),1.5s}
#jboot .jb-glyph .dn{transform-origin:50% 0}
#jboot .jb-glyph .wk{animation-duration:.42s,.5s}
#jboot .jb-glyph .c2{--d:.5s}
#jboot .jb-glyph .w1,#jboot .jb-glyph .w3{--d:.78s}
#jboot .jb-glyph .w2,#jboot .jb-glyph .w4{--d:.9s}
#jboot .jb-v{fill:none;stroke:#fff;stroke-width:5.4;stroke-linejoin:round;stroke-linecap:round;stroke-dasharray:1;
  animation:jb-draw .55s 1s cubic-bezier(.55,0,.25,1) backwards,jb-vink .5s 1.5s ease both}
#jboot .jb-tile{transform-box:fill-box;transform-origin:50% 50%;
  animation:jb-tile .62s 1.4s cubic-bezier(.2,.8,.2,1) backwards}
#jboot .jb-sheen{transform:translateX(0) skewX(-18deg);animation:jb-sheen 4.6s 2.2s cubic-bezier(.45,0,.2,1) infinite}

/* ---- wordmark + subtitle ---- */
#jboot .jb-title{position:absolute;left:0;right:0;top:calc(var(--hz) + var(--ed) / 2 + 22px);text-align:center;
  transition:opacity .32s,transform .45s cubic-bezier(.2,.8,.2,1)}
#jboot .jb-word{font-family:var(--disp);font-weight:600;font-size:clamp(20px,2.05vw,29px);line-height:1.3;
  letter-spacing:.52em;padding-left:.52em;color:#fff;overflow:hidden;white-space:nowrap}
#jboot .jb-word span{display:inline-block;animation:jb-letter 1s cubic-bezier(.16,1,.3,1) backwards;
  animation-delay:calc(1.05s + var(--i) * 62ms)}
#jboot .jb-sub{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:10px;
  font-size:10.5px;letter-spacing:.52em;text-transform:uppercase;color:var(--ol);
  animation:jb-rise .8s 1.7s cubic-bezier(.2,.8,.2,1) backwards}
#jboot .jb-sub span{padding-left:.52em}
#jboot .jb-sub i{width:46px;height:1px;background:linear-gradient(90deg,transparent,rgba(255,138,66,.75));
  transform-origin:100% 50%;animation:jb-line .9s 1.8s cubic-bezier(.2,.8,.2,1) backwards}
#jboot .jb-sub i:last-child{background:linear-gradient(270deg,transparent,rgba(255,138,66,.75));transform-origin:0 50%}

/* ---- boot log + counter ---- */
#jboot .jb-low{position:absolute;left:var(--gx);right:var(--gx);bottom:calc(var(--ty) + 44px);
  display:flex;align-items:flex-end;justify-content:space-between;gap:28px;
  animation:jb-rise .9s .55s cubic-bezier(.2,.8,.2,1) backwards;transition:opacity .32s,transform .45s cubic-bezier(.2,.8,.2,1)}
#jboot .jb-cap{font-size:9.5px;letter-spacing:.26em;text-transform:uppercase;color:rgba(244,242,239,.38);
  padding-bottom:9px;margin-bottom:9px;border-bottom:1px solid rgba(255,255,255,.08)}
#jboot .jb-cap em{font-style:normal;color:rgba(255,138,66,.72)}
#jboot .jb-logbox{width:min(440px,44vw)}
#jboot .jb-log{list-style:none;margin:0;padding:0;height:132px;overflow:hidden}
#jboot .jb-log li{display:grid;grid-template-columns:16px auto auto 1fr auto;align-items:center;column-gap:10px;
  height:22px;font-size:10.5px;letter-spacing:.14em;color:#fff;white-space:nowrap;
  animation:jb-li .45s cubic-bezier(.2,.8,.2,1) backwards}
#jboot .jb-log li::after{content:"";grid-column:4;grid-row:1;height:0;border-bottom:1px dotted rgba(255,255,255,.14)}
#jboot .jb-log li.ok{color:rgba(244,242,239,.5)}
#jboot .jb-log .t{min-width:0;overflow:hidden;text-overflow:ellipsis}
#jboot .jb-log .d{color:var(--ol);font-size:9.5px}
#jboot .jb-log .ms{grid-column:5;color:rgba(244,242,239,.4);text-align:right;min-width:4.6em}
#jboot .jb-log li i{justify-self:center;width:9px;height:9px;border-radius:50%;
  border:1.5px solid rgba(255,138,66,.22);border-top-color:var(--ol);animation:jb-spin .75s linear infinite}
#jboot .jb-log li.ok i{width:10px;height:5px;border-radius:0;border:solid var(--ol);border-width:0 0 1.5px 1.5px;
  transform:translateY(-1.5px) rotate(-45deg);animation:jb-tick .32s cubic-bezier(.2,.8,.2,1) backwards}
#jboot .jb-count{flex:none;text-align:right}
#jboot .jb-num{display:flex;align-items:flex-start;justify-content:flex-end;margin-top:4px;
  font-size:clamp(64px,8.4vw,126px);line-height:.8;letter-spacing:0;color:#fff;
  text-shadow:0 0 40px rgba(244,106,24,.18)}
#jboot .jb-num b{display:inline-block;width:.6em;text-align:center;font-weight:400}
#jboot .jb-num b.z{color:rgba(244,242,239,.12);text-shadow:none}
#jboot .jb-num sup{font-size:.19em;line-height:1;margin:.3em 0 0 .3em;font-weight:500;color:var(--ol);text-shadow:none}

/* ---- the rail: six stations, a glowing train ---- */
#jboot .jb-track{position:absolute;left:var(--gx);right:var(--gx);bottom:var(--ty);height:0;
  transition:opacity .32s,transform .45s cubic-bezier(.2,.8,.2,1)}
#jboot .jb-line{position:absolute;left:0;right:0;top:-.5px;height:1px;background:rgba(255,255,255,.14);
  transform-origin:0 50%;animation:jb-line 1.2s .3s cubic-bezier(.65,0,.35,1) backwards}
#jboot .jb-fill{position:absolute;left:0;right:0;top:-1px;height:2px;border-radius:2px;
  transform-origin:0 50%;transform:scaleX(0);
  background:linear-gradient(90deg,rgba(221,74,6,.12),var(--o) 55%,#FFB27A);box-shadow:0 0 12px rgba(244,106,24,.5)}
#jboot .jb-st{position:absolute;top:0;left:calc(var(--x) * 1%);width:0;height:0;
  animation:jb-fade .6s backwards;animation-delay:calc(.6s + var(--i) * 90ms)}
#jboot .jb-st::before{content:"";position:absolute;left:-3.5px;top:-3.5px;width:7px;height:7px;border-radius:50%;
  background:var(--bg);box-shadow:inset 0 0 0 1px rgba(255,255,255,.32);transition:background .3s,box-shadow .3s}
#jboot .jb-st.on::before{background:var(--ol);box-shadow:0 0 0 3px rgba(244,106,24,.18),0 0 12px rgba(244,106,24,.9)}
#jboot .jb-st b,#jboot .jb-st u{position:absolute;left:0;transform:translateX(-50%);white-space:nowrap;
  font-weight:500;text-decoration:none;transition:color .3s}
#jboot .jb-st b{bottom:13px;font-size:9px;letter-spacing:.2em;color:rgba(244,242,239,.34)}
#jboot .jb-st u{top:13px;font-size:8.5px;letter-spacing:.24em;text-transform:uppercase;color:rgba(244,242,239,.3)}
#jboot .jb-st.on b{color:var(--ol)}
#jboot .jb-st.on u{color:rgba(244,242,239,.82)}
#jboot .jb-st:nth-of-type(1) b,#jboot .jb-st:nth-of-type(1) u{left:-3px;transform:none}
#jboot .jb-st:nth-of-type(6) b,#jboot .jb-st:nth-of-type(6) u{left:auto;right:-3px;transform:none}
#jboot .jb-run{position:absolute;left:0;right:0;top:0;height:0;transform:translateX(-100%);will-change:transform;
  animation:jb-fade .7s .45s backwards}
#jboot .jb-run::after{content:"";position:absolute;right:-10px;top:-10px;width:20px;height:20px;border-radius:50%;
  border:1px solid rgba(255,150,90,.85);animation:jb-ping 1.8s cubic-bezier(.2,.7,.2,1) infinite}
#jboot .jb-train{position:absolute;right:0;top:0}
#jboot .jb-train::before{content:"";position:absolute;right:0;top:-1px;width:170px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,transparent,rgba(255,138,66,.55) 62%,#FFE6D2)}
#jboot .jb-train::after{content:"";position:absolute;right:-5px;top:-5px;width:10px;height:10px;border-radius:50%;
  background:#FFF5EC;box-shadow:0 0 0 3px rgba(255,138,66,.32),0 0 16px 3px rgba(244,106,24,.95),0 0 46px 12px rgba(244,106,24,.38)}

/* ---- exit choreography ---- */
#jboot.is-full .jb-logo{animation:jb-pulse .6s cubic-bezier(.2,.8,.2,1)}
#jboot.is-full .jb-wave{animation:jb-wave .95s cubic-bezier(.2,.7,.2,1) forwards}
#jboot.is-full .jb-halo{animation:jb-flash .6s ease}
#jboot.is-out .jb-corner,#jboot.is-out .jb-crop,#jboot.is-out .jb-low,#jboot.is-out .jb-track,
#jboot.is-out .jb-title,#jboot.is-out .jb-dial,#jboot.is-out .jb-halo,#jboot.is-out .jb-ui::before,
#jboot.is-out .jb-emblem::before,#jboot.is-out .jb-emblem::after{opacity:0}
#jboot.is-out .jb-low,#jboot.is-out .jb-track{transform:translateY(12px)}
#jboot.is-out .jb-title{transform:translateY(10px)}
#jboot.is-out .jb-corner{transform:translateY(-8px)}
#jboot.is-out .jb-dial{transform:scale(1.14)}
#jboot.is-out .jb-seam{transform:scaleX(1);opacity:1;box-shadow:0 0 16px 2px rgba(244,106,24,.85),0 0 60px 6px rgba(244,106,24,.35)}
#jboot.is-open .jb-sh.t{transform:translateY(-100%);box-shadow:0 1px 0 rgba(255,180,130,.9),0 0 80px 12px rgba(244,106,24,.5)}
#jboot.is-open .jb-sh.b{transform:translateY(100%);box-shadow:0 -1px 0 rgba(255,180,130,.9),0 0 80px 12px rgba(244,106,24,.5)}
#jboot.is-open .jb-seam{opacity:0;transition:opacity .3s}
#jboot.is-open .jb-noise{opacity:0}
#jboot.is-open{cursor:auto}
#jboot.is-fly .jb-mark{transition:transform 1s cubic-bezier(.7,0,.2,1)}
#jboot.is-fly .jb-logo{filter:drop-shadow(0 0 0 rgba(244,106,24,0))}
#jboot.is-fade{opacity:0;transition:opacity .45s ease}

@keyframes jb-fade{from{opacity:0}}
@keyframes jb-rise{from{opacity:0;transform:translateY(12px)}}
@keyframes jb-line{from{transform:scaleX(0)}}
@keyframes jb-seam{from{opacity:0;transform:scaleX(0)}}
@keyframes jb-grain{0%{transform:translate(0,0)}25%{transform:translate(-18px,12px)}50%{transform:translate(14px,-16px)}75%{transform:translate(-10px,-8px)}100%{transform:translate(0,0)}}
@keyframes jb-breathe{from{opacity:.5;transform:scale(.94)}to{opacity:1;transform:scale(1.06)}}
@keyframes jb-glow{from{opacity:.45}to{opacity:1}}
@keyframes jb-orbit{to{transform:rotate(360deg)}}
@keyframes jb-spin{to{transform:rotate(360deg)}}
@keyframes jb-dial{from{opacity:0;transform:rotate(-60deg) scale(.86)}}
@keyframes jb-outline{0%{stroke-dashoffset:1;opacity:1}38%{stroke-dashoffset:0;opacity:1}72%{opacity:1}100%{stroke-dashoffset:0;opacity:0}}
@keyframes jb-grow{from{transform:scaleY(0)}}
@keyframes jb-ink{from{fill:#FF8A42}to{fill:#fff}}
@keyframes jb-draw{0%{stroke-dashoffset:1;opacity:0}8%{opacity:1}100%{stroke-dashoffset:0;opacity:1}}
@keyframes jb-vink{from{stroke:#FF8A42}to{stroke:#fff}}
@keyframes jb-tile{from{opacity:0;transform:scale(.8)}}
@keyframes jb-sheen{0%{transform:translateX(0) skewX(-18deg)}34%,100%{transform:translateX(136px) skewX(-18deg)}}
@keyframes jb-letter{from{opacity:0;transform:translateY(110%)}}
@keyframes jb-li{from{opacity:0;transform:translateX(-10px)}}
@keyframes jb-tick{from{opacity:0;transform:translateY(-1.5px) rotate(-45deg) scale(.3)}}
@keyframes jb-ping{from{opacity:.9;transform:scale(.3)}to{opacity:0;transform:scale(2.2)}}
@keyframes jb-pulse{0%{transform:scale(1)}28%{transform:scale(1.09)}100%{transform:scale(1)}}
@keyframes jb-wave{0%{opacity:.95;transform:scale(.8)}100%{opacity:0;transform:scale(2.8)}}
@keyframes jb-flash{30%{opacity:1;transform:scale(1.15)}}
/* f = 1/(1+6(1-t)): constant-speed travel toward the eye, projected */
@keyframes jb-tie{
  0%{transform:scale(.1429);opacity:0}20%{transform:scale(.1724)}40%{transform:scale(.2174);opacity:1}
  55%{transform:scale(.2703)}65%{transform:scale(.3226)}75%{transform:scale(.4)}82%{transform:scale(.4808)}
  88%{transform:scale(.5814)}93%{transform:scale(.7042)}97%{transform:scale(.8475)}100%{transform:scale(1);opacity:1}}

@media (max-width:760px){
  #jboot{--hz:40%;--ed:clamp(136px,40vw,172px);--gx:20px;--ty:46px;--gauge:32%}
  #jboot .jb-spokes{left:-80%;width:260%}
  #jboot .jb-crop{display:none}
  #jboot .jb-corner{top:20px;font-size:9px;letter-spacing:.18em}
  #jboot .jb-corner.tl{left:20px}
  #jboot .jb-corner.tr{right:20px}
  #jboot .jb-word{font-size:21px;letter-spacing:.44em;padding-left:.44em}
  #jboot .jb-sub{font-size:9.5px;letter-spacing:.42em;gap:12px}
  #jboot .jb-sub i{width:28px}
  #jboot .jb-sh.b .jb-spokes,#jboot .jb-sh.b .jb-ties{
    -webkit-mask-image:linear-gradient(180deg,transparent 22%,#000 42%,rgba(0,0,0,.5) 58%,rgba(0,0,0,.14) 74%);
    mask-image:linear-gradient(180deg,transparent 22%,#000 42%,rgba(0,0,0,.5) 58%,rgba(0,0,0,.14) 74%)}
  #jboot .jb-low{flex-direction:column-reverse;align-items:stretch;gap:14px;bottom:calc(var(--ty) + 30px)}
  #jboot .jb-logbox{width:auto}
  #jboot .jb-log{height:66px}
  #jboot .jb-log li:nth-last-child(n+4){display:none}
  #jboot .jb-count{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;text-align:left}
  #jboot .jb-count .jb-cap{flex:1;margin:0 0 6px}
  #jboot .jb-num{font-size:68px;margin:0}
  #jboot .jb-st u{display:none}
  #jboot .jb-train::before{width:90px}
}
@media (prefers-reduced-motion:reduce){
  #jboot *,#jboot *::before,#jboot *::after{animation:none!important;transition:none!important}
  /* the tunnel freezes at staggered depths instead of rushing */
  #jboot .jb-sh .jb-ties i{animation:jb-tie 6s linear infinite paused!important;animation-delay:calc(var(--k) * -.6s)!important}
  #jboot .jb-sh.t .jb-ties i{animation-delay:calc(var(--k) * -.75s)!important}
  #jboot.is-fade{transition:opacity .45s ease!important}
}
/* ---- end LOADER ---- */

/* ---------- HUD ---------- */
.jhud{position:fixed;z-index:10;font-family:var(--mono);font-size:.66rem;letter-spacing:.14em;
  color:var(--jdim);text-transform:uppercase;transition:opacity .6s ease,color .5s;pointer-events:none}
.jhud a,.jhud button{pointer-events:auto}
#jhud-tl{top:18px;left:22px;display:flex;align-items:center;gap:10px}
#jhud-tl svg{width:26px;height:26px;border-radius:7px}
#jhud-tl b{color:var(--jtext);font-family:var(--disp);letter-spacing:.08em;font-size:.74rem;transition:color .5s}
#jhud-tl span{opacity:.75}
#jhud-tr{top:18px;right:22px;display:flex;align-items:center;gap:10px}
.jbtn{display:inline-flex;align-items:center;gap:7px;padding:8px 13px;border-radius:100px;
  border:1px solid var(--jline);background:var(--jglass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  color:var(--jtext);font:inherit;letter-spacing:.14em;cursor:pointer;text-decoration:none;
  text-transform:uppercase;font-size:.62rem;transition:border-color .3s,background .3s,color .3s}
.jbtn:hover{border-color:var(--jo);color:#fff}
.jbtn .dot{width:6px;height:6px;border-radius:50%;background:var(--jdim);transition:background .3s}
.jbtn.on .dot{background:var(--jo);box-shadow:0 0 8px var(--jo)}
#jhud-bl{bottom:20px;left:22px;display:flex;gap:18px}
#jhud-bl .ro b{display:block;color:var(--jtext);font-size:.92rem;letter-spacing:.06em;
  font-variant-numeric:tabular-nums;transition:color .5s;min-width:7.5ch}
#jhud-bl .ro i{font-style:normal;font-size:.58rem;opacity:.7}
#jchapter{bottom:20px;right:22px;text-align:right;max-width:40vw}
#jchapter .n{display:inline-flex;align-items:center;gap:8px;color:var(--jo-soft);letter-spacing:.24em}
#jchapter .n::before{content:"Stage";color:var(--jdim);letter-spacing:.24em}
#jchapter .n::after{content:"";width:6px;height:6px;border-radius:50%;background:var(--jo);
  box-shadow:0 0 0 3px rgba(255,106,26,.16),0 0 10px var(--jo);animation:jch-pulse 2.4s ease-in-out infinite}
@keyframes jch-pulse{50%{box-shadow:0 0 0 5px rgba(255,106,26,.06),0 0 14px var(--jo)}}
#jchapter .t{display:block;color:var(--jtext);font-family:var(--disp);font-weight:600;letter-spacing:.26em;
  font-size:.78rem;margin-top:5px;padding-top:6px;border-top:1px solid rgba(255,255,255,.12);transition:color .5s}
#jsignal{position:fixed;top:60px;right:22px;z-index:10;font-family:var(--mono);font-size:.6rem;
  letter-spacing:.14em;color:#FFC24D;opacity:0;transition:opacity .4s;text-transform:uppercase;pointer-events:none}
#jprog{position:fixed;top:0;left:0;height:2px;width:100%;z-index:12;transform:scaleX(0);
  transform-origin:0 50%;background:linear-gradient(90deg,var(--jo-soft),var(--jo))}

/* ---------- route map ---------- */
#jroute{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);z-index:11;
  display:flex;align-items:center;gap:0;padding:10px 16px;border-radius:100px;
  border:1px solid var(--jline);background:var(--jglass);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  transition:opacity .6s,background .5s,border-color .5s}
#jroute .seg{width:clamp(22px,4.5vw,58px);height:2px;background:rgba(255,255,255,.16);
  position:relative;overflow:hidden}
#jroute .seg i{position:absolute;inset:0;background:var(--jo);transform:scaleX(0);transform-origin:0}
#jroute .st{position:relative;width:12px;height:12px;border-radius:50%;border:2px solid var(--jdim);
  background:var(--jink);cursor:pointer;padding:0;flex:0 0 auto;transition:border-color .3s,box-shadow .3s}
#jroute .st.on{border-color:var(--jo);box-shadow:0 0 10px rgba(255,106,26,.7)}
#jroute .st:hover{border-color:var(--jo-soft)}
#jroute .st u{position:absolute;bottom:17px;left:50%;transform:translateX(-50%);
  font-family:var(--mono);font-size:.56rem;letter-spacing:.12em;color:var(--jtext);
  text-decoration:none;white-space:nowrap;opacity:0;transition:opacity .25s;pointer-events:none;
  text-transform:uppercase;background:var(--jglass);padding:3px 8px;border-radius:5px}
#jroute .st:hover u,#jroute .st:focus-visible u{opacity:1}

/* ---------- cards ----------
   hud.js drives each card's opacity / transform / visibility from data-a/b and
   flips pointer-events at the half-way point of its fade; the glass panel fades
   with the scroll while its contents rise in (and blur out) on that flip.
   data-n on a card = its stage index, shown top-right as "02 / 06". */
.jcard{position:fixed;z-index:8;opacity:0;visibility:hidden;pointer-events:none;will-change:transform,opacity;max-width:min(520px,88vw)}
.jcard.c{left:50%;top:50%;transform:translate(-50%,-46%);text-align:center}
.jcard.l{left:clamp(22px,6vw,90px);top:50%;transform:translateY(-44%)}
.jcard.r{right:clamp(22px,6vw,90px);top:50%;transform:translateY(-44%)}
.jcard.glass{--jg-pad:clamp(22px,2.5vw,32px);border-radius:20px;padding:var(--jg-pad);max-width:min(480px,88vw);
  border:1px solid transparent;
  background:linear-gradient(158deg,rgba(26,28,37,.78) 0%,rgba(13,14,20,.66) 46%,rgba(9,10,14,.6) 100%) padding-box,
    linear-gradient(142deg,rgba(255,150,90,.62) 0%,rgba(255,255,255,.16) 26%,rgba(255,255,255,.05) 58%,rgba(255,138,66,.3) 100%) border-box;
  -webkit-backdrop-filter:blur(18px) saturate(1.35);backdrop-filter:blur(18px) saturate(1.35);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07),inset 0 0 48px rgba(255,106,26,.045),
    0 34px 90px -34px rgba(0,0,0,.85),0 0 0 1px rgba(0,0,0,.25)}
/* light leak along the top edge + a soft ember glow in the corner */
.jcard.glass::before{content:"";position:absolute;pointer-events:none;left:var(--jg-pad);top:-1px;width:42%;height:1px;
  background:linear-gradient(90deg,rgba(255,138,66,0),#FFB27A 40%,rgba(255,138,66,0));box-shadow:0 0 12px 1px rgba(255,138,66,.45)}
.jcard.glass.r::before{left:auto;right:var(--jg-pad)}
.jcard.glass>*{position:relative}
.jcard.glass[data-n]::after{content:attr(data-n) "  /  06";position:absolute;top:calc(var(--jg-pad) + 1px);right:var(--jg-pad);
  font-family:var(--mono);font-size:.6rem;letter-spacing:.2em;color:rgba(244,242,239,.38);white-space:pre}
body.jday .jcard.glass{background:rgba(255,255,255,.65);border-color:rgba(11,12,16,.12)}
.jcard .kick{font-family:var(--mono);font-size:.62rem;letter-spacing:.3em;color:var(--jo-soft);
  text-transform:uppercase;margin-bottom:14px}
.jcard.glass .kick{display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-right:7.6em}
.jcard.glass .kick::before{content:"";flex:none;width:7px;height:7px;border-radius:2px;transform:rotate(45deg);
  background:var(--jo);box-shadow:0 0 10px rgba(255,106,26,.85)}
.jcard h1,.jcard h2{font-family:var(--disp);font-weight:700;line-height:1.02;letter-spacing:-.02em;
  margin:0 0 14px;color:#fff;text-wrap:balance}
.jcard h1{font-size:clamp(2.2rem,6.2vw,4.6rem);letter-spacing:.02em}
.jcard.c h1{background:linear-gradient(180deg,#FFFFFF 30%,#FFD9BE 100%);-webkit-background-clip:text;background-clip:text;
  color:transparent;-webkit-text-fill-color:transparent;filter:drop-shadow(0 4px 30px rgba(0,0,0,.55))}
.jcard:not(.glass) h1,.jcard:not(.glass) h2,.jcard:not(.glass) p{text-shadow:0 2px 26px rgba(0,0,0,.5)}
.jcard.c h1{text-shadow:none}
body.jday .jcard:not(.glass) h1,body.jday .jcard:not(.glass) h2,body.jday .jcard:not(.glass) p{text-shadow:0 1px 20px rgba(255,255,255,.55)}
.jcard h2{font-size:clamp(1.5rem,3.4vw,2.5rem)}
.jcard.glass h2{font-size:clamp(1.45rem,2.15vw,2.1rem);line-height:1.07;letter-spacing:-.028em;margin-bottom:14px}
.jcard p{margin:0;color:#C9CDD8;font-size:clamp(.92rem,1.1vw,1.04rem);line-height:1.65;text-wrap:pretty}
.jcard.glass p{color:#BCC2CF;font-size:clamp(.9rem,1.05vw,1rem);line-height:1.64}
.jcard .chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:18px}
.jcard.glass .chips{padding-top:16px;border-top:1px solid rgba(255,255,255,.07)}
.jcard.c .chips{justify-content:center}
.jchip{display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;
  padding:6px 11px 6px 9px;border-radius:100px;border:1px solid rgba(255,255,255,.12);
  color:#ECE6DF;background:linear-gradient(180deg,rgba(255,255,255,.06),rgba(255,255,255,.02));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}
.jchip::before{content:"";flex:none;width:5px;height:5px;border-radius:50%;background:var(--jo);box-shadow:0 0 7px var(--jo)}
.jcard .go{display:inline-flex;align-items:center;gap:12px;margin-top:20px;color:#fff;
  font-family:var(--disp);font-weight:600;font-size:.92rem;text-decoration:none;padding:2px 0 5px;
  background:linear-gradient(90deg,var(--jo),#FFB27A) 0 100%/0 1px no-repeat,linear-gradient(rgba(255,255,255,.18),rgba(255,255,255,.18)) 0 100%/100% 1px no-repeat;
  transition:background-size .45s cubic-bezier(.2,.8,.2,1),color .3s}
.jcard .go:hover,.jcard .go:focus-visible{background-size:100% 1px,100% 1px;color:#FFE6D2}
.jcard .go:focus-visible{outline:2px solid #FFB27A;outline-offset:4px;border-radius:4px}
.jcard .go svg{flex:none;width:30px;height:30px;padding:7px;border-radius:50%;
  background:rgba(255,106,26,.14);border:1px solid rgba(255,138,66,.45);color:#FFB27A;
  transition:transform .4s cubic-bezier(.2,.8,.2,1),background .3s,color .3s,box-shadow .3s;animation:jgo-nudge 3.2s 1.2s ease-in-out infinite}
.jcard .go:hover svg,.jcard .go:focus-visible svg{transform:translateX(5px);background:var(--jo);color:#fff;
  box-shadow:0 8px 22px -6px rgba(255,106,26,.8);animation:none}
@keyframes jgo-nudge{0%,62%,100%{transform:none}72%{transform:translateX(4px)}82%{transform:translateX(0)}}
/* contents rise in on the hand-off and blur out on the way past */
body:not(.jno3d) .jcard:not(.jfin)>*{transition:opacity .5s ease,transform .85s cubic-bezier(.16,1,.3,1),filter .6s ease}
body:not(.jno3d) .jcard:not(.jfin):not([style*="pointer-events: auto"])>*{opacity:0;transform:translateY(14px);filter:blur(7px);
  transition-duration:.35s,.5s,.35s}
body:not(.jno3d) .jcard:not(.jfin)[style*="pointer-events: auto"]>:nth-child(2){transition-delay:.06s}
body:not(.jno3d) .jcard:not(.jfin)[style*="pointer-events: auto"]>:nth-child(3){transition-delay:.13s}
body:not(.jno3d) .jcard:not(.jfin)[style*="pointer-events: auto"]>:nth-child(4){transition-delay:.2s}
body:not(.jno3d) .jcard:not(.jfin)[style*="pointer-events: auto"]>:nth-child(5){transition-delay:.27s}
.jcap{position:fixed;z-index:8;left:50%;bottom:16vh;transform:translateX(-50%);opacity:0;
  font-family:var(--mono);font-size:.62rem;letter-spacing:.22em;color:var(--jo-soft);
  text-transform:uppercase;pointer-events:none;text-align:center}
/* #jstamp (the 'Product live' badge) now lives in the FINALE block at the end */
.jsign{position:fixed;z-index:8;visibility:hidden;left:50%;top:14vh;transform:translateX(-50%);opacity:0;
  font-family:var(--mono);letter-spacing:.3em;font-size:clamp(.66rem,1.4vw,.85rem);color:#fff;
  text-transform:uppercase;padding:11px 24px 11px 20px;border-radius:10px;pointer-events:none;white-space:nowrap;
  border:1px solid transparent;
  background:linear-gradient(180deg,rgba(20,22,30,.74),rgba(9,10,14,.66)) padding-box,
    linear-gradient(120deg,rgba(255,150,90,.6),rgba(255,255,255,.1) 45%,rgba(255,138,66,.35)) border-box;
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 18px 50px -20px rgba(0,0,0,.8)}
.jsign::before{content:"";display:inline-block;width:7px;height:7px;margin:0 14px 1px 0;border-radius:50%;vertical-align:middle;
  background:var(--jo);box-shadow:0 0 0 3px rgba(255,106,26,.18),0 0 10px var(--jo)}
.jsign::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:linear-gradient(100deg,transparent 35%,rgba(255,206,170,.16) 50%,transparent 65%) 0 0/250% 100% no-repeat;
  animation:jsign-sheen 3.8s 0.4s cubic-bezier(.45,0,.2,1) infinite}
@keyframes jsign-sheen{0%{background-position:130% 0}55%,100%{background-position:-30% 0}}
.jsign b{color:var(--jo-soft)}

/* terminus buttons (.jacts/.jact/.jcred): see the FINALE block at the end */

/* ---------- The Develop: day theme ---------- */
body.jday .jhud,body.jday #jchapter .t,body.jday #jhud-tl b{color:#3A3F4E}
body.jday #jhud-bl .ro b{color:var(--jink)}
body.jday .jbtn{background:rgba(255,255,255,.6);border-color:rgba(11,12,16,.18);color:var(--jink)}
body.jday #jroute{background:rgba(255,255,255,.6);border-color:rgba(11,12,16,.15)}
body.jday #jroute .st{background:#fff}
body.jday .jcard h2,body.jday .jcard h1{color:var(--jink)}
body.jday .jcard p{color:#52586A}
body.jday .jcard .go{color:var(--jink)}
body.jday .jcred{color:#9A6A4A}
body.jday .jcard .kick{color:#A33E05}
body.jday #jsignal{color:#A33E05}

/* ---------- no-WebGL fallback ---------- */
body.jno3d #jcanvas,body.jno3d #jgrain,body.jno3d #jvig,body.jno3d .jbar,
body.jno3d #jhud-bl,body.jno3d #jchapter,body.jno3d #jroute,body.jno3d #jsignal,
body.jno3d #jstamp,body.jno3d .jcap,body.jno3d #jtrack,body.jno3d #jboot{display:none}
body.jno3d{overflow:auto}
body.jno3d .jcard,body.jno3d .jsign{position:static;opacity:1!important;visibility:visible!important;
  transform:none!important;pointer-events:auto!important;margin:7vh auto;max-width:640px;text-align:left}
body.jno3d .jcard.c{text-align:center}
body.jno3d .jcard.glass{position:relative}
body.jno3d .jcard:first-of-type{margin-top:16vh}

/* ---------- calm / reduced motion / mobile / no-js ---------- */
@media (max-width:760px){
  #jhud-bl{display:none}
  #jhud-tl span{display:none}
  /* compact top bar: wordmark left, three buttons right, never touching at 360px+ */
  #jhud-tl{top:16px;left:14px;gap:8px}
  #jhud-tl svg{width:24px;height:24px}
  #jhud-tl b{font-size:.68rem;letter-spacing:.06em}
  #jhud-tr{top:16px;right:14px;gap:5px}
  #jhud-tr .jbtn{padding:7px 9px;gap:5px;font-size:.54rem;letter-spacing:.08em}
  #jhud-tr .jbtn .dot{width:5px;height:5px}
  #jchapter{top:62px;bottom:auto;right:50%;transform:translateX(50%);text-align:center;max-width:90vw}
  #jchapter .n{justify-content:center}
  #jchapter .t{border-top:0;padding-top:0;margin-top:3px;font-size:.7rem}
  #jroute .st u{display:none}
  .jcard.l,.jcard.r{left:50%;right:auto;top:auto;bottom:calc(9vh + 8px);transform:translateX(-50%);
    text-align:left;width:calc(100vw - 32px);max-width:440px}
  .jcard.glass{--jg-pad:18px;border-radius:16px}
  .jcard.glass h2{font-size:clamp(1.3rem,6vw,1.6rem);margin-bottom:10px}
  .jcard.glass p{font-size:.86rem;line-height:1.55}
  .jcard.glass .kick{margin-bottom:12px;font-size:.56rem;letter-spacing:.24em}
  .jcard.glass[data-n]::after{font-size:.54rem}
  .jcard.glass .chips{margin-top:14px;padding-top:12px;gap:6px}
  .jchip{font-size:.52rem;padding:5px 9px 5px 8px}
  .jcard .go{margin-top:14px;font-size:.86rem}
  .jcard .go svg{width:26px;height:26px;padding:6px}
  .jcap{bottom:34vh}
}
@media (max-width:760px) and (max-height:700px){
  .jcard.glass p{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
}
@media (prefers-reduced-motion:reduce){
  .jcard .go svg,#jchapter .n::after,.jsign::after{animation:none}
  body:not(.jno3d) .jcard:not(.jfin)>*{transition-duration:.01s!important;transition-delay:0s!important}
}
.jnoscript{position:relative;z-index:50;background:var(--jink);padding:12vh 6vw;max-width:780px;margin:0 auto}
.jnoscript h1,.jnoscript h2{font-family:var(--disp)}
.jnoscript a{color:var(--jo-soft)}

/* ==========================================================================
   FINALE — Stage VI end card, the "Product live" badge, finale effects
   Markup: journey.html section.jcard.jfin (#jstamp sits inside it).
   hud.js drives the card's opacity / visibility / translateY from data-a and
   toggles #jstamp.on at p > .945; finale.js adds .is-armed (JS running),
   .is-in (p > .966: children rise in, staggered) and .is-live (p > .984: the
   badge pops and the title sweep plays, in step with the 3D live burst).
   It is a compact lower-third end card, so the 3D poster (station, train,
   sign, skyline, fireworks) keeps the upper ~60% of the frame.
   hud.js still flips body.jday at p > .975; the finale is a night scene, so
   the last rules here cancel the day theme for everything on screen.
   ========================================================================== */
.jcard.jfin{--fin-b:clamp(76px,10vh,112px);
  left:0;right:0;top:auto;bottom:var(--fin-b);margin:0 auto;
  width:min(1040px,calc(100vw - 32px));max-width:none;text-align:center}
/* legibility scrim: rises from the bottom edge of the screen behind the card */
.jcard.jfin::before{content:"";position:absolute;z-index:-1;pointer-events:none;
  left:calc(50% - 50vw);width:100vw;bottom:calc(var(--fin-b) * -1);height:calc(100% + var(--fin-b) + 14vh);
  background:linear-gradient(0deg,rgba(5,6,10,.9) 0%,rgba(5,6,10,.72) 38%,rgba(5,6,10,.3) 74%,rgba(5,6,10,0) 100%)}

/* the badge: a live status pill above the title */
.jfin #jstamp{display:inline-flex;align-items:center;gap:9px;margin:0 0 16px;padding:7px 14px 7px 11px;
  border-radius:100px;border:1px solid rgba(120,240,196,.34);background:rgba(10,34,27,.62);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  font:500 .62rem/1 var(--mono);letter-spacing:.26em;text-transform:uppercase;color:#C6FBE6;
  box-shadow:0 10px 30px -12px rgba(40,220,150,.5);
  opacity:0;transform:translateY(10px) scale(.86);filter:blur(5px);
  transition:opacity .5s ease,transform .7s cubic-bezier(.2,1.4,.3,1),filter .5s ease}
.jfin #jstamp span{padding-left:.26em}
.jfin #jstamp i{position:relative;width:8px;height:8px;border-radius:50%;background:#5BF0B4;
  box-shadow:0 0 10px #5BF0B4}
.jfin #jstamp i::after{content:"";position:absolute;inset:-5px;border-radius:50%;border:1px solid rgba(91,240,180,.8);
  opacity:0}
.jfin #jstamp svg{width:14px;height:14px;fill:none;stroke:#5BF0B4;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:14;stroke-dashoffset:14;transition:stroke-dashoffset .5s .45s cubic-bezier(.6,0,.2,1)}
.jfin.is-live #jstamp{opacity:1;transform:none;filter:none}
.jfin.is-live #jstamp svg{stroke-dashoffset:0}
.jfin.is-live #jstamp i::after{animation:jfin-ping 2.2s .4s cubic-bezier(.2,.7,.2,1) infinite}
@keyframes jfin-ping{0%{opacity:.9;transform:scale(.4)}100%{opacity:0;transform:scale(1.9)}}

/* type */
.jcard.jfin h2{font-size:clamp(2rem,3.7vw,3.4rem);line-height:1.04;letter-spacing:-.032em;margin:0 0 12px}
.jcard.jfin h2 .hl{background:linear-gradient(100deg,#FFC08A 0%,#FF8A42 34%,#F46A18 58%,#FFD9B8 72%,#F46A18 86%);
  background-size:220% 100%;background-position:100% 0;-webkit-background-clip:text;background-clip:text;
  color:transparent;-webkit-text-fill-color:transparent;text-shadow:none;
  filter:drop-shadow(0 6px 28px rgba(244,106,24,.35))}
.jfin.is-live h2 .hl{animation:jfin-sweep 1.6s .2s cubic-bezier(.6,0,.2,1) both}
@keyframes jfin-sweep{from{background-position:100% 0}to{background-position:0 0}}
.jcard.jfin p{max-width:62ch;margin:0 auto;color:#D6D9E2;font-size:clamp(.95rem,1.12vw,1.06rem)}

/* calls to action: primary, secondary and the studio inbox on one row */
.jacts{display:flex;gap:12px;justify-content:center;align-items:center;flex-wrap:wrap;margin-top:22px}
.jact{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:15px 28px;border-radius:100px;
  font-family:var(--disp);font-weight:600;font-size:.96rem;letter-spacing:-.005em;text-decoration:none;
  transition:transform .3s cubic-bezier(.2,.8,.2,1),box-shadow .3s,background .3s,border-color .3s}
.jact svg{width:17px;height:17px;transition:transform .3s cubic-bezier(.2,.8,.2,1)}
.jact:hover{transform:translateY(-2px)}
.jact:hover svg{transform:translateX(4px)}
.jact:focus-visible,.jmail:focus-visible{outline:2px solid #FFB27A;outline-offset:3px}
.jact.p{color:#fff;background:linear-gradient(135deg,#FF8A42 0%,#F46A18 48%,#DD4A06 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.28),0 18px 44px -14px rgba(244,106,24,.75),0 0 0 1px rgba(255,138,66,.5)}
.jact.p:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.32),0 22px 54px -12px rgba(244,106,24,.9),0 0 0 1px rgba(255,170,110,.7)}
.jact.o{color:#fff;border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.06);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.jact.o:hover{border-color:rgba(255,255,255,.55);background:rgba(255,255,255,.1)}
.jmail{display:inline-flex;align-items:center;gap:8px;margin-left:8px;padding:6px 2px;
  font-family:var(--mono);font-size:.74rem;letter-spacing:.06em;color:#FFB27A;text-decoration:none;
  border-bottom:1px solid rgba(255,138,66,.35);transition:color .3s,border-color .3s}
.jmail svg{width:16px;height:16px;flex:none}
.jmail:hover{color:#fff;border-color:#FF8A42}

/* billing block: the poster's credit line */
.jcred{display:flex;justify-content:center;flex-wrap:wrap;gap:4px 0;margin:18px auto 0;padding-top:13px;
  max-width:640px;border-top:1px solid rgba(255,255,255,.09);
  font-family:var(--mono);font-size:.56rem;letter-spacing:.3em;color:rgba(244,242,239,.46);text-transform:uppercase}
.jcred span{white-space:nowrap;padding:0 .9em}
.jcred span+span::before{content:"";display:inline-block;width:3px;height:3px;border-radius:50%;
  background:#FF8A42;vertical-align:middle;margin:0 1.6em 0 -.9em;transform:translateY(-1px)}

/* staged entrance (only once finale.js is running) */
.jfin.is-armed>*:not(#jstamp){opacity:0;transform:translateY(16px);
  transition:opacity .6s ease,transform .9s cubic-bezier(.16,1,.3,1)}
.jfin.is-armed.is-in>*:not(#jstamp){opacity:1;transform:none}
.jfin.is-in>h2{transition-delay:.06s}
.jfin.is-in>p{transition-delay:.16s}
.jfin.is-in>.jacts{transition-delay:.26s}
.jfin.is-in>.jcred{transition-delay:.38s}

/* the finale stays a night scene: cancel hud.js's day theme (body.jday at p > .975) */
body.jday .jhud{color:var(--jdim)}
body.jday #jchapter .t,body.jday #jhud-tl b,body.jday #jhud-bl .ro b{color:var(--jtext)}
body.jday .jbtn{background:var(--jglass);border-color:var(--jline);color:var(--jtext)}
body.jday #jroute{background:var(--jglass);border-color:var(--jline)}
body.jday #jroute .st{background:var(--jink)}
body.jday #jsignal{color:#FFC24D}
body.jday .jcard.jfin h2{color:#fff}
body.jday .jcard.jfin p{color:#D6D9E2}
body.jday .jcard.jfin h2,body.jday .jcard.jfin p{text-shadow:0 2px 26px rgba(0,0,0,.5)}
body.jday .jcard.jfin h2 .hl{text-shadow:none}
body.jday .jcard.jfin .jcred{color:rgba(244,242,239,.46)}
body.jday .jfin .jact.o{border-color:rgba(255,255,255,.28);color:#fff}

body.jno3d .jcard.jfin{margin:7vh auto 14vh;width:auto;text-align:center}
body.jno3d .jcard.jfin::before{display:none}
body.jno3d .jfin>*{opacity:1!important;transform:none!important}

@media (max-width:760px){
  .jcard.jfin{--fin-b:72px;width:calc(100vw - 32px)}
  .jcard.jfin::before{height:calc(100% + var(--fin-b) + 12vh)}
  .jfin #jstamp{margin-bottom:12px;font-size:.56rem;letter-spacing:.2em}
  .jcard.jfin h2{font-size:clamp(1.85rem,8.4vw,2.35rem);margin-bottom:10px}
  .jcard.jfin h2 span{display:block}
  .jcard.jfin p{font-size:.9rem;line-height:1.5}
  .jacts{gap:10px;margin-top:16px}
  .jact{flex:1 1 0;padding:14px 10px;font-size:.9rem;min-width:0}
  .jmail{flex:1 0 100%;justify-content:center;margin:2px 0 0;border-bottom:0;font-size:.72rem}
  .jcred{margin-top:10px;padding-top:10px;font-size:.5rem;letter-spacing:.2em}
  .jcred span:last-child{display:none}
}
@media (prefers-reduced-motion:reduce){
  .jfin #jstamp,.jfin #jstamp svg,.jfin.is-armed>*:not(#jstamp){transition-duration:.01s!important;transition-delay:0s!important}
  .jfin.is-live #jstamp i::after,.jfin.is-live h2 .hl{animation:none}
  .jfin.is-live h2 .hl{background-position:0 0}
}
/* ---- end FINALE ---- */

/* ==========================================================================
   DESTINATION PICKER — the departure board (#jpick in journey.html)
   Visible from first paint when there is no valid ?service= (inline script
   adds html.jpick-on and un-hides it); hud.js pickService() wires the
   tickets, plays the boarding animation (.is-chosen / .is-pick), fades the
   board out (.is-leave) and removes it while the loader (#jboot) finishes.
   ========================================================================== */
html.jpick-on,html.jpick-on body{overflow:hidden}
#jpick[hidden]{display:none}
#jpick{position:fixed;inset:0;z-index:60;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;background:#08090D;color:var(--jtext);font-family:var(--body);
  transition:opacity .6s ease,transform .7s cubic-bezier(.4,0,.2,1)}
#jpick:focus{outline:none}
#jpick.is-leave{opacity:0;transform:scale(1.035);pointer-events:none}
.jp-bg{position:fixed;inset:0;pointer-events:none;overflow:hidden}
.jp-glow{position:absolute;inset:0;
  background:radial-gradient(60% 55% at 82% -8%,rgba(244,106,24,.26),rgba(244,106,24,0) 70%),
    radial-gradient(42% 40% at 6% 104%,rgba(244,106,24,.12),rgba(244,106,24,0) 70%),
    linear-gradient(180deg,#0B0C10 0%,#07080B 100%)}
.jp-rails{position:absolute;left:-10%;right:-10%;bottom:-2px;height:46vh;opacity:.5;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.05) 0 1px,transparent 1px 64px),
    repeating-linear-gradient(0deg,rgba(255,138,66,.07) 0 1px,transparent 1px 34px);
  transform:perspective(420px) rotateX(58deg);transform-origin:50% 100%;
  -webkit-mask-image:linear-gradient(0deg,#000 10%,transparent 92%);mask-image:linear-gradient(0deg,#000 10%,transparent 92%)}
.jp-wrap{position:relative;max-width:1340px;min-height:100%;margin:0 auto;display:flex;flex-direction:column;
  padding:18px clamp(16px,3vw,40px) 18px}
.jp-bar{display:flex;align-items:center;gap:16px;justify-content:space-between}
.jp-brand{display:flex;align-items:center;gap:10px;color:var(--jtext);text-decoration:none;
  font-family:var(--mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase}
.jp-brand svg{width:28px;height:28px;flex:none}
.jp-brand b{font-family:var(--disp);font-size:.78rem;letter-spacing:.08em}
.jp-brand span{color:var(--jdim)}
.jp-brand:focus-visible,.jp-bar .jbtn:focus-visible{outline:2px solid #FFB27A;outline-offset:3px;border-radius:8px}
.jp-clock{margin-left:auto;display:inline-flex;align-items:center;gap:9px;font-family:var(--mono);font-size:.62rem;
  letter-spacing:.22em;text-transform:uppercase;color:var(--jdim)}
.jp-clock i{width:6px;height:6px;border-radius:50%;background:var(--jo);box-shadow:0 0 10px var(--jo);animation:jp-blink 1.6s steps(2,start) infinite}
.jp-clock b{color:#fff;font-weight:500;letter-spacing:.12em;font-variant-numeric:tabular-nums}
@keyframes jp-blink{50%{opacity:.25}}
.jp-head{margin-top:clamp(14px,3vh,36px);animation:jp-in .8s cubic-bezier(.16,1,.3,1) backwards}
.jp-kick{display:flex;align-items:center;gap:12px;font-family:var(--mono);font-size:.64rem;letter-spacing:.3em;
  text-transform:uppercase;color:var(--jo-soft)}
.jp-kick::before{content:"";width:26px;height:1px;background:var(--jo)}
.jp-head h1{margin:.34em 0 .26em;font-family:var(--disp);font-weight:700;font-size:clamp(2rem,3.7vw,3.15rem);
  line-height:1.02;letter-spacing:-.034em;color:#fff}
.jp-head p{margin:0;max-width:86ch;color:#B7BDCB;font-size:clamp(.94rem,1.08vw,1.04rem);line-height:1.6}
.jp-cols{display:flex;justify-content:space-between;gap:12px;margin-top:clamp(14px,2.6vh,28px);padding:0 2px 10px;
  border-bottom:1px solid rgba(255,255,255,.08);font-family:var(--mono);font-size:.58rem;letter-spacing:.28em;
  text-transform:uppercase;color:rgba(154,160,176,.75)}
.jp-cols b{color:#7DF0C0;font-weight:500;animation:jp-blink 2.4s steps(2,start) infinite}
.jp-grid{list-style:none;margin:12px 0 0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px}
.jp-grid li{display:flex;min-width:0}

/* a ticket: platform + icon, destination, one line of what it is, the stub */
.jp-t{--perf:calc(100% - 46px);position:relative;flex:1;display:flex;flex-direction:column;min-width:0;min-height:188px;
  padding:14px 16px 0;border-radius:16px;color:var(--jtext);text-decoration:none;
  background:linear-gradient(180deg,rgba(255,255,255,.065),rgba(255,255,255,.022));
  border:1px solid rgba(255,255,255,.1);
  -webkit-mask:radial-gradient(circle 8px at 0 var(--perf),#0000 96%,#000) left/51% 100% no-repeat,
    radial-gradient(circle 8px at 100% var(--perf),#0000 96%,#000) right/51% 100% no-repeat;
  mask:radial-gradient(circle 8px at 0 var(--perf),#0000 96%,#000) left/51% 100% no-repeat,
    radial-gradient(circle 8px at 100% var(--perf),#0000 96%,#000) right/51% 100% no-repeat;
  transition:transform .4s cubic-bezier(.2,.8,.2,1),border-color .3s,background .3s,opacity .5s,filter .5s;
  animation:jp-in .7s cubic-bezier(.16,1,.3,1) backwards;animation-delay:calc(var(--i,0) * 45ms + 140ms)}
@keyframes jp-in{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
.jp-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.jp-plat{font-family:var(--mono);font-size:.56rem;letter-spacing:.24em;text-transform:uppercase;color:var(--jdim)}
.jp-plat b{display:block;margin-top:3px;font-family:var(--disp);font-weight:700;font-size:1.9rem;letter-spacing:-.03em;
  line-height:1;color:#fff;font-variant-numeric:tabular-nums;transition:color .3s}
.jp-ic{flex:none;width:42px;height:42px;padding:10px;border-radius:12px;background:rgba(244,106,24,.13);
  fill:none;stroke:#FF9A4D;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;transition:background .3s,stroke .3s}
.jp-name{margin-top:11px;font-family:var(--disp);font-weight:600;font-size:1.02rem;line-height:1.22;letter-spacing:-.012em;color:#fff}
.jp-desc{flex:1;margin:6px 0 12px;font-size:.78rem;line-height:1.5;color:#98A0B2}
.jp-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;height:46px;flex:none;
  border-top:1px dashed rgba(255,255,255,.17);font-family:var(--mono);font-size:.56rem;letter-spacing:.2em;text-transform:uppercase}
.jp-st{display:inline-flex;align-items:center;gap:7px;color:rgba(154,160,176,.85)}
.jp-st::before{content:"";width:6px;height:6px;border-radius:50%;background:#5BF0B4;box-shadow:0 0 8px rgba(91,240,180,.7)}
.jp-go{display:inline-flex;align-items:center;gap:6px;color:var(--jo-soft);transition:color .3s}
.jp-go svg{width:14px;height:14px;transition:transform .3s cubic-bezier(.2,.8,.2,1)}
.jp-stamp{position:absolute;right:12px;bottom:7px;padding:6px 10px;border:2px solid #5BF0B4;border-radius:7px;
  font-family:var(--mono);font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;color:#7DF6C6;
  background:rgba(8,30,22,.94);opacity:0;transform:rotate(-6deg) scale(1.8);pointer-events:none;
  transition:opacity .25s ease,transform .45s cubic-bezier(.2,1.5,.3,1)}
.jp-t:hover,.jp-t:focus-visible{transform:translateY(-4px);border-color:rgba(255,138,66,.62);
  background:linear-gradient(180deg,rgba(244,106,24,.17),rgba(244,106,24,.05))}
.jp-t:hover .jp-ic,.jp-t:focus-visible .jp-ic{background:var(--jo);stroke:#fff}
.jp-t:hover .jp-plat b,.jp-t:focus-visible .jp-plat b{color:#FFB27A}
.jp-t:hover .jp-go,.jp-t:focus-visible .jp-go,.jp-tour:hover .jp-go,.jp-tour:focus-visible .jp-go{color:#fff}
.jp-t:hover .jp-go svg,.jp-t:focus-visible .jp-go svg,.jp-tour:hover .jp-go svg,.jp-tour:focus-visible .jp-go svg{transform:translateX(4px)}
.jp-t:focus-visible,.jp-tour:focus-visible{outline:2px solid #FFB27A;outline-offset:-3px}
.jp-t:active{transform:translateY(-1px) scale(.99)}

/* the express: the full company tour */
.jp-tour{position:relative;display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;gap:18px;
  margin-top:12px;padding:12px 14px 12px 16px;border-radius:16px;color:var(--jtext);text-decoration:none;
  border:1px solid rgba(255,138,66,.36);background:linear-gradient(90deg,rgba(244,106,24,.2),rgba(244,106,24,.05) 55%,rgba(255,255,255,.02));
  transition:border-color .3s,background .3s,opacity .5s,filter .5s,transform .4s cubic-bezier(.2,.8,.2,1);
  animation:jp-in .7s cubic-bezier(.16,1,.3,1) backwards;animation-delay:.62s}
.jp-tour .jp-ic{background:var(--jo);stroke:#fff}
.jp-tt{display:flex;flex-direction:column;gap:3px}
.jp-tour .jp-plat{color:var(--jo-soft)}
.jp-tour .jp-name{margin:0;font-size:1.08rem;white-space:nowrap}
.jp-tour .jp-desc{margin:0;font-size:.84rem;color:#B7BDCB}
.jp-tour .jp-go{padding:11px 18px;border-radius:100px;background:linear-gradient(135deg,#FF8A42,#F46A18 50%,#DD4A06);
  color:#fff;font-family:var(--disp);font-weight:600;font-size:.86rem;letter-spacing:0;text-transform:none;white-space:nowrap;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.28),0 12px 30px -12px rgba(244,106,24,.8)}
.jp-tour:hover,.jp-tour:focus-visible{border-color:rgba(255,170,110,.75);background:linear-gradient(90deg,rgba(244,106,24,.3),rgba(244,106,24,.08) 55%,rgba(255,255,255,.03))}

/* background download, mirrored from the loader */
.jp-load{display:flex;align-items:center;gap:14px;margin-top:auto;padding-top:14px;font-family:var(--mono);font-size:.58rem;
  letter-spacing:.24em;text-transform:uppercase;color:var(--jdim)}
.jp-lt{white-space:nowrap}
.jp-lb{position:relative;flex:1;height:2px;border-radius:2px;background:rgba(255,255,255,.1);overflow:hidden}
.jp-lb b{position:absolute;inset:0;transform-origin:0 50%;transform:scaleX(0);transition:transform .45s ease;
  background:linear-gradient(90deg,#ED5606,#FF8A42)}
.jp-lp{min-width:4ch;text-align:right;color:#fff;font-variant-numeric:tabular-nums}
#jpick.is-ready .jp-lt{color:#7DF0C0}

/* boarding: the chosen ticket is stamped, the rest of the board dims */
#jpick.is-chosen .jp-head,#jpick.is-chosen .jp-cols{opacity:.35;transition:opacity .5s}
#jpick.is-chosen .jp-t:not(.is-pick),#jpick.is-chosen .jp-tour:not(.is-pick){opacity:.16;filter:saturate(.2);transform:scale(.97)}
#jpick .jp-t.is-pick{transform:translateY(-6px) scale(1.035);border-color:#FF8A42;
  background:linear-gradient(180deg,rgba(244,106,24,.32),rgba(244,106,24,.1))}
#jpick .jp-t.is-pick .jp-ic{background:var(--jo);stroke:#fff}
#jpick .is-pick .jp-stamp{opacity:1;transform:rotate(-6deg) scale(1)}
#jpick .is-pick .jp-go{opacity:0;transition:opacity .2s}
#jpick .jp-t.is-pick .jp-foot{border-top-color:rgba(255,255,255,.5)}
#jpick .jp-tour.is-pick{border-color:#FF8A42;transform:scale(1.015)}
#jpick .jp-tour .jp-stamp{display:none}

/* no WebGL: the board still works, tickets open the service pages */
body.jno3d #jpick{position:fixed}

@media (max-width:1100px){
  .jp-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .jp-t{--px:calc(100% - 58px);display:grid;grid-template-columns:auto minmax(0,1fr) 46px;column-gap:14px;align-items:center;
    min-height:0;padding:14px 0 14px 14px;
    -webkit-mask:radial-gradient(circle 7px at var(--px) 0,#0000 96%,#000) top/100% 51% no-repeat,
      radial-gradient(circle 7px at var(--px) 100%,#0000 96%,#000) bottom/100% 51% no-repeat;
    mask:radial-gradient(circle 7px at var(--px) 0,#0000 96%,#000) top/100% 51% no-repeat,
      radial-gradient(circle 7px at var(--px) 100%,#0000 96%,#000) bottom/100% 51% no-repeat}
  .jp-top{display:contents}
  .jp-ic{grid-column:1;grid-row:1/span 3;align-self:center}
  .jp-plat{grid-column:2;grid-row:1;font-size:.54rem}
  .jp-plat b{display:inline;margin:0;font:inherit;letter-spacing:inherit;color:var(--jo-soft)}
  .jp-name{grid-column:2;grid-row:2;margin:3px 0 0}
  .jp-desc{grid-column:2;grid-row:3;margin:4px 0 0;flex:none}
  .jp-foot{grid-column:3;grid-row:1/span 3;align-self:stretch;height:auto;margin:-14px 0;justify-content:center;
    border-top:0;border-left:1px dashed rgba(255,255,255,.17)}
  .jp-st,.jp-go{font-size:0;letter-spacing:0}
  .jp-st{display:none}
  .jp-go svg{width:18px;height:18px}
  .jp-stamp{right:8px;bottom:auto;top:50%;margin-top:-16px}
  .jp-t:hover,.jp-t:focus-visible{transform:translateY(-2px)}
}
@media (max-width:760px){
  .jp-wrap{padding:16px 16px 18px}
  .jp-brand span,.jp-clock{display:none}
  .jp-head{margin-top:22px}
  .jp-head h1{font-size:clamp(1.9rem,8.4vw,2.4rem)}
  .jp-head p{font-size:.9rem;line-height:1.55}
  .jp-cols{margin-top:20px}
  .jp-cols span:nth-child(2){display:none}
  .jp-grid{grid-template-columns:minmax(0,1fr);gap:9px}
  .jp-t{padding:13px 0 13px 13px;column-gap:12px}
  .jp-ic{width:40px;height:40px;padding:9px}
  .jp-name{font-size:.98rem}
  .jp-desc{font-size:.76rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .jp-tour{grid-template-columns:auto minmax(0,1fr) auto;gap:12px;padding:13px 13px 13px 13px}
  .jp-tour .jp-desc{display:none}
  .jp-tour .jp-name{white-space:normal}
  .jp-tour .jp-go{padding:10px 14px;font-size:.8rem}
  .jp-tour .jp-go{font-size:0;gap:0;padding:10px 12px}
  .jp-tour .jp-go svg{width:18px;height:18px}
  .jp-load{position:sticky;bottom:-18px;margin:14px -16px -18px;padding:12px 16px 14px;
    background:linear-gradient(180deg,rgba(8,9,13,0),rgba(8,9,13,.94) 40%)}
}
@media (prefers-reduced-motion:reduce){
  .jp-head,.jp-t,.jp-tour{animation:none}
  .jp-clock i,.jp-cols b{animation:none}
  #jpick,.jp-t,.jp-tour,.jp-stamp{transition-duration:.01s!important}
}

/* ---------- HUD: destination chip ("Change" returns to the board) ---------- */
.jsvc{pointer-events:auto;display:inline-flex;align-items:center;gap:8px;margin-left:10px;padding:5px 5px 5px 11px;
  border-radius:100px;border:1px solid var(--jline);background:var(--jglass);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--jtext);text-decoration:none;
  font-family:var(--mono);font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;transition:border-color .3s}
.jsvc[hidden]{display:none}
.jsvc i{flex:none;width:6px;height:6px;border-radius:50%;background:var(--jo);box-shadow:0 0 8px var(--jo)}
#jhud-tl .jsvc span{opacity:1;display:inline}
.jsvc .n{color:#fff;white-space:nowrap}
.jsvc .c{padding:4px 9px;border-radius:100px;background:rgba(255,255,255,.08);color:var(--jo-soft);transition:background .3s,color .3s}
.jsvc:hover{border-color:var(--jo)}
.jsvc:hover .c,.jsvc:focus-visible .c{background:var(--jo);color:#fff}
.jsvc:focus-visible{outline:2px solid #FFB27A;outline-offset:3px}
@media (max-width:760px){
  .jsvc{position:fixed;top:54px;left:14px;margin:0;font-size:.54rem;letter-spacing:.1em;max-width:calc(55vw - 14px)}
  #jhud-tl .jsvc .n{overflow:hidden;text-overflow:ellipsis}
  #jchapter{top:56px;right:14px;left:auto;transform:none;text-align:right;max-width:40vw}
  #jchapter .n{justify-content:flex-end}
}
/* finale buttons: full service label on desktop, compact on phones (hud.js applyNarrative) */
.jact .js{display:none}
@media (max-width:760px){.jact .jl{display:none}.jact .js{display:inline}}
/* ---- end DESTINATION PICKER ---- */
