/* ============================================================
   V12 POLISH - calm, business-grade finishing layer.
   Loaded after styles.css / mobile.css; everything here is additive
   and scoped to classes that polish.js adds (pl-*), so removing the
   two files returns the site to V11 exactly.
   ============================================================ */

:root{
  --pl-ease:cubic-bezier(.22,.61,.36,1);
  --pl-accent:linear-gradient(90deg,#2f6dff 0%,#6f9bff 55%,#c7ddff 100%);
}

/* ---------- 1. reading progress: a hairline under the nav ---------- */
.pl-progress{
  position:absolute;left:0;right:0;bottom:-1px;height:2px;
  pointer-events:none;overflow:hidden;
  opacity:0;transition:opacity .5s var(--pl-ease);
}
.nav.is-scrolled .pl-progress{opacity:1}
.pl-progress i{
  display:block;height:100%;width:100%;
  background:var(--pl-accent);
  transform-origin:0 50%;transform:scaleX(var(--pl-p,0));
  box-shadow:0 0 10px rgba(47,109,255,.45);
}

/* ---------- 2. nav: the current station keeps its underline ---------- */
.nav-links a.pl-current{opacity:1}
.nav-links a.pl-current::after{transform:scaleX(1);transform-origin:left}

/* ---------- 3. primary buttons: a single light sweep on hover ---------- */
.pl-sheen-host{position:relative;overflow:hidden;isolation:isolate}
.pl-sheen{
  position:absolute;inset:-1px;z-index:-1;pointer-events:none;
  background:linear-gradient(105deg,transparent 30%,rgba(255,255,255,.34) 48%,rgba(255,255,255,.08) 56%,transparent 70%);
  transform:translateX(-120%);
}
.pl-sheen-host:hover .pl-sheen,
.pl-sheen-host:focus-visible .pl-sheen{
  transform:translateX(120%);
  transition:transform .9s var(--pl-ease);
}
/* magnetic pull uses the independent `translate` property so it never
   fights the existing hover lift that lives on `transform` */
.pl-magnet{transition:translate .45s var(--pl-ease),background .3s,color .3s,border-color .3s,transform .3s var(--ease),box-shadow .3s}
.pl-magnet.is-pulling{transition:translate .12s linear,background .3s,color .3s,border-color .3s,transform .3s var(--ease),box-shadow .3s}
.pl-magnet{translate:var(--pl-mx,0px) var(--pl-my,0px)}

/* ---------- 4. media cards: soft spotlight + restrained tilt ---------- */
.pl-card{
  transform:perspective(1100px) rotateX(var(--pl-rx,0deg)) rotateY(var(--pl-ry,0deg));
  transition:transform .7s var(--pl-ease),box-shadow .7s var(--pl-ease),border-color .5s var(--pl-ease);
  will-change:transform;
}
.pl-card.is-hover{
  transition:transform .18s linear,box-shadow .5s var(--pl-ease),border-color .5s var(--pl-ease);
  box-shadow:0 28px 60px -22px rgba(9,24,64,.45),0 2px 0 rgba(255,255,255,.04) inset;
}
.theme-light .pl-card.is-hover{box-shadow:0 30px 60px -26px rgba(23,59,179,.30)}
.pl-spot{
  position:absolute;inset:0;z-index:3;pointer-events:none;
  background:radial-gradient(420px circle at var(--pl-sx,50%) var(--pl-sy,50%),rgba(199,221,255,.16),transparent 60%);
  opacity:0;transition:opacity .5s var(--pl-ease);
}
.theme-light .pl-spot{background:radial-gradient(420px circle at var(--pl-sx,50%) var(--pl-sy,50%),rgba(47,109,255,.10),transparent 60%)}
.pl-card.is-hover .pl-spot{opacity:1}
/* a thin light edge that follows the pointer round the frame */
.pl-edge{
  position:absolute;inset:0;z-index:4;pointer-events:none;border-radius:inherit;
  padding:1px;
  background:radial-gradient(260px circle at var(--pl-sx,50%) var(--pl-sy,50%),rgba(199,221,255,.75),transparent 70%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
  opacity:0;transition:opacity .5s var(--pl-ease);
}
.theme-light .pl-edge{background:radial-gradient(260px circle at var(--pl-sx,50%) var(--pl-sy,50%),rgba(47,109,255,.7),transparent 70%)}
.pl-card.is-hover .pl-edge{opacity:1}

/* ---------- 5. key figures: tabular digits so the count-up never jitters ---------- */
.stat-num{font-variant-numeric:tabular-nums}

/* ---------- 6. station header: the rule draws in as the chapter arrives ---------- */
.chapter-top{position:relative}
.chapter-top::after{
  content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;
  background:var(--pl-accent);
  transform:scaleX(0);transform-origin:0 50%;
  transition:transform 1.6s var(--pl-ease) .15s;
  opacity:.9;
}
.pl-arrived .chapter-top::after{transform:scaleX(1)}
.theme-light .chapter-top::after{background:linear-gradient(90deg,#2f6dff,rgba(47,109,255,.25) 70%,transparent)}

/* bullet markers settle in one after another */
.chapter-points li::before{transition:opacity .6s var(--pl-ease)}
.pl-ready .chapter-points li::before{opacity:0}
.pl-ready.pl-arrived .chapter-points li::before{opacity:1}
.pl-ready.pl-arrived .chapter-points li:nth-child(2)::before{transition-delay:.12s}
.pl-ready.pl-arrived .chapter-points li:nth-child(3)::before{transition-delay:.24s}

/* ---------- 7. hero accent words: "Spec" is read, "Site." is switched on ----------
   Colour: cool LED light, a notch brighter than before - a near-white core
   graded down into ice blue, with a three-step bloom in the logo blue's
   family. No warm tones.
   Motion (driven by polish.js), told in light rather than bounce:
     1. "Spec" - thin blueprint strokes draw in, then a scan beam reads the
        word left to right and fills each letter with light as it passes;
     2. a photon leaves "Spec" and runs a hairline path under "to" (which
        catches its light) over to "Site.";
     3. "Site." switches on letter by letter like a run of fixtures, and the
        full stop fires a short anamorphic flare - the last switch-on;
     4. at rest, the light pooled behind each word breathes slowly, and every
        few seconds a specular glint sweeps Spec -> Site, alternating with a
        photon running the path again. */
:root{
  --pl-lit:#bfe6ff;
  --pl-lit-top:#f2faff;
  --pl-lit-mid:#a8dcff;
  --pl-lit-low:#5a9fff;
  --pl-glow-0:rgba(225,244,255,.7);
  --pl-glow-1:rgba(110,190,255,.72);
  --pl-glow-2:rgba(47,109,255,.45);
}
#hero .hero-title .wi.is-accent{color:var(--pl-lit)}
#hero .hero-title .hero-line.pl-free{overflow:visible;position:relative}
.pl-word{display:inline-block;white-space:nowrap;position:relative}
.pl-lamp{filter:drop-shadow(0 0 1px var(--pl-glow-0)) drop-shadow(0 0 10px var(--pl-glow-1)) drop-shadow(0 0 30px var(--pl-glow-2))}
.pl-ch{display:inline-block;position:relative}
/* the lit letter: a vertical grade (light falls from the top) plus a
   specular band parked off to the left until the glint sweeps it across */
.pl-fill{
  display:inline-block;
  /* the line box is only .87em tall, so the painted area is stretched to
     cover ascenders and the p descender, then given back by the margins */
  padding:.1em 0 .3em;margin:-.1em 0 -.3em;
  background-image:
    linear-gradient(105deg,rgba(255,255,255,0) 30%,rgba(255,255,255,.55) 44%,#fff 50%,rgba(255,255,255,.55) 56%,rgba(255,255,255,0) 70%),
    linear-gradient(180deg,var(--pl-lit-top) 16%,var(--pl-lit-mid) 48%,var(--pl-lit-low) 78%,#4f95ff 100%);
  background-size:1.8em 100%,100% 100%;
  background-repeat:no-repeat;
  background-position:-4em 0,0 0;
  -webkit-background-clip:text;background-clip:text;
  color:transparent;-webkit-text-fill-color:transparent;
}
/* the blueprint stroke, only seen while a letter is being lit */
.pl-line{
  position:absolute;left:0;top:0;pointer-events:none;opacity:0;
  color:transparent;-webkit-text-fill-color:transparent;
  -webkit-text-stroke:1px rgba(190,228,255,.85);
}
/* the light each word throws on the wall behind it */
.pl-halo{
  position:absolute;left:-22%;right:-22%;top:-18%;bottom:-26%;z-index:-1;pointer-events:none;
  background:radial-gradient(50% 50% at 50% 56%,rgba(70,145,255,.30),rgba(47,109,255,.12) 55%,rgba(47,109,255,0) 78%);
}
.pl-live .pl-halo{animation:pl-breathe 6.4s ease-in-out infinite alternate}
.pl-live .pl-halo.is-site{animation-delay:-3.2s}
@keyframes pl-breathe{from{opacity:1}to{opacity:.5}}
/* scan beam across Spec */
.pl-beam{
  position:absolute;left:0;top:-.02em;bottom:0;width:2px;margin-left:-1px;opacity:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(242,250,255,0),#f2faff 18%,#f2faff 82%,rgba(242,250,255,0));
  box-shadow:0 0 8px 1px rgba(150,210,255,.9),0 0 22px 4px rgba(47,109,255,.5);
}
.pl-beam::before{
  content:"";position:absolute;top:10%;bottom:10%;right:1px;width:.8em;
  background:linear-gradient(90deg,rgba(150,210,255,0),rgba(150,210,255,.2));
}
/* the path under "to": a hairline rail and the photon that runs it */
.pl-path{position:absolute;height:2px;margin-top:-1px;pointer-events:none;z-index:0}
.pl-rail{
  position:absolute;left:0;right:0;top:.5px;height:1px;opacity:0;transform-origin:0 50%;
  background:linear-gradient(90deg,rgba(170,220,255,0),rgba(170,220,255,.5) 14%,rgba(170,220,255,.5) 86%,rgba(170,220,255,0));
}
.pl-photon{
  position:absolute;left:0;top:50%;width:.9em;height:2px;margin:-1px 0 0 -.9em;opacity:0;border-radius:2px;
  background:linear-gradient(90deg,rgba(120,190,255,0),rgba(190,230,255,.85) 72%,#fff);
  box-shadow:0 0 10px 1px rgba(120,200,255,.75);
}
.pl-photon::after{
  content:"";position:absolute;right:-3px;top:50%;width:6px;height:6px;margin-top:-3px;border-radius:50%;
  background:#fff;box-shadow:0 0 6px 2px #fff,0 0 16px 5px rgba(120,200,255,.9),0 0 36px 10px rgba(47,109,255,.5);
}
/* the full stop's switch-on flare */
.pl-flare{
  position:absolute;left:0;top:0;width:3.4em;height:2px;margin:-1px 0 0 -1.7em;opacity:0;pointer-events:none;
  background:linear-gradient(90deg,rgba(120,190,255,0),rgba(220,242,255,.95) 50%,rgba(120,190,255,0));
}
.pl-flare::after{
  content:"";position:absolute;left:50%;top:50%;width:.55em;height:.55em;margin:-.275em 0 0 -.275em;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.95),rgba(150,210,255,.4) 40%,rgba(150,210,255,0) 70%);
}
.pl-hold .pl-lamp .pl-fill,.pl-hold .pl-halo{opacity:0}

/* ---------- 7b. the slogan's entrance, staged as one pass of light ----------
   polish.js takes the hero copy over from the stock rise-in: while staged,
   the stock animation is off and the copy waits unseen for the loader to
   lift; then every word, the lede and the button are timed on one clock. */
@property --pl-a{syntax:'<angle>';inherits:false;initial-value:0deg}
#hero.pl-stage [data-words],#hero.pl-stage .hero-cta{animation:none!important}
#hero.pl-stage .hero-title .hero-line{overflow:visible}
#hero.pl-stage:not(.pl-run) .hero-title .wi,
#hero.pl-stage:not(.pl-run) .hero-sub .wi,
#hero.pl-stage:not(.pl-run) .hero-cta{opacity:0}
/* a comet of light that runs once round the button's outline */
.pl-trace{
  position:absolute;inset:0;z-index:1;border-radius:inherit;padding:1.5px;pointer-events:none;opacity:0;
  background:conic-gradient(from var(--pl-a),rgba(190,228,255,0) 0deg 230deg,rgba(190,228,255,.5) 318deg,#fff 352deg,rgba(190,228,255,0) 360deg);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
}

/* ---------- 8. footer: understated underline on links ---------- */
.fin-foot-col a{
  background:linear-gradient(currentColor,currentColor) 0 100%/0 1px no-repeat;
  transition:color .3s,background-size .45s var(--pl-ease);
  padding-bottom:2px;
}
.fin-foot-col a:hover{background-size:100% 1px}

/* ---------- 9. calmer pointer: a quieter ring, no sparks ---------- */
@media (pointer:fine) and (prefers-reduced-motion:no-preference){
  .cursor-fx::before{opacity:.55}
  .cursor-fx::after{opacity:.5;box-shadow:0 0 12px rgba(139,183,255,.28)}
  .cursor-fx.is-hot::after{opacity:.85}
}

/* ---------- 10. fine film grain: removes banding on the big gradients ---------- */
.pl-grain{
  position:fixed;inset:-50%;z-index:90;pointer-events:none;
  opacity:.035;
  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='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .5 0 0 0 0 .5 0 0 0 0 .5 0 0 0 1 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ---------- 11. departure: the landing's third stage ----------
   When "One Path" gives way and the globe docks at the start of the route,
   the pinned stage used to hold nothing but a 9.5px pill. It now frames the
   globe: the invitation on the left, a split-flap departure board of the four
   stations on the right, and a beacon around the globe itself. The board's
   "Boarding" pulse and the beacon ping share one 2.4s beat. polish.js drives
   the stage's presence from the hero's own scroll progress. */
.pl-dep{
  position:absolute;inset:0;z-index:28;pointer-events:none;
  opacity:0;visibility:hidden;
  --pl-beat:2.4s;
}
.pl-dep.is-on{visibility:visible}
.pl-dep-ready #pathway-labels .plabel:first-child{display:none}

/* the invitation */
.pl-dep-copy{
  position:absolute;left:clamp(24px,6vw,120px);top:50%;
  width:min(34vw,620px);transform:translateY(-50%);
}
.pl-dep-eyebrow{
  margin:0 0 clamp(16px,2.4vh,24px);
  font-size:12.5px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;
  color:#a9d6ff;
}
.pl-dep-title{
  margin:0;
  font-size:clamp(40px,4.2vw,80px);font-weight:650;line-height:.98;letter-spacing:-.04em;
  color:#f9fbff;
}
.pl-dep-title .ln{display:block;overflow:hidden;padding:.02em 0 .18em;margin-bottom:-.16em}
.pl-dep-title .ln > span{display:inline-block}
.pl-dep-title .lit{
  background:linear-gradient(180deg,var(--pl-lit-top) 12%,var(--pl-lit-mid) 55%,var(--pl-lit-low) 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;
  filter:drop-shadow(0 0 1px var(--pl-glow-0)) drop-shadow(0 0 12px var(--pl-glow-1)) drop-shadow(0 0 30px var(--pl-glow-2));
}
.pl-dep-title .ln-i{display:inline-block;transform:translate3d(0,calc(var(--rise,1) * (100% + .4em)),0);will-change:transform}
.pl-dep-title .w,.pl-dep-sub .w{display:inline-block;will-change:opacity,filter,color}
.pl-dep-sub{
  margin:clamp(18px,2.8vh,28px) 0 0;max-width:34ch;
  font-size:clamp(16px,1.25vw,21px);line-height:1.55;font-weight:400;
  color:rgba(222,233,248,.8);
}

/* the departure board */
.pl-board{
  position:absolute;right:clamp(24px,5vw,110px);top:50%;
  width:clamp(460px,35vw,640px);transform:translateY(-50%);
  padding:clamp(18px,2.2vw,28px);
  border-radius:18px;
  border:1px solid rgba(159,194,255,.18);
  background:linear-gradient(180deg,rgba(14,24,42,.72),rgba(7,12,22,.66));
  -webkit-backdrop-filter:blur(14px) saturate(140%);backdrop-filter:blur(14px) saturate(140%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07),0 40px 80px -30px rgba(0,0,0,.6),0 0 0 1px rgba(47,109,255,.04);
  overflow:hidden;
}
.pl-board-head{
  display:flex;align-items:baseline;justify-content:space-between;
  padding-bottom:clamp(12px,1.6vh,18px);
}
.pl-board-title{font-size:clamp(18px,1.35vw,24px);font-weight:600;letter-spacing:-.01em;color:#f3f8ff}
.pl-board-route{font:500 12px/1 ui-monospace,'SF Mono',Menlo,Consolas,monospace;letter-spacing:.14em;text-transform:uppercase;color:rgba(169,214,255,.75)}
.pl-board-cols,.pl-row{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;column-gap:clamp(14px,1.3vw,22px);
}
.pl-board-cols{
  padding:0 0 10px;border-bottom:1px solid rgba(159,194,255,.14);
  font:500 11px/1 ui-monospace,'SF Mono',Menlo,Consolas,monospace;letter-spacing:.16em;text-transform:uppercase;
  color:rgba(199,221,255,.5);
}
.pl-board-cols span:nth-child(3){text-align:right}
.pl-board-cols span:first-child{width:2.6em}
.pl-rows{position:relative}
.pl-row{position:relative;padding:clamp(12px,1.7vh,17px) 0}
.pl-row + .pl-row{border-top:1px solid rgba(159,194,255,.08)}
.pl-row-name{display:block;font-size:clamp(17px,1.3vw,22px);font-weight:600;letter-spacing:-.01em;color:#f3f8ff;white-space:nowrap}
.pl-row-note{display:block;margin-top:5px;font-size:clamp(12.5px,.9vw,14.5px);color:rgba(199,221,255,.62);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pl-row-end{display:flex;flex-direction:column;align-items:flex-end;gap:8px}
/* split-flap tiles */
.pl-tiles{display:inline-flex;align-items:center;font:600 clamp(16px,1.2vw,21px)/1 ui-monospace,'SF Mono',Menlo,Consolas,monospace;color:#eaf4ff}
.pl-flap{
  position:relative;display:inline-grid;place-items:center;
  width:1.1em;height:1.5em;margin-right:.14em;border-radius:.2em;
  background:linear-gradient(180deg,#16213a 0 49.4%,#0d1527 50.6% 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07),0 1px 0 rgba(0,0,0,.45);
  perspective:140px;overflow:hidden;
}
.pl-flap:last-child{margin-right:0}
.pl-flap::after{content:"";position:absolute;left:0;right:0;top:50%;height:1px;margin-top:-.5px;background:rgba(0,0,0,.6)}
.pl-flap span{display:block;transform-origin:50% 50%;backface-visibility:hidden}
.pl-colon{font-style:normal;margin:0 .1em;color:rgba(199,221,255,.6)}
/* status */
.pl-st{
  display:inline-block;padding:7px 11px;border-radius:999px;
  font:600 11px/1 ui-monospace,'SF Mono',Menlo,Consolas,monospace;letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;
  color:rgba(199,221,255,.72);border:1px solid rgba(159,194,255,.22);
}
.pl-st.is-now{color:#07101c;background:#c2e5ff;border-color:#c2e5ff;box-shadow:0 0 18px rgba(120,190,255,.5)}
.pl-dep.is-live .pl-st.is-now{animation:pl-board-beat var(--pl-beat) cubic-bezier(.2,.6,.3,1) infinite}
@keyframes pl-board-beat{0%,100%{box-shadow:0 0 14px rgba(120,190,255,.35)}12%{box-shadow:0 0 28px rgba(150,210,255,.9),0 0 0 4px rgba(150,210,255,.18)}}
/* the light that runs down the board, station by station */
.pl-scan{
  position:absolute;left:-8%;right:-8%;top:0;height:64px;margin-top:-32px;pointer-events:none;opacity:0;
  background:linear-gradient(180deg,rgba(111,170,255,0),rgba(111,170,255,.12) 45%,rgba(191,227,255,.22) 50%,rgba(111,170,255,.12) 55%,rgba(111,170,255,0));
}

/* the beacon around the docked globe */
.pl-beacon{position:absolute;left:50%;top:50%;width:0;height:0;pointer-events:none}
.pl-beacon i{position:absolute;left:0;top:0;border-radius:50%;transform:translate(-50%,-50%)}
.pl-beacon .b-ring{width:96px;height:96px;border:1px solid rgba(159,194,255,.32)}
.pl-beacon .b-ticks{
  width:156px;height:156px;
  background:repeating-conic-gradient(rgba(199,221,255,.34) 0 .6deg,transparent .6deg 7.5deg);
  -webkit-mask:radial-gradient(closest-side,transparent calc(100% - 6px),#000 calc(100% - 5.5px));
          mask:radial-gradient(closest-side,transparent calc(100% - 6px),#000 calc(100% - 5.5px));
}
.pl-beacon .b-arc{
  width:156px;height:156px;
  background:conic-gradient(from 0deg,rgba(191,227,255,0) 0 70%,rgba(191,227,255,.9) 99%,rgba(191,227,255,0) 100%);
  -webkit-mask:radial-gradient(closest-side,transparent calc(100% - 1.5px),#000 calc(100% - 1px));
          mask:radial-gradient(closest-side,transparent calc(100% - 1.5px),#000 calc(100% - 1px));
}
.pl-beacon .b-ping{width:96px;height:96px;border:1px solid rgba(191,227,255,.85);opacity:0}
.pl-dep.is-live .pl-beacon .b-ticks{animation:pl-spin 40s linear infinite}
.pl-dep.is-live .pl-beacon .b-arc{animation:pl-spin 4.8s linear infinite}
.pl-dep.is-live .pl-beacon .b-ping{animation:pl-ping var(--pl-beat) cubic-bezier(.2,.6,.3,1) infinite}
@keyframes pl-spin{from{transform:translate(-50%,-50%) rotate(0)}to{transform:translate(-50%,-50%) rotate(360deg)}}
@keyframes pl-ping{0%{opacity:.9;transform:translate(-50%,-50%) scale(.7)}100%{opacity:0;transform:translate(-50%,-50%) scale(2.3)}}

/* tablet and phone: the invitation above the globe, the board below it */
@media (max-width:1024px){
  .pl-dep-copy{left:24px;right:24px;width:auto;top:calc(var(--nav-h,64px) + 3vh);transform:none;text-align:center}
  .pl-dep-title{font-size:clamp(34px,7vw,60px)}
  .pl-dep-sub{margin-left:auto;margin-right:auto;font-size:15.5px}
  .pl-board{left:50%;right:auto;top:auto;bottom:3vh;width:min(560px,calc(100% - 32px));transform:translateX(-50%);padding:16px 18px}
  .pl-beacon .b-ticks,.pl-beacon .b-arc{width:124px;height:124px}
  .pl-beacon .b-ring,.pl-beacon .b-ping{width:76px;height:76px}
}
@media (max-width:700px){
  .pl-dep-eyebrow{font-size:11.5px;margin-bottom:12px}
  .pl-dep-sub{display:none}
  .pl-board-cols{display:none}
  .pl-board-head{padding-bottom:8px;border-bottom:1px solid rgba(159,194,255,.14)}
  .pl-board-cols,.pl-row{column-gap:10px}
  .pl-row{padding:9px 0}
  .pl-row .pl-st,.pl-row-note{display:none}
  .pl-row-name{font-size:16px}
  .pl-tiles{font-size:15px}
}
@media (prefers-reduced-motion:reduce){
  .pl-dep.is-live .pl-st.is-now,.pl-dep.is-live .pl-beacon i{animation:none}
}

/* ---------- touch and reduced motion: keep only the static finish ---------- */
@media (hover:none),(pointer:coarse){
  .pl-card{transform:none!important}
  .pl-spot,.pl-edge,.pl-sheen{display:none}
  .pl-magnet{translate:none}
}
@media (prefers-reduced-motion:reduce){
  .pl-card{transform:none!important;transition:none}
  .pl-hold .pl-lamp .pl-fill,.pl-hold .pl-halo{opacity:1}
  .pl-live .pl-halo{animation:none}
  .pl-sheen{display:none}
  .pl-magnet{translate:none}
  .chapter-top::after{transition:none;transform:scaleX(1)}
  .pl-ready .chapter-points li::before{opacity:1}
}

/* ---------- 12. UI pass (2026-10): contrast, press feedback, line breaks, phones ---------- */
/* the quote button keeps SuppLux blue over the dark chapters too, so it never sinks into the night */
.nav.is-dark .nav-cta{background:var(--blue);color:#fff;border-color:rgba(159,194,255,.35)}
.nav.is-dark .nav-cta:hover{background:#3d7bff}
/* every button answers a press, quickly */
.nav-cta:active,.btn:active,#finale .fin-act-main:active,.nav-burger:active{transform:translateY(1px) scale(.97);transition-duration:.12s}
/* headings break into even lines; paragraphs avoid a lone last word */
.hero-sub,.chapter-title,.finale-title{text-wrap:balance}
.sec-content p,.finale-copy,.fin-foot-brand p{text-wrap:pretty}

@media (max-width:860px){
  /* small capitals stay legible on a phone */
  .station-chip,.chapter-top-meta,.stat-label,.hud-chip,.chapter-kicker{font-size:11.5px}
  .fin-foot-head{font-size:10.5px}
  /* footer links get a thumb-sized target; the underline stays under the words */
  .fin-foot-col{gap:0}
  .fin-foot-col a{padding:9px 0 11px;background-position:0 calc(100% - 9px)}
  /* the globe's city lights sit right behind the foot on a phone: a night scrim keeps the links legible */
  .fin-foot{background:linear-gradient(180deg,rgba(6,10,17,.62),rgba(6,10,17,.9) 40%);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
  /* menu: About · Team · Blog · Contact as clear, thumb-sized pills */
  .m-menu-sub{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .m-menu-sub a{
    display:flex;align-items:center;justify-content:center;min-height:42px;padding:0 14px;border-radius:999px;
    color:#eef3ff;background:rgba(255,255,255,.05);border:1px solid rgba(139,183,255,.2);
    transition:opacity .45s var(--m-ease),background .2s,border-color .2s,transform .12s;
  }
  .m-menu-sub a:active{transform:scale(.96);background:rgba(47,109,255,.22);border-color:rgba(139,183,255,.5)}
  .m-menu.is-open .m-menu-sub a{opacity:1}
}
