/* ------------------------------------------------------------
   TBF poster family — shared base. Yellow, black, white. Hard
   borders, offset shadows, type that shouts. Each iteration
   layers its own style.css on top for fonts, layout and its
   signature mechanic.
   ------------------------------------------------------------ */
:root{
  --yel:#f5b719; --blk:#0d0d0c; --wht:#f7f4ec; --grn:#1a9b52; --red:#d92b2b; --blu:#2f6fd8;
  --ink-2:rgba(13,13,12,.7);
  --disp:"Bricolage Grotesque","Helvetica Neue",Arial,sans-serif;
  --mono:"DM Mono","SFMono-Regular",Menlo,monospace;
  --pad:clamp(18px,4vw,64px);
  --bw:3px;                      /* border weight */
  --sh:8px;                      /* offset shadow */
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--wht);color:var(--blk);font-family:var(--disp);font-size:17px;line-height:1.5;font-variation-settings:"opsz" 14,"wdth" 100;-webkit-font-smoothing:antialiased;overflow-x:hidden}
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:90;opacity:.07;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='1.1' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
img{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4,p,ul,ol,dl,dd,dt,figure{margin:0;padding:0}
ul,ol{list-style:none}
.mono{font-family:var(--mono);font-size:12px;letter-spacing:.04em;text-transform:uppercase}
.kicker{font-family:var(--mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;display:inline-block;padding:6px 10px;border:1.5px solid currentColor;border-radius:999px}
.h2{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 78;text-transform:uppercase;font-size:clamp(48px,8vw,132px);line-height:.86;letter-spacing:-.02em;margin-top:18px}
.sec-head{margin-bottom:clamp(26px,4vw,52px)}
.fine{font-size:13.5px;color:var(--ink-2);line-height:1.5;max-width:52em}
.lede{font-size:clamp(21px,2.2vw,30px);line-height:1.2;font-weight:600;letter-spacing:-.01em;max-width:24em}
.solid{color:var(--wht);text-shadow:.045em .045em 0 var(--blk)}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;height:50px;padding:0 24px;border:2px solid var(--blk);border-radius:999px;font:700 13px/1 var(--disp);letter-spacing:.1em;text-transform:uppercase;white-space:nowrap;transition:transform .2s,box-shadow .2s,background .2s,color .2s;cursor:pointer}
.btn:hover{transform:translate(-3px,-3px);box-shadow:5px 5px 0 var(--blk)}
.btn-blk{background:var(--blk);color:var(--wht)}
.btn-line{background:transparent;color:var(--blk)}
.btn-yel{background:var(--yel);color:var(--blk)}
.btn-wht{background:var(--wht);color:var(--blk)}
.btn-lg{height:60px;padding:0 32px;font-size:14px}
.on-dark .btn:hover{box-shadow:5px 5px 0 var(--wht)}

/* nav */
.nav{position:fixed;inset:0 0 auto;z-index:40;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:14px var(--pad);transition:background .35s,color .35s}
.nav.is-solid{background:var(--blk);color:var(--wht)}
.nav.is-solid .btn-blk{background:var(--wht);color:var(--blk);border-color:var(--wht)}
.brand{font-weight:800;font-size:22px;letter-spacing:-.02em;font-variation-settings:"opsz" 96,"wdth" 85;display:inline-flex;align-items:center;gap:8px}
.brand i{font-style:normal;display:inline-block;animation:spin 8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.nav-links{display:flex;gap:24px}
.nav-links a{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;position:relative}
.nav-links a::after{content:"";position:absolute;left:0;right:0;bottom:-4px;height:2px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .25s}
.nav-links a:hover::after{transform:scaleX(1)}

/* marquee */
.marq{overflow:hidden;padding:14px 0}
.marq-blk{background:var(--blk);color:var(--yel)}
.marq-yel{background:var(--yel);color:var(--blk)}
.marq-wht{background:var(--wht);color:var(--blk);border-top:var(--bw) solid var(--blk);border-bottom:var(--bw) solid var(--blk)}
.marq-track{display:flex;width:max-content;animation:marq 30s linear infinite}
.marq-track span{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 80;text-transform:uppercase;font-size:clamp(22px,2.6vw,38px);letter-spacing:-.01em;padding:0 28px;position:relative;white-space:nowrap}
.marq-track span::after{content:"✱";position:absolute;right:-9px;top:50%;transform:translateY(-50%);font-size:.6em}
@keyframes marq{to{transform:translateX(-50%)}}
.marq.rev .marq-track{animation-direction:reverse}
@media (prefers-reduced-motion:reduce){.marq-track,.brand i{animation:none}}

/* stickers */
.stickers{display:flex;flex-wrap:wrap;gap:22px}
.stk{background:var(--red);color:var(--wht);border:var(--bw) solid var(--wht);padding:18px 26px;transform:rotate(var(--r,0deg));display:flex;flex-direction:column;align-items:center;min-width:150px;box-shadow:var(--sh) var(--sh) 0 rgba(255,255,255,.15)}
.stk b{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 78;font-size:clamp(56px,7vw,110px);line-height:.85;letter-spacing:-.03em}
.stk span{font-family:var(--mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;margin-top:6px}
.stk-yel{background:var(--yel);color:var(--blk)}
.stk-wht{background:var(--wht);color:var(--blk)}
.stk-grn{background:var(--grn);color:var(--wht)}
.on-light .stk{border-color:var(--blk);box-shadow:var(--sh) var(--sh) 0 var(--blk)}

/* day cards */
.card{border:var(--bw) solid var(--blk);padding:clamp(22px,3vw,40px);display:flex;flex-direction:column;gap:22px;background:var(--wht)}
.card-yel{background:var(--yel)}
.card-blk{background:var(--blk);color:var(--wht);border-color:var(--wht)}
.card-head{display:grid;grid-template-columns:auto 1fr auto;gap:0 26px;align-items:end}
.card-num{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 75;font-size:clamp(80px,11vw,180px);line-height:.8;letter-spacing:-.04em}
.card h3{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 80;text-transform:uppercase;font-size:clamp(28px,4vw,58px);line-height:.92;letter-spacing:-.02em}
.card-head img{width:clamp(120px,16vw,240px);aspect-ratio:1;object-fit:cover;border:var(--bw) solid currentColor;transform:rotate(3deg)}
.times{display:grid;grid-template-columns:1fr 1fr;gap:0 40px;border-top:2px solid currentColor;padding-top:6px}
.times li{display:grid;grid-template-columns:64px 1fr;gap:10px;padding:10px 0;border-bottom:1px solid currentColor;font-size:15.5px;line-height:1.35}
.times li b{font-family:var(--mono);font-weight:500;font-size:14px;letter-spacing:.02em}

/* tickets */
.tickets{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.ticket{display:grid;grid-template-columns:44px 1fr;background:var(--wht);border:var(--bw) solid var(--blk);box-shadow:10px 10px 0 var(--blk);transform:rotate(var(--r,0deg))}
.ticket-hi{background:var(--blk);color:var(--wht)}
.tk-stub{writing-mode:vertical-rl;transform:rotate(180deg);text-align:center;padding:14px 0;border-left:3px dashed currentColor;opacity:.75}
.ticket-hi .tk-stub{border-color:var(--yel);color:var(--yel)}
.tk-body{padding:22px 22px 26px;display:flex;flex-direction:column;gap:8px}
.tk-type{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 80;text-transform:uppercase;font-size:24px;letter-spacing:-.01em}
.tk-amt{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 75;font-size:clamp(64px,7vw,112px);line-height:.85;letter-spacing:-.04em}
.tk-amt small{font-family:var(--mono);font-size:14px;letter-spacing:.1em;vertical-align:top;margin-left:6px}
.tk-body .mono{opacity:.7}
.tk-body ul{margin-top:auto;padding-top:14px;border-top:2px solid currentColor}
.tk-body ul li{padding:4px 0;font-size:14.5px}
.steps{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.steps li{display:grid;grid-template-columns:44px 1fr;gap:12px;align-items:start;font-size:15px;line-height:1.4}
.steps li b{width:40px;height:40px;border-radius:50%;background:var(--blk);color:var(--yel);display:grid;place-items:center;font-weight:800;font-size:18px}

/* corridors */
.corr{display:grid;grid-template-columns:1fr 1fr;gap:0 48px;border-top:2px solid currentColor}
.corr li{display:grid;grid-template-columns:40px 1fr auto;gap:14px;align-items:baseline;padding:14px 0;border-bottom:1px solid currentColor;transition:color .2s,padding .3s}
.corr li i{font-family:var(--mono);font-style:normal;font-size:12px;opacity:.6}
.corr li b{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 78;text-transform:uppercase;font-size:clamp(24px,2.4vw,38px);letter-spacing:-.02em;line-height:1}
.corr li span{font-family:var(--mono);font-size:12px;letter-spacing:.04em;text-transform:uppercase;opacity:.65;text-align:right}
.corr li:hover{padding-left:8px}
.on-dark .corr li:hover{color:var(--yel)}

/* federation */
.colours{display:flex;flex-direction:column;gap:8px}
.colours li{background:var(--c);color:var(--t);border:var(--bw) solid var(--blk);padding:16px 18px;display:flex;justify-content:space-between;align-items:baseline;gap:16px;transition:transform .25s}
.colours li:hover{transform:translateX(10px)}
.colours b{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 78;text-transform:uppercase;font-size:30px;letter-spacing:-.02em;line-height:1}
.colours span{font-family:var(--mono);font-size:12px;letter-spacing:.04em;text-transform:uppercase;text-align:right;opacity:.85}
.cmd{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.cmd-card{background:var(--c);color:var(--t);border:var(--bw) solid var(--blk);padding:22px;display:flex;flex-direction:column;gap:6px;min-height:200px;box-shadow:var(--sh) var(--sh) 0 var(--blk)}
.cmd-card b{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 78;text-transform:uppercase;font-size:44px;line-height:.9;letter-spacing:-.02em}
.cmd-card .mono{opacity:.8}
.cmd-card p{margin-top:auto;font-size:14.5px;line-height:1.4}
.leaders{border-top:2px solid currentColor;margin-top:10px}
.leaders div{display:grid;grid-template-columns:150px 1fr;gap:12px;padding:10px 0;border-bottom:1px solid currentColor}
.leaders dt{opacity:.6;padding-top:4px}
.leaders dd{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 82;font-size:22px;text-transform:uppercase;letter-spacing:-.01em}

/* clubs */
.club-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:22px}
.club-grid li{background:var(--wht);color:var(--blk);border:var(--bw) solid var(--blk);padding:22px 14px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px;transform:rotate(var(--r,0deg));transition:transform .3s cubic-bezier(.2,.7,.2,1);box-shadow:6px 6px 0 var(--blk)}
.club-grid li:hover{transform:rotate(0) translateY(-6px)}
.club-grid img{width:96px;height:96px;border-radius:50%;object-fit:cover}
.club-grid b{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 82;text-transform:uppercase;font-size:18px;line-height:1;letter-spacing:-.01em}
.club-grid .mono{opacity:.6}
.club-grid .join{background:var(--blk);color:var(--wht);border-color:var(--wht);justify-content:center}
.club-grid .join b{font-size:56px;line-height:.8}
.club-grid .join a{color:var(--yel)}

/* impact + djs */
.impact-list{border-top:2px solid currentColor}
.impact-list li{padding:16px 0;border-bottom:1px solid currentColor}
.impact-list b{display:block;font-weight:800;font-variation-settings:"opsz" 96,"wdth" 80;text-transform:uppercase;font-size:28px;letter-spacing:-.02em;line-height:1}
.impact-list span{font-size:15px;opacity:.75}
.djs{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.dj{border:var(--bw) solid var(--blk);background:var(--yel);color:var(--blk);box-shadow:var(--sh) var(--sh) 0 var(--blk);display:flex;flex-direction:column;gap:4px;padding:10px}
.dj img{width:100%;aspect-ratio:3/4;object-fit:cover;filter:grayscale(1) contrast(1.2);mix-blend-mode:multiply;transition:filter .4s}
.dj:hover img{filter:none;mix-blend-mode:normal}
.dj b{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 80;text-transform:uppercase;font-size:22px;line-height:1;padding-top:10px}
.dj .mono{opacity:.7}

/* partners */
.partner-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.partner{display:flex;flex-direction:column;gap:8px;min-height:240px;padding:24px;border:var(--bw) solid currentColor;transition:transform .25s,box-shadow .25s}
.partner:hover{transform:translate(-4px,-4px);box-shadow:8px 8px 0 currentColor}
.partner .mono{opacity:.65}
.partner b{font-weight:800;font-variation-settings:"opsz" 96,"wdth" 78;text-transform:uppercase;font-size:clamp(30px,3vw,46px);line-height:.9;letter-spacing:-.02em;margin-top:auto}
.partner small{font-size:14px;opacity:.8}
.partner-tech{background:var(--yel);color:var(--blk);border-color:var(--blk)}
.partner-open{border-style:dashed}

/* footer */
.foot{background:var(--blk);color:var(--wht);padding:40px var(--pad) 110px;position:relative;z-index:2}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:32px}
.foot-grid > div{display:flex;flex-direction:column;gap:6px;font-size:14px;opacity:.9}
.foot h4{opacity:.6;margin-bottom:6px}
.foot a:hover{color:var(--yel)}
.foot-grid p{font-weight:700;font-size:18px;line-height:1.2;max-width:18em;margin-top:12px}
.foot-bottom{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-top:36px;padding-top:14px;border-top:1px solid rgba(247,244,236,.2);opacity:.6}

/* mobile bar */
.mobile-bar{display:none}

/* pop-in state */
.js [data-pop]{opacity:0;transform:translateY(20px) scale(.96) rotate(var(--r,0deg))}
.js [data-pop].is-in{opacity:1;transform:translateY(0) scale(1) rotate(var(--r,0deg));transition:opacity .6s,transform .7s cubic-bezier(.2,.9,.2,1.2)}

/* responsive */
@media (max-width:1100px){
  .club-grid{grid-template-columns:repeat(3,1fr)}
  .tickets{grid-template-columns:1fr}
  .partner-grid{grid-template-columns:1fr}
  .partner{min-height:180px}
}
@media (max-width:900px){
  .nav-links,.nav .btn{display:none}
  .card-head{grid-template-columns:auto 1fr}
  .card-head img{display:none}
  .times{grid-template-columns:1fr}
  .steps{grid-template-columns:1fr}
  .corr{grid-template-columns:1fr}
  .corr li span{display:none}
  .cmd{grid-template-columns:1fr}
  .club-grid{grid-template-columns:repeat(2,1fr);gap:16px}
  .djs{grid-template-columns:1fr 1fr;gap:12px}
  .foot-grid{grid-template-columns:1fr 1fr}
  .mobile-bar{display:flex;gap:10px;position:fixed;left:12px;right:12px;bottom:12px;z-index:60;padding:10px;background:var(--wht);border:2px solid var(--blk)}
  .mobile-bar .btn{flex:1}
}
@media (max-width:520px){
  .foot-grid{grid-template-columns:1fr}
  .stickers{gap:14px}
  .stk{min-width:120px;padding:12px 18px}
}
