[hidden]{display:none!important}
/* European Industry Week 2026 - site stylesheet v2 (editorial event site, CONTEXT.md D-03)
   Fonts: Big Shoulders Display, JetBrains Mono, Instrument Sans (SIL OFL 1.1, self-hosted) */
@font-face{font-family:"Shoulders";font-weight:300;font-display:swap;src:url(../assets/fonts/font-c3bf435559.woff2) format("woff2")}
@font-face{font-family:"Shoulders";font-weight:800;font-display:swap;src:url(../assets/fonts/font-226e6b5f34.woff2) format("woff2")}
@font-face{font-family:"Shoulders";font-weight:900;font-display:swap;src:url(../assets/fonts/font-2466926c45.woff2) format("woff2")}
@font-face{font-family:"Mono";font-weight:400;font-display:swap;src:url(../assets/fonts/font-3ae6215182.woff2) format("woff2")}
@font-face{font-family:"Mono";font-weight:700;font-display:swap;src:url(../assets/fonts/font-e67f8fefd2.woff2) format("woff2")}
@font-face{font-family:"Sans";font-weight:400;font-display:swap;src:url(../assets/fonts/font-34c0565b38.woff2) format("woff2")}
@font-face{font-family:"Sans";font-weight:600;font-display:swap;src:url(../assets/fonts/font-62108f92f6.woff2) format("woff2")}
@font-face{font-family:"Sans";font-weight:700;font-display:swap;src:url(../assets/fonts/font-2c44b4c6e5.woff2) format("woff2")}

:root{
  --g0:#0d1014;--g1:#151a20;--g2:#1e252e;--g3:#2c3540;
  --paper:#eeece6;--paper2:#e4e1d9;--white:#fff;
  --ink:#10141a;--ink2:#3a4350;--mute:#6b7380;
  --red:#d7192d;--red2:#a3101f;--amber:#ffb81c;--line:rgba(16,20,26,.12);--line-d:rgba(255,255,255,.12);
  --f1:#d7192d;--f2:#ef3b2d;--f3:#10141a;--f4:#7a1f5c;--f5:#2a8796;--f6:#1f8a4c;--f7:#4aa35f;
  --hA:#fc9674;--hB:#3884d7;--hC:#1bb5b7;--hD1:#59ba73;--hD2:#90375e;--hD3:#f2ac37;--hEp:#8664c9;--hEo:#f98a3c;
  --max:1400px;--pad:clamp(1.1rem,4.5vw,4.5rem);--nav:76px;--r:22px;--r-s:14px;
  --ease:cubic-bezier(.2,.7,.2,1);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:var(--nav)}
body{margin:0;background:var(--paper);color:var(--ink);font:17px/1.6 "Sans",Arial,sans-serif;overflow-x:hidden;-webkit-font-smoothing:antialiased}
img,video{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;cursor:pointer;background:none;border:0}
h1,h2,h3,h4{margin:0;font-family:"Shoulders",Impact,sans-serif;font-weight:900;text-transform:uppercase;line-height:.88;letter-spacing:-.005em}
p,ul,ol,figure{margin:0}
ul,ol{padding:0;list-style:none}
.wrap{max-width:var(--max);margin:0 auto;padding:0 var(--pad)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-999px;top:0;background:var(--amber);color:var(--ink);padding:.6rem 1rem;z-index:100;font-weight:700;border-radius:999px}
.skip:focus{left:1rem;top:1rem}
:focus-visible{outline:3px solid var(--amber);outline-offset:3px}
.kicker{display:inline-flex;align-items:center;gap:.6rem;font-family:"Mono",monospace;font-size:.75rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--red)}
.kicker:before{content:"";width:22px;height:2px;background:currentColor}

