/* ==========================================================================
   GOLDEN JUBILEE — 04 · The Path (homepage)
   Map → dive → first-person run → stop at 50% with the Jubilee finale.
   Scroll drives a sticky stage; motion in the-path.js. Prefixed gjp- so the
   old theme can't reach it. The lab page (path-lab/) loads this same file.
   ========================================================================== */
.gjp,.gjp-gears{
  --night:#F1EBDD; --ink:#302C29; --gilgal:#8E3A33; --wine:#B03C68; --gold:#D8A13A; --gold-lit:#9A702C; --celestial:#D7BB79;
  --serif:'Cormorant Garamond','Playfair Display',Georgia,serif; --sans:'Urbanist','Helvetica Neue',Arial,sans-serif;
}
.gjp *,.gjp *::before,.gjp *::after,.gjp-gears *,.gjp-gears *::before,.gjp-gears *::after{box-sizing:border-box}
.gjp p,.gjp h2,.gjp ol,.gjp li,.gjp-gears p,.gjp-gears h2,.gjp-gears h3,.gjp-gears ol,.gjp-gears li{margin:0;padding:0 !important}

/* ---- the section: tall, with a sticky stage the scroll drives ---- */
.gjp{position:relative;height:620vh;background:var(--night);color:var(--ink);font-family:var(--sans);
  width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}
.gjp__stage{position:sticky;top:var(--gj-header,0px);height:calc(100vh - var(--gj-header,0px));height:calc(100svh - var(--gj-header,0px));overflow:hidden}
.gjp__canvas{position:absolute;inset:0;width:100% !important;height:100% !important;display:block;opacity:calc(1 - var(--gjp-handoff,0))}
/* print grain over everything (an image of noise, not a gradient) */
.gjp__grain{position:absolute;inset:-50%;pointer-events:none;opacity:.045;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1.4 -.2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

.gjp__head{position:absolute;left:5vw;top:35px;max-width:90vw;z-index:2;transition:opacity .5s ease,transform .6s cubic-bezier(.16,1,.3,1)}
.gjp .gjp__eyebrow{display:flex;align-items:center;gap:14px;font:600 11px/1 var(--sans) !important;letter-spacing:.34em !important;text-transform:uppercase;color:var(--gold-lit) !important}
.gjp__eyebrow::after{content:"";width:48px;height:1px;background:var(--gold)}
.gjp .gjp__title{margin:.35em 0 0 !important;font:300 clamp(32px,4.4vw,68px)/1 var(--serif) !important;letter-spacing:-.005em !important;color:var(--ink) !important;text-transform:none}
.gjp .gjp__lede{margin:.8em 0 0 !important;max-width:49ch;font:italic 400 clamp(17px,1.45vw,21px)/1.35 var(--serif) !important;color:rgba(48,44,41,.8) !important}
.gjp__hint{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);display:flex;align-items:center;gap:12px;z-index:2;
  font:600 9px/1 var(--sans);letter-spacing:.32em;text-transform:uppercase;color:rgba(48,44,41,.7);transition:opacity .4s}
.gjp__hint span{width:1px;height:26px;background:var(--gold);transform-origin:top;animation:gjpHint 1.8s ease-in-out infinite}
@keyframes gjpHint{0%{transform:scaleY(0)}50%{transform:scaleY(1)}100%{transform:scaleY(0);transform-origin:bottom}}

.gjp__hud{position:absolute;right:clamp(20px,4vw,56px);top:clamp(24px,6vh,64px);z-index:2;display:grid;justify-items:end;gap:8px;opacity:0;transition:opacity .5s;
  padding:16px 20px;background:rgba(249,245,235,.87);border:1px solid #b9ac9380;filter:opacity(calc(1 - var(--gjp-handoff,0)))}
.gjp__hud-label{font:600 10px/1 var(--sans);letter-spacing:.32em;text-transform:uppercase;color:rgba(48,44,41,.66)}
.gjp__hud-num{font:300 clamp(44px,5vw,72px)/.9 var(--serif);color:var(--ink);font-variant-numeric:lining-nums tabular-nums}
.gjp__hud-num b{font-weight:300}
.gjp__hud-bar{position:relative;width:140px;height:2px;background:rgba(48,44,41,.18)}
.gjp__hud-bar i{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--gold-lit)}
.gjp__hud-bar::after{content:"";position:absolute;left:50%;top:-4px;width:1px;height:10px;background:var(--gold-lit)}

.gjp__stop{position:absolute;left:clamp(20px,6vw,96px);top:clamp(28px,9vh,110px);max-width:520px;z-index:2;text-align:left;opacity:0;transform:translateY(24px);
  padding:24px 30px;background:rgba(249,245,235,.92);border-left:2px solid var(--gold);
  transition:opacity .6s ease,transform .8s cubic-bezier(.16,1,.3,1);pointer-events:none}
.gjp__stop.is-on{opacity:calc(1 - var(--gjp-handoff,0));transform:none}
.gjp .gjp__stop-eyebrow{font:600 11px/1 var(--sans) !important;letter-spacing:.32em !important;text-transform:uppercase;color:var(--gold-lit) !important}
.gjp .gjp__stop-title{margin-top:.3em !important;font:300 clamp(40px,5vw,68px)/1 var(--serif) !important;color:var(--ink) !important}
.gjp .gjp__stop-quote{margin-top:.5em !important;font:italic 400 clamp(24px,3vw,38px)/1.1 var(--serif) !important;color:var(--gold-lit) !important}
.gjp__stop-quote span{display:block;margin-bottom:.6em;font:500 11px/1 var(--sans);font-style:normal;letter-spacing:.3em;text-transform:uppercase;color:rgba(48,44,41,.6)}