/* pill buttons */
.pill{display:inline-flex;align-items:center;gap:.9rem;padding:.55rem .6rem .55rem 1.4rem;border-radius:999px;font-weight:700;font-size:.98rem;line-height:1;white-space:nowrap;transition:background .25s var(--ease),color .25s,box-shadow .25s,transform .25s var(--ease)}
.pill i{display:grid;place-items:center;width:2.3rem;height:2.3rem;border-radius:50%;background:rgba(255,255,255,.18);transition:transform .3s var(--ease)}
.pill:hover i{transform:rotate(-45deg)}
.pill.sm{padding:.7rem 1.2rem;font-size:.9rem}
.pill.red{background:var(--red);color:#fff}.pill.red:hover{background:var(--red2)}
.pill.dark{background:var(--ink);color:#fff}.pill.dark:hover{background:var(--red)}
.pill.ghost{box-shadow:inset 0 0 0 1.5px var(--ink);color:var(--ink)}.pill.ghost i{background:var(--ink);color:#fff}.pill.ghost:hover{background:var(--ink);color:#fff}
.pill.glass{background:rgba(255,255,255,.12);color:#fff;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:inset 0 0 0 1px rgba(255,255,255,.35)}.pill.glass:hover{background:#fff;color:var(--ink)}.pill.glass:hover i{background:var(--ink);color:#fff}
.pill.ghost-l{box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.55);color:#fff}.pill.ghost-l:hover{background:#fff;color:var(--ink)}

/* section heads */
.shead{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.7fr);gap:1.2rem 3rem;align-items:end;margin-bottom:clamp(2rem,4vw,3.5rem)}
.shead .kicker{grid-column:1/-1}
.shead h2{font-size:clamp(3rem,7.4vw,7.2rem)}
.shead-aside p{font-size:1.08rem;color:var(--ink2);max-width:34rem}
.shead-aside b{font-family:"Shoulders",sans-serif;font-weight:900;font-size:1.6em;color:var(--red)}

/* nav */
.nav{position:fixed;inset:0 0 auto;z-index:50;height:var(--nav);transition:background .35s,transform .35s var(--ease)}
.nav-in{height:100%;max-width:var(--max);margin:0 auto;padding:0 var(--pad);display:flex;align-items:center;gap:2rem;color:#fff}
.nav.solid{background:rgba(13,16,20,.88);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.brand{display:flex;align-items:center;gap:.75rem;flex:none}
.brand-mark{width:40px;height:40px}
.brand-txt{font-family:"Shoulders",sans-serif;font-weight:900;font-size:1.25rem;text-transform:uppercase;line-height:1}
.brand-txt small{display:block;font-family:"Mono",monospace;font-weight:400;font-size:.62rem;letter-spacing:.12em;opacity:.7;margin-top:.25rem}
.menu{display:flex;gap:.3rem;margin:0 auto}
.menu a{display:block;padding:.55rem .9rem;border-radius:999px;font-weight:600;font-size:.94rem;opacity:.86;transition:background .2s,opacity .2s}
.menu a:hover,.menu a.on{opacity:1;background:rgba(255,255,255,.12)}
.menu .m-cta{display:none}
.nav-cta{display:flex;gap:.5rem}
.burger{display:none;width:46px;height:46px;border-radius:50%;background:rgba(255,255,255,.12);margin-left:auto;position:relative}
.burger i,.burger i:before,.burger i:after{position:absolute;left:13px;width:20px;height:2px;background:#fff;content:"";transition:transform .3s,background .3s}
.burger i{top:22px}.burger i:before{top:-6px;left:0}.burger i:after{top:6px;left:0}
.nav.open .burger i{background:transparent}.nav.open .burger i:before{transform:translateY(6px) rotate(45deg)}.nav.open .burger i:after{transform:translateY(-6px) rotate(-45deg)}

/* hero */
.hero{position:relative;min-height:100vh;min-height:100svh;display:flex;align-items:flex-end;color:#fff;overflow:hidden;background:var(--g0)}
.hero video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero-shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(13,16,20,.55) 0,rgba(13,16,20,.05) 30%,rgba(13,16,20,.2) 55%,rgba(13,16,20,.92) 100%)}
.hero-in{position:relative;z-index:2;width:100%;max-width:var(--max);margin:0 auto;padding:calc(var(--nav) + 4rem) var(--pad) 2.2rem}
.hero-date{display:inline-flex;align-items:center;gap:.7rem;padding:.55rem 1.1rem;border-radius:999px;background:rgba(255,255,255,.12);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-weight:600;font-size:.95rem;margin-bottom:1.4rem}
.hero-date b{opacity:.5}
.hero-date span:not(.dot){white-space:nowrap}
.dot{width:8px;height:8px;border-radius:50%;background:var(--amber);box-shadow:0 0 0 0 rgba(255,184,28,.7);animation:pulse 2s infinite}
@keyframes pulse{70%{box-shadow:0 0 0 10px rgba(255,184,28,0)}100%{box-shadow:0 0 0 0 rgba(255,184,28,0)}}
.hero h1{font-size:clamp(4rem,13.5vw,14rem);line-height:.8;letter-spacing:-.01em}
.hero h1 span{display:block}
.hero h1 em{font-style:normal;color:var(--red)}
.hero-row{display:flex;justify-content:space-between;align-items:flex-end;gap:2rem;flex-wrap:wrap;margin-top:1.8rem;padding-bottom:1.8rem;border-bottom:1px solid rgba(255,255,255,.25)}
.hero-lead{font-size:clamp(1.1rem,1.6vw,1.4rem);max-width:30rem;font-weight:600}
.hero-cta{display:flex;gap:.7rem;flex-wrap:wrap}
.count{display:flex;align-items:baseline;gap:clamp(1rem,3vw,2.6rem);padding-top:1.2rem;flex-wrap:wrap}
.count-l{font-family:"Mono",monospace;font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--amber);margin-right:auto}
.count-v{display:flex;align-items:baseline;gap:.4rem}
.count-v b{font-family:"Shoulders",sans-serif;font-weight:900;font-size:clamp(2rem,3.4vw,3rem);line-height:1;font-variant-numeric:tabular-nums}
.count-v small{font-size:.8rem;opacity:.7}
.count p:not(.sr){width:100%;font-weight:600}
.scroll-cue{position:absolute;right:var(--pad);top:calc(var(--nav) + 2rem);z-index:2;width:28px;height:46px;border-radius:999px;box-shadow:inset 0 0 0 2px rgba(255,255,255,.6)}
.scroll-cue span{position:absolute;left:50%;top:9px;width:4px;height:9px;margin-left:-2px;border-radius:2px;background:#fff;animation:cue 1.8s infinite}
@keyframes cue{0%{opacity:0;transform:translateY(0)}40%{opacity:1}100%{opacity:0;transform:translateY(14px)}}

/* fair logo bar */
.fairbar{background:#fff;border-bottom:1px solid var(--line)}
.fairbar ul{max-width:var(--max);margin:0 auto;padding:1.4rem var(--pad);display:flex;justify-content:space-between;align-items:center;gap:1.6rem;flex-wrap:wrap}
.fairbar a{display:block;transition:transform .3s var(--ease),opacity .3s}
.fairbar img{height:46px;width:auto;max-width:150px;object-fit:contain}
.fairbar ul:hover a{opacity:.45}.fairbar ul a:hover{opacity:1;transform:translateY(-3px)}

/* about */
.about{padding:clamp(5rem,10vw,9rem) 0}
.about-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:clamp(2.5rem,6vw,6rem);align-items:center}
.manifesto{font-size:clamp(3rem,6.4vw,6.6rem);line-height:.9;margin:1.2rem 0 2rem}
.manifesto em{font-style:normal;color:var(--red)}
.about-lead{max-width:38rem;color:var(--ink2);font-size:1.1rem}
.about-cta{display:flex;gap:.7rem;flex-wrap:wrap;margin-top:2rem}
.about-photo{position:relative;border-radius:var(--r);overflow:hidden;aspect-ratio:4/5}
.about-photo img{width:100%;height:100%;object-fit:cover;object-position:28% 50%}
.about-photo figcaption{position:absolute;left:1rem;right:1rem;bottom:1rem;display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.9rem 1.2rem;border-radius:var(--r-s);background:rgba(13,16,20,.72);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:#fff}
.about-photo figcaption b{font-family:"Shoulders",sans-serif;font-weight:900;font-size:1.6rem;text-transform:uppercase;line-height:1;color:var(--amber)}
.about-photo figcaption span{font-size:.9rem;font-weight:600;text-align:right}

/* figures */
.figures{background:var(--ink);color:#fff}
.figures .wrap{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
.fig{padding:clamp(2rem,4vw,3.4rem) 1.4rem;border-left:1px solid var(--line-d)}
.fig:first-child{border-left:0;padding-left:0}
.fig b{display:block;font-family:"Shoulders",sans-serif;font-weight:900;font-size:clamp(3rem,6vw,5.6rem);line-height:.9;font-variant-numeric:tabular-nums}
.fig:nth-child(2) b{color:var(--amber)}
.fig span{display:block;margin-top:.7rem;color:#b9c0ca;font-size:.98rem}

/* fairs rail */
.fairs{padding:clamp(5rem,9vw,8rem) 0;overflow:hidden}
.fairs-head{display:flex;justify-content:space-between;align-items:flex-end;gap:2rem}
.fairs-head .shead{grid-template-columns:1fr;margin-bottom:2.4rem}
.rail-nav{display:flex;gap:.6rem;margin-bottom:2.6rem}
.rail-btn{width:58px;height:58px;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--ink);display:grid;place-items:center;transition:background .2s,color .2s}
.rail-btn:hover{background:var(--ink);color:#fff}
.rail-btn[data-rail=prev] svg{transform:rotate(180deg)}
.rail{display:flex;gap:1.2rem;overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding-left:max(var(--pad),calc((100vw - var(--max))/2 + var(--pad)));padding:0 max(var(--pad),calc((100vw - var(--max))/2 + var(--pad))) 1.2rem;scrollbar-width:none}
.rail::-webkit-scrollbar{display:none}
.fcard{flex:0 0 clamp(290px,30vw,400px);scroll-snap-align:start;display:flex;flex-direction:column;min-height:540px;padding:1.6rem;border-radius:var(--r);background:var(--fc);color:#fff;position:relative;overflow:hidden;transition:transform .4s var(--ease)}
.fcard:before{content:"";position:absolute;right:-30%;top:-20%;width:90%;aspect-ratio:1;border-radius:50%;background:rgba(255,255,255,.08)}
.fcard:hover{transform:translateY(-6px)}
.fcard-top{display:flex;justify-content:space-between;align-items:center;font-family:"Mono",monospace;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;position:relative}
.fcard-halls{display:flex;gap:.3rem}
.hall{display:inline-grid;place-items:center;min-width:1.9rem;height:1.9rem;padding:0 .35rem;border-radius:8px;background:var(--hc);color:#fff;font-family:"Shoulders",sans-serif;font-weight:900;font-size:1.1rem;letter-spacing:0;text-shadow:0 1px 2px rgba(0,0,0,.35)}
.fcard-logo{margin:2rem 0 1.6rem;background:#fff;border-radius:var(--r-s);height:110px;display:grid;place-items:center;padding:1rem;position:relative}
.fcard-logo img{max-height:70px;max-width:85%;width:auto;object-fit:contain}
.fcard h3{font-size:2.2rem;line-height:.92}
.fcard-full{margin-top:.6rem;font-size:.92rem;opacity:.85}
.fcard-scope{margin-top:auto;padding-top:1.4rem;display:flex;flex-wrap:wrap;gap:.35rem}
.fcard-scope li{font-size:.78rem;font-weight:600;padding:.3rem .65rem;border-radius:999px;background:rgba(255,255,255,.16)}
.fcard-links{display:flex;justify-content:space-between;align-items:center;margin-top:1.2rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,.3);font-weight:700;font-size:.92rem}
.fcard-links a{display:inline-flex;align-items:center;gap:.4rem}
.fcard-links a:hover{text-decoration:underline;text-underline-offset:4px}

/* venue */
.venue{background:#fff;padding:clamp(5rem,9vw,8rem) 0}
.venue-grid{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:clamp(2rem,5vw,5rem);align-items:start}
.venue-text{position:sticky;top:calc(var(--nav) + 2rem)}
.venue-text .shead{grid-template-columns:1fr;margin-bottom:1.6rem}
.venue-text>p{color:var(--ink2);font-size:1.05rem}
.legend{margin-top:1.8rem;border-top:1px solid var(--line)}
.legend li{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.8rem 0;border-bottom:1px solid var(--line)}
.legend a{font-weight:700}.legend a:hover{color:var(--red)}
.legend span{display:flex;gap:.3rem}
.addr{margin-top:1.2rem;font-family:"Mono",monospace;font-size:.8rem;color:var(--mute)}
.venue-map{border-radius:var(--r);overflow:hidden;background:var(--paper);padding:clamp(.8rem,2vw,1.6rem)}
.venue-map img{width:100%;height:auto;border-radius:var(--r-s)}

/* audience */
.audience{padding:clamp(5rem,9vw,8rem) 0}
.aud-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(2rem,5vw,5rem);align-items:center}
.aud-photo{border-radius:var(--r);overflow:hidden;aspect-ratio:4/5}
.aud-photo img{width:100%;height:100%;object-fit:cover}
.aud-text .shead{grid-template-columns:1fr;margin-bottom:1.6rem}
.claims li{display:grid;grid-template-columns:minmax(0,10rem) minmax(0,1fr);gap:1.4rem;align-items:baseline;padding:1.3rem 0;border-top:1px solid var(--line)}
.claims b{font-family:"Shoulders",sans-serif;font-weight:900;font-size:clamp(2.6rem,4vw,3.8rem);line-height:.9;color:var(--red)}
.claims span{font-size:1.08rem;color:var(--ink2)}

/* programme */
.programme{background:var(--g0);color:#fff;padding:clamp(5rem,9vw,8rem) 0;border-radius:var(--r) var(--r) 0 0}
.programme .kicker{color:var(--amber)}
.programme .shead-aside p{color:#b9c0ca}
.congress{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:3rem}
.congress li{display:inline-flex;align-items:center;gap:.55rem;padding:.55rem 1rem;border-radius:999px;background:var(--g2);font-weight:600;font-size:.9rem}
.congress li:before{content:"";width:9px;height:9px;border-radius:50%;background:var(--fc);box-shadow:0 0 0 2px rgba(255,255,255,.25)}
.prog-grid{display:grid;grid-template-columns:210px minmax(0,1fr);gap:2.4rem;align-items:start}
.days{display:flex;flex-direction:column;gap:.6rem;position:sticky;top:calc(var(--nav) + 1.5rem)}
.days button{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:.9rem;text-align:left;padding:1rem 1.2rem;border-radius:var(--r-s);background:var(--g1);box-shadow:inset 0 0 0 1px var(--line-d);transition:background .2s}
.days button small{grid-row:1/3;font-family:"Mono",monospace;font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;opacity:.7;align-self:center;writing-mode:vertical-rl;transform:rotate(180deg)}
.days button b{font-family:"Shoulders",sans-serif;font-weight:900;font-size:3rem;line-height:.9}
.days button span{font-size:.85rem;opacity:.7}
.days button[aria-selected=true]{background:var(--red);box-shadow:none}
.day{display:none}.day.on{display:block}
.slot{display:grid;grid-template-columns:6.5rem minmax(0,1fr) auto;gap:1.4rem;align-items:center;padding:1.5rem 0;border-bottom:1px solid var(--line-d)}
.slot:first-child{border-top:1px solid var(--line-d)}
.slot time{font-family:"Shoulders",sans-serif;font-weight:900;font-size:2rem;color:var(--amber);line-height:1}
.slot b{display:block;font-size:1.2rem;line-height:1.3}
.slot span{color:#b9c0ca;font-size:.95rem}
.slot .where{font-family:"Mono",monospace;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;padding:.45rem .8rem;border-radius:999px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.3);color:#fff;white-space:nowrap}

/* exhibitor directory */
.exhib{background:var(--g0);color:#fff;padding:0 0 clamp(5rem,9vw,8rem)}
.exhib .wrap{border-top:1px solid var(--line-d);padding-top:clamp(4rem,7vw,6rem)}
.exhib .kicker{color:var(--amber)}
.exhib .shead-aside p{color:#b9c0ca}
.exhib .shead-aside b{color:var(--amber)}
.search{display:flex;align-items:center;gap:1rem;padding:0 1.6rem;height:76px;border-radius:999px;background:var(--g2);box-shadow:inset 0 0 0 1px var(--line-d);transition:box-shadow .2s}
.search:focus-within{box-shadow:inset 0 0 0 2px var(--amber)}
.search input{flex:1;min-width:0;background:none;border:0;color:#fff;font:600 1.25rem "Sans",sans-serif;outline:none}
.search input::placeholder{color:#7f8895}
.filters{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;margin:1.2rem 0 2rem}
.filters>span{font-family:"Mono",monospace;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:#8a93a0;margin-right:.4rem}
.filters button{display:inline-flex;align-items:center;gap:.45rem;padding:.55rem 1rem;border-radius:999px;background:var(--g1);box-shadow:inset 0 0 0 1px var(--line-d);font-weight:700;font-size:.9rem;color:#fff}
.filters button i{width:10px;height:10px;border-radius:50%}
.filters button[aria-pressed=true]{background:#fff;color:var(--ink)}
.cat{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));column-gap:2rem}
.ex{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:1rem;padding:1rem 0;border-bottom:1px solid var(--line-d)}
.ex b{font-weight:700;line-height:1.3}
.ex .st{grid-row:1/3;grid-column:2;font-family:"Mono",monospace;font-size:.75rem;color:var(--amber);align-self:start;padding-top:.15rem}
.ex small{color:#8a93a0;font-size:.82rem}
.empty{grid-column:1/-1;padding:2rem 0;color:#b9c0ca}
.empty .btn,.empty button{margin-left:.8rem;padding:.5rem 1rem;border-radius:999px;background:#fff;color:var(--ink);font-weight:700}
.more{display:flex;justify-content:center;margin-top:2.4rem}

/* brands */
.brands{padding:clamp(3rem,6vw,5rem) 0;background:var(--paper)}
.brands .kicker{margin-bottom:1.8rem}
.marq{overflow:hidden;mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent)}
.marq .row{display:flex;align-items:center;gap:clamp(2.5rem,5vw,4.5rem);width:max-content;animation:run 70s linear infinite}
.marq:hover .row{animation-play-state:paused}
.marq img{height:44px;width:auto;max-width:150px;object-fit:contain;filter:grayscale(1) contrast(1.1);opacity:.65;mix-blend-mode:multiply;transition:filter .3s,opacity .3s}
.marq li:hover img{filter:none;opacity:1}
@keyframes run{to{transform:translateX(-50%)}}

/* world */
.world{background:var(--red);color:#fff;padding:clamp(5rem,9vw,8rem) 0}
.world .kicker{color:#fff}
.world .shead-aside p{color:rgba(255,255,255,.88)}
.world .shead-aside b{color:var(--amber)}
.regions{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:clamp(2rem,4vw,4rem)}
.regions h3{font-size:2rem;margin-bottom:1.2rem;padding-bottom:.8rem;border-bottom:1px solid rgba(255,255,255,.35)}
.flags{display:flex;flex-wrap:wrap;gap:.5rem}
.flags li{display:inline-flex;align-items:center;gap:.6rem;padding:.45rem 1rem .45rem .45rem;border-radius:999px;background:#fff;color:var(--ink);font-weight:700;font-size:.92rem}
.flags svg{width:34px;height:23px;border-radius:999px;flex:none;box-shadow:0 0 0 1px rgba(0,0,0,.1)}

/* gallery collage */
.gallery{padding:clamp(5rem,9vw,8rem) 0}
.collage{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:clamp(150px,17vw,250px);gap:.9rem;grid-auto-flow:dense}
.collage figure{border-radius:var(--r-s);overflow:hidden;background:var(--paper2)}
.collage figure.wide{grid-column:span 2}
.collage figure.tall{grid-row:span 2}
.collage img{width:100%;height:100%;object-fit:cover;transition:transform .8s var(--ease)}
.collage figure:hover img{transform:scale(1.05)}

/* partners */
.partners{background:#fff;padding:clamp(5rem,9vw,8rem) 0}
.ptabs{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.6rem}
.ptabs button{padding:.7rem 1.2rem;border-radius:999px;box-shadow:inset 0 0 0 1.5px var(--line);font-weight:700;font-size:.95rem;transition:background .2s,color .2s}
.ptabs button span{display:inline-block;margin-left:.3rem;font-family:"Mono",monospace;font-size:.75rem;opacity:.6}
.ptabs button[aria-selected=true]{background:var(--ink);color:#fff;box-shadow:none}
.pg{display:none;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.6rem}
.pg.on{display:grid}
.pg li{aspect-ratio:3/2;display:grid;place-items:center;padding:.5rem;border-radius:var(--r-s);background:#fff;box-shadow:inset 0 0 0 1px var(--line);transition:box-shadow .25s,transform .25s var(--ease)}
.pg li:hover{box-shadow:inset 0 0 0 1px var(--ink);transform:translateY(-3px)}
.pg img{width:100%;height:100%;object-fit:contain}

/* finale */
.finale{position:relative;color:#fff;overflow:hidden;background:var(--g0)}
.finale>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.finale-shade{position:absolute;inset:0;background:linear-gradient(90deg,rgba(13,16,20,.94) 0,rgba(13,16,20,.7) 55%,rgba(215,25,45,.55) 100%)}
.finale-in{position:relative;padding-top:clamp(6rem,12vw,11rem);padding-bottom:clamp(5rem,10vw,9rem)}
.finale .kicker{color:var(--amber)}
.finale h2{font-size:clamp(4rem,12vw,12rem);line-height:.82;margin:1.4rem 0 2.4rem}
.finale h2 em{font-style:normal;color:var(--red);-webkit-text-stroke:0}
.finale-cta{display:flex;gap:.7rem;flex-wrap:wrap}
.finale-contact{margin-top:2.2rem;color:#c9d0da;overflow-wrap:anywhere}
.finale-contact a{color:#fff;font-weight:700;border-bottom:1px solid rgba(255,255,255,.4)}

/* footer */
.foot{background:var(--g0);color:#c9d0da;padding-top:clamp(4rem,7vw,6rem)}
.foot-grid{display:grid;grid-template-columns:minmax(0,1.3fr) repeat(3,minmax(0,1fr));gap:2.4rem}
.forg img{height:58px;width:auto;margin-bottom:1rem}
.forg p{font-size:.92rem}
.foot h4{font-family:"Mono",monospace;font-weight:700;font-size:.72rem;letter-spacing:.16em;color:var(--amber);margin-bottom:1rem}
.foot li{margin-bottom:.45rem;font-size:.93rem;overflow-wrap:anywhere}
.foot a:hover{color:#fff}
.foot-word{font-family:"Shoulders",sans-serif;font-weight:900;text-transform:uppercase;font-size:clamp(2rem,8.8vw,9.1rem);line-height:.8;color:var(--g2);margin-top:clamp(3rem,6vw,5rem);white-space:nowrap;overflow:hidden}
.fbot{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding:1.4rem 0 2rem;border-top:1px solid var(--line-d);font-size:.85rem}
.totop{display:inline-flex;align-items:center;gap:.6rem;padding:.7rem 1.2rem;border-radius:999px;background:var(--red);color:#fff;font-weight:700}
.totop:hover{background:var(--amber);color:var(--ink)}
.totop span{transition:transform .2s}.totop:hover span{transform:translateY(-3px)}

/* reveal */
.rv{opacity:0;transform:translateY(26px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.rv.in{opacity:1;transform:none}
.no-js .rv{opacity:1;transform:none}
.no-js .day,.no-js .pg{display:block;margin-bottom:1.4rem}
.no-js .pg{display:grid}
.no-js .filters,.no-js .search,.no-js .rail-nav{display:none}

@media (prefers-reduced-motion:reduce){
  *,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
  .rv{opacity:1;transform:none}
  .marq .row{width:auto;flex-wrap:wrap;justify-content:center;animation:none}
  .marq [aria-hidden=true]{display:none}
}

@media (max-width:1180px){
  .menu{display:none}
  .burger{display:block}
  .nav-cta{margin-left:auto}
  .nav.open{background:var(--g0)}
  .nav.open .menu{display:flex;flex-direction:column;position:absolute;top:var(--nav);left:0;right:0;margin:0;background:var(--g0);padding:1rem var(--pad) 1.6rem;max-height:calc(100dvh - var(--nav));overflow-y:auto;box-sizing:border-box}
  .nav.open .menu a{font-size:1.4rem;font-family:"Shoulders",sans-serif;font-weight:900;text-transform:uppercase;padding:.6rem 0;background:none}
  .nav.open .menu .m-cta{display:flex;gap:.6rem;margin-top:1rem}
  .nav.open .menu .m-cta a{font-family:"Sans",sans-serif;font-size:1rem;text-transform:none;padding:.9rem 1.4rem}
  .cat{grid-template-columns:repeat(2,minmax(0,1fr))}
  .foot-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:900px){
  .shead{grid-template-columns:minmax(0,1fr)}
  .venue-grid,.aud-grid,.regions{grid-template-columns:minmax(0,1fr)}
  .venue-text,.days{position:static}
  .aud-photo{aspect-ratio:16/10}
  .prog-grid{grid-template-columns:minmax(0,1fr)}
  .days{flex-direction:row;overflow-x:auto}
  .days button{flex:1 1 0;min-width:0;padding:.8rem}
  .days button b{font-size:2.4rem}
  .figures .wrap{grid-template-columns:repeat(2,minmax(0,1fr))}
  .fig:nth-child(3){border-left:0;padding-left:0}
  .fig:nth-child(n+3){border-top:1px solid var(--line-d)}
  .about-grid{grid-template-columns:minmax(0,1fr)}
  .about-photo{aspect-ratio:16/11}
  .collage{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:640px){
  :root{--nav:66px}
  .nav-cta{display:none}
  .brand-txt{font-size:1.05rem}
  .hero-row{flex-direction:column;align-items:flex-start}
  .hero-date{font-size:.8rem;flex-wrap:wrap;gap:.4rem .6rem;padding:.5rem .9rem}
  .hero-date b{display:none}
  .hero-cta .pill{flex:1 1 auto}
  .count-l{width:100%}
  .scroll-cue{display:none}
  .fairbar ul{justify-content:center;gap:1rem 1.4rem}
  .fairbar img{height:36px;max-width:120px}
  .fairs-head{flex-direction:column;align-items:flex-start;gap:0}
  .rail-nav{display:none}
  .fcard{min-height:500px}
  .claims li{grid-template-columns:minmax(0,1fr);gap:.3rem}
  .slot{grid-template-columns:minmax(0,1fr);gap:.5rem}
  .slot .where{justify-self:start}
  .cat{grid-template-columns:minmax(0,1fr)}
  .search{height:62px;padding:0 1.2rem}
  .search input{font-size:1.05rem}
  .foot-grid{grid-template-columns:minmax(0,1fr)}
  .collage{grid-auto-rows:150px}
}

/* ===== v3 additions: data viz, integrations, motion ===== */
.progress{position:fixed;left:0;right:0;top:0;height:3px;z-index:60;background:linear-gradient(90deg,var(--red),var(--amber));transform-origin:0 50%;transform:scaleX(0);pointer-events:none}
/* hero: intro of date/row/countdown (title letters are animated separately, see FX) */
.js-ready .hero-date,.js-ready .hero-row,.js-ready .count{animation:fadeup 1s var(--ease) both;animation-delay:var(--intro,.9s)}
@keyframes rise{from{clip-path:inset(0 0 100% 0);transform:translateY(40%)}to{clip-path:inset(0 0 0 0);transform:none}}
@keyframes fadeup{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
/* countdown digit flip */
.count-v b.flip{animation:flip .45s var(--ease)}
@keyframes flip{0%{transform:translateY(-35%);opacity:.2}100%{transform:none;opacity:1}}
/* section headline wipe */
.shead.rv h2,.rv .shead h2{clip-path:inset(0 100% 0 0);transition:clip-path 1.1s var(--ease) .1s}
.shead.rv.in h2,.rv.in .shead h2{clip-path:inset(0 0 0 0)}
.no-js .shead h2{clip-path:none}
/* fair cards: 3D tilt + glare */
.rail{perspective:1200px}
.fcard{transform-style:preserve-3d;will-change:transform}
.fcard .glare{position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:radial-gradient(420px circle at var(--gx,50%) var(--gy,0%),rgba(255,255,255,.22),transparent 45%);opacity:0;transition:opacity .3s}
.fcard:hover .glare{opacity:1}
/* flags pop */
.flags li{transition:transform .5s var(--ease),opacity .5s}
.rv:not(.in) .flags li{opacity:0;transform:scale(.6)}

/* ---- data section ---- */
.data{background:var(--g0);color:#fff;padding:clamp(5rem,9vw,8rem) 0;position:relative;overflow:hidden}
.data:before{content:"";position:absolute;inset:0;background:radial-gradient(60rem 30rem at 85% 0%,rgba(215,25,45,.25),transparent 60%),radial-gradient(40rem 25rem at 0% 100%,rgba(255,184,28,.10),transparent 60%);pointer-events:none}
.data .wrap{position:relative}
.data .kicker{color:var(--amber)}
.data .shead-aside p{color:#b9c0ca}
.data .shead-aside b{color:var(--amber)}
.dgrid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:clamp(1rem,2vw,1.6rem)}
.dcard{background:var(--g1);border-radius:var(--r);padding:clamp(1.4rem,2.6vw,2.2rem);box-shadow:inset 0 0 0 1px var(--line-d)}
.dcard h3{font-size:clamp(1.7rem,2.6vw,2.4rem);margin-bottom:.4rem}
.dcard .note{color:#8a93a0;font-size:.85rem;margin-bottom:1.4rem}
.dcard.wide{grid-column:1/-1}
/* bars per hall */
.bars{display:grid;gap:.7rem}
.bar{display:grid;grid-template-columns:3rem minmax(0,1fr) 4.2rem;align-items:center;gap:.9rem;width:100%;text-align:left;padding:.35rem .4rem;border-radius:12px;transition:background .2s}
.bar:hover,.bar:focus-visible{background:rgba(255,255,255,.06)}
.bar .hall{width:2.6rem;height:2.6rem;font-size:1.5rem;border-radius:10px}
.bar .track{height:22px;border-radius:999px;background:rgba(255,255,255,.07);overflow:hidden}
.bar .fill{display:block;height:100%;width:0;border-radius:inherit;background:var(--hc);transition:width 1.4s var(--ease)}
.bar b{font-family:"Shoulders",sans-serif;font-weight:900;font-size:1.7rem;text-align:right;font-variant-numeric:tabular-nums}
.bar small{grid-column:2/4;margin-top:-.35rem;color:#8a93a0;font-size:.78rem}
/* donut per fair */
.donut-wrap{display:grid;grid-template-columns:minmax(0,200px) minmax(0,1fr);gap:1.4rem;align-items:center}
.donut{width:100%;height:auto;transform:rotate(-90deg)}
.donut circle{fill:none;stroke-width:22;transition:stroke-dasharray 1.4s var(--ease),opacity .2s}
.donut-c{position:relative}
.donut-c output{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:.35rem;padding:0 22%;text-align:center;font-family:"Shoulders",sans-serif;font-weight:900;font-size:2.4rem;line-height:.9}
.donut-c output small{display:block;font-family:"Mono",monospace;font-weight:400;font-size:.6rem;line-height:1.3;letter-spacing:.12em;color:#8a93a0}
.dleg{display:grid;gap:.35rem}
.dleg button{display:grid;grid-template-columns:12px minmax(0,1fr) auto;gap:.6rem;align-items:center;text-align:left;padding:.35rem .5rem;border-radius:10px;font-size:.9rem;font-weight:600}
.dleg button:hover,.dleg button:focus-visible{background:rgba(255,255,255,.07)}
.dleg i{width:12px;height:12px;border-radius:50%}
.dleg span{color:#b9c0ca;font-family:"Mono",monospace;font-size:.78rem}
/* rings */
.rings{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.2rem}
.ring{display:grid;grid-template-columns:110px minmax(0,1fr);gap:1rem;align-items:center}
.ring svg{width:110px;height:110px;transform:rotate(-90deg)}
.ring circle{fill:none;stroke-width:10}
.ring .bg{stroke:rgba(255,255,255,.08)}
.ring .fg{stroke:var(--amber);stroke-linecap:round;stroke-dasharray:0 302;transition:stroke-dasharray 1.6s var(--ease)}
.ring b{display:block;font-family:"Shoulders",sans-serif;font-weight:900;font-size:2.6rem;line-height:.9;color:var(--amber)}
.ring span{color:#b9c0ca;font-size:.92rem}
/* top cities */
.cities{display:flex;flex-wrap:wrap;gap:.5rem}
.cities li{display:inline-flex;align-items:baseline;gap:.5rem;padding:.5rem .9rem;border-radius:999px;background:var(--g2);font-weight:700;font-size:.92rem;opacity:0;transform:translateY(10px);transition:opacity .5s var(--ease),transform .5s var(--ease)}
.cities.on li{opacity:1;transform:none}
.cities li span{font-family:"Mono",monospace;font-size:.75rem;color:var(--amber)}

/* ---- plan your visit (integrations) ---- */
.venue-right{display:grid;gap:1rem}
.visit{padding:1.6rem;border-radius:var(--r);background:var(--paper);text-align:center}
.visit h3{font-size:1.6rem;margin-bottom:1rem}
.visit-row{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center}
.visit-row a,.visit-row button{display:inline-flex;align-items:center;gap:.55rem;padding:.7rem 1.1rem;border-radius:999px;background:#fff;box-shadow:inset 0 0 0 1px var(--line);font-weight:700;font-size:.9rem;transition:background .2s,color .2s,transform .25s var(--ease)}
.visit-row a:hover,.visit-row button:hover{background:var(--ink);color:#fff;transform:translateY(-2px)}
.visit-row svg{width:18px;height:18px}
.hallpick{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:1.2rem;align-items:center;justify-content:center}
.hallpick>span{font-family:"Mono",monospace;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);margin-right:.3rem}
.hallpick button{transition:transform .25s var(--ease)}
.hallpick button:hover{transform:translateY(-3px) scale(1.06)}
.toast{position:fixed;left:50%;bottom:1.5rem;z-index:90;transform:translate(-50%,calc(100% + 2rem));opacity:0;visibility:hidden;padding:.8rem 1.3rem;border-radius:999px;background:var(--ink);color:#fff;font-weight:700;box-shadow:0 10px 30px rgba(0,0,0,.3);transition:transform .4s var(--ease),opacity .3s,visibility 0s .4s}
.toast.on{transform:translate(-50%,0);opacity:1;visibility:visible;transition:transform .4s var(--ease),opacity .3s}
/* share in finale */
.share{margin-top:1.2rem;display:inline-flex;align-items:center;gap:.5rem;font-weight:700;color:#fff;border-bottom:1px solid rgba(255,255,255,.4)}
/* gallery lightbox */
.collage figure{cursor:zoom-in}
.lb{position:fixed;inset:0;z-index:95;display:grid;place-items:center;background:rgba(13,16,20,.94);opacity:0;pointer-events:none;transition:opacity .3s}
.lb.on{opacity:1;pointer-events:auto}
.lb img{max-width:92vw;max-height:80vh;border-radius:var(--r-s);transform:scale(.96);transition:transform .4s var(--ease)}
.lb.on img{transform:none}
.lb>div{display:flex;flex-direction:column;align-items:center}
.lb p{color:#c9d0da;margin-top:1rem;text-align:center;max-width:60ch;padding:0 1rem}
.lb button{position:absolute;width:52px;height:52px;border-radius:50%;background:rgba(255,255,255,.12);color:#fff;font-size:1.5rem;display:grid;place-items:center}
.lb button:hover{background:#fff;color:var(--ink)}
.lb .x{top:1.2rem;right:1.2rem}.lb .pv{left:1.2rem;top:50%}.lb .nx{right:1.2rem;top:50%}
@media (max-width:900px){.dgrid,.donut-wrap{grid-template-columns:minmax(0,1fr)}.donut-c{max-width:230px;width:100%;margin:0 auto}.rings{grid-template-columns:minmax(0,1fr)}}
@media (prefers-reduced-motion:reduce){.shead.rv h2,.rv .shead h2{clip-path:none}.cities li{opacity:1;transform:none}}

/* ---- fair cards: richer backgrounds ---- */
.fcard{background:
  radial-gradient(120% 70% at 100% 0%,rgba(255,255,255,.20),transparent 55%),
  linear-gradient(180deg,transparent 40%,rgba(0,0,0,.28)),
  var(--fc);isolation:isolate}
.fcard:before{inset:0;right:0;top:0;width:auto;aspect-ratio:auto;border-radius:0;
  background:linear-gradient(rgba(255,255,255,.07) 1px,transparent 1px) 0 0/26px 26px,linear-gradient(90deg,rgba(255,255,255,.07) 1px,transparent 1px) 0 0/26px 26px;
  -webkit-mask-image:linear-gradient(180deg,transparent 18%,#000 60%);mask-image:linear-gradient(180deg,transparent 18%,#000 60%)}
.fcard>*:not(.fart):not(.glare):not(.fbg):not(.ftint){position:relative;z-index:1}
.fart{position:absolute;right:-5%;bottom:15%;width:80%;height:auto;z-index:0;pointer-events:none;fill:#fff;opacity:.17;transition:transform .8s var(--ease),opacity .4s}
.fart .stroke{fill:none;stroke:#fff;stroke-width:7;stroke-linecap:round;stroke-linejoin:round}
.fcard:hover .fart{opacity:.26;transform:translate(-4%,-3%) scale(1.04)}
.fart .spin{animation:spin 26s linear infinite}
.fart .spin.slow{animation-duration:60s}
.fart .spin.rev{animation-duration:18s;animation-direction:reverse}
.fcard:hover .fart .spin{animation-duration:6s}
.fcard:hover .fart .spin.slow{animation-duration:14s}
@keyframes spin{to{transform:rotate(360deg)}}
.fcard-logo{box-shadow:0 14px 30px -12px rgba(0,0,0,.45)}
.fcard-scope li{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
@media (prefers-reduced-motion:reduce){.fart .spin{animation:none}}

/* ---- fair cards: real photos tinted with the card colour (replaces the vector art) ---- */


.fcard{background:var(--fc)}
.fbg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;filter:contrast(1.1);transition:transform 1.2s var(--ease)}
.fcard:hover .fbg{transform:scale(1.05)}
.ftint{position:absolute;inset:0;z-index:0;pointer-events:none;background:
  linear-gradient(180deg,color-mix(in srgb,var(--fc) 72%,transparent) 0%,color-mix(in srgb,var(--fc) 38%,transparent) 40%,color-mix(in srgb,var(--fc) 52%,transparent) 62%,color-mix(in srgb,var(--fc) 90%,transparent) 88%)}

/* (3) photo revealed on hover / keyboard focus; vector art fades out */
.fcard .fbg,.fcard .ftint{opacity:0;transition:opacity .7s var(--ease),transform 1.2s var(--ease)}
.fcard:hover .fbg,.fcard:hover .ftint,.fcard:focus-within .fbg,.fcard:focus-within .ftint{opacity:1}
.fcard:hover .fart,.fcard:focus-within .fart{opacity:0}
.fcard:hover:before{opacity:0}
.fcard:before{transition:opacity .5s}

/* (2) mini hall map on fair cards */
.fcard-map{display:flex;flex-direction:column;align-items:stretch;gap:.35rem;margin-top:1.1rem;padding:.65rem .9rem .5rem;border-radius:var(--r-s);background:rgba(0,0,0,.18);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.fcard-map span{font-family:"Mono",monospace;font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;white-space:nowrap}
.fcard-map svg{width:100%;height:84px}
.fcard-map polygon{stroke:rgba(255,255,255,.35);stroke-width:4;transition:transform .4s var(--ease)}
.fcard-map polygon.on{stroke:#fff;stroke-width:6}
.fcard-map text{font:900 60px "Shoulders",sans-serif;fill:rgba(255,255,255,.45);text-anchor:middle}
.fcard-map text.on{fill:#fff;paint-order:stroke;stroke:rgba(0,0,0,.35);stroke-width:6}
/* (4) sector chips */
.sectors{display:flex;flex-wrap:wrap;gap:.45rem;margin:-1rem 0 1.6rem}
.sectors button{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem 1.05rem;border-radius:999px;box-shadow:inset 0 0 0 1.5px var(--line);font-weight:700;font-size:.9rem;transition:background .2s,color .2s}
.sectors button span{font-family:"Mono",monospace;font-size:.72rem;opacity:.6}
.sectors button[aria-pressed=true]{background:var(--ink);color:#fff;box-shadow:none}
.fcard.out{display:none}
.fcard.pop{animation:popin .6s var(--ease) both}
@keyframes popin{from{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:none}}
/* (5) rail progress + counter + drag */
.rail-meta{display:flex;align-items:center;gap:1.2rem;margin-top:.6rem}
.rail-prog{flex:1;height:3px;border-radius:3px;background:var(--line);overflow:hidden}
.rail-prog i{display:block;height:100%;width:0;background:var(--red);transition:width .2s}
.rail-count{font-family:"Mono",monospace;font-size:.8rem;font-weight:700;letter-spacing:.1em}
.rail.drag{cursor:grabbing;scroll-snap-type:none;user-select:none}
.rail.drag .fcard{pointer-events:none}
@media (hover:hover){.rail{cursor:grab}}
/* (7) interactive venue map */
.vmap{position:relative}.vmap img{border-radius:var(--r-s)}
.vmap-svg{position:absolute;inset:0;width:100%;height:100%}
.vmap-svg polygon{fill:transparent;stroke:transparent;stroke-width:4;cursor:pointer;transition:fill .25s,stroke .25s}
.vmap-svg polygon:hover,.vmap-svg polygon:focus,.vmap-svg polygon.hi{fill:rgba(255,255,255,.32);stroke:#fff;outline:none}
.vmap.dim .vmap-svg polygon:not(.hi):not(:hover){fill:rgba(13,16,20,.35)}
.vtip{position:absolute;z-index:3;min-width:190px;max-width:260px;padding:.8rem 1rem;border-radius:var(--r-s);background:rgba(13,16,20,.92);color:#fff;font-size:.86rem;line-height:1.35;pointer-events:none;transform:translate(-50%,calc(-100% - 12px));box-shadow:0 12px 30px rgba(0,0,0,.35)}
.vtip.below{transform:translate(-50%,12px)}
.vtip b{display:block;font-family:"Shoulders",sans-serif;font-weight:900;font-size:1.5rem;text-transform:uppercase;line-height:1;margin-bottom:.3rem}
.vtip em{display:block;font-style:normal;color:var(--amber);font-weight:700;margin-top:.35rem}
.legend li{transition:background .2s}
.legend li.hi{background:var(--paper)}
/* (8) my visit plan */
.ex{position:relative}
.ex .fav{grid-column:2;grid-row:1/3;align-self:center;margin-left:.6rem;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:#8a93a0;box-shadow:inset 0 0 0 1px var(--line-d);transition:color .2s,background .2s,transform .25s var(--ease)}
.ex{grid-template-columns:minmax(0,1fr) auto auto}
.ex .st{grid-column:2}
.ex .fav{grid-column:3}
.ex .fav:hover{color:#fff;transform:scale(1.08)}
.ex .fav[aria-pressed=true]{color:var(--ink);background:var(--amber);box-shadow:none}
.planbtn{position:fixed;left:1.2rem;bottom:1.2rem;z-index:70;display:none;align-items:center;gap:.6rem;padding:.8rem 1.2rem;border-radius:999px;background:var(--amber);color:var(--ink);font-weight:800;box-shadow:0 10px 30px rgba(0,0,0,.3)}
.planbtn.on{display:inline-flex;animation:popin .5s var(--ease)}
.planbtn b{display:grid;place-items:center;min-width:1.6rem;height:1.6rem;border-radius:999px;background:var(--ink);color:#fff;font-size:.8rem}
.plan{position:fixed;inset:0 0 0 auto;z-index:96;width:min(440px,100vw);background:#fff;color:var(--ink);transform:translateX(105%);transition:transform .45s var(--ease);display:flex;flex-direction:column;box-shadow:-20px 0 60px rgba(0,0,0,.25)}
.plan:not(.on){box-shadow:none;visibility:hidden;transition:transform .45s var(--ease),visibility 0s .45s}
.plan.on{transform:none;visibility:visible}
.plan header{display:flex;justify-content:space-between;align-items:center;padding:1.4rem 1.4rem 1rem;border-bottom:1px solid var(--line)}
.plan header h3{font-size:2rem}
.plan .x{width:44px;height:44px;border-radius:50%;box-shadow:inset 0 0 0 1px var(--line);font-size:1.4rem}
.plan-list{flex:1;overflow:auto;padding:1rem 1.4rem}
.plan-list h4{font-family:"Mono",monospace;font-size:.72rem;letter-spacing:.16em;color:var(--red);margin:1rem 0 .4rem}
.plan-list li{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:.6rem;align-items:center;padding:.6rem 0;border-bottom:1px solid var(--line)}
.plan-list li b{font-size:.95rem}.plan-list li small{display:block;color:var(--mute);font-size:.78rem}
.plan-list li span{font-family:"Mono",monospace;font-size:.8rem;color:var(--red);font-weight:700}
.plan-list li button{color:var(--mute);font-size:1.1rem;width:30px;height:30px;border-radius:50%}
.plan-list li button:hover{background:var(--paper);color:var(--ink)}
.plan footer{display:flex;gap:.5rem;padding:1rem 1.4rem 1.4rem;border-top:1px solid var(--line)}
.plan-empty{color:var(--mute);padding:2rem 0}
@media print{
  body.print-plan>*:not(.plan){display:none!important}
  body.print-plan .plan{position:static;transform:none;box-shadow:none;width:auto}
  body.print-plan .plan footer,body.print-plan .plan .x,body.print-plan .plan-list li button{display:none}
}
/* (9) programme filter + now/next */
.pfilter{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;margin:-1.2rem 0 2rem}
.pfilter>span{font-family:"Mono",monospace;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:#8a93a0;margin-right:.3rem}
.pfilter button{padding:.5rem 1rem;border-radius:999px;background:var(--g1);box-shadow:inset 0 0 0 1px var(--line-d);font-weight:700;font-size:.88rem;color:#fff}
.pfilter button[aria-pressed=true]{background:#fff;color:var(--ink)}
.slot.hide{display:none}
.slot .badge{display:inline-block;margin-left:.6rem;padding:.15rem .55rem;border-radius:999px;font-family:"Mono",monospace;font-size:.68rem;letter-spacing:.1em;vertical-align:middle}
.badge.now{background:var(--red);color:#fff}.badge.next{background:var(--amber);color:var(--ink)}
.pempty{padding:1.5rem 0;color:#b9c0ca}
/* (10) sticky CTA on phones */
.mcta{display:none}
@media (max-width:640px){
  .mcta{position:fixed;left:0;right:0;bottom:0;z-index:65;display:flex;gap:.5rem;padding:.7rem .9rem calc(.7rem + env(safe-area-inset-bottom));background:rgba(13,16,20,.92);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transform:translateY(110%);transition:transform .4s var(--ease)}
  .mcta.on{transform:none}
  .mcta .pill{flex:1;justify-content:center}
  body.has-mcta .planbtn{bottom:5.2rem}
  body.has-mcta .toast{bottom:5.6rem}
}

/* ===== FX: hero title, cursor, section backgrounds ===== */
/* hero title: letter-by-letter intro + cursor reaction (uses translate/scale so it never fights the intro transform) */
.hero h1{perspective:900px;transform-style:preserve-3d;transition:transform .6s var(--ease)}
.hero h1 .wd{display:inline-block;white-space:nowrap}
.hero h1 .ch{display:inline-block;will-change:transform;transition:translate .35s var(--ease),scale .35s var(--ease),color .35s,text-shadow .35s}
.js-ready .hero h1 .ch{animation:chin 1s var(--ease) both;animation-delay:calc(var(--i) * 42ms + .15s)}
@keyframes chin{0%{opacity:0;transform:translateY(.55em) rotateX(-80deg);filter:blur(10px)}60%{filter:blur(0)}100%{opacity:1;transform:none;filter:none}}
.hero h1 .ch.hot{color:var(--amber);text-shadow:0 0 30px rgba(255,184,28,.45)}
.hero h1 em .ch.hot{color:#ff4d5e}
.hero-spot{position:absolute;inset:0;z-index:1;pointer-events:none;opacity:0;transition:opacity .6s;
  background:radial-gradient(520px circle at var(--mx,50%) var(--my,50%),rgba(255,184,28,.18),rgba(215,25,45,.10) 35%,transparent 65%);mix-blend-mode:screen}
.hero:hover .hero-spot{opacity:1}
.hero .pill{will-change:transform}
/* hero sheen sweep across the title after intro */
.hero h1 span:not(.ch){position:relative}
/* global cursor ring (desktop) */
.cur{position:fixed;left:0;top:0;z-index:120;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;pointer-events:none;
  box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.9);mix-blend-mode:difference;transition:width .25s var(--ease),height .25s var(--ease),margin .25s var(--ease),background .25s,opacity .3s;opacity:0}
.cur.on{opacity:1}
.cur.big{width:64px;height:64px;margin:-32px 0 0 -32px;background:rgba(255,255,255,.95)}
.cur.down{width:24px;height:24px;margin:-12px 0 0 -12px}
/* section background layers */
.has-fx{position:relative;overflow:clip;isolation:isolate}
.has-fx>*:not(.bgfx){position:relative;z-index:1}
.bgfx{position:absolute;inset:0;z-index:0;pointer-events:none;opacity:0;transform:scale(1.06);transition:opacity 1.4s var(--ease),transform 1.8s var(--ease)}
.bgfx.in{opacity:1;transform:none}
.bgfx *{animation-play-state:paused}
.bgfx.run *{animation-play-state:running}
/* aurora: soft moving light on dark sections */
.aurora i{position:absolute;width:46vw;max-width:720px;aspect-ratio:1;border-radius:50%;filter:blur(70px);opacity:.30}
.aurora i:nth-child(1){background:#d7192d;left:-10%;top:-20%;animation:drift1 26s ease-in-out infinite alternate}
.aurora i:nth-child(2){background:#ffb81c;right:-12%;top:10%;opacity:.16;animation:drift2 32s ease-in-out infinite alternate}
.aurora i:nth-child(3){background:#3884d7;left:30%;bottom:-35%;opacity:.18;animation:drift3 38s ease-in-out infinite alternate}
@keyframes drift1{to{transform:translate(28vw,18vh) scale(1.15)}}
@keyframes drift2{to{transform:translate(-30vw,22vh) scale(.85)}}
@keyframes drift3{to{transform:translate(-18vw,-30vh) scale(1.2)}}
.figures .aurora i{opacity:.22}
/* grid: technical blueprint + scanning line on light sections */
.grid{background:linear-gradient(rgba(16,20,26,.06) 1px,transparent 1px) 0 0/44px 44px,linear-gradient(90deg,rgba(16,20,26,.06) 1px,transparent 1px) 0 0/44px 44px;
  -webkit-mask-image:radial-gradient(120% 90% at 70% 40%,#000 30%,transparent 80%);mask-image:radial-gradient(120% 90% at 70% 40%,#000 30%,transparent 80%)}
.grid i{position:absolute;left:0;right:0;height:180px;top:-200px;background:linear-gradient(180deg,transparent,rgba(215,25,45,.07) 70%,rgba(215,25,45,.22) 98%,transparent);animation:scan 9s cubic-bezier(.45,0,.55,1) infinite}
@keyframes scan{to{transform:translateY(calc(100vh + 1400px))}}
/* net canvas */
.net canvas{width:100%;height:100%;display:block}
@media (prefers-reduced-motion:reduce),(hover:none){.cur,.hero-spot{display:none}}
@media (prefers-reduced-motion:reduce){.js-ready .hero h1 .ch{animation:none}.bgfx{transition:none;opacity:1;transform:none}.bgfx *{animation:none!important}}

/* ===== scroll stage after the hero ===== */
.stage{position:relative;height:250vh;background:var(--g0)}
.stage-pin{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden}
.stage .hero{position:absolute;inset:0;min-height:0;height:100%;
  clip-path:inset(calc(var(--pc,0) * 60%) calc(var(--pc,0) * 7%) calc(var(--pc,0) * 5%) calc(var(--pc,0) * 7%) round calc(var(--pc,0) * 28px));will-change:clip-path}
.stage .hero-in{opacity:calc(1 - var(--p,0) * 4.5);transform:translateY(calc(var(--p,0) * -6vh)) scale(calc(1 - var(--p,0) * .25));transform-origin:50% 100%}
.stage .scroll-cue{opacity:calc(1 - var(--p,0) * 4)}
.stage-copy{position:absolute;left:0;right:0;top:calc(var(--nav) + 4vh);z-index:3;max-width:var(--max);margin:0 auto;padding:0 var(--pad);color:#fff;pointer-events:none;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:clamp(1.5rem,4vw,4rem);align-items:end;
  opacity:calc((var(--p,0) - .34) * 4);transform:translateY(calc((1 - var(--p,0)) * 6vh))}
.stage-copy .kicker{color:var(--amber);margin-bottom:1rem}
.stage-statement{font:900 clamp(1.7rem,3.5vw,3.5rem)/1 "Shoulders",Impact,sans-serif;text-transform:uppercase;max-width:20ch}
.stage-statement .w{opacity:.14;transition:opacity .25s,color .25s}
.stage-statement .w.on{opacity:1}
.stage-statement .w.red{color:var(--red)}
.stage-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.2rem 1.6rem}
.stage-stats div{border-top:1px solid rgba(255,255,255,.25);padding-top:.8rem;opacity:0;transform:translateY(16px);transition:opacity .6s var(--ease),transform .6s var(--ease)}
.stage-stats.on div{opacity:1;transform:none}
.stage-stats.on div:nth-child(2){transition-delay:.08s}.stage-stats.on div:nth-child(3){transition-delay:.16s}.stage-stats.on div:nth-child(4){transition-delay:.24s}
.stage-stats b{display:block;font:900 clamp(2rem,3.6vw,3.4rem)/1 "Shoulders",sans-serif;font-variant-numeric:tabular-nums}
.stage-stats div:nth-child(2) b{color:var(--amber)}
.stage-stats span{color:#b9c0ca;font-size:.9rem}
@media (max-width:900px){
  .stage{height:210vh}
  .stage .hero{clip-path:inset(calc(var(--pc,0) * 62%) calc(var(--pc,0) * 4%) calc(var(--pc,0) * 4%) calc(var(--pc,0) * 4%) round calc(var(--pc,0) * 20px))}
  .stage-copy{grid-template-columns:minmax(0,1fr);gap:1rem;top:calc(var(--nav) + 2vh)}
  .stage-statement{font-size:clamp(1.5rem,7vw,2.2rem)}
  .stage-stats{gap:.8rem 1rem}.stage-stats b{font-size:1.9rem}.stage-stats span{font-size:.8rem}
}
/* static fallback: reduced motion / no JS */
.stage.static{height:auto}.stage.static .stage-pin{position:relative;height:auto;overflow:visible}
.stage.static .hero{position:relative;clip-path:none;min-height:100svh}
.stage.static .hero-in,.stage.static .stage-copy{opacity:1;transform:none}
.stage.static .stage-copy{position:relative;top:0;padding-top:4rem;padding-bottom:4rem}
.stage.static .stage-statement .w{opacity:1}.stage.static .stage-stats div{opacity:1;transform:none}

/* ===== cinematic horizontal gallery (desktop) ===== */
@media (min-width:901px){
  .gallery.pinned{height:var(--gh,300vh);padding:0}
  .gallery.pinned>.wrap{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;justify-content:center;max-width:none;padding:var(--nav) 0 0;overflow:hidden}
  .gallery.pinned .shead{max-width:var(--max);width:100%;margin:0 auto 1.6rem;padding:0 var(--pad)}.gallery.pinned .shead h2{font-size:clamp(3rem,6vw,5.6rem)}
  .gallery.pinned .collage{display:flex;gap:1rem;width:max-content;padding:0 var(--pad);grid-auto-rows:auto;will-change:transform}
  .gallery.pinned .collage figure{flex:none;height:50vh;width:auto;aspect-ratio:var(--ar,3/2)}
  .gallery.pinned .collage figure:nth-child(odd){margin-top:4vh}
  .gallery.pinned .gal-bar{max-width:var(--max);width:100%;margin:1.6rem auto 0;padding:0 var(--pad);display:flex;align-items:center;gap:1rem}
  .gal-bar i{flex:1;height:2px;background:var(--line);position:relative;overflow:hidden}
  .gal-bar i:after{content:"";position:absolute;inset:0;background:var(--red);transform-origin:0 50%;transform:scaleX(var(--gp,0))}
  .gal-bar span{font-family:"Mono",monospace;font-size:.75rem;letter-spacing:.14em}
}
.gal-bar{display:none}
@media (min-width:901px){.gallery.pinned .gal-bar{display:flex}}

/* hero lens: cursor reveals the inside of the halls */
.lens{position:absolute;inset:0;z-index:1;pointer-events:none;--r:0px;--lx:50%;--ly:50%;
  -webkit-mask-image:radial-gradient(circle var(--r) at var(--lx) var(--ly),#000 calc(100% - 28px),transparent 100%);
  mask-image:radial-gradient(circle var(--r) at var(--lx) var(--ly),#000 calc(100% - 28px),transparent 100%)}
.lens img{width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.3) brightness(.9);transform:scale(1.08)}
.lens:after{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(215,25,45,.62),rgba(13,16,20,.45) 60%,rgba(255,184,28,.35));mix-blend-mode:multiply}
.lens i{position:absolute;inset:0;background:linear-gradient(rgba(255,255,255,.14) 1px,transparent 1px) 0 0/34px 34px,linear-gradient(90deg,rgba(255,255,255,.14) 1px,transparent 1px) 0 0/34px 34px}
.lens-ring{position:absolute;left:0;top:0;z-index:3;width:0;height:0;border-radius:50%;pointer-events:none;box-shadow:inset 0 0 0 1px rgba(255,255,255,.6),0 0 40px rgba(215,25,45,.35);opacity:0;transition:opacity .4s}
.lens-ring.on{opacity:1}
.lens-ring:before,.lens-ring:after{content:"";position:absolute;background:rgba(255,255,255,.7)}
.lens-ring:before{left:50%;top:-8px;width:1px;height:16px}.lens-ring:after{top:50%;left:-8px;height:1px;width:16px}
.lens-ring span{position:absolute;left:50%;bottom:calc(100% + 14px);transform:translateX(-50%);white-space:nowrap;font-family:"Mono",monospace;font-size:.7rem;letter-spacing:.18em;color:var(--amber);text-shadow:0 1px 6px rgba(0,0,0,.6)}
.hero-hint{position:absolute;right:calc(var(--pad) + 48px);top:calc(var(--nav) + 2.6rem);z-index:2;font-family:"Mono",monospace;font-size:.7rem;letter-spacing:.16em;color:rgba(255,255,255,.75);display:flex;align-items:center;gap:.6rem;pointer-events:none;transition:opacity .5s}
.hero-hint:before{content:"";width:22px;height:22px;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--amber);animation:pulse 2s infinite}
.hero.used .hero-hint{opacity:0}
/* particle shapes in section backgrounds */
.has-fx>.pwrap.pwrap,.pwrap{position:absolute;inset:0;z-index:0;pointer-events:none}
.pwrap canvas{width:100%;height:100%;display:block}
/* halls fly-over canvas (band -> venue map) */
.halls-fly{position:fixed;inset:0;width:100vw;height:100vh;z-index:45;pointer-events:none}
.vmap img{transition:opacity .2s linear}
.vmap.landed .vmap-svg polygon{animation:land 1.3s var(--ease)}
@keyframes land{0%{fill:rgba(255,255,255,0);stroke:transparent}25%{fill:rgba(255,255,255,.45);stroke:#fff}100%{fill:rgba(255,255,255,0);stroke:transparent}}
/* chapter bands between sections (particles assemble into the next chapter's motif) */
.chapter{position:relative;height:70vh;min-height:440px;background:var(--g0);color:#fff;display:flex;align-items:center;overflow:clip}
.chapter.red{background:var(--red)}
.chapter-in{max-width:var(--max);width:100%;margin:0 auto;padding:0 var(--pad)}
.chapter-in .cn{display:block;font:700 .8rem "Mono",monospace;letter-spacing:.2em;color:var(--amber);margin-bottom:.9rem}
.chapter.red .cn{color:#fff}
.chapter-in p{font:900 clamp(2.4rem,4.6vw,4.4rem)/.9 "Shoulders",Impact,sans-serif;text-transform:uppercase;max-width:9ch;margin:0}
.chapter-in small{display:block;margin-top:1rem;color:#b9c0ca;font-size:1rem;max-width:26ch}
.chapter.red small{color:rgba(255,255,255,.85)}
@media (max-width:700px){.chapter{align-items:flex-start;padding-top:12vh;height:80vh}.chapter-in p{font-size:2.4rem}}
@media (prefers-reduced-motion:reduce){.lens,.lens-ring,.hero-hint{display:none}}
@media (hover:none){.hero-hint{display:none}}

/* hero title: lines rise from a mask, then a light sweep */
.hero h1 .ln{display:block;overflow:hidden;padding-bottom:.04em;margin-bottom:-.04em}
.hero h1 .lni{display:block;transform:translateY(130%) skewY(6deg);transform-origin:0 100%}
.hero.t3-in h1 .lni{transform:none;transition:transform 1.15s cubic-bezier(.16,1,.3,1)}
.hero.t3-in h1 .ln:nth-child(2) .lni{transition-delay:.14s}
.hero h1{position:relative;will-change:transform}
.hero h1 .sweep{position:absolute;inset:-5% -2%;pointer-events:none;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.55) 50%,transparent 65%);
  mix-blend-mode:overlay;transform:translateX(-120%)}
.hero.t3-in h1 .sweep{animation:sweep 1.6s ease 1.25s both}
@keyframes sweep{to{transform:translateX(120%)}}
/* hero lead: rotating statements, word-by-word transitions */
.hero-lead.rot{position:relative;min-height:3.1em;flex:1 1 auto;width:min(32rem,100%);max-width:32rem}
@media (max-width:640px){.hero-lead.rot{min-height:4.4em;width:100%}}
.rot .st3{position:absolute;left:0;top:0;right:0}
.rot .w3{display:inline-block;white-space:pre;opacity:0;transform:translateY(70%);filter:blur(8px);transition:opacity .55s ease,transform .7s cubic-bezier(.16,1,.3,1),filter .6s ease;transition-delay:calc(var(--k) * 38ms)}
.rot .st3.on .w3{opacity:1;transform:none;filter:none}
.rot .st3.out .w3{opacity:0;transform:translateY(-55%);filter:blur(6px);transition-delay:calc(var(--k) * 22ms)}
.rot em{font-style:italic;font-weight:700;color:var(--amber)}
.rot-bar{display:flex;gap:6px;margin-top:.9rem;max-width:30rem}
.rot-bar i{flex:1;height:2px;background:rgba(255,255,255,.22);position:relative;overflow:hidden;border-radius:2px}
.rot-bar i:after{content:"";position:absolute;inset:0;background:var(--amber);transform:scaleX(0);transform-origin:0 50%}
.rot-bar i.done:after{transform:scaleX(1)}
.rot-bar i.now:after{transform:scaleX(1);transition:transform var(--dur,4.2s) linear}
/* slow cinematic push on the video */
.hero video{animation:push 22s ease-in-out infinite alternate}
@keyframes push{from{transform:scale(1)}to{transform:scale(1.09)}}
/* page-wide heading transitions: each line rises from a mask (replaces the wipe) */
.shead.rv h2,.rv .shead h2{clip-path:none!important}
h2 .ln{display:block;overflow:hidden;padding-bottom:.06em;margin-bottom:-.06em}
h2 .lni{display:block;transform:translateY(108%);transition:transform 1s cubic-bezier(.16,1,.3,1)}
.rv.in h2 .lni,h2.rv.in .lni,.rv.in .lni{transform:none}
h2 .ln:nth-child(2) .lni{transition-delay:.09s}h2 .ln:nth-child(3) .lni{transition-delay:.18s}h2 .ln:nth-child(4) .lni{transition-delay:.27s}h2 .ln:nth-child(5) .lni{transition-delay:.36s}
.no-js h2 .lni{transform:none}
@media (prefers-reduced-motion:reduce){.hero h1 .lni,h2 .lni{transform:none!important}.hero video{animation:none}.rot .w3{transition:none}}

.mstage{position:relative;height:260vh;background:var(--g0)}
.mpin{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden}
.mstage .hero{min-height:0;height:100%}
.mstage .scroll-cue{opacity:calc(1 - var(--mp,0) * 5)}
.mstage .hero-date,.mstage .hero-row,.mstage .count{opacity:calc(1 - var(--mp,0) * 3.2);transform:translateY(calc(var(--mp,0) * 40px))}
.mstage .hero h1{transform-origin:0 100%}
.mstage .hero.noanim .hero-date,.mstage .hero.noanim .hero-row,.mstage .hero.noanim .count{animation:none}
.mstage .hero-shade{background:linear-gradient(180deg,rgba(13,16,20,.55) 0,rgba(13,16,20,.05) 30%,rgba(13,16,20,.2) 55%,rgba(13,16,20,.92) 100%),rgba(13,16,20,calc(var(--mp,0) * .62))}
.mstage .hero video{transform:scale(calc(1 + var(--mp,0) * .08))}
/* the cards */
.mcards{position:absolute;inset:0;z-index:4;pointer-events:none}
.mhead{position:absolute;left:0;right:0;text-align:center;z-index:4;pointer-events:none;opacity:calc((var(--mp,0) - .55) * 3);transform:translateY(calc((1 - var(--mp,0)) * 30px))}
.mhead p{margin:0;font:700 .78rem "Mono",monospace;letter-spacing:.2em;text-transform:uppercase;color:var(--amber)}
.mhead h2{margin-top:.6rem;font-size:clamp(2.2rem,4.4vw,4.4rem);color:#fff;line-height:.9}
.mhead h2 em{font-style:normal;color:var(--red)}
.mc{position:absolute;left:0;top:0;display:flex;flex-direction:column;border-radius:16px;overflow:hidden;background:var(--fc);color:#fff;
  box-shadow:0 30px 60px -30px rgba(0,0,0,.7);transform-origin:50% 50%;will-change:transform,opacity;text-align:left}
.mc.live{pointer-events:auto;cursor:pointer}
.mc:before{content:"";position:absolute;right:-35%;top:-25%;width:95%;aspect-ratio:1;border-radius:50%;background:rgba(255,255,255,.09)}
.mc .ml{position:relative;margin:12px 12px 0;height:34%;border-radius:10px;background:#fff;display:grid;place-items:center;padding:10px}
.mc .ml img{max-width:88%;max-height:100%;object-fit:contain}
.mc .mh{position:relative;display:flex;gap:4px;padding:12px 12px 0}
.mc .mh i{display:inline-grid;place-items:center;min-width:22px;height:22px;border-radius:6px;background:var(--hc);font:900 13px "Shoulders",sans-serif;font-style:normal;text-shadow:0 1px 2px rgba(0,0,0,.35)}
.mc .mn{position:relative;padding:10px 12px 0;font:900 clamp(1.05rem,1.45vw,1.55rem)/.95 "Shoulders",sans-serif;text-transform:uppercase}
.mc .mg{position:relative;margin-top:auto;padding:10px 12px 12px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid rgba(255,255,255,.25);font:700 .72rem "Mono",monospace;letter-spacing:.12em;text-transform:uppercase;opacity:.9}
.mc .mg b{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:rgba(255,255,255,.2);transition:transform .3s var(--ease),background .3s}
.mc.live:hover .mg b,.mc.live:focus-visible .mg b{transform:rotate(-45deg);background:#fff;color:var(--ink)}
.mc.live:focus-visible{outline:3px solid var(--amber);outline-offset:3px}
.mcards.m .mc{display:grid;grid-template-columns:44% 1fr;grid-template-rows:auto 1fr;border-radius:12px}
.mcards.m .mc .ml{grid-row:1/3;height:auto;margin:8px;padding:4px;align-self:stretch}.mcards.m .mc .ml img{max-width:96%;max-height:80%}
.mcards.m .mc .mh{padding:8px 8px 0 0}.mcards.m .mc .mh i{min-width:18px;height:18px;font-size:11px}
.mcards.m .mc .mn{padding:6px 8px 8px 0;font-size:.92rem;align-self:start}.mcards.m .mc .mg{display:none}
@media (prefers-reduced-motion:reduce){.mstage{height:auto}.mpin{position:relative;height:auto}.mstage .hero{min-height:100svh}.mcards,.mhead{display:none}}

.mstage{height:620vh}
.mbox{position:absolute;z-index:4;pointer-events:none;border-radius:0;background:var(--c0,#d7192d);opacity:0}
.deck{position:absolute;inset:0;z-index:5;pointer-events:none;perspective:1600px}
.dk{position:absolute;left:0;top:0;border-radius:28px;overflow:hidden;color:#fff;transform-origin:50% 60%;will-change:transform,opacity;
  background:radial-gradient(120% 90% at 100% 0%,rgba(255,255,255,.28),transparent 46%),radial-gradient(80% 70% at 0% 100%,rgba(0,0,0,.38),transparent 60%),var(--c);
  box-shadow:0 50px 90px -40px rgba(0,0,0,.85),inset 0 1px 0 rgba(255,255,255,.25);display:grid;grid-template-columns:1.15fr .85fr;text-align:left}
.dk:before{content:"";position:absolute;inset:0;background:linear-gradient(rgba(255,255,255,.06) 1px,transparent 1px) 0 0/28px 28px,linear-gradient(90deg,rgba(255,255,255,.06) 1px,transparent 1px) 0 0/28px 28px;
  -webkit-mask-image:linear-gradient(135deg,transparent 30%,#000);mask-image:linear-gradient(135deg,transparent 30%,#000);pointer-events:none}
.dk.live{pointer-events:auto}
.dk .dl{position:relative;display:flex;flex-direction:column;padding:clamp(1.4rem,2.6vw,2.4rem)}
.dk .dt{display:flex;gap:.45rem;flex-wrap:wrap;align-items:center}
.dk .dt span{padding:6px 12px;border-radius:999px;background:rgba(0,0,0,.22);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:inset 0 1px 0 rgba(255,255,255,.18);
  font:700 .68rem "Mono",monospace;letter-spacing:.14em;text-transform:uppercase}
.dk .dt i{display:inline-grid;place-items:center;min-width:26px;height:26px;border-radius:8px;background:var(--hc);font:900 15px "Shoulders",sans-serif;font-style:normal;text-shadow:0 1px 2px rgba(0,0,0,.35);box-shadow:0 0 0 2px rgba(255,255,255,.25)}
.dk h3{margin:auto 0 0;padding-top:1.2rem;font-size:clamp(2.2rem,3.8vw,3.8rem);line-height:.86}
.dk .df{margin-top:.7rem;font-size:.98rem;opacity:.88;max-width:28rem}
.dk .da{display:flex;gap:.5rem;margin-top:1.3rem;flex-wrap:wrap}
.dk .da a{display:inline-flex;align-items:center;gap:.5rem;padding:.75rem 1.15rem;border-radius:999px;font-weight:700;font-size:.9rem;transition:transform .25s var(--ease),background .25s}
.dk .da a:first-child{background:#fff;color:var(--ink)}
.dk .da a:last-child{background:rgba(255,255,255,.14);box-shadow:inset 0 0 0 1px rgba(255,255,255,.4);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
.dk .da a:hover{transform:translateY(-2px)}
.dk .dr{position:relative;display:flex;flex-direction:column;gap:.8rem;padding:clamp(1.2rem,2vw,1.8rem);background:rgba(0,0,0,.16);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border-left:1px solid rgba(255,255,255,.14)}
.dk .dlogo{display:grid;place-items:center;height:42%;min-height:90px;padding:1rem;border-radius:18px;background:#fff;box-shadow:0 20px 40px -24px rgba(0,0,0,.6)}
.dk .dlogo img{max-width:88%;max-height:100%;object-fit:contain}
.dk .ds{display:flex;flex-wrap:wrap;gap:.35rem;margin:0;padding:0}
.dk .ds li{padding:.32rem .65rem;border-radius:999px;background:rgba(255,255,255,.14);box-shadow:inset 0 1px 0 rgba(255,255,255,.18);font-size:.76rem;font-weight:600}
/* controls */
.dctl{position:absolute;left:0;right:0;z-index:6;display:flex;justify-content:center;align-items:center;gap:1rem;pointer-events:none}
.dctl>*{pointer-events:auto}
.dctl .db{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;color:#fff;background:rgba(255,255,255,.1);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:inset 0 0 0 1px rgba(255,255,255,.3);transition:background .2s,transform .2s}
.dctl .db:hover{background:#fff;color:var(--ink);transform:scale(1.06)}
.dctl .db:disabled{opacity:.3;pointer-events:none}
.ddots{display:flex;gap:6px}
.ddots button{width:28px;height:6px;border-radius:6px;background:rgba(255,255,255,.25);overflow:hidden;position:relative;transition:width .4s var(--ease)}
.ddots button:after{content:"";position:absolute;inset:0;background:var(--c);transform:scaleX(var(--fp,0));transform-origin:0 50%}
.ddots button.on{width:64px}
.dname{position:absolute;left:0;right:0;z-index:6;text-align:center;pointer-events:none;font:700 .72rem "Mono",monospace;letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.7)}
.mstage .mhead h2{font-size:clamp(2rem,3.6vw,3.6rem)}
@media (max-width:900px){
  .dk{grid-template-columns:1fr;grid-template-rows:auto 1fr;border-radius:22px}
  .dk .dr{order:-1;border-left:0;border-bottom:1px solid rgba(255,255,255,.14);padding:12px;flex-direction:row;align-items:center}
  .dk .dlogo{height:64px;min-height:0;flex:0 0 46%;border-radius:12px;padding:8px}
  .dk .ds{display:none}
  .dk .dl{padding:16px}
  .dk h3{font-size:clamp(1.8rem,8.5vw,2.6rem);padding-top:.8rem}
  .dk .df{font-size:.85rem}
  .dctl .db{width:44px;height:44px}.ddots button{width:16px}.ddots button.on{width:34px}
}

.deck{perspective:1100px}
.deck{opacity:0}
.ak{position:absolute;left:50%;top:0;border-radius:22px;overflow:hidden;transform-style:preserve-3d;will-change:transform,opacity;color:#fff;
  background:
    linear-gradient(115deg,rgba(255,255,255,0) 30%,rgba(255,255,255,.45) var(--sh,45%),rgba(255,255,255,0) calc(var(--sh,45%) + 16%)),
    linear-gradient(180deg,#d9d6d2 0%,#b7b2ad 34%,#8d8781 66%,#5e5955 100%);
  box-shadow:0 60px 100px -40px rgba(0,0,0,.9),0 0 0 1px rgba(255,255,255,.55) inset,0 0 0 2px rgba(0,0,0,.25);text-align:left}
.ak:before{content:"";position:absolute;inset:0;background:var(--c);mix-blend-mode:color;opacity:.2;pointer-events:none}
.ak .aedge{position:absolute;left:0;top:0;bottom:0;width:5px;background:var(--c);box-shadow:0 0 14px var(--c)}
.ak:after{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.05) 0 1px,transparent 1px 3px);mix-blend-mode:overlay}
.ak.live{pointer-events:auto;cursor:pointer}
.ak .ai{position:absolute;inset:0;display:flex;flex-direction:column;padding:9% 9% 8%}
.ak .rail2{height:2px;border-radius:2px;background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,.55));box-shadow:0 1px 0 rgba(0,0,0,.25),0 0 6px rgba(255,255,255,.35)}
.ak .rail2+.rail2{margin-top:7%}
.ak .alogo{margin:10% 0 8%;height:20%;display:flex;align-items:center}
.ak .alogo img{max-width:100%;max-height:100%;object-fit:contain;object-position:left center;filter:brightness(0) invert(1) drop-shadow(0 1px 0 rgba(0,0,0,.35)) drop-shadow(0 0 8px rgba(255,255,255,.45))}
.ak .aln{display:flex;flex-direction:column;margin-top:auto}
.ak .aln span{display:block;padding:.62em 0;border-top:2px solid rgba(255,255,255,.75);box-shadow:0 -1px 0 rgba(0,0,0,.18);
  font:500 clamp(.62rem,.95vw,.88rem)/1.1 "Mono",monospace;letter-spacing:.12em;text-transform:uppercase;text-align:right;
  color:#fff;text-shadow:0 1px 0 rgba(0,0,0,.35),0 0 6px rgba(255,255,255,.35)}
.ak .aln span:last-child{border-bottom:2px solid rgba(255,255,255,.75)}
.ak .aln b{font-weight:500}
.ak .aname{font:900 clamp(1.3rem,2.2vw,2.1rem)/.9 "Shoulders",sans-serif;text-transform:uppercase;text-align:right;letter-spacing:.01em;margin-bottom:.6rem;
  text-shadow:0 1px 0 rgba(0,0,0,.35),0 0 10px rgba(255,255,255,.35)}
.ak .atri{display:block;text-align:right;padding-top:.5em}
.ak .atri:after{content:"";display:inline-block;border-style:solid;border-width:6px 10px 6px 0;border-color:transparent #fff transparent transparent}
.ak .ahalls{display:flex;gap:4px;justify-content:flex-end;margin-bottom:.7rem}
.ak .ahalls i{display:inline-grid;place-items:center;min-width:22px;height:22px;border-radius:6px;background:var(--hc);font:900 13px "Shoulders",sans-serif;font-style:normal;box-shadow:0 0 0 1px rgba(255,255,255,.6)}
/* name + actions under the deck */
.dname{pointer-events:auto;display:flex;flex-direction:column;align-items:center;gap:.8rem}
.dname .dn{font:700 .72rem "Mono",monospace;letter-spacing:.2em;color:rgba(255,255,255,.75)}
.dname .dact{display:flex;gap:.5rem}
.dname .dact a{border-radius:999px;padding:.7rem 1.2rem;font:700 .88rem "Sans",sans-serif;letter-spacing:0;text-transform:none;color:#1b1814;
  background:linear-gradient(180deg,#efe9e1,#b9b0a5);box-shadow:inset 0 1px 0 rgba(255,255,255,.7),0 8px 20px -10px rgba(0,0,0,.6)}
.dname .dact a+a{color:#fff;background:rgba(255,255,255,.1);box-shadow:inset 0 0 0 1px rgba(255,255,255,.35);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
.mbox{background:linear-gradient(180deg,#d9d6d2,#8d8781)!important}
@media (max-width:900px){.ak .aln span{font-size:.58rem}.dname .dact a{padding:.6rem 1rem;font-size:.8rem}}
/* 12.10 Jan: cleaner professional event card - centred logo + name, little text */
.ak .ai{align-items:center;text-align:center;padding:10% 10% 9%}
.ak .ai>.rail2{align-self:stretch;margin:0}
.ak .alogo{flex:0 0 auto;width:100%;height:26%;margin:14% 0 0;justify-content:center}
.ak .alogo img{object-position:center}
.ak .aname{flex:1;display:flex;align-items:center;justify-content:center;width:100%;margin:0;text-align:center}
.ak .aname span{display:block;width:100%;font:900 var(--nfs,2rem)/.92 "Shoulders",sans-serif;text-transform:uppercase;letter-spacing:.01em;
  overflow-wrap:normal;word-break:normal;hyphens:none;text-shadow:0 1px 0 rgba(0,0,0,.35),0 0 12px rgba(255,255,255,.3)}
.ak .ahalls{justify-content:center;margin:0 0 9%}
.ak .afoot{align-self:stretch;display:flex;justify-content:space-between;gap:.6rem;padding-bottom:.8rem;
  font:500 clamp(.58rem,.8vw,.74rem)/1.2 "Mono",monospace;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.92);text-shadow:0 1px 0 rgba(0,0,0,.3)}
.ak .afoot span:first-child{text-align:left}.ak .afoot span:last-child{text-align:right;white-space:nowrap}

/* ===== HERO13: particles title -> pass card; pass cards; arrows + counter instead of dashes ===== */
.mstage{height:662vh}   /* 13.10: ends right after the 7th card - no dead scroll before the next section */
.xdust{position:fixed;inset:0;width:100%;height:100%;z-index:55;pointer-events:none;display:none}
/* smoothness: the scroll-driven darkening is an opacity-only overlay (the old rgba(var) background repainted the whole screen every frame) */
.mstage .hero-shade{background:linear-gradient(180deg,rgba(13,16,20,.55) 0,rgba(13,16,20,.05) 30%,rgba(13,16,20,.2) 55%,rgba(13,16,20,.92) 100%)}
.mstage .hero-shade:after{content:"";position:absolute;inset:0;background:#0d1014;opacity:calc(var(--mp,0) * .62);will-change:opacity;pointer-events:none}
.mdust,.xdust{will-change:contents}
.mbox,.ddots{display:none!important}
.mdust{position:absolute;inset:0;z-index:4;pointer-events:none;width:100%;height:100%}
.deck{z-index:5;perspective:1100px;opacity:0}
.pk{position:absolute;left:50%;top:0;transform-style:preserve-3d;will-change:transform,opacity,filter;color:#fff;text-align:left;--sy:71%;--cw:300px}
.pk.live{pointer-events:auto;cursor:grab;touch-action:pan-y;-webkit-user-select:none;user-select:none}
.pk img{-webkit-user-drag:none;user-drag:none;pointer-events:none}
.deck.dragging,.deck.dragging .pk.live{cursor:grabbing}
.pk .psh{position:absolute;left:7%;right:7%;bottom:-6%;height:14%;border-radius:50%;background:radial-gradient(closest-side,rgba(0,0,0,.85),transparent);filter:blur(14px);pointer-events:none}
.pk .pb{position:absolute;inset:0;border-radius:calc(var(--cw) * .07);overflow:hidden;
  -webkit-mask:radial-gradient(circle calc(var(--cw) * .045) at 0 var(--sy),#0000 97%,#000) left/51% 100% no-repeat,radial-gradient(circle calc(var(--cw) * .045) at 100% var(--sy),#0000 97%,#000) right/51% 100% no-repeat;
          mask:radial-gradient(circle calc(var(--cw) * .045) at 0 var(--sy),#0000 97%,#000) left/51% 100% no-repeat,radial-gradient(circle calc(var(--cw) * .045) at 100% var(--sy),#0000 97%,#000) right/51% 100% no-repeat;
  background:
    linear-gradient(115deg,transparent 30%,rgba(255,255,255,.13) var(--sh,45%),transparent calc(var(--sh,45%) + 14%)),
    radial-gradient(120% 62% at 100% 0%,color-mix(in srgb,var(--c) 80%,transparent),transparent 64%),
    radial-gradient(90% 45% at 0% 100%,color-mix(in srgb,var(--c) 34%,transparent),transparent 72%),
    linear-gradient(165deg,#22262e 0%,#13161b 52%,#0a0c0f 100%);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.14),inset 0 1px 0 rgba(255,255,255,.32)}
.pk .pb:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.2;mix-blend-mode:overlay;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.pk .pb:after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(rgba(255,255,255,.06) 1px,transparent 1px) 0 0/calc(var(--cw) * .07) calc(var(--cw) * .07),linear-gradient(90deg,rgba(255,255,255,.06) 1px,transparent 1px) 0 0/calc(var(--cw) * .07) calc(var(--cw) * .07);
  -webkit-mask-image:radial-gradient(100% 70% at 100% 0%,#000,transparent 70%);mask-image:radial-gradient(100% 70% at 100% 0%,#000,transparent 70%)}
.pk .pi{position:absolute;left:0;right:0;top:0;height:var(--sy);z-index:1;display:flex;flex-direction:column;align-items:center;padding:calc(var(--cw) * .085) calc(var(--cw) * .085) calc(var(--cw) * .05)}
.pk .ptop{align-self:stretch;display:flex;justify-content:space-between;align-items:center;gap:.8em;font:500 calc(var(--cw) * .033)/1.25 "Mono",monospace;letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.82)}
.pk .ptop span:first-child{display:flex;align-items:center;gap:.7em;white-space:nowrap}
.pk .ptop span:last-child{text-align:right}
.pk .ptop i{flex:0 0 auto;width:.75em;height:.75em;border-radius:50%;background:var(--c);box-shadow:0 0 0 2px rgba(255,255,255,.3),0 0 12px var(--c)}
.pk .plogo{width:100%;height:29%;margin-top:13%;display:flex;align-items:center;justify-content:center}
.pk .plogo img{max-width:92%;max-height:100%;object-fit:contain;filter:brightness(0) invert(1) drop-shadow(0 2px 10px rgba(0,0,0,.35))}
.pk .pname{flex:1;width:100%;display:flex;align-items:center;justify-content:center;text-align:center}
.pk .pname span{display:block;width:100%;font:900 var(--nfs,2rem)/.9 "Shoulders",sans-serif;text-transform:uppercase;letter-spacing:.01em;text-wrap:balance;text-shadow:0 2px 18px rgba(0,0,0,.35)}
.pk .pstub{position:absolute;left:0;right:0;top:var(--sy);bottom:0;z-index:1;display:flex;flex-direction:column;justify-content:center;gap:calc(var(--cw) * .045);padding:0 calc(var(--cw) * .085)}
.pk .pstub:before{content:"";position:absolute;left:calc(var(--cw) * .07);right:calc(var(--cw) * .07);top:0;border-top:1.5px dashed rgba(255,255,255,.3)}
.pk .prow{display:flex;align-items:center;gap:.6em;font:500 calc(var(--cw) * .032)/1 "Mono",monospace;letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.7)}
.pk .prow.pm{justify-content:space-between;color:#fff}
.pk .phalls{display:flex;gap:4px}
.pk .phalls i{display:inline-grid;place-items:center;min-width:calc(var(--cw) * .085);height:calc(var(--cw) * .085);border-radius:calc(var(--cw) * .022);background:var(--hc);font:900 calc(var(--cw) * .052)/1 "Shoulders",sans-serif;font-style:normal;color:#fff;letter-spacing:0;box-shadow:0 0 0 1px rgba(255,255,255,.55);text-shadow:0 1px 2px rgba(0,0,0,.35)}
.pk .pbar{margin-left:auto;width:34%;height:calc(var(--cw) * .085);opacity:.55;
  background:repeating-linear-gradient(90deg,#fff 0 2px,transparent 2px 4px,#fff 4px 5px,transparent 5px 8px,#fff 8px 11px,transparent 11px 13px,#fff 13px 14px,transparent 14px 17px)}
/* controls under the deck: arrows + counter (the dash progress bar is gone) */
.dcount{min-width:7.5rem;text-align:center;font:700 .78rem "Mono",monospace;letter-spacing:.16em;color:rgba(255,255,255,.5);white-space:nowrap}
.dcount b{font:900 2rem/1 "Shoulders",sans-serif;letter-spacing:0;color:#fff;margin-right:.45rem;vertical-align:-.25rem}
.ex b{overflow-wrap:anywhere}.ex .st{max-width:8.5rem;text-align:right;overflow-wrap:anywhere;line-height:1.35}