.gjp__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.gjp.is-fallback{height:auto}.is-fallback .gjp__stage{position:relative;top:0;height:auto;min-height:700px}.is-fallback .gjp__canvas{display:none}
.is-fallback .gjp__sr{position:relative;width:auto;height:auto;clip:auto;margin:250px 7% 60px;line-height:2}.is-fallback .gjp__hint{display:none}

/* Full-bleed Jubilee finale (the-path-fireworks.js). It carries on over the next
   section as the sticky scene leaves; it never takes scrolling or clicks. */
.gjp-fireworks{position:fixed;inset:0;width:100vw;height:100vh;height:100dvh;z-index:15;pointer-events:none;opacity:0}

/* ---- the four gears, in full, after the run --------------------------------- */
.gjp-gears{position:relative;width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);min-height:100vh;min-height:100svh;
  background:#FFF6E6;color:var(--ink);font-family:var(--sans);display:flex;align-items:center}
.gjp-gears__inner{width:100%;max-width:1320px;margin:0 auto;padding:clamp(72px,10vw,130px) clamp(20px,5vw,64px)}
.gjp-gears .gjp-gears__eyebrow{display:flex;align-items:center;gap:14px;font:600 11px/1 var(--sans) !important;letter-spacing:.34em !important;text-transform:uppercase;color:var(--gold-lit) !important}
.gjp-gears__eyebrow::after{content:"";width:48px;height:1px;background:var(--gold)}
.gjp-gears .gjp-gears__title{margin-top:.35em !important;font:300 clamp(34px,4.4vw,64px)/1 var(--serif) !important;color:var(--ink) !important;text-transform:none;letter-spacing:0 !important}
.gjp-gears__list{list-style:none !important;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin-top:clamp(40px,5vw,64px) !important;border-top:1px solid #d3c8b2}
.gjp-gears__list li{list-style:none !important}
.gjp-gears__list li::marker{content:none}
.gjp-gears .gjp-gear{--c:#8E3456;position:relative;padding:32px clamp(18px,2vw,32px) 8px !important;border-left:1px solid #e2d8c4}
.gjp-gears .gjp-gear:first-child{border-left:0;padding-left:0 !important}
.gjp-gear::before{content:"";position:absolute;top:-1px;left:0;width:56px;height:2px;background:var(--c)}
.gjp-gears .gjp-gear--3{--c:#A65C38} .gjp-gears .gjp-gear--4{--c:#A87B32}
.gjp-gear__top{display:flex;align-items:baseline;gap:14px}
.gjp-gear__num{font:300 44px/1 var(--serif);color:var(--c)}
.gjp-gear__gear{font:700 10.5px/1 var(--sans);letter-spacing:.3em;text-transform:uppercase;color:var(--c)}
.gjp-gears .gjp-gear__name{margin-top:18px !important;font:500 clamp(26px,2.4vw,34px)/1.05 var(--serif) !important;color:var(--ink) !important;text-transform:none;letter-spacing:0 !important}
.gjp-gears .gjp-gear__when{margin-top:10px !important;font:600 11px/1.4 var(--sans) !important;letter-spacing:.2em !important;text-transform:uppercase;color:var(--gold-lit) !important}
.gjp-gears .gjp-gear__text{margin-top:16px !important;font:400 15.5px/1.7 var(--sans) !important;color:rgba(48,44,41,.82) !important;max-width:34ch}
.gjp-gear__text em{font-family:var(--serif);font-size:1.1em;line-height:1;color:var(--ink)}

@media (max-width:1000px){
  .gjp-gears__list{grid-template-columns:repeat(2,minmax(0,1fr))}
  .gjp-gears .gjp-gear:nth-child(3){border-left:0;padding-left:0 !important}
  .gjp-gears .gjp-gear:nth-child(n+3){margin-top:28px}
}
@media (max-width:760px){
  .gjp__head{top:32px}
  .gjp .gjp__title{font-size:clamp(29px,7.2vw,48px) !important}
  .gjp .gjp__lede{max-width:32ch;font-size:17px !important}
  .gjp__stop{left:20px;right:20px;top:35px;padding:20px}
  .gjp__hud{bottom:28px;top:auto;right:20px}
  .gjp-gears__list{grid-template-columns:1fr}
  .gjp-gears .gjp-gear,.gjp-gears .gjp-gear:first-child,.gjp-gears .gjp-gear:nth-child(3){border-left:0;padding:28px 0 4px !important}
  .gjp-gear__text{max-width:none}
}
@media (prefers-reduced-motion:reduce){
  .gjp{height:auto}
  .gjp__stage{position:relative;top:0;height:100vh}
  .gjp__hint{display:none}
  .gjp-fireworks{display:none}
}

/* The theme sets overflow:hidden on <html> and <body>, which makes <body> the
   scroll container and stops position:sticky. clip hides sideways overflow the
   same way without doing that. (The loader's scroll lock still wins while it runs.) */
html:not(.is-loading):has(.gjp),
html:not(.is-loading):has(.gjp) body{overflow-x:clip !important;overflow-y:visible !important}
